diff options
-rw-r--r-- | .deps.mk | 68 | ||||
-rw-r--r-- | .deps/all.c | 3 | ||||
-rw-r--r-- | .deps/libc.C_0 | 3 | ||||
-rw-r--r-- | .deps/libc.POSIX_199506 | 4 | ||||
-rw-r--r-- | .deps/libc.POSIX_200809 | 3 | ||||
-rw-r--r-- | .deps/libc.XOPEN_400 | 12 | ||||
-rw-r--r-- | src/_assert.h | 8 | ||||
-rw-r--r-- | src/_nonstd.h | 19 | ||||
-rw-r--r-- | src/ctype/_ctype.h | 3 | ||||
-rw-r--r-- | src/ctype/isblank.c | 3 | ||||
-rw-r--r-- | src/ctype/iscntrl.c | 2 | ||||
-rw-r--r-- | src/ctype/isgraph.c | 2 | ||||
-rw-r--r-- | src/ctype/islower.c | 2 | ||||
-rw-r--r-- | src/ctype/isprint.c | 2 | ||||
-rw-r--r-- | src/ctype/ispunct.c | 2 | ||||
-rw-r--r-- | src/ctype/isspace.c | 2 | ||||
-rw-r--r-- | src/ctype/isupper.c | 2 | ||||
-rw-r--r-- | src/ctype/isxdigit.c | 2 | ||||
-rw-r--r-- | src/ctype/tolower.c | 3 | ||||
-rw-r--r-- | src/ctype/toupper.c | 3 | ||||
-rw-r--r-- | src/locale/__get_locale.c | 13 | ||||
-rw-r--r-- | src/locale/__load_locale.c | 64 | ||||
-rw-r--r-- | src/locale/_locale.h | 5 | ||||
-rw-r--r-- | src/locale/localeconv.c | 3 | ||||
-rw-r--r-- | src/locale/setlocale.c | 3 | ||||
-rw-r--r-- | src/nonstd/__libc.c | 60 | ||||
-rw-r--r-- | src/nonstd/__libc_per_thread.c | 14 | ||||
-rw-r--r-- | src/unistd/fdatasync.c | 1 |
28 files changed, 74 insertions, 237 deletions
@@ -21,14 +21,6 @@ $(OBJDIR)/__setjmp.$(ARCHITECTURE)-$(WORDSIZE).o: ./src/setjmp/__setjmp.$(ARCHIT $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/setjmp/__setjmp.$(ARCHITECTURE)-$(WORDSIZE).s -o $@ echo [AS] $@ -libc.a(fstatvfs.o): $(OBJDIR)/fstatvfs.o -$(OBJDIR)/fstatvfs.o: ./src/sys/statvfs/fstatvfs.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/statvfs/fstatvfs.c -o $@ - echo [CC] $@ -libc.a(statvfs.o): $(OBJDIR)/statvfs.o -$(OBJDIR)/statvfs.o: ./src/sys/statvfs/statvfs.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/statvfs/statvfs.c -o $@ - echo [CC] $@ libc.a(times.o): $(OBJDIR)/times.o $(OBJDIR)/times.o: ./src/sys/times/times.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/times/times.c -o $@ @@ -69,26 +61,6 @@ libc.a(shmdt.o): $(OBJDIR)/shmdt.o $(OBJDIR)/shmdt.o: ./src/sys/shm/shmdt.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/shm/shmdt.c -o $@ echo [CC] $@ -libc.a(setitimer.o): $(OBJDIR)/setitimer.o -$(OBJDIR)/setitimer.o: ./src/sys/time/setitimer.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/time/setitimer.c -o $@ - echo [CC] $@ -libc.a(gettimeofday.o): $(OBJDIR)/gettimeofday.o -$(OBJDIR)/gettimeofday.o: ./src/sys/time/gettimeofday.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/time/gettimeofday.c -o $@ - echo [CC] $@ -libc.a(utimes.o): $(OBJDIR)/utimes.o -$(OBJDIR)/utimes.o: ./src/sys/time/utimes.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/time/utimes.c -o $@ - echo [CC] $@ -libc.a(getitimer.o): $(OBJDIR)/getitimer.o -$(OBJDIR)/getitimer.o: ./src/sys/time/getitimer.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/time/getitimer.c -o $@ - echo [CC] $@ -libc.a(select.o): $(OBJDIR)/select.o -$(OBJDIR)/select.o: ./src/sys/time/select.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/time/select.c -o $@ - echo [CC] $@ libc.a(ftok.o): $(OBJDIR)/ftok.o $(OBJDIR)/ftok.o: ./src/sys/ipc/ftok.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/ipc/ftok.c -o $@ @@ -117,10 +89,6 @@ libc.a(semctl.o): $(OBJDIR)/semctl.o $(OBJDIR)/semctl.o: ./src/sys/sem/semctl.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/sem/semctl.c -o $@ echo [CC] $@ -libc.a(waitid.o): $(OBJDIR)/waitid.o -$(OBJDIR)/waitid.o: ./src/sys/wait/waitid.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/wait/waitid.c -o $@ - echo [CC] $@ libc.a(wait.o): $(OBJDIR)/wait.o $(OBJDIR)/wait.o: ./src/sys/wait/wait.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/sys/wait/wait.c -o $@ @@ -753,10 +721,6 @@ libc.a(perror.o): $(OBJDIR)/perror.o $(OBJDIR)/perror.o: ./src/stdio/perror.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/perror.c -o $@ echo [CC] $@ -libc.a(putc_unlocked.o): $(OBJDIR)/putc_unlocked.o -$(OBJDIR)/putc_unlocked.o: ./src/stdio/putc_unlocked.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/putc_unlocked.c -o $@ - echo [CC] $@ libc.a(fscanf.o): $(OBJDIR)/fscanf.o $(OBJDIR)/fscanf.o: ./src/stdio/fscanf.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/fscanf.c -o $@ @@ -789,10 +753,6 @@ libc.a(ungetc.o): $(OBJDIR)/ungetc.o $(OBJDIR)/ungetc.o: ./src/stdio/ungetc.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/ungetc.c -o $@ echo [CC] $@ -libc.a(getc_unlocked.o): $(OBJDIR)/getc_unlocked.o -$(OBJDIR)/getc_unlocked.o: ./src/stdio/getc_unlocked.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/getc_unlocked.c -o $@ - echo [CC] $@ libc.a(putw.o): $(OBJDIR)/putw.o $(OBJDIR)/putw.o: ./src/stdio/putw.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/stdio/putw.c -o $@ @@ -1401,22 +1361,6 @@ libc.a(setgrent.o): $(OBJDIR)/setgrent.o $(OBJDIR)/setgrent.o: ./src/grp/setgrent.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/grp/setgrent.c -o $@ echo [CC] $@ -libc.a(makecontext.o): $(OBJDIR)/makecontext.o -$(OBJDIR)/makecontext.o: ./src/ucontext/makecontext.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/ucontext/makecontext.c -o $@ - echo [CC] $@ -libc.a(swapcontext.o): $(OBJDIR)/swapcontext.o -$(OBJDIR)/swapcontext.o: ./src/ucontext/swapcontext.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/ucontext/swapcontext.c -o $@ - echo [CC] $@ -libc.a(getcontext.o): $(OBJDIR)/getcontext.o -$(OBJDIR)/getcontext.o: ./src/ucontext/getcontext.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/ucontext/getcontext.c -o $@ - echo [CC] $@ -libc.a(setcontext.o): $(OBJDIR)/setcontext.o -$(OBJDIR)/setcontext.o: ./src/ucontext/setcontext.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/ucontext/setcontext.c -o $@ - echo [CC] $@ libc.a(strfmon.o): $(OBJDIR)/strfmon.o $(OBJDIR)/strfmon.o: ./src/monetary/strfmon.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/monetary/strfmon.c -o $@ @@ -1701,14 +1645,6 @@ libc.a(cfgetospeed.o): $(OBJDIR)/cfgetospeed.o $(OBJDIR)/cfgetospeed.o: ./src/termios/cfgetospeed.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/termios/cfgetospeed.c -o $@ echo [CC] $@ -libc.a(__libc_per_thread.o): $(OBJDIR)/__libc_per_thread.o -$(OBJDIR)/__libc_per_thread.o: ./src/nonstd/__libc_per_thread.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/nonstd/__libc_per_thread.c -o $@ - echo [CC] $@ -libc.a(__libc.o): $(OBJDIR)/__libc.o -$(OBJDIR)/__libc.o: ./src/nonstd/__libc.c - $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/nonstd/__libc.c -o $@ - echo [CC] $@ librt.a(mq_close.o): $(OBJDIR)/mq_close.o $(OBJDIR)/mq_close.o: ./src/mqueue/mq_close.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/mqueue/mq_close.c -o $@ @@ -2977,6 +2913,10 @@ libc.a(localeconv.o): $(OBJDIR)/localeconv.o $(OBJDIR)/localeconv.o: ./src/locale/localeconv.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/locale/localeconv.c -o $@ echo [CC] $@ +libc.a(__get_locale.o): $(OBJDIR)/__get_locale.o +$(OBJDIR)/__get_locale.o: ./src/locale/__get_locale.c + $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/locale/__get_locale.c -o $@ + echo [CC] $@ libc.a(__load_locale.o): $(OBJDIR)/__load_locale.o $(OBJDIR)/__load_locale.o: ./src/locale/__load_locale.c $(CC) $(BASE_CFLAGS) $(CFLAGS) -c ./src/locale/__load_locale.c -o $@ diff --git a/.deps/all.c b/.deps/all.c index e5231913..cb5baf4e 100644 --- a/.deps/all.c +++ b/.deps/all.c @@ -1866,8 +1866,6 @@ ./src/termios/NCCS.c ./src/termios/TCIOFLUSH.c ./src/termios/CS5.c -./src/nonstd/__libc_per_thread.c -./src/nonstd/__libc.c ./src/stdarg/va_copy.c ./src/stdarg/va_list.c ./src/stdarg/va_arg.c @@ -2633,6 +2631,7 @@ ./src/locale/LC_ALL.c ./src/locale/LC_NUMERIC.c ./src/locale/LC_ALL_MASK.c +./src/locale/__get_locale.c ./src/locale/struct_lconv.c ./src/locale/LC_TIME.c ./src/locale/LC_TIME_MASK.c diff --git a/.deps/libc.C_0 b/.deps/libc.C_0 index 565933fa..4c43035b 100644 --- a/.deps/libc.C_0 +++ b/.deps/libc.C_0 @@ -13,8 +13,7 @@ libc_C_0_OBJS= \ libc.a($(OBJDIR)/__printf.o) \ libc.a($(OBJDIR)/__assert.o) \ libc.a($(OBJDIR)/__errno.o) \ - libc.a($(OBJDIR)/__libc_per_thread.o) \ - libc.a($(OBJDIR)/__libc.o) \ + libc.a($(OBJDIR)/__get_locale.o) \ libc.a($(OBJDIR)/__load_locale.o) \ libc.a($(OBJDIR)/__main.o) \ libc.a($(OBJDIR)/__stdlib.o)
\ No newline at end of file diff --git a/.deps/libc.POSIX_199506 b/.deps/libc.POSIX_199506 index 8ab81154..5e7f2b11 100644 --- a/.deps/libc.POSIX_199506 +++ b/.deps/libc.POSIX_199506 @@ -3,6 +3,4 @@ libc_POSIX_199506_OBJS= \ libc.a($(OBJDIR)/funlockfile.o) \ libc.a($(OBJDIR)/getchar_unlocked.o) \ libc.a($(OBJDIR)/flockfile.o) \ - libc.a($(OBJDIR)/putchar_unlocked.o) \ - libc.a($(OBJDIR)/putc_unlocked.o) \ - libc.a($(OBJDIR)/getc_unlocked.o)
\ No newline at end of file + libc.a($(OBJDIR)/putchar_unlocked.o)
\ No newline at end of file diff --git a/.deps/libc.POSIX_200809 b/.deps/libc.POSIX_200809 index e588ffa6..c80e3e53 100644 --- a/.deps/libc.POSIX_200809 +++ b/.deps/libc.POSIX_200809 @@ -1,8 +1,5 @@ .POSIX: libc_POSIX_200809_OBJS= \ - libc.a($(OBJDIR)/fstatvfs.o) \ - libc.a($(OBJDIR)/statvfs.o) \ - libc.a($(OBJDIR)/waitid.o) \ libc.a($(OBJDIR)/strcasecmp.o) \ libc.a($(OBJDIR)/strncasecmp.o) \ libc.a($(OBJDIR)/lchown.o) \ diff --git a/.deps/libc.XOPEN_400 b/.deps/libc.XOPEN_400 index a5db9e0c..9743fa39 100644 --- a/.deps/libc.XOPEN_400 +++ b/.deps/libc.XOPEN_400 @@ -1,21 +1,13 @@ .POSIX: libc_XOPEN_400_OBJS= \ - libc.a($(OBJDIR)/fstatvfs.o) \ - libc.a($(OBJDIR)/statvfs.o) \ libc.a($(OBJDIR)/setrlimit.o) \ libc.a($(OBJDIR)/setpriority.o) \ libc.a($(OBJDIR)/getpriority.o) \ libc.a($(OBJDIR)/getrusage.o) \ libc.a($(OBJDIR)/getrlimit.o) \ - libc.a($(OBJDIR)/setitimer.o) \ - libc.a($(OBJDIR)/gettimeofday.o) \ - libc.a($(OBJDIR)/utimes.o) \ - libc.a($(OBJDIR)/getitimer.o) \ - libc.a($(OBJDIR)/select.o) \ libc.a($(OBJDIR)/ftok.o) \ libc.a($(OBJDIR)/readv.o) \ libc.a($(OBJDIR)/writev.o) \ - libc.a($(OBJDIR)/waitid.o) \ libc.a($(OBJDIR)/wait3.o) \ libc.a($(OBJDIR)/mmap.o) \ libc.a($(OBJDIR)/mprotect.o) \ @@ -84,10 +76,6 @@ libc_XOPEN_400_OBJS= \ libc.a($(OBJDIR)/endgrent.o) \ libc.a($(OBJDIR)/getgrent.o) \ libc.a($(OBJDIR)/setgrent.o) \ - libc.a($(OBJDIR)/makecontext.o) \ - libc.a($(OBJDIR)/swapcontext.o) \ - libc.a($(OBJDIR)/getcontext.o) \ - libc.a($(OBJDIR)/setcontext.o) \ libc.a($(OBJDIR)/getpwent.o) \ libc.a($(OBJDIR)/setpwent.o) \ libc.a($(OBJDIR)/endpwent.o) \ diff --git a/src/_assert.h b/src/_assert.h index 2d27edfb..9698f5a2 100644 --- a/src/_assert.h +++ b/src/_assert.h @@ -6,7 +6,7 @@ if (!__ptr) { \ struct __constraint_info _ci = {0}; \ _ci.func = __func__; \ - __libc.stdlib.constraint_handler("Undefined behavior: " \ + __stdlib.constraint_handler("Undefined behavior: " \ "Parameter " #__ptr " can not be NULL", &_ci, EFAULT); \ } \ } while (0) @@ -15,7 +15,7 @@ if (!__n) { \ struct __constraint_info _ci = {0}; \ _ci.func = __func__; \ - __libc.stdlib.constraint_handler("Undefined behavior: " \ + __stdlib.constraint_handler("Undefined behavior: " \ "Parameter " #__n " can not be 0", &_ci, ERANGE); \ } \ } while (0) @@ -28,13 +28,13 @@ if (_sentinel && (_n != _sentinel && (_n < _min || _n > _max))) { \ struct __constraint_info _ci = {0}; \ _ci.func = __func__; \ - __libc.stdlib.constraint_handler("Undefined behavior: " \ + __stdlib.constraint_handler("Undefined behavior: " \ "Paramater " #_n " must be representable as a " #_type \ "or be equal to " #_sentinel, &_ci, ERANGE); \ } else if (_n < _min || _n > _max) { \ struct __constraint_info _ci = {0}; \ _ci.func = __func__; \ - __libc.stdlib.constraint_handler("Undefined behavior: " \ + __stdlib.constraint_handler("Undefined behavior: " \ "Parameter " #_n " must be representable as a " #_type, \ &_ci, ERANGE); \ } \ diff --git a/src/_nonstd.h b/src/_nonstd.h deleted file mode 100644 index 4f8cd478..00000000 --- a/src/_nonstd.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef ___NONSTD_H__ -#define ___NONSTD_H__ - -typedef enum { - /* locale.h */ - THREAD_LOCALE, - GLOBAL_LOCALE, - LCONV, - LOAD_LOCALE, - - /* [w]ctype.h */ - CTYPE, - TOLOWER, - TOUPPER, -} LIBC_INTERNAL; - -void *__libc(LIBC_INTERNAL __variable); - -#endif diff --git a/src/ctype/_ctype.h b/src/ctype/_ctype.h index f64553c1..be3e8401 100644 --- a/src/ctype/_ctype.h +++ b/src/ctype/_ctype.h @@ -1,7 +1,8 @@ #ifndef ___CTYPE_H__ #define ___CTYPE_H__ -#include "../_nonstd.h" +#include "../_assert.h" +#include "../locale/_locale.h" typedef enum { CT_ALPHA = (1 << 0), diff --git a/src/ctype/isblank.c b/src/ctype/isblank.c index d22d2315..b71b0faa 100644 --- a/src/ctype/isblank.c +++ b/src/ctype/isblank.c @@ -2,13 +2,12 @@ #include "limits.h" #include "locale.h" #include "_ctype.h" -#include "../_assert.h" /** test whether a character is blank **/ int isblank(int c) { - unsigned int *map = __libc(CTYPE); + unsigned int *map = __get_locale()->lc_ctype.ctattr; ASSERT_REPRESENTABLE(c, 0, UCHAR_MAX, "unsigned char", EOF); diff --git a/src/ctype/iscntrl.c b/src/ctype/iscntrl.c index ef28ff20..d90803e5 100644 --- a/src/ctype/iscntrl.c +++ b/src/ctype/iscntrl.c @@ -7,7 +7,7 @@ int iscntrl(int c) { - unsigned int *map = __libc(CTYPE); + unsigned int *map = __get_locale()->lc_ctype.ctattr; ASSERT_REPRESENTABLE(c, 0, UCHAR_MAX, unsigned char, EOF); diff --git a/src/ctype/isgraph.c b/src/ctype/isgraph.c index a6490d8f..72be27b3 100644 --- a/src/ctype/isgraph.c +++ b/src/ctype/isgraph.c @@ -7,7 +7,7 @@ int isgraph(int c) { - unsigned int *map = __libc(CTYPE); + unsigned int *map = __get_locale()->lc_ctype.ctattr; ASSERT_REPRESENTABLE(c, 0, UCHAR_MAX, unsigned char, EOF); diff --git a/src/ctype/islower.c b/src/ctype/islower.c index 35c8236d..6dfedcc6 100644 --- a/src/ctype/islower.c +++ b/src/ctype/islower.c @@ -7,7 +7,7 @@ int islower(int c) { - unsigned int *map = __libc(CTYPE); + unsigned int *map = __get_locale()->lc_ctype.ctattr; ASSERT_REPRESENTABLE(c, 0, UCHAR_MAX, unsigned char, EOF); diff --git a/src/ctype/isprint.c b/src/ctype/isprint.c index c3deaebd..e4b5a531 100644 --- a/src/ctype/isprint.c +++ b/src/ctype/isprint.c @@ -7,7 +7,7 @@ int isprint(int c) { - unsigned int *map = __libc(CTYPE); + unsigned int *map = __get_locale()->lc_ctype.ctattr; ASSERT_REPRESENTABLE(c, 0, UCHAR_MAX, unsigned char, EOF); diff --git a/src/ctype/ispunct.c b/src/ctype/ispunct.c index 12d0cf16..e73461e1 100644 --- a/src/ctype/ispunct.c +++ b/src/ctype/ispunct.c @@ -7,7 +7,7 @@ int ispunct(int c) { - unsigned int *map = __libc(CTYPE); + unsigned int *map = __get_locale()->lc_ctype.ctattr; ASSERT_REPRESENTABLE(c, 0, UCHAR_MAX, unsigned char, EOF); diff --git a/src/ctype/isspace.c b/src/ctype/isspace.c index fb913c49..d4eeb134 100644 --- a/src/ctype/isspace.c +++ b/src/ctype/isspace.c @@ -7,7 +7,7 @@ int isspace(int c) { - unsigned int *map = __libc(CTYPE); + unsigned int *map = __get_locale()->lc_ctype.ctattr; ASSERT_REPRESENTABLE(c, 0, UCHAR_MAX, unsigned char, EOF); diff --git a/src/ctype/isupper.c b/src/ctype/isupper.c index ff07ff59..e0eb545e 100644 --- a/src/ctype/isupper.c +++ b/src/ctype/isupper.c @@ -7,7 +7,7 @@ int isupper(int c) { - unsigned int *map = __libc(CTYPE); + unsigned int *map = __get_locale()->lc_ctype.ctattr; ASSERT_REPRESENTABLE(c, 0, UCHAR_MAX, unsigned char, EOF); diff --git a/src/ctype/isxdigit.c b/src/ctype/isxdigit.c index 9f9e0b91..9d73d662 100644 --- a/src/ctype/isxdigit.c +++ b/src/ctype/isxdigit.c @@ -7,7 +7,7 @@ int isxdigit(int c) { - unsigned int *map = __libc(CTYPE); + unsigned int *map = __get_locale()->lc_ctype.ctattr; ASSERT_REPRESENTABLE(c, 0, UCHAR_MAX, unsigned char, EOF); diff --git a/src/ctype/tolower.c b/src/ctype/tolower.c index 4512ef36..3da90645 100644 --- a/src/ctype/tolower.c +++ b/src/ctype/tolower.c @@ -1,14 +1,13 @@ #include <ctype.h> #include "stdio.h" #include "limits.h" -#include "../_assert.h" #include "_ctype.h" /** convert an uppercase letter to lowercase **/ int tolower(int c) { - unsigned char *map = __libc(TOLOWER); + unsigned char *map = __get_locale()->lc_ctype.ctolower; ASSERT_REPRESENTABLE(c, 0, UCHAR_MAX, unsigned char, EOF); diff --git a/src/ctype/toupper.c b/src/ctype/toupper.c index 897d059e..3addcada 100644 --- a/src/ctype/toupper.c +++ b/src/ctype/toupper.c @@ -1,14 +1,13 @@ #include <ctype.h> #include "stdio.h" #include "limits.h" -#include "../_assert.h" #include "_ctype.h" /** convert a lowercase letter to uppercase **/ int toupper(int c) { - unsigned char *map = __libc(TOUPPER); + unsigned char *map = __get_locale()->lc_ctype.ctoupper; ASSERT_REPRESENTABLE(c, 0, UCHAR_MAX, unsigned char, EOF); diff --git a/src/locale/__get_locale.c b/src/locale/__get_locale.c new file mode 100644 index 00000000..4722175c --- /dev/null +++ b/src/locale/__get_locale.c @@ -0,0 +1,13 @@ +#include "locale.h" +#include "_locale.h" + +/* +This implementation only supports a single, global locale. A second +implementation will be needed for POSIX.1-2008 per-thread locales. +*/ + +struct __locale_t * __get_locale(void) +{ + static struct __locale_t l; + return &l; +} diff --git a/src/locale/__load_locale.c b/src/locale/__load_locale.c index d79bb4e4..deff64bb 100644 --- a/src/locale/__load_locale.c +++ b/src/locale/__load_locale.c @@ -110,40 +110,40 @@ char * __load_locale(struct __locale_t *loc, int mask, const char *name) strcpy(loc->monetary, name); if (localefile == NULL) { - loc->mn.mon_decimal_point = ""; - loc->mn.mon_thousands_sep = ""; - loc->mn.mon_grouping = ""; - loc->mn.positive_sign = ""; - loc->mn.negative_sign = ""; - loc->mn.currency_symbol = ""; - loc->mn.frac_digits = CHAR_MAX; - loc->mn.p_cs_precedes = CHAR_MAX; - loc->mn.n_cs_precedes = CHAR_MAX; - loc->mn.p_sep_by_space = CHAR_MAX; - loc->mn.n_sep_by_space = CHAR_MAX; - loc->mn.p_sign_posn = CHAR_MAX; - loc->mn.n_sign_posn = CHAR_MAX; - loc->mn.int_curr_symbol = ""; - loc->mn.int_frac_digits = CHAR_MAX; + loc->lconv.mon_decimal_point = ""; + loc->lconv.mon_thousands_sep = ""; + loc->lconv.mon_grouping = ""; + loc->lconv.positive_sign = ""; + loc->lconv.negative_sign = ""; + loc->lconv.currency_symbol = ""; + loc->lconv.frac_digits = CHAR_MAX; + loc->lconv.p_cs_precedes = CHAR_MAX; + loc->lconv.n_cs_precedes = CHAR_MAX; + loc->lconv.p_sep_by_space = CHAR_MAX; + loc->lconv.n_sep_by_space = CHAR_MAX; + loc->lconv.p_sign_posn = CHAR_MAX; + loc->lconv.n_sign_posn = CHAR_MAX; + loc->lconv.int_curr_symbol = ""; + loc->lconv.int_frac_digits = CHAR_MAX; #if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ - loc->mn.int_p_cs_precedes = CHAR_MAX; - loc->mn.int_n_cs_precedes = CHAR_MAX; - loc->mn.int_p_sep_by_space = CHAR_MAX; - loc->mn.int_n_sep_by_space = CHAR_MAX; - loc->mn.int_p_sign_posn = CHAR_MAX; - loc->mn.int_n_sign_posn = CHAR_MAX; + loc->lconv.int_p_cs_precedes = CHAR_MAX; + loc->lconv.int_n_cs_precedes = CHAR_MAX; + loc->lconv.int_p_sep_by_space = CHAR_MAX; + loc->lconv.int_n_sep_by_space = CHAR_MAX; + loc->lconv.int_p_sign_posn = CHAR_MAX; + loc->lconv.int_n_sign_posn = CHAR_MAX; #else - loc->mn.__int_p_cs_precedes = CHAR_MAX; - loc->mn.__int_n_cs_precedes = CHAR_MAX; - loc->mn.__int_p_sep_by_space = CHAR_MAX; - loc->mn.__int_n_sep_by_space = CHAR_MAX; - loc->mn.__int_p_sign_posn = CHAR_MAX; - loc->mn.__int_n_sign_posn = CHAR_MAX; + loc->lconv.__int_p_cs_precedes = CHAR_MAX; + loc->lconv.__int_n_cs_precedes = CHAR_MAX; + loc->lconv.__int_p_sep_by_space = CHAR_MAX; + loc->lconv.__int_n_sep_by_space = CHAR_MAX; + loc->lconv.__int_p_sign_posn = CHAR_MAX; + loc->lconv.__int_n_sign_posn = CHAR_MAX; #endif } else { /* - loc->mn.monetary fields; + loc->lconv.monetary fields; */ } } @@ -152,12 +152,12 @@ char * __load_locale(struct __locale_t *loc, int mask, const char *name) strcpy(loc->numeric, name); if (localefile == NULL) { - loc->mn.decimal_point = "."; - loc->mn.thousands_sep = ""; - loc->mn.grouping = ""; + loc->lconv.decimal_point = "."; + loc->lconv.thousands_sep = ""; + loc->lconv.grouping = ""; } else { /* - loc->mn.numeric fields + loc->lconv.numeric fields */ } } diff --git a/src/locale/_locale.h b/src/locale/_locale.h index bed7e0f5..8f974ef3 100644 --- a/src/locale/_locale.h +++ b/src/locale/_locale.h @@ -28,7 +28,7 @@ struct __locale_t { char monetary[UCHAR_MAX]; char numeric[UCHAR_MAX]; - struct lconv mn; + struct lconv lconv; char time[UCHAR_MAX]; struct { @@ -60,6 +60,7 @@ struct __locale_t { } lc_time; }; -char * __load_locale(struct __locale_t *, int, const char *); +char * __load_locale(struct __locale_t *loc, int mask, const char *name); +struct __locale_t * __get_locale(void); #endif diff --git a/src/locale/localeconv.c b/src/locale/localeconv.c index e63402e2..0021c13a 100644 --- a/src/locale/localeconv.c +++ b/src/locale/localeconv.c @@ -1,6 +1,5 @@ #include <locale.h> #include "_locale.h" -#include "../_nonstd.h" /** return locale-specific information **/ struct lconv * localeconv(void) @@ -8,7 +7,7 @@ struct lconv * localeconv(void) /* RETURN_SUCCESS(a pointer to a filled-in STRUCTDEF(lconv) for the current locale); */ - return __libc(LCONV); + return &(__get_locale()->lconv); } /*** diff --git a/src/locale/setlocale.c b/src/locale/setlocale.c index 068bf858..72478686 100644 --- a/src/locale/setlocale.c +++ b/src/locale/setlocale.c @@ -2,7 +2,6 @@ #include "string.h" #include "stdlib.h" #include "_locale.h" -#include "../_nonstd.h" #include "LC_ALL_MASK.c" #include "LC_COLLATE_MASK.c" @@ -14,7 +13,7 @@ char * setlocale(int category, const char *locale) { - struct __locale_t *l = __libc(GLOBAL_LOCALE); + struct __locale_t *l = __get_locale(); int mask = 0; if (locale == NULL) { diff --git a/src/nonstd/__libc.c b/src/nonstd/__libc.c deleted file mode 100644 index 0d8351ab..00000000 --- a/src/nonstd/__libc.c +++ /dev/null @@ -1,60 +0,0 @@ -#include "../_nonstd.h" -#include "../locale/_locale.h" - -void *__libc(LIBC_INTERNAL variable) -{ - extern void *__libc_per_thread(LIBC_INTERNAL __variable); - static struct __locale_t locale; - - void *r = (void*)0; - - switch (variable) { - case THREAD_LOCALE: - r = __libc_per_thread(THREAD_LOCALE); - if (r) { - break; - } - /* fallthru */ - - case GLOBAL_LOCALE: - r = &locale; - break; - - case CTYPE: - r = __libc(THREAD_LOCALE); - if (((struct __locale_t*)r)->ctype[0] == '\0') { - r = &locale; - } - r = ((struct __locale_t*)r)->lc_ctype.ctattr; - break; - - case TOLOWER: - r = __libc(THREAD_LOCALE); - if (((struct __locale_t*)r)->ctype[0] == '\0') { - r = &locale; - } - r = ((struct __locale_t*)r)->lc_ctype.ctolower; - break; - - case TOUPPER: - r = __libc(THREAD_LOCALE); - if (((struct __locale_t*)r)->ctype[0] == '\0') { - r = &locale; - } - r = ((struct __locale_t*)r)->lc_ctype.ctoupper; - break; - - case LCONV: - r = __libc(THREAD_LOCALE); - if (((struct __locale_t*)r)->numeric[0] == '\0') { - r = &locale; - } - r = &(((struct __locale_t*)r)->mn); - break; - - default: - break; - } - - return r; -} diff --git a/src/nonstd/__libc_per_thread.c b/src/nonstd/__libc_per_thread.c deleted file mode 100644 index d487dcad..00000000 --- a/src/nonstd/__libc_per_thread.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "../_nonstd.h" -#include "../locale/_locale.h" -#include "../_perthread.h" - -void *__libc_per_thread(LIBC_INTERNAL variable) -{ - THREAD_LOCAL struct __locale_t locale; - - if (variable == THREAD_LOCALE) { - return &locale; - } - - return (void*)0; -} diff --git a/src/unistd/fdatasync.c b/src/unistd/fdatasync.c index 3de269ec..904c12fe 100644 --- a/src/unistd/fdatasync.c +++ b/src/unistd/fdatasync.c @@ -1,5 +1,4 @@ #include <unistd.h> -#include "__nonstd.h" int fdatasync(int fildes) { |