In future patches I will need it.

Signed-off-by: Roman Pen <[email protected]>
---
 Makefile      |  2 +-
 lib/strntol.c | 31 +++++++++++++++++++++++++++++++
 lib/strntol.h |  6 ++++++
 3 files changed, 38 insertions(+), 1 deletion(-)
 create mode 100644 lib/strntol.c
 create mode 100644 lib/strntol.h

diff --git a/Makefile b/Makefile
index 24663a4..fe0da43 100644
--- a/Makefile
+++ b/Makefile
@@ -39,7 +39,7 @@ endif
 SOURCE :=      gettime.c ioengines.c init.c stat.c log.c time.c filesetup.c \
                eta.c verify.c memory.c io_u.c parse.c mutex.c options.c \
                lib/rbtree.c smalloc.c filehash.c profile.c debug.c lib/rand.c \
-               lib/num2str.c lib/ieee754.c engines/cpu.c \
+               lib/num2str.c lib/ieee754.c lib/strntol.c engines/cpu.c \
                engines/mmap.c engines/sync.c engines/null.c engines/net.c \
                memalign.c server.c client.c iolog.c backend.c libfio.c flow.c \
                cconv.c lib/prio_tree.c json.c lib/zipf.c lib/axmap.c \
diff --git a/lib/strntol.c b/lib/strntol.c
new file mode 100644
index 0000000..713f63b
--- /dev/null
+++ b/lib/strntol.c
@@ -0,0 +1,31 @@
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+
+long strntol(const char *str, size_t sz, char **end, int base)
+{
+       /* Expect that digit representation of LONG_MAX/MIN
+        * not greater than this buffer */
+       char buf[24];
+       long ret;
+       const char *beg = str;
+
+       /* Catch up leading spaces */
+       for (; beg && sz && *beg == ' '; beg++, sz--)
+               ;
+
+       if (!sz || sz >= sizeof(buf)) {
+               if (end)
+                       *end = (char *)str;
+               return 0;
+       }
+
+       memcpy(buf, beg, sz);
+       buf[sz] = '\0';
+       ret = strtol(buf, end, base);
+       if (ret == LONG_MIN || ret == LONG_MAX)
+               return ret;
+       if (end)
+               *end = (char *)str + (*end - buf);
+       return ret;
+}
diff --git a/lib/strntol.h b/lib/strntol.h
new file mode 100644
index 0000000..68f5d1b
--- /dev/null
+++ b/lib/strntol.h
@@ -0,0 +1,6 @@
+#ifndef FIO_STRNTOL_H
+#define FIO_STRNTOL_H
+
+long strntol(const char *str, size_t sz, char **end, int base);
+
+#endif
-- 
2.4.4

--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to