summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@google.com>2015-04-22 17:57:32 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-04-22 17:57:32 +0000
commit8f4e79766cb67241666d7454b71982fd53e9fb61 (patch)
treefd255667630143353ff8dc9874b69e4982cbfa74
parent9a6b9137db9cd00e1189322a5db5581cd67e2867 (diff)
parent1cd49841dce6c79a82db1582f8fcaf23325ec0e2 (diff)
downloadextras-8f4e79766cb67241666d7454b71982fd53e9fb61.tar.gz
Merge "Do free and fclose when error occur."
-rw-r--r--libpagemap/pm_process.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libpagemap/pm_process.c b/libpagemap/pm_process.c
index 50791ef9..4d56428b 100644
--- a/libpagemap/pm_process.c
+++ b/libpagemap/pm_process.c
@@ -258,12 +258,16 @@ static int read_maps(pm_process_t *proc) {
maps_count = 0; maps_size = INITIAL_MAPS;
error = snprintf(filename, MAX_FILENAME, "/proc/%d/maps", proc->pid);
- if (error < 0 || error >= MAX_FILENAME)
+ if (error < 0 || error >= MAX_FILENAME) {
+ free(maps);
return (error < 0) ? (errno) : (-1);
+ }
maps_f = fopen(filename, "r");
- if (!maps_f)
+ if (!maps_f) {
+ free(maps);
return errno;
+ }
while (fgets(line, MAX_LINE, maps_f)) {
if (maps_count >= maps_size) {
@@ -292,6 +296,7 @@ static int read_maps(pm_process_t *proc) {
for (; maps_count > 0; maps_count--)
pm_map_destroy(maps[maps_count]);
free(maps);
+ fclose(maps_f);
return error;
}
strcpy(map->name, name);