diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-02-04 05:34:27 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-02-04 05:34:27 +0100 |
| commit | 3b224458a5d539bbe00318d939c9a099f3f158e1 (patch) | |
| tree | 1e8533c49647120e2239904e2e0b167b408043cc /src/parse/parse_color.c | |
| parent | c8de182e9fa0c8a2674bf2f13d2ed9f500607ebd (diff) | |
| download | cub3d-3b224458a5d539bbe00318d939c9a099f3f158e1.tar.gz cub3d-3b224458a5d539bbe00318d939c9a099f3f158e1.tar.bz2 cub3d-3b224458a5d539bbe00318d939c9a099f3f158e1.zip | |
better parsing
Diffstat (limited to 'src/parse/parse_color.c')
| -rw-r--r-- | src/parse/parse_color.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/src/parse/parse_color.c b/src/parse/parse_color.c index 5385c0c..d3cee05 100644 --- a/src/parse/parse_color.c +++ b/src/parse/parse_color.c @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/11 09:52:34 by cacharle #+# #+# */ -/* Updated: 2020/02/04 02:26:46 by cacharle ### ########.fr */ +/* Updated: 2020/02/04 05:12:42 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,42 +14,48 @@ t_bool parse_ceilling_color(t_state *state, char *line) { - int tmp; + long tmp; + errno = 0; state->ceilling_color.hexcode = 0x0; - if ((tmp = ft_atoi(line)) > 255 || tmp < 0) // cant do atoi due to overflow stuff, use ft_strtol + if ((tmp = ft_strtol(line, &line, 10)) > 255 || tmp < 0) return (FALSE); state->ceilling_color.rgb.r = (t_byte)tmp; - if ((line = ft_strchr(line, ',') + 1) == NULL) + if (*line++ != ',' || !ft_isdigit(*line)) return (FALSE); - if ((tmp = ft_atoi(line)) > 255 || tmp < 0) + if ((tmp = ft_strtol(line, &line, 10)) > 255 || tmp < 0) return (FALSE); state->ceilling_color.rgb.g = (t_byte)tmp; - if ((line = ft_strchr(line, ',') + 1) == NULL) + if (*line++ != ',' || !ft_isdigit(*line)) return (FALSE); - if ((tmp = ft_atoi(line)) > 255 || tmp < 0) + if ((tmp = ft_strtol(line, &line, 10)) > 255 || tmp < 0) return (FALSE); state->ceilling_color.rgb.b = (t_byte)tmp; + if (errno != 0) + return (FALSE); return (TRUE); } t_bool parse_floor_color(t_state *state, char *line) { - int tmp; + long tmp; + errno = 0; state->floor_color.hexcode = 0x0; - if ((tmp = ft_atoi(line)) > 255 || tmp < 0) + if ((tmp = ft_strtol(line, &line, 10)) > 255 || tmp < 0) return (FALSE); state->floor_color.rgb.r = (t_byte)tmp; - if ((line = ft_strchr(line, ',') + 1) == NULL) + if (*line++ != ',' || !ft_isdigit(*line)) return (FALSE); - if ((tmp = ft_atoi(line)) > 255 || tmp < 0) + if ((tmp = ft_strtol(line, &line, 10)) > 255 || tmp < 0) return (FALSE); state->floor_color.rgb.g = (t_byte)tmp; - if ((line = ft_strchr(line, ',') + 1) == NULL) + if (*line++ != ',' || !ft_isdigit(*line)) return (FALSE); - if ((tmp = ft_atoi(line)) > 255 || tmp < 0) + if ((tmp = ft_strtol(line, &line, 10)) > 255 || tmp < 0) return (FALSE); state->floor_color.rgb.b = (t_byte)tmp; + if (errno != 0) + return (FALSE); return (TRUE); } |
