[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