blob: c3a55a117801f56fbe39a40e9b09327968cbc3e0 [file] [log] [blame]
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include "strntol.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 *)beg + (*end - buf);
return ret;
}