summaryrefslogtreecommitdiffstats
path: root/lib/atoi/str2i.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/atoi/str2i.h')
-rw-r--r--lib/atoi/str2i.h33
1 files changed, 7 insertions, 26 deletions
diff --git a/lib/atoi/str2i.h b/lib/atoi/str2i.h
index 6bf79fc4..b72c509f 100644
--- a/lib/atoi/str2i.h
+++ b/lib/atoi/str2i.h
@@ -9,49 +9,30 @@
#include <config.h>
-#include <stdlib.h>
-#include <errno.h>
+#include <limits.h>
+#include <stddef.h>
-#include "atoi/str2i.h"
-#include "atoi/strtou_noneg.h"
+#include "atoi/a2i.h"
#include "attr.h"
-ATTR_ACCESS(write_only, 2)
+ATTR_STRING(1) ATTR_ACCESS(write_only, 2)
inline int getlong(const char *restrict s, long *restrict n);
-ATTR_ACCESS(write_only, 2)
+ATTR_STRING(1) ATTR_ACCESS(write_only, 2)
inline int getulong(const char *restrict s, unsigned long *restrict n);
inline int
getlong(const char *restrict s, long *restrict n)
{
- char *endp;
- long val;
-
- errno = 0;
- val = strtol(s, &endp, 0);
- if (('\0' == *s) || ('\0' != *endp) || (0 != errno))
- return -1;
-
- *n = val;
- return 0;
+ return a2sl(n, s, NULL, 0, LONG_MIN, LONG_MAX);
}
inline int
getulong(const char *restrict s, unsigned long *restrict n)
{
- char *endp;
- unsigned long val;
-
- errno = 0;
- val = strtoul_noneg(s, &endp, 0);
- if (('\0' == *s) || ('\0' != *endp) || (0 != errno))
- return -1;
-
- *n = val;
- return 0;
+ return a2ul(n, s, NULL, 0, 0, ULONG_MAX);
}