pmap: Minor fixes

Some reasource leaks and a bunch of flags not explictly set.

References:
 Coverity 99162, 99146, 99145
This commit is contained in:
Craig Small 2016-05-17 21:55:14 +10:00
parent 0511ab0245
commit 25f655891f

34
pmap.c
View File

@ -136,14 +136,14 @@ static char mapbuf[1024];
static unsigned long range_low; static unsigned long range_low;
static unsigned long range_high = ~0ul; static unsigned long range_high = ~0ul;
static int c_option; static int c_option = 0;
static int C_option; static int C_option = 0;
static int d_option; static int d_option = 0;
static int n_option; static int n_option = 0;
static int N_option; static int N_option = 0;
static int q_option; static int q_option = 0;
static int x_option; static int x_option = 0;
static int X_option; static int X_option = 0;
static int map_desc_showpath; static int map_desc_showpath;
@ -329,7 +329,7 @@ static void print_extended_maps (FILE *f)
/* If line too long we dump everything else. */ /* If line too long we dump everything else. */
c = mapbuf[strlen(mapbuf) - 1]; c = mapbuf[strlen(mapbuf) - 1];
while (c != '\n') { while (c != '\n') {
ret = fgets(mapbuf, sizeof mapbuf, f); fgets(mapbuf, sizeof mapbuf, f);
c = mapbuf[strlen(mapbuf) - 1]; c = mapbuf[strlen(mapbuf) - 1];
} }
@ -548,6 +548,7 @@ static int one_proc (struct pids_stack *p)
if (X_option || c_option) { if (X_option || c_option) {
print_extended_maps(fp); print_extended_maps(fp);
fclose(fp);
return 0; return 0;
} }
@ -748,10 +749,10 @@ static int one_proc (struct pids_stack *p)
static void range_arguments(char *optarg) static void range_arguments(char *optarg)
{ {
char *arg1; char *buf, *arg1, *arg2;
char *arg2;
arg1 = xstrdup(optarg); buf = xstrdup(optarg);
arg1 = buf;
arg2 = strchr(arg1, ','); arg2 = strchr(arg1, ',');
if (arg2) if (arg2)
*arg2 = '\0'; *arg2 = '\0';
@ -759,13 +760,16 @@ static void range_arguments(char *optarg)
++arg2; ++arg2;
else else
arg2 = arg1; arg2 = arg1;
if (arg1 && *arg1) if (arg1[0] != '\0')
range_low = strtoul(arg1, &arg1, 16); range_low = strtoul(arg1, &arg1, 16);
if (*arg2) if (arg2[0] != '\0')
range_high = strtoul(arg2, &arg2, 16); range_high = strtoul(arg2, &arg2, 16);
if (arg1 && (*arg1 || *arg2)) if (arg1 && (*arg1 || *arg2)) {
free(buf);
xerrx(EXIT_FAILURE, "%s: '%s'", _("failed to parse argument"), xerrx(EXIT_FAILURE, "%s: '%s'", _("failed to parse argument"),
optarg); optarg);
}
free(buf);
} }