aboutsummaryrefslogtreecommitdiff
path: root/src/parse/parse_color.c
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-02-04 05:34:27 +0100
committerCharles <sircharlesaze@gmail.com>2020-02-04 05:34:27 +0100
commit3b224458a5d539bbe00318d939c9a099f3f158e1 (patch)
tree1e8533c49647120e2239904e2e0b167b408043cc /src/parse/parse_color.c
parentc8de182e9fa0c8a2674bf2f13d2ed9f500607ebd (diff)
downloadcub3d-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.c32
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);
}