diff options
author | Jakob Kaivo <jkk@ung.org> | 2024-05-28 15:50:03 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2024-05-28 15:50:03 -0400 |
commit | c9ec058657f9f8b3fd39a16f1a9e993b4a1e982e (patch) | |
tree | 6cf1abadd04a1a9049d82ffe0e78be7f8b4cece2 | |
parent | b4cd7036bea6c6440fbbcdaebe53c864c87a5646 (diff) |
abstract out "forced" implementations of functions from future specifications
39 files changed, 174 insertions, 163 deletions
diff --git a/src/__readonly.c b/src/__readonly.c index 74837a91..f2d33c38 100644 --- a/src/__readonly.c +++ b/src/__readonly.c @@ -1,24 +1,19 @@ +#include <limits.h> #include <stdlib.h> #include "_readonly.h" +#include "stdlib/_jkmalloc.h" +#include "_forced/mprotect.h" -#ifdef _POSIX_C_SOURCE -#include <sys/mman.h> -#include <limits.h> -#else -#include "_syscall.h" -#define mprotect(__ptr, __len, __prot) __syscall(__sys_mprotect, __ptr, __len, __prot) -#define PROT_READ 1 -#define PROT_WRITE 2 -#define PAGESIZE 4096 +#ifndef PAGESIZE +#define PAGESIZE 4096 #endif void* __readonly(ro_action_t action, void *ptr) { switch (action) { case RO_ALLOC: - /* set magic to JK_READONLY */ - /* set label to ptr */ - return malloc(PAGESIZE); + return __jkmalloc(NULL, NULL, 0, NULL, 1, PAGESIZE, 0, ptr); + case RO_FREE: free(ptr); diff --git a/src/__undefined.c b/src/__undefined.c index 40026dac..6f619393 100644 --- a/src/__undefined.c +++ b/src/__undefined.c @@ -3,10 +3,7 @@ #include <stdarg.h> #include "_safety.h" -#if __STDC_VERSION__ < 199901L -static _Noreturn void _Exit(int); -#include "stdlib/_Exit.c" -#endif +#include "_forced/_Exit.h" _Noreturn void __undefined(const char *fmt, ...) { diff --git a/src/_forced/_Exit.h b/src/_forced/_Exit.h new file mode 100644 index 00000000..0ffc1ba3 --- /dev/null +++ b/src/_forced/_Exit.h @@ -0,0 +1,4 @@ +#if __STDC_VERSION__ < 199901L +static _Noreturn void _Exit(int); +#include "stdlib/_Exit.c" +#endif diff --git a/src/_forced/close.h b/src/_forced/close.h new file mode 100644 index 00000000..512a66bc --- /dev/null +++ b/src/_forced/close.h @@ -0,0 +1,6 @@ +#ifdef _POSIX_SOURCE +#include <unistd.h> +#else +#include "_syscall.h" +#define close(_fd) __scall1(close, _fd) +#endif diff --git a/src/_forced/getpid.h b/src/_forced/getpid.h new file mode 100644 index 00000000..4ad048df --- /dev/null +++ b/src/_forced/getpid.h @@ -0,0 +1,3 @@ +#include "_syscall.h" +#define getpid() __scall0(getpid) + diff --git a/src/_forced/isatty.h b/src/_forced/isatty.h new file mode 100644 index 00000000..0d0a073e --- /dev/null +++ b/src/_forced/isatty.h @@ -0,0 +1,3 @@ +#include "_syscall.h" +#define isatty(_fd) (-1) /*ioctl(_fd, TCFLSH, 0) */ +#define TCFLSH 0x540B diff --git a/src/_forced/kill.h b/src/_forced/kill.h new file mode 100644 index 00000000..a4fd9c32 --- /dev/null +++ b/src/_forced/kill.h @@ -0,0 +1,2 @@ +#include "_syscall.h" +#define kill(pid, sig) __scall2(kill, pid, sig) diff --git a/src/_forced/mmap.h b/src/_forced/mmap.h new file mode 100644 index 00000000..65c1ef01 --- /dev/null +++ b/src/_forced/mmap.h @@ -0,0 +1,11 @@ +#include "_syscall.h" + +#define mmap(_a, _l, _p, _fl, _fd, _o) (void*)__syscall(__sys_mmap, _a, _l, _p, _fl, _fd, _o) + +#define PROT_NONE 0x0 +#define PROT_READ 0x1 +#define PROT_WRITE 0x2 +#define MAP_PRIVATE 0x02 +#define MAP_FAILED (void*)(-1) +#define MAP_ANONYMOUS (0x20) + diff --git a/src/_forced/mprotect.h b/src/_forced/mprotect.h new file mode 100644 index 00000000..5abbe5ed --- /dev/null +++ b/src/_forced/mprotect.h @@ -0,0 +1,9 @@ +#ifdef _POSIX_C_SOURCE +#include <sys/mman.h> +#else +#include "_syscall.h" +#define mprotect(__ptr, __len, __prot) __syscall(__sys_mprotect, __ptr, __len, __prot) +#define PROT_NONE 0x0 +#define PROT_READ 0x1 +#define PROT_WRITE 0x2 +#endif diff --git a/src/_forced/munmap.h b/src/_forced/munmap.h new file mode 100644 index 00000000..9580100d --- /dev/null +++ b/src/_forced/munmap.h @@ -0,0 +1,4 @@ +#include "_syscall.h" + +#define munmap(_a, _l) __syscall(__sys_munmap, _a, _l) + diff --git a/src/_forced/open.h b/src/_forced/open.h new file mode 100644 index 00000000..1764d52e --- /dev/null +++ b/src/_forced/open.h @@ -0,0 +1,12 @@ +#ifdef _POSIX_SOURCE +#include <fcntl.h> +#else +#include "_syscall.h" +#define open(_p, _f, _m) __scall3(open, _p, _f, _m) +#define O_RDONLY 00 +#define O_WRONLY 01 +#define O_CREAT 0100 +#define O_TRUNC 01000 +#define O_APPEND 02000 +#define O_RDWR 02 +#endif diff --git a/src/_forced/rmdir.h b/src/_forced/rmdir.h new file mode 100644 index 00000000..28ced29f --- /dev/null +++ b/src/_forced/rmdir.h @@ -0,0 +1,2 @@ +#include "_syscall.h" +#define rmdir(_f) __scall1(rmdir, _f) diff --git a/src/_forced/sigaction.h b/src/_forced/sigaction.h new file mode 100644 index 00000000..33398c49 --- /dev/null +++ b/src/_forced/sigaction.h @@ -0,0 +1,18 @@ +/* TODO: appropriate #ifdefs */ + +#define SA_RESTART 0x10000000 +#define SA_RESTORER 0x04000000 + +typedef unsigned long pid_t; +typedef unsigned long uid_t; +typedef unsigned long clock_t; +#include "signal/sigset_t.h" +#include "signal/union_sigval.h" +#include "signal/siginfo_t.h" + +#define _POSIX_C_SOURCE 199506L +#include "signal/struct_sigaction.h" + +static int sigaction(int, const struct sigaction * restrict, struct sigaction * restrict); + +#include "signal/sigaction.c" diff --git a/src/_forced/stat.h b/src/_forced/stat.h new file mode 100644 index 00000000..e0a75dcc --- /dev/null +++ b/src/_forced/stat.h @@ -0,0 +1,7 @@ +#include "_syscall.h" +struct stat { + int st_mode; + char padding[1024]; +}; +#define stat(_f, _b) __scall2(stat, _f, _b) +#define S_ISDIR(_m) ((_m) & 0x00) diff --git a/src/_forced/strtoumax.h b/src/_forced/strtoumax.h new file mode 100644 index 00000000..d6f9883e --- /dev/null +++ b/src/_forced/strtoumax.h @@ -0,0 +1,10 @@ +#if __STDC_VERSION__ >= 199901L +#include <inttypes.h> +#else +#include "stdint/intmax_t.h" +#include "stdint/uintmax_t.h" +#include "stdint/intptr_t.h" +#include "stdint/UINTMAX_MAX.h" +#define strtoumax __strtoumax +#include "inttypes/strtoumax.c" +#endif diff --git a/src/_forced/unlink.h b/src/_forced/unlink.h new file mode 100644 index 00000000..240c6dd6 --- /dev/null +++ b/src/_forced/unlink.h @@ -0,0 +1,2 @@ +#include "_syscall.h" +#define unlink(_f) __scall1(unlink, _f) diff --git a/src/_forced/vfwscanf.h b/src/_forced/vfwscanf.h new file mode 100644 index 00000000..305c06d2 --- /dev/null +++ b/src/_forced/vfwscanf.h @@ -0,0 +1,4 @@ +#if __STDC_VERSION__ < 199901L +#define vfwscanf __vfwscanf +#include "vfwscanf.c" +#endif diff --git a/src/_forced/vswscanf.h b/src/_forced/vswscanf.h new file mode 100644 index 00000000..1915bc22 --- /dev/null +++ b/src/_forced/vswscanf.h @@ -0,0 +1,6 @@ + +#if __STDC_VERSION__ < 199901L +#define vswscanf __vswscanf +#include "vswscanf.c" +#endif + diff --git a/src/_forced/wcslen.h b/src/_forced/wcslen.h new file mode 100644 index 00000000..665f6afa --- /dev/null +++ b/src/_forced/wcslen.h @@ -0,0 +1,8 @@ + +#ifdef __STDC_VERSION__ +#include <wchar.h> +#else +static size_t wcslen(const wchar_t *); +#include "wchar/wcslen.c" +#endif + diff --git a/src/_forced/write.h b/src/_forced/write.h new file mode 100644 index 00000000..dced4529 --- /dev/null +++ b/src/_forced/write.h @@ -0,0 +1,6 @@ +#ifdef _POSIX_SOURCE +#include <unistd.h> +#else +#include "_syscall.h" +#define write(_fd, _buf, _size) __scall3(write, _fd, _buf, _size) +#endif diff --git a/src/signal/raise.c b/src/signal/raise.c index 7d40b9c8..0547e4a1 100644 --- a/src/signal/raise.c +++ b/src/signal/raise.c @@ -1,16 +1,8 @@ -#ifndef _POSIX_SOURCE -#define _POSIX_SOURCE -#define POSIX_FORCED -#endif - #include <signal.h> #include "stdlib/_stdlib.h" -#ifdef POSIX_FORCED -#include "_syscall.h" -#define kill(pid, sig) __scall2(kill, pid, sig) -#define getpid() __scall0(getpid) -#endif +#include "_forced/kill.h" +#include "_forced/getpid.h" #include "_safety.h" diff --git a/src/signal/signal.c b/src/signal/signal.c index 4bd74744..f55e2e57 100644 --- a/src/signal/signal.c +++ b/src/signal/signal.c @@ -5,6 +5,10 @@ /** set a signal handler **/ +#if 0 +#include "_forced/sigaction.h" + +#else /* TODO: remove this very Linux-specific crap */ typedef struct __siginfo siginfo_t; struct linux_sigaction { @@ -16,6 +20,7 @@ #define sigaction(_sig, _act, _oact, _size) __scall4(sigaction, _sig, _act, _oact, _size) #define SA_RESTART 0x10000000 #define SA_RESTORER 0x04000000 +#endif __attribute__((noinline, target("no-sse"))) void (*signal(int sig, void (*func)(int)))(int) diff --git a/src/stdio/__printf.c b/src/stdio/__printf.c index 7fa7a46b..1ee488d7 100644 --- a/src/stdio/__printf.c +++ b/src/stdio/__printf.c @@ -10,16 +10,7 @@ #include <unistd.h> #endif -#if __STDC_VERSION__ >= 199901L -#include <inttypes.h> -#else -#include "stdint/intmax_t.h" -#include "stdint/uintmax_t.h" -#include "stdint/intptr_t.h" -#include "stdint/UINTMAX_MAX.h" -#define strtoumax __strtoumax -#include "inttypes/strtoumax.c" -#endif +#include "_forced/strtoumax.h" #include "_stdio.h" diff --git a/src/stdio/fclose.c b/src/stdio/fclose.c index 37198fcb..cb4499ac 100644 --- a/src/stdio/fclose.c +++ b/src/stdio/fclose.c @@ -1,23 +1,10 @@ -#ifndef _POSIX_SOURCE -#define _POSIX_SOURCE -#define POSIX_FORCED -#endif - - #include <stdio.h> #include <stdlib.h> #include <string.h> -#if 0 -#include <sys/types.h> -#include <unistd.h> -#endif #include "_stdio.h" -#ifdef POSIX_FORCED -#include "_syscall.h" -#define close(_fd) __scall1(close, _fd) -#endif +#include "_forced/close.h" /** close a file stream **/ diff --git a/src/stdio/fflush.c b/src/stdio/fflush.c index 6c1e78f5..2250aaaf 100644 --- a/src/stdio/fflush.c +++ b/src/stdio/fflush.c @@ -1,15 +1,6 @@ -#ifndef _POSIX_SOURCE -#define _POSIX_SOURCE -#define POSIX_FORCED -#endif - #include <stdio.h> #include "_stdio.h" - -#ifdef POSIX_FORCED -#include "_syscall.h" -#define write(_fd, _buf, _size) __scall3(write, _fd, _buf, _size) -#endif +#include "_forced/write.h" /** flush buffered writes **/ diff --git a/src/stdio/freopen.c b/src/stdio/freopen.c index f23d53af..60394ca6 100644 --- a/src/stdio/freopen.c +++ b/src/stdio/freopen.c @@ -1,25 +1,9 @@ -#ifndef _POSIX_SOURCE -#define _POSIX_SOURCE -#define POSIX_FORCED -#endif - #include <errno.h> #include <stdio.h> #include <string.h> #include "_stdio.h" - -#ifdef POSIX_FORCED -#include "_syscall.h" -#define open(_p, _f, _m) __scall3(open, _p, _f, _m) -#define isatty(_fd) (-1) /*ioctl(_fd, TCFLSH, 0) */ -#define TCFLSH 0x540B -#define O_RDONLY 00 -#define O_WRONLY 01 -#define O_CREAT 0100 -#define O_TRUNC 01000 -#define O_APPEND 02000 -#define O_RDWR 02 -#endif +#include "_forced/open.h" +#include "_forced/isatty.h" /** reopen a file stream with a new file **/ diff --git a/src/stdio/remove.c b/src/stdio/remove.c index 8b6c5925..e52132de 100644 --- a/src/stdio/remove.c +++ b/src/stdio/remove.c @@ -1,42 +1,22 @@ -#ifndef _POSIX_SOURCE -#define _POSIX_SOURCE -#define POSIX_FORCED -#endif - #include <stdio.h> #include "_stdio.h" - -#if 0 -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#endif - -#ifdef POSIX_FORCED -#include "_syscall.h" -#define stat(_f, _b) __scall2(stat, _f, _b) -#define rmdir(_f) __scall1(rmdir, _f) -#define unlink(_f) __scall1(unlink, _f) -#endif +#include "_forced/stat.h" +#include "_forced/rmdir.h" +#include "_forced/unlink.h" /** delete a file **/ int remove(const char *filename) { - /* struct stat st; */ + struct stat st; SIGNAL_SAFE(0); - /* stat(filename, &st); if (S_ISDIR(st.st_mode)) { return rmdir(filename); } return unlink(filename); - */ - - (void)filename; - return -1; } /*** diff --git a/src/stdlib/__jkmalloc.c b/src/stdlib/__jkmalloc.c index b97fa10c..c55842ea 100644 --- a/src/stdlib/__jkmalloc.c +++ b/src/stdlib/__jkmalloc.c @@ -11,43 +11,14 @@ #include <sys/mman.h> #include <unistd.h> #else -#include "_syscall.h" +#include "_forced/sigaction.h" +#include "_forced/mmap.h" +#include "_forced/munmap.h" +#include "_forced/mprotect.h" #define sysconf(__n) 4096 - -#define mprotect(__ptr, __len, __prot) __syscall(__sys_mprotect, __ptr, __len, __prot) -#define mmap(_a, _l, _p, _fl, _fd, _o) (void*)__syscall(__sys_mmap, _a, _l, _p, _fl, _fd, _o) -#define munmap(_a, _l) __syscall(__sys_munmap, _a, _l) -#define open(_p, _a, _m) __syscall(__sys_open, _p, _a, _m) - -typedef unsigned long pid_t; -typedef unsigned long uid_t; -typedef unsigned long clock_t; -#include "signal/sigset_t.h" -#include "signal/union_sigval.h" -#include "signal/siginfo_t.h" - -#define _POSIX_C_SOURCE 199506L -#include "signal/struct_sigaction.h" - -static int sigaction(int, const struct sigaction * restrict, struct sigaction * restrict); - -#include "signal/sigaction.c" - -#define SA_RESTART 0x10000000 -#define SA_RESTORER 0x04000000 - -#define O_RDWR 02 -#define PROT_NONE 0x0 -#define PROT_READ 0x1 -#define PROT_WRITE 0x2 -#define MAP_PRIVATE 0x02 -#define MAP_FAILED (void*)(-1) -#define MAP_ANONYMOUS (0x20) #define psiginfo(x, y) fprintf(stderr, "%s (%p)\n", (char*)(y), (void*)(x)) - #define sigemptyset(x) memset(x, 0, sizeof(*x)) - #endif #include "_jkmalloc.h" @@ -195,7 +166,7 @@ static void jk_sigsegv(int sig) } */ -void* __jkmalloc(const char *file, const char *func, uintmax_t line, void *ptr, size_t alignment, size_t size1, size_t size2) +void* __jkmalloc(const char *file, const char *func, uintmax_t line, void *ptr, size_t alignment, size_t size1, size_t size2, const char *user) { static int sa_set = 0; if (!sa_set) { @@ -296,7 +267,7 @@ void* __jkmalloc(const char *file, const char *func, uintmax_t line, void *ptr, __jk_error("Attempt to reallocate() incorrect address", ptr, &src); } - void *newptr = __jkmalloc(NULL, NULL, 0, NULL, alignment, size1, size2); + void *newptr = __jkmalloc(NULL, NULL, 0, NULL, alignment, size1, size2, user); if (newptr != NULL) { memmove(newptr, ptr, b->size); free(ptr); @@ -345,7 +316,11 @@ void* __jkmalloc(const char *file, const char *func, uintmax_t line, void *ptr, if (file) { under->tlen = snprintf(under->trace, __jk_pagesize - sizeof(*under), "+++ %s() (%s:%ju)", func, file, line); - memmove(over->trace, under->trace, under->tlen + 1); + memcpy(over->trace, under->trace, under->tlen + 1); + over->tlen = under->tlen; + } else if (user) { + under->tlen = snprintf(under->trace, __jk_pagesize - sizeof(*under), "Read-only memory for %s", user); + memcpy(over->trace, under->trace, under->tlen + 1); over->tlen = under->tlen; } else { under->trace[0] = '\0'; @@ -372,7 +347,7 @@ int (jk_memalign)(void **ptr, size_t a, size_t n) return EINVAL; } - if (((*ptr) = __jkmalloc(NULL, NULL, 0, NULL, a, n, 0)) == NULL) { + if (((*ptr) = __jkmalloc(NULL, NULL, 0, NULL, a, n, 0, NULL)) == NULL) { return errno; } diff --git a/src/stdlib/_jkmalloc.h b/src/stdlib/_jkmalloc.h index 8786acea..c6088024 100644 --- a/src/stdlib/_jkmalloc.h +++ b/src/stdlib/_jkmalloc.h @@ -1,6 +1,8 @@ #ifndef ___JKMALLOC_H__ #define ___JKMALLOC_H__ -void* __jkmalloc(const char *file, const char *func, uintmax_t line, void *ptr, size_t alignment, size_t size1 , size_t size2); +#include <inttypes.h> + +void* __jkmalloc(const char *file, const char *func, uintmax_t line, void *ptr, size_t alignment, size_t size1 , size_t size2, const char *user); #endif diff --git a/src/stdlib/aligned_alloc.c b/src/stdlib/aligned_alloc.c index f699014b..6fa28e9f 100644 --- a/src/stdlib/aligned_alloc.c +++ b/src/stdlib/aligned_alloc.c @@ -5,7 +5,7 @@ void *aligned_alloc(size_t alignment, size_t size) { SIGNAL_SAFE(0); - return __jkmalloc(NULL, NULL, 0, NULL, alignment, size, 0); + return __jkmalloc(NULL, NULL, 0, NULL, alignment, size, 0, NULL); } /* diff --git a/src/stdlib/calloc.c b/src/stdlib/calloc.c index b5203a57..f7d24dc0 100644 --- a/src/stdlib/calloc.c +++ b/src/stdlib/calloc.c @@ -9,7 +9,7 @@ void * calloc(size_t nmemb, size_t size) { SIGNAL_SAFE(0); - return __jkmalloc(NULL, NULL, 0, NULL, 1, nmemb, size); + return __jkmalloc(NULL, NULL, 0, NULL, 1, nmemb, size, NULL); } /*** diff --git a/src/stdlib/exit.c b/src/stdlib/exit.c index 42af83c7..e6423891 100644 --- a/src/stdlib/exit.c +++ b/src/stdlib/exit.c @@ -3,9 +3,7 @@ #include "_stdlib.h" #include "_syscall.h" -#if __STDC_VERSION__ < 199901L -#include "_Exit.c" -#endif +#include "_forced/_Exit.h" /** cause normal program termination **/ _Noreturn void exit(int status) diff --git a/src/stdlib/free.c b/src/stdlib/free.c index 47c04dd0..3662adb3 100644 --- a/src/stdlib/free.c +++ b/src/stdlib/free.c @@ -9,7 +9,7 @@ void free(void * ptr) SIGNAL_SAFE(0); if (ptr) { - __jkmalloc(NULL, NULL, 0, ptr, 0, 0, 0); + __jkmalloc(NULL, NULL, 0, ptr, 0, 0, 0, NULL); } } diff --git a/src/stdlib/getenv.c b/src/stdlib/getenv.c index 989a5f84..c85c1922 100644 --- a/src/stdlib/getenv.c +++ b/src/stdlib/getenv.c @@ -1,6 +1,7 @@ #include <stdlib.h> #include <string.h> #include "_stdlib.h" +#include "_readonly.h" /** get an environment variable **/ @@ -8,13 +9,20 @@ char * getenv(const char * name) { size_t len = 0; size_t i = 0; + static char *variable = NULL; SIGNAL_SAFE(0); + if (variable == NULL) { + variable = __readonly(RO_ALLOC, "getenv"); + } len = strlen(name); for (i = 0; environ[i] != NULL; i++) { if (!strncmp(environ[i], name, len) && environ[i][len] == '=') { - return environ[i] + len + 1; + __readonly(RO_UNLOCK, variable); + strcpy(variable, environ[i] + len + 1); + __readonly(RO_LOCK, variable); + return variable; } } diff --git a/src/stdlib/malloc.c b/src/stdlib/malloc.c index d372fd6b..ebac8d39 100644 --- a/src/stdlib/malloc.c +++ b/src/stdlib/malloc.c @@ -7,7 +7,7 @@ void * malloc(size_t size) { SIGNAL_SAFE(0); - return __jkmalloc(NULL, NULL, 0, NULL, 1, size, 0); + return __jkmalloc(NULL, NULL, 0, NULL, 1, size, 0, NULL); } /*** diff --git a/src/stdlib/realloc.c b/src/stdlib/realloc.c index 17696bbf..35e12d26 100644 --- a/src/stdlib/realloc.c +++ b/src/stdlib/realloc.c @@ -8,7 +8,7 @@ void * realloc(void * ptr, size_t size) { SIGNAL_SAFE(0); - return __jkmalloc(NULL, NULL, 0, ptr, 1, size, 0); + return __jkmalloc(NULL, NULL, 0, ptr, 1, size, 0, NULL); } /*** diff --git a/src/stdlib/wcstombs.c b/src/stdlib/wcstombs.c index 76958ae9..31946fca 100644 --- a/src/stdlib/wcstombs.c +++ b/src/stdlib/wcstombs.c @@ -1,12 +1,7 @@ #include <stdlib.h> #include "_stdlib.h" -#ifdef __STDC_VERSION__ -#include <wchar.h> -#else -static size_t wcslen(const wchar_t *); -#include "wchar/wcslen.c" -#endif +#include "_forced/wcslen.h" /** convert wide character string to multibyte string **/ diff --git a/src/wchar/fwscanf.c b/src/wchar/fwscanf.c index b691ef53..3f160df6 100644 --- a/src/wchar/fwscanf.c +++ b/src/wchar/fwscanf.c @@ -4,10 +4,7 @@ #include <stdio.h> #include <stdarg.h> -#if __STDC_VERSION__ < 199901L -#define vfwscanf __vfwscanf -#include "vfwscanf.c" -#endif +#include "_forced/vfwscanf.h" int fwscanf(FILE * restrict stream, const wchar_t * restrict format, ...) { diff --git a/src/wchar/swscanf.c b/src/wchar/swscanf.c index 81726bff..d8988a33 100644 --- a/src/wchar/swscanf.c +++ b/src/wchar/swscanf.c @@ -3,10 +3,7 @@ #include <stdarg.h> #include <wchar.h> -#if __STDC_VERSION__ < 199901L -#define vswscanf __vswscanf -#include "vswscanf.c" -#endif +#include "_forced/vswscanf.h" int swscanf(const wchar_t * restrict s, const wchar_t * restrict format, ...) { |