diff options
author | SzuWei Lin <szuweilin@google.com> | 2017-04-10 07:38:18 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-04-10 07:38:18 +0000 |
commit | aeaf88f5d00a63e616eb4584072bd1e2eff9df75 (patch) | |
tree | f41478bf6ee9d7d38527220b8ad5fbc4cde8a07a | |
parent | 9dbd31040d911090979907d6ed44d8c94088773e (diff) | |
parent | d457af95a96d7b7bd1361c984bf5d2f525cbd72a (diff) | |
download | libufdt-aeaf88f5d00a63e616eb4584072bd1e2eff9df75.tar.gz |
Fix memory and file leak am: 70107c8f5c am: 629a61c8df am: c5b29321f9
am: d457af95a9
Change-Id: I5dcc01c9855b5345b78b76120d3651587324ecb3
-rw-r--r-- | tests/src/util.c | 34 | ||||
-rw-r--r-- | tests/src/util.h | 3 | ||||
-rw-r--r-- | ufdt_convert.c | 2 | ||||
-rw-r--r-- | ufdt_overlay.c | 10 |
4 files changed, 32 insertions, 17 deletions
diff --git a/tests/src/util.c b/tests/src/util.c index 0d8040d..1c76773 100644 --- a/tests/src/util.c +++ b/tests/src/util.c @@ -6,27 +6,39 @@ #include "libfdt.h" #include "libufdt_sysdeps.h" - -char *load_file(const char *filename, size_t *pLen) { - FILE *fp = fopen(filename, "r"); - if (!fp) { - return NULL; - } - +static char *load_file_contents(FILE *fp, size_t *len_ptr) { // Gets the file size. fseek(fp, 0, SEEK_END); size_t len = ftell(fp); fseek(fp, 0, SEEK_SET); - char *buf = dto_malloc(len); + char *buf = malloc(len); + if (buf == NULL) { + return NULL; + } + if (fread(buf, len, 1, fp) != 1) { - dto_free(buf); + free(buf); return NULL; } - if (pLen) { - *pLen = len; + if (len_ptr) { + *len_ptr = len; + } + + return buf; +} + +char *load_file(const char *filename, size_t *len_ptr) { + FILE *fp = fopen(filename, "r"); + if (!fp) { + return NULL; } + + char *buf = load_file_contents(fp, len_ptr); + + fclose(fp); + return buf; } diff --git a/tests/src/util.h b/tests/src/util.h index 9df0ae7..3b68e14 100644 --- a/tests/src/util.h +++ b/tests/src/util.h @@ -3,8 +3,7 @@ #include <stdio.h> - -char *load_file(const char *filename, size_t *pLen); +char *load_file(const char *filename, size_t *len_ptr); int write_buf_to_file(const char *filename, const void *buf, size_t buf_size); int write_fdt_to_file(const char *filename, const void *fdt); diff --git a/ufdt_convert.c b/ufdt_convert.c index caa3ce3..b990c20 100644 --- a/ufdt_convert.c +++ b/ufdt_convert.c @@ -15,6 +15,7 @@ struct ufdt *ufdt_construct(void *fdtp) { void ufdt_destruct(struct ufdt *tree) { ufdt_node_destruct(tree->root); dto_free(tree->phandle_table.data); + dto_free(tree); } static struct ufdt_node *ufdt_new_node(void *fdtp, int node_offset) { @@ -159,6 +160,7 @@ int merge_children(struct ufdt_node *node_a, struct ufdt_node *node_b) { err = ufdt_node_add_child(node_a, cur_node); } else { err = merge_ufdt_into(target_node, cur_node); + dto_free(cur_node); } if (err < 0) return -1; } diff --git a/ufdt_overlay.c b/ufdt_overlay.c index b595c4f..05f949f 100644 --- a/ufdt_overlay.c +++ b/ufdt_overlay.c @@ -625,10 +625,10 @@ struct fdt_header *ufdt_apply_overlay(struct fdt_header *main_fdt_header, return NULL; } - struct ufdt *main_tree, *overlay_tree; + struct ufdt *main_tree = NULL; + struct ufdt *overlay_tree = NULL; main_tree = fdt_to_ufdt(main_fdt_header, main_fdt_size); - overlay_tree = fdt_to_ufdt(overlay_fdtp, overlay_size); int err = ufdt_overlay_apply(main_tree, overlay_tree, overlay_size); @@ -642,13 +642,15 @@ struct fdt_header *ufdt_apply_overlay(struct fdt_header *main_fdt_header, goto fail; } - ufdt_destruct(main_tree); ufdt_destruct(overlay_tree); + ufdt_destruct(main_tree); + return out_fdt_header; fail: - ufdt_destruct(main_tree); ufdt_destruct(overlay_tree); + ufdt_destruct(main_tree); dto_free(out_fdt_header); + return NULL; } |