From b90b773ca6aa1b1a39d76186d1a7639a13f5c916 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Wed, 30 Dec 2015 17:28:11 -0800 Subject: [PATCH] lnstat: fix error handling Error handling was silent and had leaks. Signed-off-by: Stephen Hemminger --- misc/lnstat_util.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/misc/lnstat_util.c b/misc/lnstat_util.c index 70a77c56..a2583665 100644 --- a/misc/lnstat_util.c +++ b/misc/lnstat_util.c @@ -172,8 +172,10 @@ static struct lnstat_file *alloc_and_open(const char *path, const char *file) /* allocate */ lf = malloc(sizeof(*lf)); - if (!lf) + if (!lf) { + fprintf(stderr, "out of memory\n"); return NULL; + } /* initialize */ memset(lf, 0, sizeof(*lf)); @@ -190,6 +192,7 @@ static struct lnstat_file *alloc_and_open(const char *path, const char *file) /* open */ lf->fp = fopen(lf->path, "r"); if (!lf->fp) { + perror(lf->path); free(lf); return NULL; } @@ -256,12 +259,16 @@ struct lnstat_file *lnstat_scan_dir(const char *path, const int num_req_files, continue; lf = alloc_and_open(path, de->d_name); - if (!lf) + if (!lf) { + closedir(dir); return NULL; + } /* fill in field structure */ - if (lnstat_scan_fields(lf) < 0) + if (lnstat_scan_fields(lf) < 0) { + closedir(dir); return NULL; + } /* prepend to global list */ lf->next = lnstat_files;