]> sourceware.org Git - lvm2.git/commitdiff
Fix resource leak of file handle
authorZdenek Kabelac <zkabelac@redhat.com>
Wed, 25 Jan 2012 21:47:18 +0000 (21:47 +0000)
committerZdenek Kabelac <zkabelac@redhat.com>
Wed, 25 Jan 2012 21:47:18 +0000 (21:47 +0000)
Introduces when added dm_device_get_name.
Close file handle in all error paths.

libdm/libdm-common.c

index 15ab8643f3339d761d70b0510bfbe18ec71bf524..a4a351edbc4a71cad26cf7480af9a73a312ddcaf 100644 (file)
@@ -1189,7 +1189,8 @@ const char *dm_uuid_prefix(void)
 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 @@ static int _sysfs_get_dm_name(uint32_t major, uint32_t minor, char *buf, size_t
        }
        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)
This page took 0.038083 seconds and 5 git commands to generate.