summaryrefslogtreecommitdiff
path: root/src/stdlib/_strtoi.h
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2019-02-27 19:17:39 -0500
committerJakob Kaivo <jkk@ung.org>2019-02-27 19:17:39 -0500
commite1477898d0203dae4b2fe9ad62998bc27d4b4fc9 (patch)
treebda9ccc11307e41de7c5a4e6e4e92088fe4b1804 /src/stdlib/_strtoi.h
parentfcb83049b1942fafa784fc51869818651c04acbb (diff)
add common _strtoi function body
Diffstat (limited to 'src/stdlib/_strtoi.h')
-rw-r--r--src/stdlib/_strtoi.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/stdlib/_strtoi.h b/src/stdlib/_strtoi.h
new file mode 100644
index 00000000..7a2d5cdf
--- /dev/null
+++ b/src/stdlib/_strtoi.h
@@ -0,0 +1,43 @@
+ /* int iswide = (sizeof(*nptr) == sizeof(wchar_t)); */
+ (void)max;
+
+ if (base == 0) {
+ /* determine base from prefix */
+ }
+
+ if (min == 0) {
+ /* unsigned */
+ }
+
+ while (*nptr) {
+ int n = 0;
+ /* int c = iswide ? wctomb(*nptr) : *nptr; */
+
+ switch (*nptr) {
+ case '0': n = 0; break;
+ case '1': n = 1; break;
+ case '2': n = 2; break;
+ case '3': n = 3; break;
+ case '4': n = 4; break;
+ case '5': n = 5; break;
+ case '6': n = 6; break;
+ case '7': n = 7; break;
+ case '8': n = 8; break;
+ case '9': n = 9; break;
+ case 'a': case 'A': n = 0xa; break;
+ case 'b': case 'B': n = 0xb; break;
+ case 'c': case 'C': n = 0xc; break;
+ case 'd': case 'D': n = 0xd; break;
+ case 'e': case 'E': n = 0xe; break;
+ case 'f': case 'F': n = 0xf; break;
+ default: n = -1; break;
+ }
+
+ if (n >= base || n < 0) {
+ *endptr = (void*)nptr;
+ break;
+ }
+
+ ret = (ret * base) + n;
+ nptr++;
+ }