27 lines
513 B
C
27 lines
513 B
C
#include "stdlib_p.h"
|
|
#include <errno.h>
|
|
|
|
long int strtol(char const * restrict ptr, char ** restrict endptr, int base)
|
|
{
|
|
long n = 0;
|
|
if(endptr)
|
|
*endptr = (char *)ptr;
|
|
|
|
struct __scanf_input in = {
|
|
.str = ptr,
|
|
.fp = NULL,
|
|
.readmaxlength = -1,
|
|
.currentlength = 0,
|
|
.readsofar = 0,
|
|
};
|
|
__scanf_start(&in);
|
|
int err = __strto_int(&in, base, &n, NULL, false);
|
|
__scanf_end(&in);
|
|
|
|
if(err != 0)
|
|
errno = (err == EOF) ? EINVAL : err;
|
|
if(err != EINVAL && endptr)
|
|
*endptr = (char *)in.str;
|
|
return n;
|
|
}
|