diff options
| author | Jakob Kaivo <jkk@ung.org> | 2020-03-04 03:01:03 -0500 |
|---|---|---|
| committer | Jakob Kaivo <jkk@ung.org> | 2020-03-04 03:01:03 -0500 |
| commit | 8b1380b63d62a1e1858a102fb36c2078697581ec (patch) | |
| tree | 25da9bd06b12e647b6a3f8543e0e22c88b721459 /src/nonstd | |
| parent | 30daa2476c5d32f231618037102c7866996e295d (diff) | |
eliminate nonstd/io.h
Diffstat (limited to 'src/nonstd')
| -rw-r--r-- | src/nonstd/__libc.c | 8 | ||||
| -rw-r--r-- | src/nonstd/__libc_start.c | 3 | ||||
| -rw-r--r-- | src/nonstd/__printf.c | 4 | ||||
| -rw-r--r-- | src/nonstd/__scanf.c | 4 | ||||
| -rw-r--r-- | src/nonstd/_io.h | 24 | ||||
| -rw-r--r-- | src/nonstd/_printf.h | 313 | ||||
| -rw-r--r-- | src/nonstd/flockfile.c | 5 | ||||
| -rw-r--r-- | src/nonstd/ftrylockfile.c | 5 | ||||
| -rw-r--r-- | src/nonstd/funlockfile.c | 5 | ||||
| -rw-r--r-- | src/nonstd/getc_unlocked.c | 5 | ||||
| -rw-r--r-- | src/nonstd/io-internal.ref | 2 | ||||
| -rw-r--r-- | src/nonstd/pid_t.ref | 2 | ||||
| -rw-r--r-- | src/nonstd/stdio.ref | 2 | ||||
| -rw-r--r-- | src/nonstd/struct_FILE.c | 36 | ||||
| -rw-r--r-- | src/nonstd/struct_io_options.c | 10 |
15 files changed, 2 insertions, 426 deletions
diff --git a/src/nonstd/__libc.c b/src/nonstd/__libc.c index f596a3c8..9471558d 100644 --- a/src/nonstd/__libc.c +++ b/src/nonstd/__libc.c @@ -1,10 +1,8 @@ #include "sys/types.h" #include <nonstd/internal.h> #include "nonstd/locale.h" -#include "nonstd/io.h" +#include "../stdio/_stdio.h" -#include "_printf.h" -#include "_scanf.h" #include "_locale.h" #include "_syscall.h" @@ -67,10 +65,6 @@ void *__libc(LIBC_INTERNAL variable) r = (void*)__syscall_lookup; break; - case PRINTF: - r = (void*)(__printf); - break; - case FILE_STREAMS: r = file_streams; break; diff --git a/src/nonstd/__libc_start.c b/src/nonstd/__libc_start.c index ca3e8245..4b0b773e 100644 --- a/src/nonstd/__libc_start.c +++ b/src/nonstd/__libc_start.c @@ -1,8 +1,7 @@ #include "stdlib.h" #include "stdio.h" #include "locale.h" - -#include "nonstd/io.h" +#include "../stdio/_stdio.h" #ifdef _POSIX_SOURCE #define DEFAULT_LOCALE "POSIX" diff --git a/src/nonstd/__printf.c b/src/nonstd/__printf.c deleted file mode 100644 index 5868a15d..00000000 --- a/src/nonstd/__printf.c +++ /dev/null @@ -1,4 +0,0 @@ -#include <nonstd/io.h> - -#define __printf(_opts, _fmt, _ap) \ - ((int (*)(struct io_options*, const char*, va_list))__libc(PRINTF))(_opts, _fmt, _ap) diff --git a/src/nonstd/__scanf.c b/src/nonstd/__scanf.c deleted file mode 100644 index 7508880d..00000000 --- a/src/nonstd/__scanf.c +++ /dev/null @@ -1,4 +0,0 @@ -#include <nonstd/io.h> - -#define __scanf(_opts, _fmt, _ap) \ - ((int (*)(struct io_options*, const char*, va_list))__libc(SCANF))(_opts, _fmt, _ap) diff --git a/src/nonstd/_io.h b/src/nonstd/_io.h deleted file mode 100644 index d117cb8c..00000000 --- a/src/nonstd/_io.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __INTERNAL_IO_H__ -#define __INTERNAL_IO_H__ - -#include "nonstd/io.h" -#include "stdarg.h" - -#if defined __STDC_VERSION__ && 199909L <= __STDC_VERSION__ -#include "inttypes.h" -#else -#include "stdlib.h" -typedef unsigned long int uintmax_t; -typedef long int intmax_t; -typedef long int intptr_t; -typedef long int ptrdiff_t; -#define strtoumax(_s, _endptr, _base) strtoul(_s, _endptr, _base) -#endif - -#if defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || defined _XOPEN_SOURCE -#include "unistd.h" -#else -#define write(fd, b, s) -#endif - -#endif diff --git a/src/nonstd/_printf.h b/src/nonstd/_printf.h deleted file mode 100644 index 31b2d82e..00000000 --- a/src/nonstd/_printf.h +++ /dev/null @@ -1,313 +0,0 @@ -#include "_io.h" - -#define NUMBUFLEN 64 - -#define LEFT (1 << 0) -#define SIGN (1 << 1) -#define SPACE (1 << 2) -#define ALT (1 << 3) -#define ZERO (1 << 4) -#define UPPER (1 << 5) -#define UNSIGNED (1 << 6) - -static int __append(char *s, char *argstring, int nout, size_t n) -{ - s += nout; - while (*argstring) { - if (nout < (int)n) { - *s++ = *argstring; - } - nout++; - argstring++; - } - return nout; -} - -static void __itos(char *s, intmax_t n, int flags, int precision, int base) -{ - extern int toupper(int); - char digits[] = "0123456789abcdef"; - char sign = n < 0 ? '-' : '+'; - char buf[NUMBUFLEN]; - char *out = buf + NUMBUFLEN; - if (flags & UPPER && base > 10) { - size_t i; - for (i = 0; i < sizeof(digits); i++) { - digits[i] = (char)toupper(digits[i]); - } - } - *out = '\0'; - out--; - if (n == 0) { - *out = '0'; - out--; - } - while (n > 0) { - precision--; - *out = digits[n % base]; - n /= base; - out--; - } - if (flags & SIGN || sign == '-') { - *out = sign; - out--; - } - out++; - while ((*s++ = *out++) != 0) { - continue; - } -} - -int (__printf)(struct io_options *opt, const char * format, va_list arg) -{ - extern int isdigit(int); - extern int isupper(int); - - char buf[BUFSIZ]; - int nout = 0; - int fd = -1; - struct __FILE *f = NULL; - - intmax_t argint = 0; - void *argptr = NULL; - char numbuf[NUMBUFLEN]; - - size_t i; - size_t n = 0; - char *s = NULL; - - if (opt->stream) { - /* file based */ - f = opt->stream; - s = buf; - n = BUFSIZ; - flockfile(f); - } else if (opt->string) { - /* memory buffer */ - s = opt->string; - n = opt->maxlen; - } else { - /* file descriptor */ - s = buf; - n = BUFSIZ; - fd = opt->fd; - } - - for (i = 0; format[i] != 0; i++) { - /* - // zero of more flags "-+ #0" - // optional width "*" or decimal integer - // optional precision ".*" or ".[decimal]" - // optional length modifier "hh", "h", "l", "ll", "j", - // "z", "t", "L" - // conversion specifier "diouxXfFeEgGaAcspn%" - */ - int flags = 0; - /* uintmax_t width = 0; */ - int step = 0; - int precision = 0; - int base = 10; - enum { def, hh, h, l, ll, j, z, t, L } length = def; - - if (format[i] != '%') { - if (nout < (int)n) { - s[nout] = format[i]; - } - nout++; - continue; - } - - while (step == 0) { - i++; - switch (format[i]) { - case '-': flags |= LEFT; break; - case '+': flags |= SIGN; break; - case ' ': flags |= SPACE; break; - case '#': flags |= ALT; break; - case '0': flags |= ZERO; break; - default: step = 1; break; - } - } - - if (format[i] == '*') { - i++; - } else if (isdigit(format[i])) { - /* - char *end; - width = strtoumax(format + i, &end, 10); - i = end - format; - */ - } - - if (format[i] == '.') { - i++; - if (format[i] == '*') { - i++; - } else if (isdigit(format[i])) { - char *end; - precision = (int)strtoumax(format + i, &end, 10); - i = end - format; - } else { - /* invalid precision */ - nout = -nout; - goto end; - } - } - - if (format[i] == 'h') { - i++; - if (format[i] == 'h') { - i++; - length = hh; - } else { - length = h; - } - } else if (format[i] == 'l') { - i++; - if (format[i] == 'l') { - i++; - length = ll; - } else { - length = l; - } - } else if (format[i] == 'j') { - i++; - length = j; - } else if (format[i] == 'z') { - i++; - length = z; - } else if (format[i] == 't') { - i++; - length = t; - } else if (format[i] == 'L') { - i++; - length = L; - } - - if (isupper(format[i])) { - flags |= UPPER; - } - - switch (format[i]) { - case 'o': /* unsigned int */ - case 'u': - case 'x': - case 'X': - flags |= UNSIGNED; - - case 'd': /* int */ - case 'i': - switch (length) { - case hh: argint = (signed char)va_arg(arg, int); break; - case h: argint = (short int)va_arg(arg, int); break; - case l: argint = va_arg(arg, long int); break; - - #if defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ - case ll: argint = va_arg(arg, long long int); break; - #endif - - case j: argint = va_arg(arg, intmax_t); break; - case z: argint = va_arg(arg, size_t); break; - case t: argint = va_arg(arg, ptrdiff_t); break; - case L: nout = -nout; goto end; - default: argint = va_arg(arg, int); break; - } - if (format[i] == 'o') { - base = 8; - } else if (format[i] == 'x') { - base = 16; - } else if (format[i] == 'X') { - base = 16; - flags |= UPPER; - } else { - base = 10; - } - __itos(numbuf, (long int)argint, flags, precision, base); - nout = __append(s, numbuf, nout, n); - break; - - - case 'f': /* double [-]ddd.ddd */ - case 'F': - break; - - case 'e': /* double [-]d.ddde+/-dd */ - case 'E': - break; - - case 'g': /* double f or e see docs */ - case 'G': - break; - - case 'a': /* double as hex */ - case 'A': - break; - - case 'c': /* char */ - if (length == def) { - char c = va_arg(arg, int); - if (nout < (int)n) { - s[nout] = c; - } - nout++; - } else if (length == l) { - /* wint_t wc = va_arg(arg, wint_t); */ - /* char mb[MB_CUR_MAX + 1] = "WC"; */ - /* wctomb(mb, wc); */ - /* nout = __append(s, mb, nout, n); */ - } else { - nout = -nout; - goto end; - } - break; - - case 's': /* string */ - if (length == def) { - char *string = va_arg(arg, char *); - nout = __append(s, string, nout, n); - } else if (length == l) { - /*wchar_t *ws = va_arg(arg, wchar_t *); */ - /*char *mbs = malloc(wcslen(ws) * MB_CUR_MAX + 1); */ - /*wcstombs(mbs, ws, wcslen(ws) * MB_CUR_MAX + 1); */ - /*nout = __append(s, mbs, nout, n); */ - /*free(mbs); */ - nout = __append(s, "WIDE STRING", nout, n); - } else { - nout = -nout; - goto end; - } - - break; - - case 'p': /* pointer */ - argptr = va_arg(arg, void *); - nout = __append(s, "0x", nout, n); - __itos(numbuf, (intptr_t)argptr, ZERO, sizeof(argptr) * 2, 16); - nout = __append(s, numbuf, nout, n); - break; - - case 'n': /* write-back */ - break; - - case '%': /* literal '%' */ - if (nout < (int)n) { - s[nout] = '%'; - } - nout++; - break; - - default: /* undefined */ - return -nout; - } - } - - end: - if (f) { - fwrite(buf, 1, nout % BUFSIZ, f); - funlockfile(f); - } else if (fd != -1) { - write(fd, buf, nout % BUFSIZ); - } - - return nout; -} diff --git a/src/nonstd/flockfile.c b/src/nonstd/flockfile.c deleted file mode 100644 index 021c73c3..00000000 --- a/src/nonstd/flockfile.c +++ /dev/null @@ -1,5 +0,0 @@ -#include <nonstd/io.h> - -#if !(defined _POSIX_C_SOURCE && 199506L <= _POSIX_C_SOURCE) && !(defined _XOPEN_SOURCE && 500 <= _XOPEN_SOURCE) -#define flockfile(__f) (void)(__f) -#endif diff --git a/src/nonstd/ftrylockfile.c b/src/nonstd/ftrylockfile.c deleted file mode 100644 index b805a6e5..00000000 --- a/src/nonstd/ftrylockfile.c +++ /dev/null @@ -1,5 +0,0 @@ -#include <nonstd/io.h> - -#if !(defined _POSIX_C_SOURCE && 199506L <= _POSIX_C_SOURCE) && !(defined _XOPEN_SOURCE && 500 <= _XOPEN_SOURCE) -#define ftrylockfile(__f) (void)(__f), 0 -#endif diff --git a/src/nonstd/funlockfile.c b/src/nonstd/funlockfile.c deleted file mode 100644 index ab67117f..00000000 --- a/src/nonstd/funlockfile.c +++ /dev/null @@ -1,5 +0,0 @@ -#include <nonstd/io.h> - -#if !(defined _POSIX_C_SOURCE && 199506L <= _POSIX_C_SOURCE) && !(defined _XOPEN_SOURCE && 500 <= _XOPEN_SOURCE) -#define funlockfile(__f) (void)(__f) -#endif diff --git a/src/nonstd/getc_unlocked.c b/src/nonstd/getc_unlocked.c deleted file mode 100644 index fb700587..00000000 --- a/src/nonstd/getc_unlocked.c +++ /dev/null @@ -1,5 +0,0 @@ -#include <nonstd/io.h> - -#if !(defined _POSIX_C_SOURCE && 199506L <= _POSIX_C_SOURCE) && !(defined _XOPEN_SOURCE && 500 <= _XOPEN_SOURCE) -#define getc_unlocked(__f) getc(__f) -#endif diff --git a/src/nonstd/io-internal.ref b/src/nonstd/io-internal.ref deleted file mode 100644 index 4c06d2f9..00000000 --- a/src/nonstd/io-internal.ref +++ /dev/null @@ -1,2 +0,0 @@ -#include <nonstd/io.h> -REFERENCE(<nonstd/internal.h>) diff --git a/src/nonstd/pid_t.ref b/src/nonstd/pid_t.ref deleted file mode 100644 index 23be346f..00000000 --- a/src/nonstd/pid_t.ref +++ /dev/null @@ -1,2 +0,0 @@ -#include <nonstd/io.h> -REFERENCE(sys/types/pid_t.c) diff --git a/src/nonstd/stdio.ref b/src/nonstd/stdio.ref deleted file mode 100644 index d6cbdf21..00000000 --- a/src/nonstd/stdio.ref +++ /dev/null @@ -1,2 +0,0 @@ -#include <nonstd/io.h> -REFERENCE(<stdio.h>) diff --git a/src/nonstd/struct_FILE.c b/src/nonstd/struct_FILE.c deleted file mode 100644 index a3b8610e..00000000 --- a/src/nonstd/struct_FILE.c +++ /dev/null @@ -1,36 +0,0 @@ -#include <nonstd/io.h> - -struct __FILE { - fpos_t pos; - char *buf; - enum { SUPPLIED, ALLOCED, UNSET } buftype; - int buffering; - int bsize; - int isopen; - int flags; - int lastop; - - /* verified necessary */ - int fd; - int oflag; - int orientation; - int eof; - int err; - int nlocks; - int thread; - - #ifdef _POSIX_SOURCE - pid_t pipe_pid; - #else - long int pipe_pid; - #endif - - struct { - char *buf; - size_t size; - int allocated; - } mem; - - struct __FILE *prev; - struct __FILE *next; -}; diff --git a/src/nonstd/struct_io_options.c b/src/nonstd/struct_io_options.c deleted file mode 100644 index db125f6d..00000000 --- a/src/nonstd/struct_io_options.c +++ /dev/null @@ -1,10 +0,0 @@ -#include <nonstd/io.h> - -struct io_options { - const char *fnname; - char *string; - struct __FILE *stream; - size_t maxlen; - int fd; - int flags; -}; |
