1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-03-10 16:58:47 +03:00

commands: cheap optimisation for parser

Some low-hanging fruits to cut of signification number of strcmp calls.
This commit is contained in:
Zdenek Kabelac 2017-02-17 11:52:37 +01:00
parent 298b11aed1
commit 80b717af0c

View File

@ -495,31 +495,32 @@ static struct command_name *find_command_name(const char *name)
{
int i;
if (!islower(name[0]))
return NULL; /* Commands starts with lower-case */
for (i = 0; i < MAX_COMMAND_NAMES; i++) {
if (!command_names[i].name)
break;
if (!strcmp(command_names[i].name, name))
return &command_names[i];
}
return NULL;
}
static const char *is_command_name(char *str)
{
int i;
const struct command_name *c;
if ((c = find_command_name(str)))
return c->name;
for (i = 0; i < MAX_COMMAND_NAMES; i++) {
if (!command_names[i].name)
break;
if (!strcmp(command_names[i].name, str))
return command_names[i].name;
}
return NULL;
}
static int is_opt_name(char *str)
{
if (!strncmp(str, "--", 2))
if ((str[0] == '-') && (str[1] == '-'))
return 1;
if ((str[0] == '-') && (str[1] != '-'))
@ -535,18 +536,15 @@ static int is_opt_name(char *str)
static int is_pos_name(char *str)
{
if (!strncmp(str, "VG", 2))
return 1;
if (!strncmp(str, "LV", 2))
return 1;
if (!strncmp(str, "PV", 2))
return 1;
if (!strncmp(str, "Tag", 3))
return 1;
if (!strncmp(str, "String", 6))
return 1;
if (!strncmp(str, "Select", 6))
return 1;
switch (str[0]) {
case 'V': return (str[1] == 'G'); /* VG */
case 'L': return (str[1] == 'V'); /* LV */
case 'P': return (str[1] == 'V'); /* PV */
case 'T': return (strncmp(str, "Tag", 3) == 0);
case 'S': return ((strncmp(str, "String", 6) == 0) ||
(strncmp(str, "Select", 6) == 0));
}
return 0;
}