[Listener] Test numbers from the command line
Check the return value of relevant calls to strtol(). Force base 10 when reading integers from the command line.
This commit is contained in:
parent
89f0b583e3
commit
c4cf57c903
|
@ -529,6 +529,8 @@ int parse_command_line(int argc, char **argv)
|
||||||
int parse_main_options(int argc, char **argv)
|
int parse_main_options(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int opt ;
|
int opt ;
|
||||||
|
long arg_long ; // Integer value of optarg
|
||||||
|
char *endptr ; // Return value of strtol()
|
||||||
|
|
||||||
optind = 1 ; // Rewind argument parsing
|
optind = 1 ; // Rewind argument parsing
|
||||||
|
|
||||||
|
@ -559,7 +561,7 @@ int parse_main_options(int argc, char **argv)
|
||||||
break ;
|
break ;
|
||||||
case 'H' :
|
case 'H' :
|
||||||
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
||||||
SET_AUTOCALIBRATION_HELLO_PORT(strtol(optarg, NULL, 0)) ;
|
SET_AUTOCALIBRATION_HELLO_PORT(strtol(optarg, NULL, 10)) ;
|
||||||
#endif // OWLPS_LISTENER_USES_PTHREAD
|
#endif // OWLPS_LISTENER_USES_PTHREAD
|
||||||
break ;
|
break ;
|
||||||
case 'i' :
|
case 'i' :
|
||||||
|
@ -580,27 +582,27 @@ int parse_main_options(int argc, char **argv)
|
||||||
#endif // OWLPS_LISTENER_KEEPS_MONITOR
|
#endif // OWLPS_LISTENER_KEEPS_MONITOR
|
||||||
break ;
|
break ;
|
||||||
case 'l' :
|
case 'l' :
|
||||||
SET_LISTENING_PORT(strtol(optarg, NULL, 0)) ;
|
SET_LISTENING_PORT(strtol(optarg, NULL, 10)) ;
|
||||||
break ;
|
break ;
|
||||||
case 'm' :
|
case 'm' :
|
||||||
SET_MODE(optarg[0]) ;
|
SET_MODE(optarg[0]) ;
|
||||||
break ;
|
break ;
|
||||||
case 'n' :
|
case 'n' :
|
||||||
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
||||||
SET_AUTOCALIBRATION_NBPKT(strtol(optarg, NULL, 0)) ;
|
SET_AUTOCALIBRATION_NBPKT(strtol(optarg, NULL, 10)) ;
|
||||||
#endif // OWLPS_LISTENER_USES_PTHREAD
|
#endif // OWLPS_LISTENER_USES_PTHREAD
|
||||||
break ;
|
break ;
|
||||||
case 'O' :
|
case 'O' :
|
||||||
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
||||||
SET_AUTOCALIBRATION_ORDER_PORT(strtol(optarg, NULL, 0)) ;
|
SET_AUTOCALIBRATION_ORDER_PORT(strtol(optarg, NULL, 10)) ;
|
||||||
#endif // OWLPS_LISTENER_USES_PTHREAD
|
#endif // OWLPS_LISTENER_USES_PTHREAD
|
||||||
break ;
|
break ;
|
||||||
case 'p' :
|
case 'p' :
|
||||||
SET_AGGREGATION_PORT(strtol(optarg, NULL, 0)) ;
|
SET_AGGREGATION_PORT(strtol(optarg, NULL, 10)) ;
|
||||||
break ;
|
break ;
|
||||||
case 'P' :
|
case 'P' :
|
||||||
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
||||||
SET_AUTOCALIBRATION_REQUEST_PORT(strtol(optarg, NULL, 0)) ;
|
SET_AUTOCALIBRATION_REQUEST_PORT(strtol(optarg, NULL, 10)) ;
|
||||||
#endif // OWLPS_LISTENER_USES_PTHREAD
|
#endif // OWLPS_LISTENER_USES_PTHREAD
|
||||||
break ;
|
break ;
|
||||||
case 'q' :
|
case 'q' :
|
||||||
|
@ -614,12 +616,22 @@ int parse_main_options(int argc, char **argv)
|
||||||
break ;
|
break ;
|
||||||
case 't' :
|
case 't' :
|
||||||
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
||||||
SET_AUTOCALIBRATION_DELAY(strtol(optarg, NULL, 0)) ;
|
arg_long = strtol(optarg, &endptr, 10) ;
|
||||||
|
if (endptr != optarg)
|
||||||
|
SET_AUTOCALIBRATION_DELAY(arg_long) ;
|
||||||
|
else
|
||||||
|
fprintf(stderr, "Warning! Bad autocalibration_delay:"
|
||||||
|
" failing back to the default value.\n") ;
|
||||||
#endif // OWLPS_LISTENER_USES_PTHREAD
|
#endif // OWLPS_LISTENER_USES_PTHREAD
|
||||||
break ;
|
break ;
|
||||||
case 'T' :
|
case 'T' :
|
||||||
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
||||||
SET_AUTOCALIBRATION_HELLO_DELAY(strtol(optarg, NULL, 0)) ;
|
arg_long = strtol(optarg, &endptr, 10) ;
|
||||||
|
if (endptr != optarg)
|
||||||
|
SET_AUTOCALIBRATION_HELLO_DELAY(arg_long) ;
|
||||||
|
else
|
||||||
|
fprintf(stderr, "Warning! Bad autocalibration_hello_delay:"
|
||||||
|
" failing back to the default value.\n") ;
|
||||||
#endif // OWLPS_LISTENER_USES_PTHREAD
|
#endif // OWLPS_LISTENER_USES_PTHREAD
|
||||||
break ;
|
break ;
|
||||||
case 'v' :
|
case 'v' :
|
||||||
|
@ -641,28 +653,69 @@ int parse_main_options(int argc, char **argv)
|
||||||
|
|
||||||
|
|
||||||
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
#ifdef OWLPS_LISTENER_USES_PTHREAD
|
||||||
|
/* Parses remaining arguments (possible calibration data) */
|
||||||
int parse_calibration_data(int argc, char **argv)
|
int parse_calibration_data(int argc, char **argv)
|
||||||
{
|
{
|
||||||
/* Parse remaining arguments (possible calibration data) */
|
/* No more arguments to parse */
|
||||||
if (argc - optind != 0)
|
if (argc - optind == 0)
|
||||||
{
|
return 0 ;
|
||||||
|
|
||||||
|
/* Exactly 4 more arguments */
|
||||||
if (argc - optind == 4)
|
if (argc - optind == 4)
|
||||||
{
|
{
|
||||||
|
char *endptr ;
|
||||||
|
unsigned long arg_ulong ;
|
||||||
|
double arg_double ;
|
||||||
|
|
||||||
coordinates_provided = true ;
|
coordinates_provided = true ;
|
||||||
SET_MY_DIRECTION(strtoul(argv[optind++], NULL, 0)) ;
|
|
||||||
SET_MY_POSITION_X(strtod(argv[optind++], NULL)) ;
|
arg_ulong = strtoul(argv[optind], &endptr, 10) ;
|
||||||
SET_MY_POSITION_Y(strtod(argv[optind++], NULL)) ;
|
if (endptr == argv[optind])
|
||||||
SET_MY_POSITION_Z(strtod(argv[optind], NULL)) ;
|
|
||||||
}
|
|
||||||
else // Bad number of arguments
|
|
||||||
{
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"Error in calibration data: wrong direction!\n") ;
|
||||||
|
goto error ;
|
||||||
|
}
|
||||||
|
SET_MY_DIRECTION(arg_ulong) ;
|
||||||
|
optind++ ;
|
||||||
|
|
||||||
|
arg_double = strtod(argv[optind], &endptr) ;
|
||||||
|
if (endptr == argv[optind])
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"Error in calibration data: wrong X coordinate!\n") ;
|
||||||
|
goto error ;
|
||||||
|
}
|
||||||
|
SET_MY_POSITION_X(arg_double) ;
|
||||||
|
optind++ ;
|
||||||
|
|
||||||
|
arg_double = strtod(argv[optind], &endptr) ;
|
||||||
|
if (endptr == argv[optind])
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"Error in calibration data: wrong Y coordinate!\n") ;
|
||||||
|
goto error ;
|
||||||
|
}
|
||||||
|
SET_MY_POSITION_Y(arg_double) ;
|
||||||
|
optind++ ;
|
||||||
|
|
||||||
|
arg_double = strtod(argv[optind], &endptr) ;
|
||||||
|
if (endptr == argv[optind])
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"Error in calibration data: wrong Z coordinate!\n") ;
|
||||||
|
goto error ;
|
||||||
|
}
|
||||||
|
SET_MY_POSITION_Z(arg_double) ;
|
||||||
|
|
||||||
|
return 0 ; // No error occurred
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Bad number of arguments or parse error */
|
||||||
|
error:
|
||||||
print_usage() ;
|
print_usage() ;
|
||||||
owl_run = false ;
|
owl_run = false ;
|
||||||
return OWL_ERR_BAD_USAGE ;
|
return OWL_ERR_BAD_USAGE ;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0 ;
|
|
||||||
}
|
}
|
||||||
#endif // OWLPS_LISTENER_USES_PTHREAD
|
#endif // OWLPS_LISTENER_USES_PTHREAD
|
||||||
|
|
||||||
|
@ -772,7 +825,7 @@ int check_configuration()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GET_AUTOCALIBRATION_NBPKT() < 1)
|
if (GET_AUTOCALIBRATION_NBPKT() < 1)
|
||||||
fprintf(stderr, "Warning! autocalibration_nb_packets is null,"
|
fprintf(stderr, "Warning! autocalibration_nb_packets is zero,"
|
||||||
" no autocalibration request will be sent!\n") ;
|
" no autocalibration request will be sent!\n") ;
|
||||||
|
|
||||||
if (coordinates_provided)
|
if (coordinates_provided)
|
||||||
|
|
Loading…
Reference in New Issue