fix args parsing

This commit is contained in:
2025-08-20 17:08:18 +02:00
parent 64e027a391
commit 69b9ec2240

View File

@ -6,48 +6,52 @@
/* By: tomoron <tomoron@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/26 17:01:53 by tomoron #+# #+# */
/* Updated: 2025/08/20 16:42:02 by tomoron ### ########.fr */
/* Updated: 2025/08/20 17:07:58 by tomoron ### ########.fr */
/* */
/* ************************************************************************** */
#include "includes/ft_ping.h"
int get_set_int(char *arg, t_settings *set)
{
char *tmp;
long value;
char *end;
tmp = arg;
while(*tmp)
value = strtol(arg, &end, 10);
if(*end)
{
if(!isdigit(*tmp))
{
fprintf(stderr, "%s: invalid value (`%s' near `%s')\n", set->name, arg, tmp);
fprintf(stderr, "%s: invalid value (`%s' near `%s')\n", set->name, arg, end);
set->err = 1;
return(0);
}
tmp++;
if(errno == ERANGE || value > INT32_MAX || value < INT32_MIN)
{
fprintf(stderr, "%s: option value too big : %s", set->name, arg);
set->err = 1;
return(0);
}
return(atoi(arg));
return((int) value);
}
double get_set_float(char *arg, t_settings *set)
{
char *tmp;
int point;
float value;
char *end;
tmp = arg;
while(*tmp)
value = strtol(arg, &end, 10);
if(*end)
{
if((!isdigit(*tmp) && *tmp != '.') || (*tmp == '.' && point))
{
fprintf(stderr, "%s: invalid value (`%s' near `%s')\n", set->name, arg, tmp);
fprintf(stderr, "%s: invalid value (`%s' near `%s')\n", set->name, arg, end);
set->err = 1;
return(0);
}
if(*tmp == '.')
point = 1;
tmp++;
if(errno == ERANGE)
{
fprintf(stderr, "%s: option value too big : %s", set->name, arg);
set->err = 1;
return(0);
}
return(atof(arg));
return(value);
}
int check_values(t_settings *set, char *name)
@ -59,7 +63,7 @@ int check_values(t_settings *set, char *name)
fprintf(stderr, "%s: option value too small: %d\n", name, set->ttl);
return(0);
}
else if (set->ttl >= 256)
else if (set->ttl >= 256 || set->ttl < 0)
{
fprintf(stderr, "%s: option value too big: %d\n", name, set->ttl);
return(0);
@ -145,6 +149,9 @@ int parse_args(int argc, char **argv, t_settings *set)
}
}
if(set->err)
return(1);
while (optind < argc)
{
if (!add_host(set, argv[optind]))