mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-27 03:33:50 +00:00
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:
committed by
chrome-bot
parent
61c4ee12be
commit
c60eb7e735
@@ -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[]);
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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':
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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':
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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':
|
||||
|
||||
@@ -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++;
|
||||
|
||||
@@ -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':
|
||||
|
||||
Reference in New Issue
Block a user