summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2024-01-30 16:08:00 -0500
committerJakob Kaivo <jkk@ung.org>2024-01-30 16:08:00 -0500
commit237bf6358ed3e39b584b23d6b52e2b91a1d69cfa (patch)
tree08adde29489810c976b874a08c0f3c64c834359c
parent86b8bdb806e3095558021435390fa45b6ddde399 (diff)
update standards and safety checks
-rw-r--r--src/__checked_call.c4
-rw-r--r--src/__checked_i.c34
-rw-r--r--src/_safety.h7
-rw-r--r--src/complex/_tgmath.h4
-rw-r--r--src/ctype/_ctype.h4
-rw-r--r--src/locale/_locale.h4
-rw-r--r--src/math/_tgmath.h4
-rw-r--r--src/signal/_signal.h4
-rw-r--r--src/stdatomic/atomic_is_lock_free.c1
-rw-r--r--src/stdio/_stdio.h4
-rw-r--r--src/stdlib/__constraint_info.h4
-rw-r--r--src/stdlib/_stdlib.h4
-rw-r--r--src/stdlib/_strtod.h4
-rw-r--r--src/stdlib/_strtoi.h4
14 files changed, 80 insertions, 6 deletions
diff --git a/src/__checked_call.c b/src/__checked_call.c
index c44ad8f3..f11c708a 100644
--- a/src/__checked_call.c
+++ b/src/__checked_call.c
@@ -1,6 +1,6 @@
-#include "_assert.h"
+#include "_safety.h"
-#ifdef THREADS
+#if 0
_Thread_local
#endif
struct __checked_call __checked_call = { 0 };
diff --git a/src/__checked_i.c b/src/__checked_i.c
index cbb6ae87..c97a9b4d 100644
--- a/src/__checked_i.c
+++ b/src/__checked_i.c
@@ -1,3 +1,5 @@
+#undef __UNG_INTERNAL__
+
#include <ctype.h>
#include <complex.h> // TODO
#include <fenv.h>
@@ -13,7 +15,7 @@
#include <threads.h> // TODO
#include <time.h> // TODO
#include <uchar.h> // TODO
-#include <wchar.h> // TODO
+//#include <wchar.h> // TODO
#include <wctype.h> // TODO
#include "_assert.h"
@@ -45,6 +47,7 @@ int __checked_i(const char *file, const char *func, unsigned long long line, int
|| fn == F(fetestexcept)
|| fn == F(raise)
|| fn == F(putchar)
+ || fn == F(abs)
) {
int arg = va_arg(ap, int);
ret = fn(arg);
@@ -124,6 +127,12 @@ int __checked_i(const char *file, const char *func, unsigned long long line, int
const char *p2 = va_arg(ap, const char *);
size_t n = va_arg(ap, size_t);
ret = fn(p1, p2, n);
+ } else if (fn == F(atexit)) {
+ void *p = va_arg(ap, void *);
+ ret = fn(p);
+ } else {
+ (fprintf)(stderr, "Unwrapped function %s\n", func);
+ (_Exit(1));
}
va_end(ap);
@@ -169,6 +178,9 @@ intmax_t __checked_im(const char *file, const char *func, unsigned long long lin
char *s1 = va_arg(ap, char *);
char *s2 = va_arg(ap, char *);
ret = fn(s1, s2);
+ } else {
+ (fprintf)(stderr, "Unwrapped function %s\n", func);
+ (_Exit(1));
}
va_end(ap);
@@ -202,6 +214,9 @@ uintmax_t __checked_uim(const char *file, const char *func, unsigned long long l
wchar_t **end = va_arg(ap, wchar_t **);
int i = va_arg(ap, int);
ret = fn(s, end, i);
+ } else {
+ (fprintf)(stderr, "Unwrapped function %s\n", func);
+ (_Exit(1));
}
va_end(ap);
@@ -229,6 +244,9 @@ imaxdiv_t __checked_imd(const char *file, const char *func, unsigned long long l
intmax_t n = va_arg(ap, intmax_t);
intmax_t d = va_arg(ap, intmax_t);
ret = fn(n, d);
+ } else {
+ (fprintf)(stderr, "Unwrapped function %s\n", func);
+ (_Exit(1));
}
va_end(ap);
@@ -323,6 +341,9 @@ void *__checked_p(const char *file, const char *func, unsigned long long line, v
char *s1 = va_arg(ap, char *);
char *s2 = va_arg(ap, char *);
ret = fn(s1, s2);
+ } else {
+ (fprintf)(stderr, "Unwrapped function %s\n", func);
+ (_Exit(1));
}
va_end(ap);
@@ -357,6 +378,11 @@ void __checked(const char *file, const char *func, unsigned long long line, void
FILE *f = va_arg(ap, FILE *);
char *b = va_arg(ap, char *);
fn(f, b);
+ } else if (fn == F(abort)) {
+ fn();
+ } else {
+ (fprintf)(stderr, "Unwrapped function %s\n", func);
+ (_Exit(1));
}
va_end(ap);
@@ -398,6 +424,9 @@ size_t __checked_s(const char *file, const char *func, unsigned long long line,
const char *s2 = va_arg(ap, const char *);
size_t n = va_arg(ap, size_t);
ret = fn(s1, s2, n);
+ } else {
+ (fprintf)(stderr, "Unwrapped function %s\n", func);
+ (_Exit(1));
}
va_end(ap);
@@ -424,6 +453,9 @@ long __checked_l(const char *file, const char *func, unsigned long long line, lo
if (fn == F(ftell)) {
FILE *f = va_arg(ap, FILE *);
ret = fn(f);
+ } else {
+ (fprintf)(stderr, "Unwrapped function %s\n", func);
+ (_Exit(1));
}
va_end(ap);
diff --git a/src/_safety.h b/src/_safety.h
index 5fd70493..348b6b0b 100644
--- a/src/_safety.h
+++ b/src/_safety.h
@@ -34,8 +34,8 @@ extern struct __checked_call {
} \
} while (0)
-#define ASSERT_NOOVERLAP(__x, __y, __s) do { \
- /* TODO */ \
+#define ASSERT_NOOVERLAP(__p1, __l1, __p2, __l2) do { \
+ /* TODO */ (void)(__p1); (void)(__l1); (void)(__p2); (void)(__l2); \
} while (0)
#define ASSERT_REPRESENTABLE(_n, _min, _max, _type, _sentinel) do { \
@@ -53,7 +53,8 @@ extern struct __checked_call {
if (__n == 0 && __signal.current != 0) { \
struct __constraint_info _ci = {0}; \
_ci.func = __func__; \
- _ci.value = __signal.current; \
+ _ci.signal = __signal.current; \
+ __signal.current = 0; \
__stdlib.constraint_handler("Undefined behavior: " \
"Standard library function called from signal handler", \
&_ci, 0); \
diff --git a/src/complex/_tgmath.h b/src/complex/_tgmath.h
index 31fe7324..d7f539ab 100644
--- a/src/complex/_tgmath.h
+++ b/src/complex/_tgmath.h
@@ -3,3 +3,7 @@
#include "CMPLXL.h"
#include "math/_tgmath.h"
+
+/*
+STDC(-1)
+*/
diff --git a/src/ctype/_ctype.h b/src/ctype/_ctype.h
index f0ff0e5a..6c36bbac 100644
--- a/src/ctype/_ctype.h
+++ b/src/ctype/_ctype.h
@@ -18,4 +18,8 @@ typedef enum {
CT_BLANK = (1 << 10),
} ctype_t;
+/*
+STDC(-1)
+*/
+
#endif
diff --git a/src/locale/_locale.h b/src/locale/_locale.h
index dc4706fa..41441456 100644
--- a/src/locale/_locale.h
+++ b/src/locale/_locale.h
@@ -91,4 +91,8 @@ struct __locale_t {
char * __load_locale(struct __locale_t *loc, int mask, const char *name);
struct __locale_t * __get_locale(void);
+/*
+STDC(-1)
+*/
+
#endif
diff --git a/src/math/_tgmath.h b/src/math/_tgmath.h
index bb4c04e5..c244d333 100644
--- a/src/math/_tgmath.h
+++ b/src/math/_tgmath.h
@@ -86,4 +86,8 @@
#define TYPE double
#define TGHUGE HUGE_VAL
+/*
+STDC(-1)
+*/
+
#endif
diff --git a/src/signal/_signal.h b/src/signal/_signal.h
index f29a21d2..63490b2c 100644
--- a/src/signal/_signal.h
+++ b/src/signal/_signal.h
@@ -14,4 +14,8 @@ extern struct __signal {
void __signal_handler(int);
+/*
+STDC(-1)
+*/
+
#endif
diff --git a/src/stdatomic/atomic_is_lock_free.c b/src/stdatomic/atomic_is_lock_free.c
index 9058cbf8..5d15cc8d 100644
--- a/src/stdatomic/atomic_is_lock_free.c
+++ b/src/stdatomic/atomic_is_lock_free.c
@@ -4,6 +4,7 @@
_Bool atomic_is_lock_free(const volatile __TYPE *obj)
{
+ SIGNAL_SAFE(1);
(void)obj;
return 1;
}
diff --git a/src/stdio/_stdio.h b/src/stdio/_stdio.h
index 43d8841b..0827fe0d 100644
--- a/src/stdio/_stdio.h
+++ b/src/stdio/_stdio.h
@@ -66,4 +66,8 @@ struct __stdio {
extern struct __stdio __stdio;
+/*
+STDC(-1)
+*/
+
#endif
diff --git a/src/stdlib/__constraint_info.h b/src/stdlib/__constraint_info.h
index 0cdae024..b0d3b7d4 100644
--- a/src/stdlib/__constraint_info.h
+++ b/src/stdlib/__constraint_info.h
@@ -3,3 +3,7 @@ struct __constraint_info {
int value;
int signal;
};
+
+/*
+STDC(-1)
+*/
diff --git a/src/stdlib/_stdlib.h b/src/stdlib/_stdlib.h
index d8120e66..de5a97d0 100644
--- a/src/stdlib/_stdlib.h
+++ b/src/stdlib/_stdlib.h
@@ -35,4 +35,8 @@ extern char **environ;
#define environ __stdlib.environ
#endif
+/*
+STDC(-1)
+*/
+
#endif
diff --git a/src/stdlib/_strtod.h b/src/stdlib/_strtod.h
index aa7e60d4..32645aff 100644
--- a/src/stdlib/_strtod.h
+++ b/src/stdlib/_strtod.h
@@ -94,3 +94,7 @@
ret *= -1;
}
}
+
+/*
+STDC(-1)
+*/
diff --git a/src/stdlib/_strtoi.h b/src/stdlib/_strtoi.h
index 21b22ee9..dc160aeb 100644
--- a/src/stdlib/_strtoi.h
+++ b/src/stdlib/_strtoi.h
@@ -121,3 +121,7 @@
} else {
ret *= sign;
}
+
+/*
+STDC(-1)
+*/