/* ************************************************************************** */ /* LE - / */ /* / */ /* ft_atoi.c .:: .:/ . .:: */ /* +:+:+ +: +: +:+:+ */ /* By: rbousset +:+ +: +: +:+ */ /* #+# #+ #+ #+# */ /* Created: 2019/10/10 05:32:13 by rbousset #+# ## ## #+# */ /* Updated: 2019/10/15 02:16:20 by rbousset ### #+. /#+ ###.fr */ /* / */ /* / */ /* ************************************************************************** */ #include "libft.h" #include static uint8_t ft_isaspace(int c) { if (c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r' || c == ' ') return (1); return (0); } static int8_t ft_setsign(const char c) { int8_t sign; sign = 1; if (c == '-') sign = -1; return (sign); } static uint8_t ft_seti(const char *str) { uint8_t i; i = 0; while (ft_isaspace(str[i])) i++; return (i); } int ft_atoi(const char *str) { uint8_t i; int8_t sign; long nb; if (!str || !*str) return (0); i = ft_seti(str); nb = 0; sign = 1; if (str[i] == '+' || str[i] == '-') sign = ft_setsign(str[i++]); while (ft_isdigit(str[i])) { if (nb * 10 + (str[i] - 48) < nb) { if (sign < 0) return (0); return (-1); } nb = nb * 10 + (str[i] - 48); i++; } nb *= sign; return ((int)nb); }