commit b90ca482a081d68be4cd7f0e82ad9479ce4d11ab
parent e077e0c00a4a1e00faeb2cc17fa23ae29f1dd8fc
Author: sin <sin@2f30.org>
Date: Fri, 30 Jan 2015 13:24:41 +0000
Add estrtoul()
Diffstat:
3 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
@@ -40,6 +40,7 @@ LIBUTILSRC =\
libutil/eregcomp.c\
libutil/estrtod.c\
libutil/estrtol.c\
+ libutil/estrtoul.c\
libutil/fnck.c\
libutil/getlines.c\
libutil/human.c\
diff --git a/libutil/estrtoul.c b/libutil/estrtoul.c
@@ -0,0 +1,26 @@
+/* See LICENSE file for copyright and license details. */
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "../util.h"
+
+unsigned long
+estrtoul(const char *s, int base)
+{
+ char *end;
+ unsigned long n;
+
+ errno = 0;
+ n = strtoul(s, &end, base);
+ if (*end != '\0') {
+ if (base == 0)
+ eprintf("%s: not an integer\n", s);
+ else
+ eprintf("%s: not a base %d integer\n", s, base);
+ }
+ if (errno != 0)
+ eprintf("%s:", s);
+
+ return n;
+}
diff --git a/util.h b/util.h
@@ -32,6 +32,7 @@ void weprintf(const char *, ...);
double estrtod(const char *);
long estrtol(const char *, int);
+unsigned long estrtoul(const char *, int);
#undef strcasestr
char *strcasestr(const char *, const char *);