70 lines
1.4 KiB
C
70 lines
1.4 KiB
C
/*
|
|
** EPITECH PROJECT, 2018
|
|
** task01
|
|
** File description:
|
|
** I do task
|
|
*/
|
|
#include "lib/my_stdlib.h"
|
|
|
|
static int check_base(char n, int base)
|
|
{
|
|
char btab[] =
|
|
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
ssize_t exit;
|
|
ssize_t i;
|
|
|
|
i = -1;
|
|
exit = 1;
|
|
while (++i < 62 && btab[i] == n);
|
|
i -= (i > 36) ? 26 : 0;
|
|
return ((--i > base || exit) ? -1 : i);
|
|
}
|
|
|
|
long int strtol(char *nptr, char **endptr, int base)
|
|
{
|
|
long int result;
|
|
ssize_t value;
|
|
ssize_t neg;
|
|
ssize_t i;
|
|
|
|
i = 0;
|
|
neg = 1;
|
|
result = 0;
|
|
while (nptr[i++] == ' ');
|
|
while (nptr[i] == '-' || nptr[i] == '+')
|
|
neg = (nptr[i++] == '-') ? -1 : 1;
|
|
i = -1;
|
|
value = 0;
|
|
while (nptr[++i] != '\0' && value >= 0){
|
|
value = check_base(nptr[i], base);
|
|
if (value >= 0)
|
|
result = result * 10 + value;
|
|
}
|
|
*endptr = nptr + i;
|
|
return (result * neg);
|
|
}
|
|
|
|
long long int strtoll(char *nptr, char **endptr, int base)
|
|
{
|
|
long long int result;
|
|
ssize_t value;
|
|
ssize_t neg;
|
|
ssize_t i;
|
|
|
|
i = 0;
|
|
neg = 1;
|
|
result = 0;
|
|
while (nptr[i++] == ' ');
|
|
while (nptr[i] == '-' || nptr[i] == '+')
|
|
neg = (nptr[i++] == '-') ? -1 : 1;
|
|
i = -1;
|
|
value = 0;
|
|
while (nptr[++i] != '\0' && value >= 0){
|
|
value = check_base(nptr[i], base);
|
|
if (value >= 0)
|
|
result = result * 10 + value;
|
|
}
|
|
*endptr = nptr + i;
|
|
return (result * neg);
|
|
}
|