[lvm-devel] LVM2/libdm libdm-common.c
zkabelac at sourceware.org
zkabelac at sourceware.org
Wed Jan 25 21:47:18 UTC 2012
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: zkabelac at sourceware.org 2012-01-25 21:47:18
Modified files:
libdm : libdm-common.c
Log message:
Fix resource leak of file handle
Introduces when added dm_device_get_name.
Close file handle in all error paths.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-common.c.diff?cvsroot=lvm2&r1=1.133&r2=1.134
--- LVM2/libdm/libdm-common.c 2012/01/17 14:36:58 1.133
+++ LVM2/libdm/libdm-common.c 2012/01/25 21:47:18 1.134
@@ -1189,7 +1189,8 @@
static int _sysfs_get_dm_name(uint32_t major, uint32_t minor, char *buf, size_t buf_size)
{
char *sysfs_path, *temp_buf;
- FILE *fp;
+ FILE *fp = NULL;
+ int r = 0;
if (!(sysfs_path = dm_malloc(PATH_MAX)) ||
!(temp_buf = dm_malloc(PATH_MAX))) {
@@ -1219,23 +1220,21 @@
}
temp_buf[strlen(temp_buf) - 1] = '\0';
- if (fclose(fp))
- log_sys_error("fclose", sysfs_path);
-
if (buf_size < strlen(temp_buf) + 1) {
log_error("_sysfs_get_dm_name: supplied buffer too small");
goto error;
}
strncpy(buf, temp_buf, buf_size);
- dm_free(sysfs_path);
- dm_free(temp_buf);
- return 1;
-
+ r = 1;
error:
+ if (fp && fclose(fp))
+ log_sys_error("fclose", sysfs_path);
+
dm_free(sysfs_path);
dm_free(temp_buf);
- return 0;
+
+ return r;
}
static int _sysfs_get_kernel_name(uint32_t major, uint32_t minor, char *buf, size_t buf_size)
More information about the lvm-devel
mailing list