diff options
author | pommicket <pommicket@gmail.com> | 2022-02-15 15:40:15 -0500 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2022-02-15 15:40:15 -0500 |
commit | f973ff8cb898aafd95673cb632ac83ebbcf820c7 (patch) | |
tree | 419ec3d77f1599c5fb0ffc97bc87b53b7a725a64 /05/stdc_common.h | |
parent | 1ea9d85e3fdf3e90ceb46938c40bc4b1cfc09d89 (diff) |
mostly-standard scanf
Diffstat (limited to '05/stdc_common.h')
-rw-r--r-- | 05/stdc_common.h | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/05/stdc_common.h b/05/stdc_common.h index 22c5a42..c40fd3d 100644 --- a/05/stdc_common.h +++ b/05/stdc_common.h @@ -143,6 +143,8 @@ typedef struct { int fd; unsigned char eof; unsigned char err; + unsigned char has_ungetc; + char ungetc; // character which was pushed by ungetc() } FILE; int errno; @@ -213,6 +215,28 @@ int isspace(int c) { return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'; } +int isdigit(int c) { + return c >= '0' && c <= '9'; +} + +int _isdigit_in_base(int c, int base) { + if (c >= '0' && c <= '9') { + return c - '0' < base; + } else if (c >= 'a' && c <= 'z') { + return c - 'a' + 10 < base; + } else if (c >= 'A' && c <= 'Z') { + return c - 'A' + 10 < base; + } + return 0; +} + +void *memset(void *s, int c, size_t n) { + char *p = s, *end = p + n; + while (p < end) + *p++ = c; + return s; +} + unsigned long strtoul(const char *nptr, char **endptr, int base) { unsigned long value = 0, newvalue; int overflow = 0; @@ -277,7 +301,7 @@ long strtol(const char *nptr, char **endptr, int base) { if (sign > 0) { if (mag > LONG_MAX) { errno = ERANGE; - return LONG_MIN; + return LONG_MAX; } return (long)mag; } else { |