fix args parsing
This commit is contained in:
@ -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]))
|
||||
|
Reference in New Issue
Block a user