util/cbfstool: Allow use of non-ASCII longopt
CB:29744 ("util/cbfstool: Add optional argument ibb") added support for non-ASCII characters for long_options. However, there is a check later on which errors out since this character is not one of the commands[i].optstring. This change adds a function valid_opt() which does the following things: 1. Checks if the returned optchar is among the list of optstring supported by the command. 2. Checks if the returned optchar is a valid non-ASCII option. Currently, we do not maintain a list of non-ASCII options supported by each command. So, this function returns true if the optchar returned by getopt_long falls within the allowed range. Signed-off-by: Furquan Shaikh <furquan@google.com> Change-Id: I27a4f9af9850e4c892573202904fa9e5fbb64df6 Reviewed-on: https://review.coreboot.org/c/coreboot/+/40375 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
8e66b23b35
commit
c42cf911ad
|
@ -1295,7 +1295,9 @@ static const struct command commands[] = {
|
|||
|
||||
enum {
|
||||
/* begin after ASCII characters */
|
||||
LONGOPT_IBB = 256,
|
||||
LONGOPT_START = 256,
|
||||
LONGOPT_IBB = LONGOPT_START,
|
||||
LONGOPT_END,
|
||||
};
|
||||
|
||||
static struct option long_options[] = {
|
||||
|
@ -1491,6 +1493,23 @@ static void usage(char *name)
|
|||
);
|
||||
}
|
||||
|
||||
static bool valid_opt(size_t i, int c)
|
||||
{
|
||||
/* Check if it is one of the optstrings supported by the command. */
|
||||
if (strchr(commands[i].optstring, c))
|
||||
return true;
|
||||
|
||||
/*
|
||||
* Check if it is one of the non-ASCII characters. Currently, the
|
||||
* non-ASCII characters are only checked against the valid list
|
||||
* irrespective of the command.
|
||||
*/
|
||||
if (c >= LONGOPT_START && c < LONGOPT_END)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
size_t i;
|
||||
|
@ -1525,9 +1544,8 @@ int main(int argc, char **argv)
|
|||
}
|
||||
|
||||
/* Filter out illegal long options */
|
||||
if (strchr(commands[i].optstring, c) == NULL) {
|
||||
/* TODO maybe print actual long option instead */
|
||||
ERROR("%s: invalid option -- '%c'\n",
|
||||
if (!valid_opt(i, c)) {
|
||||
ERROR("%s: invalid option -- '%d'\n",
|
||||
argv[0], c);
|
||||
c = '?';
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue