diff options
author | Ondrej Oprala | 2013-09-23 15:39:38 +0200 |
---|---|---|
committer | Karel Zak | 2013-11-08 14:16:29 +0100 |
commit | d2740b0ef6c8b7785f575432fb3ae78cdae8f89e (patch) | |
tree | c65ba7029a49d819911ceedb0e15d258e4a1d71a /text-utils/hexdump.c | |
parent | hexdump: make addfile() variable names more hinting of their purpose (diff) | |
download | kernel-qcow2-util-linux-d2740b0ef6c8b7785f575432fb3ae78cdae8f89e.tar.gz kernel-qcow2-util-linux-d2740b0ef6c8b7785f575432fb3ae78cdae8f89e.tar.xz kernel-qcow2-util-linux-d2740b0ef6c8b7785f575432fb3ae78cdae8f89e.zip |
hexdump: catch memory leaks
Signed-off-by: Ondrej Oprala <ooprala@redhat.com>
Diffstat (limited to 'text-utils/hexdump.c')
-rw-r--r-- | text-utils/hexdump.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/text-utils/hexdump.c b/text-utils/hexdump.c index 47853a882..8c9b119b9 100644 --- a/text-utils/hexdump.c +++ b/text-utils/hexdump.c @@ -50,6 +50,7 @@ struct list_head fshead; /* head of format strings */ ssize_t blocksize; /* data block size */ int exitval; /* final exit value */ ssize_t length = -1; /* max bytes to read */ +void hex_free(void); int main(int argc, char **argv) { @@ -83,5 +84,28 @@ int main(int argc, char **argv) next(argv); display(); + hex_free(); return exitval; } + +void hex_free(void) +{ + struct list_head *p, *pn, *q, *qn, *r, *rn; + FS *fs; + FU *fu; + PR *pr; + list_for_each_safe(p, pn, &fshead) { + fs = list_entry(p, FS, fslist); + list_for_each_safe(q, qn, &fs->fulist) { + fu = list_entry(q, FU, fulist); + list_for_each_safe(r, rn, &fu->prlist) { + pr = list_entry(r, PR, prlist); + free(pr->fmt); + free(pr); + } + free(fu->fmt); + free(fu); + } + free(fs); + } +} |