summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2020-08-12 20:12:41 -0400
committerJakob Kaivo <jkk@ung.org>2020-08-12 20:12:41 -0400
commit0b5079b8723804889f06c6ddbeef8a45c00d7b49 (patch)
treed76b603c190b7e04529bff99e8085718b4c0a9a8
parent0f2704eb90ef2590c75633dc7eb695a63cf2ddf8 (diff)
finish purging nonstd/
-rw-r--r--.deps.mk68
-rw-r--r--.deps/all.c3
-rw-r--r--.deps/libc.C_03
-rw-r--r--.deps/libc.POSIX_1995064
-rw-r--r--.deps/libc.POSIX_2008093
-rw-r--r--.deps/libc.XOPEN_40012
-rw-r--r--src/_assert.h8
-rw-r--r--src/_nonstd.h19
-rw-r--r--src/ctype/_ctype.h3
-rw-r--r--src/ctype/isblank.c3
-rw-r--r--src/ctype/iscntrl.c2
-rw-r--r--src/ctype/isgraph.c2
-rw-r--r--src/ctype/islower.c2
-rw-r--r--src/ctype/isprint.c2
-rw-r--r--src/ctype/ispunct.c2
-rw-r--r--src/ctype/isspace.c2
-rw-r--r--src/ctype/isupper.c2
-rw-r--r--src/ctype/isxdigit.c2
-rw-r--r--src/ctype/tolower.c3
-rw-r--r--src/ctype/toupper.c3
-rw-r--r--src/locale/__get_locale.c13
-rw-r--r--src/locale/__load_locale.c64
-rw-r--r--src/locale/_locale.h5
-rw-r--r--src/locale/localeconv.c3
-rw-r--r--src/locale/setlocale.c3
-rw-r--r--src/nonstd/__libc.c60
-rw-r--r--src/nonstd/__libc_per_thread.c14
-rw-r--r--src/unistd/fdatasync.c1
28 files changed, 74 insertions, 237 deletions
diff --git a/.deps.mk b/.deps.mk
index d8f8c1cc..d3b3c33a 100644
--- a/.deps.mk
+++ b/.deps.mk
@@ -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)
{