stardis

Perform coupled heat transfer calculations
git clone git://git.meso-star.fr/stardis.git
Log | Files | Refs | README | LICENSE

commit b36a282c72b8db3f5ee14bf4693daff989e8af30
parent 90c024133b71abe3785d81818aa79bc0bf08e447
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Tue, 30 Nov 2021 16:19:45 +0100

Improve parsing for some positive options args

Diffstat:
Msrc/stardis-args.c | 49++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 40 insertions(+), 9 deletions(-)

diff --git a/src/stardis-args.c b/src/stardis-args.c @@ -523,10 +523,10 @@ parse_args break; } case 'n': { - unsigned long n; - res = cstr_to_ulong(optarg, &n); + long n; + res = cstr_to_long(optarg, &n); if(res != RES_OK - || n == 0) + || n <= 0) { if(res == RES_OK) res = RES_BAD_ARG; logger_print(args->logger, LOG_ERROR, @@ -534,7 +534,7 @@ parse_args opt, optarg); goto error; } - args->samples = n; + args->samples = (unsigned long)n; n_used = 1; break; } @@ -626,8 +626,9 @@ parse_args break; } - case 't': - res = cstr_to_uint(optarg, &args->nthreads); + case 't': { + int nt; + res = cstr_to_int(optarg, &nt); if(res != RES_OK || args->nthreads <= 0) { @@ -637,7 +638,9 @@ parse_args opt, optarg); goto error; } + args->nthreads = (unsigned)nt; break; + } case 'v': if(args->mode & USE_STDOUT_MODES) { @@ -858,7 +861,15 @@ parse_camera } } else if(strcasecmp(opt[0], "FOV") == 0) { - ERR(cstr_to_double(opt[1], &cam->fov)); + res = cstr_to_double(opt[1], &cam->fov); + if(res != RES_OK + || cam->fov <= 0) + { + if(res == RES_OK) res = RES_BAD_ARG; + logger_print((logger), LOG_ERROR, + "Invalid %s option: %s\n", opt[0], opt[1]); + goto error; + } } else if(strcasecmp(opt[0], "UP") == 0) { ERR(cstr_to_list_double(opt[1], ',', cam->up, &len, 3)); @@ -873,12 +884,32 @@ parse_camera } else if(strcasecmp(opt[0], "IMG") == 0) { unsigned img_sz[2]; - ERR(cstr_to_list_uint(opt[1], 'x', img_sz, &len, 2)); + res = cstr_to_list_uint(opt[1], 'x', img_sz, &len, 2); + if(res != RES_OK + /* mimic cstr_to_list_int() possible behaviour; but it doesnt exist */ + || img_sz[0] == 0 || img_sz[0] > INT_MAX + || img_sz[1] == 0 || img_sz[1] > INT_MAX) + { + if(res == RES_OK) res = RES_BAD_ARG; + logger_print((logger), LOG_ERROR, + "Invalid %s option: %s\n", opt[0], opt[1]); + goto error; + } cam->img_width = img_sz[0]; cam->img_height = img_sz[1]; } else if(strcasecmp(opt[0], "SPP") == 0) { - ERR(cstr_to_uint(opt[1], &cam->spp)); + int ssp; + res = cstr_to_int(opt[1], &ssp); + if(res != RES_OK + || ssp <= 0) + { + if(res == RES_OK) res = RES_BAD_ARG; + logger_print((logger), LOG_ERROR, + "Invalid %s option: %s\n", opt[0], opt[1]); + goto error; + } + cam->spp = (unsigned)ssp; } else { logger_print(logger, LOG_ERROR, "Unexpected option for rendering mode: %s.\n",