diff options
author | Jakob Kaivo <jkk@ung.org> | 2024-01-30 16:08:00 -0500 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2024-01-30 16:08:00 -0500 |
commit | 237bf6358ed3e39b584b23d6b52e2b91a1d69cfa (patch) | |
tree | 08adde29489810c976b874a08c0f3c64c834359c | |
parent | 86b8bdb806e3095558021435390fa45b6ddde399 (diff) |
update standards and safety checks
-rw-r--r-- | src/__checked_call.c | 4 | ||||
-rw-r--r-- | src/__checked_i.c | 34 | ||||
-rw-r--r-- | src/_safety.h | 7 | ||||
-rw-r--r-- | src/complex/_tgmath.h | 4 | ||||
-rw-r--r-- | src/ctype/_ctype.h | 4 | ||||
-rw-r--r-- | src/locale/_locale.h | 4 | ||||
-rw-r--r-- | src/math/_tgmath.h | 4 | ||||
-rw-r--r-- | src/signal/_signal.h | 4 | ||||
-rw-r--r-- | src/stdatomic/atomic_is_lock_free.c | 1 | ||||
-rw-r--r-- | src/stdio/_stdio.h | 4 | ||||
-rw-r--r-- | src/stdlib/__constraint_info.h | 4 | ||||
-rw-r--r-- | src/stdlib/_stdlib.h | 4 | ||||
-rw-r--r-- | src/stdlib/_strtod.h | 4 | ||||
-rw-r--r-- | src/stdlib/_strtoi.h | 4 |
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) +*/ |