libbacklight: Fix backlight never gets initialized
In 913d7c15f7 stricter error checking was
introduced to the strtol call, which broke reading backlight values.
Since every sysfs backlight file ends with a newline.
As noted in a comment in the previous MR to prevent damaged pointers
after calling asprintf, replace every asprintf call with str_printf.
Previous-MR: https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/543
Signed-off-by: Sören Meier <soerenmeier@livgood.ch>
This commit is contained in:
@@ -53,8 +53,10 @@ static long backlight_get(struct backlight *backlight, char *node)
|
|||||||
int fd, value;
|
int fd, value;
|
||||||
long ret;
|
long ret;
|
||||||
|
|
||||||
if (asprintf(&path, "%s/%s", backlight->path, node) < 0)
|
str_printf(&path, "%s/%s", backlight->path, node);
|
||||||
|
if (!path)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
fd = open(path, O_RDONLY);
|
fd = open(path, O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
@@ -67,6 +69,9 @@ static long backlight_get(struct backlight *backlight, char *node)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (buffer[ret - 1] == '\n')
|
||||||
|
buffer[ret - 1] = '\0';
|
||||||
|
|
||||||
if (!safe_strtoint(buffer, &value)) {
|
if (!safe_strtoint(buffer, &value)) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto out;
|
goto out;
|
||||||
@@ -103,7 +108,8 @@ long backlight_set_brightness(struct backlight *backlight, long brightness)
|
|||||||
int fd;
|
int fd;
|
||||||
long ret;
|
long ret;
|
||||||
|
|
||||||
if (asprintf(&path, "%s/%s", backlight->path, "brightness") < 0)
|
str_printf(&path, "%s/%s", backlight->path, "brightness");
|
||||||
|
if (!path)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
fd = open(path, O_RDWR);
|
fd = open(path, O_RDWR);
|
||||||
@@ -118,7 +124,8 @@ long backlight_set_brightness(struct backlight *backlight, long brightness)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (asprintf(&buffer, "%ld", brightness) < 0) {
|
str_printf(&buffer, "%ld", brightness);
|
||||||
|
if (!buffer) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@@ -171,7 +178,8 @@ struct backlight *backlight_init(struct udev_device *drm_device,
|
|||||||
if (!syspath)
|
if (!syspath)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (asprintf(&path, "%s/%s", syspath, "device") < 0)
|
str_printf(&path, "%s/%s", syspath, "device");
|
||||||
|
if (!path)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
ret = readlink(path, buffer, sizeof(buffer) - 1);
|
ret = readlink(path, buffer, sizeof(buffer) - 1);
|
||||||
@@ -214,11 +222,13 @@ struct backlight *backlight_init(struct udev_device *drm_device,
|
|||||||
if (entry->d_name[0] == '.')
|
if (entry->d_name[0] == '.')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (asprintf(&backlight_path, "%s/%s", "/sys/class/backlight",
|
str_printf(&backlight_path, "%s/%s", "/sys/class/backlight",
|
||||||
entry->d_name) < 0)
|
entry->d_name);
|
||||||
|
if (!backlight_path)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (asprintf(&path, "%s/%s", backlight_path, "type") < 0) {
|
str_printf(&path, "%s/%s", backlight_path, "type");
|
||||||
|
if (!path) {
|
||||||
free(backlight_path);
|
free(backlight_path);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
@@ -255,7 +265,8 @@ struct backlight *backlight_init(struct udev_device *drm_device,
|
|||||||
|
|
||||||
free (path);
|
free (path);
|
||||||
|
|
||||||
if (asprintf(&path, "%s/%s", backlight_path, "device") < 0)
|
str_printf(&path, "%s/%s", backlight_path, "device");
|
||||||
|
if (!path)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
ret = readlink(path, buffer, sizeof(buffer) - 1);
|
ret = readlink(path, buffer, sizeof(buffer) - 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user