mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-10 16:58:47 +03:00
commands: use nul for EOL for compiled-in buffer
Use \0 as EOL in compiled-in syntax description to avoid unnecessary line copy that just replaced \n with \0. Also use already splitted lines when possible.
This commit is contained in:
parent
50ad27a4ab
commit
b951f81db5
@ -185,8 +185,8 @@ command-lines-input.h: $(srcdir)/command-lines.in $(srcdir)/license.inc Makefile
|
|||||||
( cat $(srcdir)/license.inc && \
|
( cat $(srcdir)/license.inc && \
|
||||||
echo "/* Do not edit. This file is generated by the Makefile. */" && \
|
echo "/* Do not edit. This file is generated by the Makefile. */" && \
|
||||||
printf "static const char _command_input[] =\n\n\"" && \
|
printf "static const char _command_input[] =\n\n\"" && \
|
||||||
$(AWK) 'BEGIN {ORS = "\\n\"\n\""} !/^#/ && !/---/ && !/^$$/' $(srcdir)/command-lines.in && \
|
$(AWK) 'BEGIN {ORS = "\\0\"\n\""} !/^#/ && !/---/ && !/^$$/' $(srcdir)/command-lines.in && \
|
||||||
printf '\\n\\n";\n' \
|
printf '\\0\\0";\n' \
|
||||||
) > $@
|
) > $@
|
||||||
|
|
||||||
$(SOURCES:%.c=%.d) $(SOURCES2:%.c=%.d): command-lines-input.h command-count.h
|
$(SOURCES:%.c=%.d) $(SOURCES2:%.c=%.d): command-lines-input.h command-count.h
|
||||||
|
@ -367,7 +367,7 @@ static int _val_str_to_num(char *str)
|
|||||||
|
|
||||||
#define MAX_LONG_OPT_NAME_LEN 32
|
#define MAX_LONG_OPT_NAME_LEN 32
|
||||||
|
|
||||||
static int _opt_str_to_num(struct command *cmd, char *str)
|
static int _opt_str_to_num(struct command *cmd, const char *str)
|
||||||
{
|
{
|
||||||
char long_name[MAX_LONG_OPT_NAME_LEN];
|
char long_name[MAX_LONG_OPT_NAME_LEN];
|
||||||
char *p = NULL;
|
char *p = NULL;
|
||||||
@ -450,7 +450,7 @@ int command_id_to_enum(const char *str)
|
|||||||
|
|
||||||
/* "lv_is_prop" to is_prop_LVP */
|
/* "lv_is_prop" to is_prop_LVP */
|
||||||
|
|
||||||
static int _lvp_name_to_enum(struct command *cmd, char *str)
|
static int _lvp_name_to_enum(struct command *cmd, const char *str)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -466,7 +466,7 @@ static int _lvp_name_to_enum(struct command *cmd, char *str)
|
|||||||
|
|
||||||
/* "type" to type_LVT */
|
/* "type" to type_LVT */
|
||||||
|
|
||||||
static int _lvt_name_to_enum(struct command *cmd, char *str)
|
static int _lvt_name_to_enum(struct command *cmd, const char *str)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -482,7 +482,7 @@ static int _lvt_name_to_enum(struct command *cmd, char *str)
|
|||||||
|
|
||||||
/* LV_<type> to <type>_LVT */
|
/* LV_<type> to <type>_LVT */
|
||||||
|
|
||||||
static int _lv_to_enum(struct command *cmd, char *name)
|
static int _lv_to_enum(struct command *cmd, const char *name)
|
||||||
{
|
{
|
||||||
return _lvt_name_to_enum(cmd, name + 3);
|
return _lvt_name_to_enum(cmd, name + 3);
|
||||||
}
|
}
|
||||||
@ -1208,7 +1208,7 @@ static void _add_required_line(struct cmd_context *cmdtool, struct command *cmd,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _add_flags(struct command *cmd, char *line)
|
static void _add_flags(struct command *cmd, const char *line)
|
||||||
{
|
{
|
||||||
if (strstr(line, "SECONDARY_SYNTAX"))
|
if (strstr(line, "SECONDARY_SYNTAX"))
|
||||||
cmd->cmd_flags |= CMD_FLAG_SECONDARY_SYNTAX;
|
cmd->cmd_flags |= CMD_FLAG_SECONDARY_SYNTAX;
|
||||||
@ -1216,13 +1216,9 @@ static void _add_flags(struct command *cmd, char *line)
|
|||||||
cmd->cmd_flags |= CMD_FLAG_PREVIOUS_SYNTAX;
|
cmd->cmd_flags |= CMD_FLAG_PREVIOUS_SYNTAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _add_autotype(struct cmd_context *cmdtool, struct command *cmd, char *line)
|
static void _add_autotype(struct cmd_context *cmdtool, struct command *cmd,
|
||||||
|
int line_argc, char *line_argv[])
|
||||||
{
|
{
|
||||||
int line_argc;
|
|
||||||
char *line_argv[MAX_LINE_ARGC];
|
|
||||||
|
|
||||||
_split_line(line, &line_argc, line_argv, ' ');
|
|
||||||
|
|
||||||
if (cmd->autotype)
|
if (cmd->autotype)
|
||||||
cmd->autotype2 = dm_pool_strdup(cmdtool->libmem, line_argv[1]);
|
cmd->autotype2 = dm_pool_strdup(cmdtool->libmem, line_argv[1]);
|
||||||
else
|
else
|
||||||
@ -1231,12 +1227,11 @@ static void _add_autotype(struct cmd_context *cmdtool, struct command *cmd, char
|
|||||||
|
|
||||||
#define MAX_RULE_OPTS 64
|
#define MAX_RULE_OPTS 64
|
||||||
|
|
||||||
static void _add_rule(struct cmd_context *cmdtool, struct command *cmd, char *line)
|
static void _add_rule(struct cmd_context *cmdtool, struct command *cmd,
|
||||||
|
int line_argc, char *line_argv[])
|
||||||
{
|
{
|
||||||
struct cmd_rule *rule;
|
struct cmd_rule *rule;
|
||||||
char *line_argv[MAX_LINE_ARGC];
|
const char *arg;
|
||||||
char *arg;
|
|
||||||
int line_argc;
|
|
||||||
int i, lvt_enum, lvp_enum;
|
int i, lvt_enum, lvp_enum;
|
||||||
int check = 0;
|
int check = 0;
|
||||||
|
|
||||||
@ -1248,8 +1243,6 @@ static void _add_rule(struct cmd_context *cmdtool, struct command *cmd, char *li
|
|||||||
|
|
||||||
rule = &cmd->rules[cmd->rule_count++];
|
rule = &cmd->rules[cmd->rule_count++];
|
||||||
|
|
||||||
_split_line(line, &line_argc, line_argv, ' ');
|
|
||||||
|
|
||||||
for (i = 0; i < line_argc; i++) {
|
for (i = 0; i < line_argc; i++) {
|
||||||
arg = line_argv[i];
|
arg = line_argv[i];
|
||||||
|
|
||||||
@ -1428,33 +1421,27 @@ static void _create_opt_names_alpha(void)
|
|||||||
qsort(opt_names_alpha, ARG_COUNT, sizeof(long), _long_name_compare);
|
qsort(opt_names_alpha, ARG_COUNT, sizeof(long), _long_name_compare);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _copy_line(char *line, int max_line, int *position)
|
static int _copy_line(const char **line, int max_line, int *position)
|
||||||
{
|
{
|
||||||
int p = *position;
|
size_t len;
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
max_line--;
|
*line = _command_input + *position;
|
||||||
while (i < max_line) {
|
len = strlen(*line);
|
||||||
if (_command_input[p] == '\n') {
|
*position += len + 1;
|
||||||
p++;
|
if (len >= max_line)
|
||||||
break;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
line[i++] = _command_input[p++];
|
return len;
|
||||||
}
|
|
||||||
*position = p;
|
|
||||||
line[i] = 0;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int define_commands(struct cmd_context *cmdtool, const char *run_name)
|
int define_commands(struct cmd_context *cmdtool, const char *run_name)
|
||||||
{
|
{
|
||||||
struct command *cmd = NULL;
|
struct command *cmd = NULL;
|
||||||
|
const char *line_orig;
|
||||||
char line[MAX_LINE];
|
char line[MAX_LINE];
|
||||||
char line_orig[MAX_LINE];
|
|
||||||
char *line_argv[MAX_LINE_ARGC];
|
char *line_argv[MAX_LINE_ARGC];
|
||||||
const char *name;
|
const char *name;
|
||||||
|
size_t line_orig_len;
|
||||||
int line_argc;
|
int line_argc;
|
||||||
int cmd_count = 0;
|
int cmd_count = 0;
|
||||||
int prev_was_oo_def = 0;
|
int prev_was_oo_def = 0;
|
||||||
@ -1471,15 +1458,12 @@ int define_commands(struct cmd_context *cmdtool, const char *run_name)
|
|||||||
|
|
||||||
/* Process each line of command-lines-input.h (from command-lines.in) */
|
/* Process each line of command-lines-input.h (from command-lines.in) */
|
||||||
|
|
||||||
while (_copy_line(line, MAX_LINE, ©_pos)) {
|
while ((line_orig_len = _copy_line(&line_orig, MAX_LINE, ©_pos)) > 0) {
|
||||||
if (!line[0])
|
if (line_orig[0] == '-' && line_orig[1] == '-' &&
|
||||||
break;
|
(!line_orig[2] || (line_orig[2] == '-' && !line_orig[3])))
|
||||||
|
|
||||||
if (line[0] == '-' && line[1] == '-' &&
|
|
||||||
(!line[2] || (line[2] == '-' && !line[3])))
|
|
||||||
continue; /* "---" or "--" */
|
continue; /* "---" or "--" */
|
||||||
|
|
||||||
dm_strncpy(line_orig, line, sizeof(line_orig));
|
memcpy(line, line_orig, line_orig_len + 1);
|
||||||
_split_line(line, &line_argc, line_argv, ' ');
|
_split_line(line, &line_argc, line_argv, ' ');
|
||||||
|
|
||||||
if (!line_argc)
|
if (!line_argc)
|
||||||
@ -1532,7 +1516,7 @@ int define_commands(struct cmd_context *cmdtool, const char *run_name)
|
|||||||
|
|
||||||
if (cmd && !skip && _is_desc_line(line_argv[0])) {
|
if (cmd && !skip && _is_desc_line(line_argv[0])) {
|
||||||
if (cmd->desc) {
|
if (cmd->desc) {
|
||||||
size_t newlen = strlen(cmd->desc) + strlen(line_orig) + 2;
|
size_t newlen = strlen(cmd->desc) + line_orig_len + 2;
|
||||||
char *newdesc = dm_pool_alloc(cmdtool->libmem, newlen);
|
char *newdesc = dm_pool_alloc(cmdtool->libmem, newlen);
|
||||||
|
|
||||||
if (!newdesc) {
|
if (!newdesc) {
|
||||||
@ -1556,7 +1540,7 @@ int define_commands(struct cmd_context *cmdtool, const char *run_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cmd && !skip && _is_autotype_line(line_argv[0])) {
|
if (cmd && !skip && _is_autotype_line(line_argv[0])) {
|
||||||
_add_autotype(cmdtool, cmd, line_orig);
|
_add_autotype(cmdtool, cmd, line_argc, line_argv);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1566,7 +1550,7 @@ int define_commands(struct cmd_context *cmdtool, const char *run_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cmd && !skip && _is_rule_line(line_argv[0])) {
|
if (cmd && !skip && _is_rule_line(line_argv[0])) {
|
||||||
_add_rule(cmdtool, cmd, line_orig);
|
_add_rule(cmdtool, cmd, line_argc, line_argv);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user