[PATCH 7/9] backlight: Revamp error handling code to not leak the directory
Rob Bradford
robert.bradford at intel.com
Wed Dec 5 10:47:09 PST 2012
From: Rob Bradford <rob at linux.intel.com>
To neatly free the directory pointer allocated by opendir(), adjust the error
handling paths to go through to the err label.
---
src/libbacklight.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/libbacklight.c b/src/libbacklight.c
index 2ac135a..add89b2 100644
--- a/src/libbacklight.c
+++ b/src/libbacklight.c
@@ -149,11 +149,11 @@ struct backlight *backlight_init(struct udev_device *drm_device,
char *pci_name = NULL;
char *chosen_path = NULL;
char *path = NULL;
- DIR *backlights;
+ DIR *backlights = NULL;
struct dirent *entry;
enum backlight_type type = 0;
char buffer[100];
- struct backlight *backlight;
+ struct backlight *backlight = NULL;
int ret;
if (!drm_device)
@@ -208,10 +208,10 @@ struct backlight *backlight_init(struct udev_device *drm_device,
if (asprintf(&backlight_path, "%s/%s", "/sys/class/backlight",
entry->d_name) < 0)
- return NULL;
+ goto err;
if (asprintf(&path, "%s/%s", backlight_path, "type") < 0)
- return NULL;
+ goto err;
fd = open(path, O_RDONLY);
@@ -246,7 +246,7 @@ struct backlight *backlight_init(struct udev_device *drm_device,
free (path);
if (asprintf(&path, "%s/%s", backlight_path, "device") < 0)
- return NULL;
+ goto err;
ret = readlink(path, buffer, sizeof(buffer) - 1);
@@ -280,7 +280,7 @@ struct backlight *backlight_init(struct udev_device *drm_device,
}
if (!chosen_path)
- return NULL;
+ goto err;
backlight = malloc(sizeof(struct backlight));
@@ -298,10 +298,11 @@ struct backlight *backlight_init(struct udev_device *drm_device,
if (backlight->brightness < 0)
goto err;
+ closedir(backlights);
return backlight;
err:
- if (chosen_path)
- free(chosen_path);
+ closedir(backlights);
+ free (chosen_path);
free (backlight);
return NULL;
}
--
1.7.11.7
More information about the wayland-devel
mailing list