orton_runner/lib/my_stdlib/my_strto.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);
}