summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Olsa <Jiri Olsa jolsa@redhat.com>2011-05-14 20:09:35 +0200
committerJiri Olsa <Jiri Olsa jolsa@redhat.com>2011-05-14 20:09:35 +0200
commitd0d232d7b97ea8962f64fc2126d764009048a090 (patch)
treef1b94e29b4374a030372ddb7f7cbd543d8ef025a
parente71de1629e743e83c9878fe8f16a42a485e70b04 (diff)
downloadlatrace-d0d232d7b97ea8962f64fc2126d764009048a090.tar.gz
latrace-d0d232d7b97ea8962f64fc2126d764009048a090.tar.xz
latrace-d0d232d7b97ea8962f64fc2126d764009048a090.zip
fixed errors discovered by cppcheck
cppcheck discovered some memory leaks (http://cppcheck.sourceforge.net/) It'd be worth adding Makefile target to run/check cppcheck output automatically.
-rw-r--r--ChangeLog1
-rw-r--r--src/args.c17
-rw-r--r--src/symbol.c2
3 files changed, 12 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 30bd549..28667b4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
2011-05-13 Jiri Olsa <olsajiri@gmail.com>
* build fix for ARM
(contributed by Dr. David Alan Gilbert <david.gilbert@linaro.org>)
+ * fixed errors discovered by cppcheck
2011-05-05 Jiri Olsa <olsajiri@gmail.com>
* adding OUTPUT_TTY config file option
diff --git a/src/args.c b/src/args.c
index b225e58..db1e2b9 100644
--- a/src/args.c
+++ b/src/args.c
@@ -314,6 +314,7 @@ int lt_args_add_enum(struct lt_config_shared *cfg, char *name,
if (!enum_init) {
if (!hcreate_r(LT_ARGS_DEF_ENUM_NUM, &args_enum_tab)) {
perror("failed to create has table:");
+ free(en);
return -1;
}
enum_init = 1;
@@ -325,11 +326,7 @@ int lt_args_add_enum(struct lt_config_shared *cfg, char *name,
if (!hsearch_r(e, ENTER, &ep, &args_enum_tab)) {
perror("hsearch_r failed");
free(en);
- /* we dont want to exit just because
- we ran out of our symbol limit */
- PRINT_VERBOSE(cfg, 3,
- "reach the enum number limit %u\n",
- LT_ARGS_DEF_ENUM_NUM);
+ return 1;
}
/* We've got enum inside the hash, let's prepare the enum itself.
@@ -436,8 +433,10 @@ struct lt_enum_elem* lt_args_get_enum(struct lt_config_shared *cfg,
/* parse errors */
if ((errno == ERANGE && (num == LONG_MAX || num == LONG_MIN)) ||
- (errno != 0 && num == 0))
+ (errno != 0 && num == 0)) {
+ free(elem);
return NULL;
+ }
if (endptr != val) {
elem->val = num;
@@ -573,6 +572,7 @@ static struct lt_arg* argdup(struct lt_config_shared *cfg, struct lt_arg *asrc)
if (NULL == (h = (struct lt_list_head*) malloc(sizeof(*h)))) {
perror("malloc failed");
+ free(arg);
return NULL;
}
@@ -583,8 +583,11 @@ static struct lt_arg* argdup(struct lt_config_shared *cfg, struct lt_arg *asrc)
/* XXX Not sure how safe is this one...
might need some attention in future :) */
- if (NULL == (aa = argdup(cfg, a)))
+ if (NULL == (aa = argdup(cfg, a))) {
+ free(h);
+ free(arg);
return NULL;
+ }
lt_list_add_tail(&aa->args_list, h);
}
diff --git a/src/symbol.c b/src/symbol.c
index c4e25b9..6f2e155 100644
--- a/src/symbol.c
+++ b/src/symbol.c
@@ -73,7 +73,7 @@ static int compare(const void *a, const void *b)
static int symbol_init(struct lt_config_shared *cfg,
struct lt_symbol *sym, const char *name)
{
- struct lt_args_sym* a;
+ struct lt_args_sym* a = NULL;
if (lt_sh(cfg, args_enabled)) {
a = lt_args_sym_get(cfg, name);