diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2021-09-19 20:27:34 +0200 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2021-09-20 14:26:09 +0200 |
commit | 3e7e9cc5e6abc4ddb1777e7c7b9d7bc42a7f57a7 (patch) | |
tree | cc543b2665e1284e95320afa6a23e14341cf78c7 /tools/command.c | |
parent | 825e49a2447810a806905723bc91072eb7b8b423 (diff) | |
download | lvm2-3e7e9cc5e6abc4ddb1777e7c7b9d7bc42a7f57a7.tar.gz |
cov: handle better leak reports
Rewrite code so the leaks are eliminated from Coverity.
Diffstat (limited to 'tools/command.c')
-rw-r--r-- | tools/command.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/tools/command.c b/tools/command.c index 37f6a6153..48f572f7e 100644 --- a/tools/command.c +++ b/tools/command.c @@ -757,6 +757,9 @@ static void _set_opt_def(struct cmd_context *cmdtool, struct command *cmd, char def->num = (uint64_t)atoi(name); if (val_enum == conststr_VAL) { +#ifdef MAN_PAGE_GENERATOR + free((void*)def->str); +#endif def->str = dm_pool_strdup(cmdtool->libmem, name); if (!def->str) { @@ -1539,20 +1542,27 @@ int define_commands(struct cmd_context *cmdtool, const char *run_name) */ if (_is_desc_line(line_argv[0]) && !skip && cmd) { - char *desc = dm_pool_strdup(cmdtool->libmem, line_orig); - if (cmd->desc && desc) { - int newlen = strlen(cmd->desc) + strlen(desc) + 2; + if (cmd->desc) { + size_t newlen = strlen(cmd->desc) + strlen(line_orig) + 2; char *newdesc = dm_pool_alloc(cmdtool->libmem, newlen); - if (newdesc) { - snprintf(newdesc, newlen, "%s %s", cmd->desc, desc); - cmd->desc = newdesc; - } else { + + if (!newdesc) { /* FIXME */ stack; return 0; } - } else - cmd->desc = desc; + + snprintf(newdesc, newlen, "%s %s", cmd->desc, line_orig); +#ifdef MAN_PAGE_GENERATOR + free((void*)cmd->desc); +#endif + cmd->desc = newdesc; + } else if (!(cmd->desc = dm_pool_strdup(cmdtool->libmem, line_orig))) { + /* FIXME */ + stack; + return 0; + } + continue; } @@ -1572,6 +1582,9 @@ int define_commands(struct cmd_context *cmdtool, const char *run_name) } if (_is_id_line(line_argv[0]) && cmd) { +#ifdef MAN_PAGE_GENERATOR + free((void*)cmd->command_id); +#endif cmd->command_id = dm_pool_strdup(cmdtool->libmem, line_argv[1]); if (!cmd->command_id) { @@ -3674,8 +3687,6 @@ static int _print_man(char *name, char *des_file, int secondary) printf(".P\n"); } } - - continue; } return 1; |