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