diff options
author | Thomas Jarosch <thomas.jarosch@intra2net.com> | 2012-12-27 09:44:30 (GMT) |
---|---|---|
committer | Thomas Graf <tgraf@suug.ch> | 2012-12-27 12:20:18 (GMT) |
commit | 69719322546f8550208a7ad984f704259c9091cb (patch) | |
tree | a897923c936e9480269ce6a55d7c0875ff903a77 | |
parent | de213328f810afbf39380561855507c8b8c78e08 (diff) | |
download | libnl-69719322546f8550208a7ad984f704259c9091cb.zip libnl-69719322546f8550208a7ad984f704259c9091cb.tar.gz libnl-69719322546f8550208a7ad984f704259c9091cb.tar.bz2 |
Fix file descriptor leak on error
Detected by cppcheck
Signed-off-by: Thomas Jarosch <thomas.jarosch@intra2net.com>
Signed-off-by: Thomas Graf <tgraf@suug.ch>
-rw-r--r-- | lib/utils.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/utils.c b/lib/utils.c index b434bee..5511189 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -84,24 +84,32 @@ int __nl_read_num_str_file(const char *path, int (*cb)(long, const char *)) continue; num = strtol(buf, &end, 0); - if (end == buf) + if (end == buf) { + fclose(fd); return -NLE_INVAL; + } - if (num == LONG_MIN || num == LONG_MAX) + if (num == LONG_MIN || num == LONG_MAX) { + fclose(fd); return -NLE_RANGE; + } while (*end == ' ' || *end == '\t') end++; goodlen = strcspn(end, "#\r\n\t "); - if (goodlen == 0) + if (goodlen == 0) { + fclose(fd); return -NLE_INVAL; + } end[goodlen] = '\0'; err = cb(num, end); - if (err < 0) + if (err < 0) { + fclose(fd); return err; + } } fclose(fd); |