summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Garrett <mjg@redhat.com>2010-09-09 13:55:12 -0400
committerMatthew Garrett <mjg@redhat.com>2010-09-09 13:55:12 -0400
commit96bb2b91e11b4b6376924039e9a8ce0f18651373 (patch)
tree47f5840e35aac3e46af670341bce88f7a7f54a53
parenta96876ac32aa8a40ddadd5495880a0d72e100a95 (diff)
Fixes
-rw-r--r--libbacklight.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/libbacklight.c b/libbacklight.c
index 2354829..e2aaae0 100644
--- a/libbacklight.c
+++ b/libbacklight.c
@@ -108,8 +108,8 @@ out:
struct backlight *backlight_init(struct pci_device *dev, int card,
int connector_type, int connector_type_id)
{
- char *pci_name;
- char *drm_name;
+ char *pci_name = NULL;
+ char *drm_name = NULL;
char *chosen_path = NULL;
DIR *backlights;
struct dirent *entry;
@@ -117,10 +117,13 @@ struct backlight *backlight_init(struct pci_device *dev, int card,
char buffer[100];
struct backlight *backlight;
- asprintf(&pci_name, "%04x:%02x:%02x.%d", dev->domain, dev->bus,
- dev->dev, dev->func);
- asprintf(&drm_name, "card%d-%s-%d", card, output_names[connector_type],
- connector_type_id);
+ if (dev)
+ asprintf(&pci_name, "%04x:%02x:%02x.%d", dev->domain, dev->bus,
+ dev->dev, dev->func);
+
+ if (card || connector_type || connector_type_id)
+ asprintf(&drm_name, "card%d-%s-%d", card,
+ output_names[connector_type], connector_type_id);
backlights = opendir("/sys/class/backlight");
@@ -172,8 +175,8 @@ struct backlight *backlight_init(struct pci_device *dev, int card,
parent = basename(buffer);
if (entry_type == BACKLIGHT_RAW) {
- if (strcmp(drm_name, parent) &&
- strcmp(pci_name, parent)) {
+ if ((drm_name && strcmp(drm_name, parent)) &&
+ (pci_name && strcmp(pci_name, parent))) {
goto out;
}
}
@@ -184,7 +187,7 @@ struct backlight *backlight_init(struct pci_device *dev, int card,
ret = sscanf(parent, "%04x:%02x:%02x.%u", &domain, &bus,
&device, &function);
if (ret == 4) {
- if (strcmp(pci_name, parent))
+ if (pci_name && strcmp(pci_name, parent))
goto out;
}
}
@@ -222,8 +225,18 @@ struct backlight *backlight_init(struct pci_device *dev, int card,
if (backlight->brightness < 0)
goto err;
+ if (pci_name)
+ free(pci_name);
+
+ if (drm_name)
+ free(drm_name);
+
return backlight;
err:
+ if (pci_name)
+ free(pci_name);
+ if (drm_name)
+ free(drm_name);
if (chosen_path)
free(chosen_path);
free (backlight);