fix args parsing
This commit is contained in:
@ -6,48 +6,52 @@
|
|||||||
/* By: tomoron <tomoron@student.42angouleme.fr> +#+ +:+ +#+ */
|
/* By: tomoron <tomoron@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/04/26 17:01:53 by tomoron #+# #+# */
|
/* 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"
|
#include "includes/ft_ping.h"
|
||||||
|
|
||||||
int get_set_int(char *arg, t_settings *set)
|
int get_set_int(char *arg, t_settings *set)
|
||||||
{
|
{
|
||||||
char *tmp;
|
long value;
|
||||||
|
char *end;
|
||||||
|
|
||||||
tmp = arg;
|
value = strtol(arg, &end, 10);
|
||||||
while(*tmp)
|
if(*end)
|
||||||
{
|
{
|
||||||
if(!isdigit(*tmp))
|
fprintf(stderr, "%s: invalid value (`%s' near `%s')\n", set->name, arg, end);
|
||||||
{
|
set->err = 1;
|
||||||
fprintf(stderr, "%s: invalid value (`%s' near `%s')\n", set->name, arg, tmp);
|
return(0);
|
||||||
set->err = 1;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
tmp++;
|
|
||||||
}
|
}
|
||||||
return(atoi(arg));
|
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((int) value);
|
||||||
}
|
}
|
||||||
|
|
||||||
double get_set_float(char *arg, t_settings *set)
|
double get_set_float(char *arg, t_settings *set)
|
||||||
{
|
{
|
||||||
char *tmp;
|
float value;
|
||||||
int point;
|
char *end;
|
||||||
|
|
||||||
tmp = arg;
|
value = strtol(arg, &end, 10);
|
||||||
while(*tmp)
|
if(*end)
|
||||||
{
|
{
|
||||||
if((!isdigit(*tmp) && *tmp != '.') || (*tmp == '.' && point))
|
fprintf(stderr, "%s: invalid value (`%s' near `%s')\n", set->name, arg, end);
|
||||||
{
|
set->err = 1;
|
||||||
fprintf(stderr, "%s: invalid value (`%s' near `%s')\n", set->name, arg, tmp);
|
return(0);
|
||||||
set->err = 1;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
if(*tmp == '.')
|
|
||||||
point = 1;
|
|
||||||
tmp++;
|
|
||||||
}
|
}
|
||||||
return(atof(arg));
|
if(errno == ERANGE)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: option value too big : %s", set->name, arg);
|
||||||
|
set->err = 1;
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
return(value);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int check_values(t_settings *set, char *name)
|
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);
|
fprintf(stderr, "%s: option value too small: %d\n", name, set->ttl);
|
||||||
return(0);
|
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);
|
fprintf(stderr, "%s: option value too big: %d\n", name, set->ttl);
|
||||||
return(0);
|
return(0);
|
||||||
@ -145,6 +149,9 @@ int parse_args(int argc, char **argv, t_settings *set)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(set->err)
|
||||||
|
return(1);
|
||||||
|
|
||||||
while (optind < argc)
|
while (optind < argc)
|
||||||
{
|
{
|
||||||
if (!add_host(set, argv[optind]))
|
if (!add_host(set, argv[optind]))
|
||||||
|
Reference in New Issue
Block a user