cgpt: unify cli int parsing error checking

Most of the cmd funcs had the same logic copied & pasted multiple times
over.  Unify them into a common header.

BUG=chromium:644845
TEST=precq passes
TEST=passing invalid args to some funcs is caught
BRANCH=None

Change-Id: Ib7212bcbb17da1135b2508a52910aac37ee8e6cd
Reviewed-on: https://chromium-review.googlesource.com/382691
Commit-Ready: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
This commit is contained in:
Mike Frysinger
2016-09-07 20:23:46 -04:00
committed by chrome-bot
parent 61c4ee12be
commit c60eb7e735
10 changed files with 43 additions and 121 deletions

View File

@@ -187,6 +187,8 @@ void Error(const char *format, ...);
void Warning(const char *format, ...);
// Command functions.
int check_int_parse(char option, const char *buf);
int check_int_limit(char option, int val, int low, int high);
int cmd_show(int argc, char *argv[]);
int cmd_repair(int argc, char *argv[]);
int cmd_create(int argc, char *argv[]);

View File

@@ -51,6 +51,22 @@ void Warning(const char *format, ...) {
va_end(ap);
}
int check_int_parse(char option, const char *buf) {
if (!*optarg || (buf && *buf)) {
Error("invalid argument to -%c: \"%s\"\n", option, optarg);
return 1;
}
return 0;
}
int check_int_limit(char option, int val, int low, int high) {
if (val < low || val > high) {
Error("value for -%c must be between %d and %d", option, low, high);
return 1;
}
return 0;
}
int CheckValid(const struct drive *drive) {
if ((drive->gpt.valid_headers != MASK_BOTH) ||
(drive->gpt.valid_entries != MASK_BOTH)) {

View File

@@ -51,37 +51,21 @@ int cmd_add(int argc, char *argv[]) {
{
case 'D':
params.drive_size = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'i':
params.partition = (uint32_t)strtoul(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'b':
params.set_begin = 1;
params.begin = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 's':
params.set_size = 1;
params.size = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 't':
params.set_type = 1;
@@ -104,51 +88,25 @@ int cmd_add(int argc, char *argv[]) {
case 'S':
params.set_successful = 1;
params.successful = (uint32_t)strtoul(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
if (params.successful < 0 || params.successful > 1) {
Error("value for -%c must be between 0 and 1", c);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
errorcnt += check_int_limit(c, params.successful, 0, 1);
break;
case 'T':
params.set_tries = 1;
params.tries = (uint32_t)strtoul(optarg, &e, 0);
if (!*optarg || (e && *e))
{
fprintf(stderr, "%s: invalid argument to -%c: \"%s\"\n",
progname, c, optarg);
errorcnt++;
}
if (params.tries < 0 || params.tries > 15) {
Error("value for -%c must be between 0 and 15", c);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
errorcnt += check_int_limit(c, params.tries, 0, 15);
break;
case 'P':
params.set_priority = 1;
params.priority = (uint32_t)strtoul(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
if (params.priority < 0 || params.priority > 15) {
Error("value for -%c must be between 0 and 15", c);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
errorcnt += check_int_limit(c, params.priority, 0, 15);
break;
case 'A':
params.set_raw = 1;
params.raw_value = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'h':

View File

@@ -43,19 +43,11 @@ int cmd_boot(int argc, char *argv[]) {
{
case 'D':
params.drive_size = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'i':
params.partition = (uint32_t)strtoul(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'b':
params.bootfile = optarg;

View File

@@ -39,22 +39,14 @@ int cmd_create(int argc, char *argv[]) {
{
case 'D':
params.drive_size = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'z':
params.zap = 1;
break;
case 'p':
params.padding = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'h':
Usage();

View File

@@ -84,11 +84,7 @@ int cmd_find(int argc, char *argv[]) {
{
case 'D':
params.drive_size = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'v':
params.verbose++;
@@ -134,10 +130,7 @@ int cmd_find(int argc, char *argv[]) {
break;
case 'O':
params.matchoffset = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e)) {
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'h':

View File

@@ -38,11 +38,7 @@ int cmd_legacy(int argc, char *argv[]) {
{
case 'D':
params.drive_size = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'e':
if (params.mode) {

View File

@@ -52,34 +52,19 @@ int cmd_prioritize(int argc, char *argv[]) {
{
case 'D':
params.drive_size = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'i':
params.set_partition = (uint32_t)strtoul(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'f':
params.set_friends = 1;
break;
case 'P':
params.max_priority = (int)strtol(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
if (params.max_priority < 1 || params.max_priority > 15) {
Error("value for -%c must be between 1 and 15\n", c);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
errorcnt += check_int_limit(c, params.max_priority, 1, 15);
break;
case 'h':

View File

@@ -37,11 +37,7 @@ int cmd_repair(int argc, char *argv[]) {
{
case 'D':
params.drive_size = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'v':
params.verbose++;

View File

@@ -52,11 +52,7 @@ int cmd_show(int argc, char *argv[]) {
{
case 'D':
params.drive_size = strtoull(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'n':
params.numeric = 1;
@@ -69,11 +65,7 @@ int cmd_show(int argc, char *argv[]) {
break;
case 'i':
params.partition = (uint32_t)strtoul(optarg, &e, 0);
if (!*optarg || (e && *e))
{
Error("invalid argument to -%c: \"%s\"\n", c, optarg);
errorcnt++;
}
errorcnt += check_int_parse(c, e);
break;
case 'b':
case 's':