size_t page_size(void);
size_t page_ptr(size_t object_offset, size_t object_size, size_t *offset, size_t *mmap_offset);
+int safe_strtoll_base(const char *str, long long *val, int base);
+static inline int safe_strtoll(const char *str, long long *val) { return safe_strtoll_base(str, val, 0); }
int safe_strtol_base(const char *str, long *val, int base);
static inline int safe_strtol(const char *str, long *val) { return safe_strtol_base(str, val, 0); }
return err;
}
-static int safe_strtoll(const char *str, long long *val)
+int safe_strtoll_base(const char *str, long long *val, int base)
{
- long long v;
- int endidx;
+ char *end;
+ long v;
if (!*str)
return -EINVAL;
errno = 0;
- if (sscanf(str, "%lli%n", &v, &endidx) < 1)
- return -EINVAL;
- if (str[endidx])
+ v = strtoll(str, &end, base);
+ if (errno)
+ return -errno;
+ if (*end)
return -EINVAL;
*val = v;
return 0;