From: Boram Park Date: Wed, 21 Jun 2017 01:34:51 +0000 (+0900) Subject: e_info: use strtol to check args for punch option X-Git-Tag: accepted/tizen/unified/20170703.064027~23 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F77%2F135077%2F2;p=platform%2Fupstream%2Fenlightenment.git e_info: use strtol to check args for punch option Change-Id: I516f1faee197a4fbb796b39e68d0196a4d94d34b --- diff --git a/src/bin/e_info_client.c b/src/bin/e_info_client.c index d550d0c..04e76c4 100644 --- a/src/bin/e_info_client.c +++ b/src/bin/e_info_client.c @@ -1961,38 +1961,58 @@ _e_info_client_proc_punch(int argc, char **argv) { int onoff = 0, x = 0, y = 0, w = 0, h = 0; int a = 0, r = 0, g = 0, b = 0; - char delims_geom[] = { 'x', '+', '+', '\0' }; - int vals_geom[] = { 0, 0, 0, 0 }; - char delims_col[] = { ',', ',', ',', '\0' }; - int vals_col[] = { 0, 0, 0, 0 }; - Eina_Bool res; + char *arg, *end; + + EINA_SAFETY_ON_FALSE_RETURN(argc >= 3); + EINA_SAFETY_ON_NULL_RETURN(argv[2]); - EINA_SAFETY_ON_FALSE_GOTO(argc >= 3, wrong_args); - EINA_SAFETY_ON_NULL_GOTO(argv[2], wrong_args); - EINA_SAFETY_ON_NULL_GOTO(argv[3], wrong_args); + arg = argv[2]; + if (!strncmp(arg, "on", 2)) + onoff = 1; + + if (argv[3]) + { + arg = argv[3]; + w = strtoul(arg, &end, 10); + EINA_SAFETY_ON_FALSE_GOTO(*end == 'x', failed); - if (!strncmp(argv[2], "on", 2)) onoff = 1; + arg = end + 1; + h = strtoul(arg, &end, 10); - res = _opt_parse(argv[3], delims_geom, vals_geom, (sizeof(vals_geom) / sizeof(int))); - EINA_SAFETY_ON_FALSE_GOTO(res, wrong_args); + if (*end == '+' || *end == '-') + { + arg = end + 1; + x = strtol(arg, &end, 10); + EINA_SAFETY_ON_FALSE_GOTO(*end == '+' || *end == '-', failed); - w = vals_geom[0]; h = vals_geom[1]; - x = vals_geom[2]; y = vals_geom[3]; + arg = end + 1; + y = strtol(arg, &end, 10); + } + } - if (argc == 5) + if (argv[4]) { - EINA_SAFETY_ON_NULL_GOTO(argv[4], wrong_args); + arg = argv[4]; + + a = strtoul(arg, &end, 10); + EINA_SAFETY_ON_FALSE_GOTO(*end == ',', failed); + + arg = end + 1; + r = strtoul(arg, &end, 10); + EINA_SAFETY_ON_FALSE_GOTO(*end == ',', failed); - res = _opt_parse(argv[4], delims_col, vals_col, (sizeof(vals_col) / sizeof(int))); - EINA_SAFETY_ON_FALSE_GOTO(res, wrong_args); + arg = end + 1; + g = strtoul(arg, &end, 10); + EINA_SAFETY_ON_FALSE_GOTO(*end == ',', failed); - a = vals_col[0]; r = vals_col[1]; g = vals_col[2]; b = vals_col[3]; + arg = end + 1; + b = strtoul(arg, &end, 10); } _e_info_client_eldbus_message_with_args("punch", NULL, "iiiiiiiii", onoff, x, y, w, h, a, r, g, b); return; -wrong_args: +failed: printf("wrong geometry arguments(x++\n"); printf("wrong color arguments(,,,)\n"); }