Skip to content

Commit

Permalink
[PATCH] Backlight/LCD Class: Fix sysfs _store error handling
Browse files Browse the repository at this point in the history
The backlight and LCD class _store functions currently accept values like "34
some random strings" without error.  This corrects them to return -EINVAL if
the value is not numeric with an optional byte of trailing whitespace.

Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Richard Purdie authored and Linus Torvalds committed May 15, 2006
1 parent a8d2e7d commit 68673af
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 22 deletions.
18 changes: 12 additions & 6 deletions drivers/video/backlight/backlight.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,15 @@ static ssize_t backlight_show_power(struct class_device *cdev, char *buf)

static ssize_t backlight_store_power(struct class_device *cdev, const char *buf, size_t count)
{
int rc = -ENXIO, power;
int rc = -ENXIO;
char *endp;
struct backlight_device *bd = to_backlight_device(cdev);
int power = simple_strtoul(buf, &endp, 0);
size_t size = endp - buf;

power = simple_strtoul(buf, &endp, 0);
if (*endp && !isspace(*endp))
if (*endp && isspace(*endp))
size++;
if (size != count)
return -EINVAL;

down(&bd->sem);
Expand Down Expand Up @@ -65,12 +68,15 @@ static ssize_t backlight_show_brightness(struct class_device *cdev, char *buf)

static ssize_t backlight_store_brightness(struct class_device *cdev, const char *buf, size_t count)
{
int rc = -ENXIO, brightness;
int rc = -ENXIO;
char *endp;
struct backlight_device *bd = to_backlight_device(cdev);
int brightness = simple_strtoul(buf, &endp, 0);
size_t size = endp - buf;

brightness = simple_strtoul(buf, &endp, 0);
if (*endp && !isspace(*endp))
if (*endp && isspace(*endp))
size++;
if (size != count)
return -EINVAL;

down(&bd->sem);
Expand Down
32 changes: 16 additions & 16 deletions drivers/video/backlight/lcd.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,73 +31,73 @@ static ssize_t lcd_show_power(struct class_device *cdev, char *buf)

static ssize_t lcd_store_power(struct class_device *cdev, const char *buf, size_t count)
{
int rc, power;
int rc = -ENXIO;
char *endp;
struct lcd_device *ld = to_lcd_device(cdev);
int power = simple_strtoul(buf, &endp, 0);
size_t size = endp - buf;

power = simple_strtoul(buf, &endp, 0);
if (*endp && !isspace(*endp))
if (*endp && isspace(*endp))
size++;
if (size != count)
return -EINVAL;

down(&ld->sem);
if (likely(ld->props && ld->props->set_power)) {
pr_debug("lcd: set power to %d\n", power);
ld->props->set_power(ld, power);
rc = count;
} else
rc = -ENXIO;
}
up(&ld->sem);

return rc;
}

static ssize_t lcd_show_contrast(struct class_device *cdev, char *buf)
{
int rc;
int rc = -ENXIO;
struct lcd_device *ld = to_lcd_device(cdev);

down(&ld->sem);
if (likely(ld->props && ld->props->get_contrast))
rc = sprintf(buf, "%d\n", ld->props->get_contrast(ld));
else
rc = -ENXIO;
up(&ld->sem);

return rc;
}

static ssize_t lcd_store_contrast(struct class_device *cdev, const char *buf, size_t count)
{
int rc, contrast;
int rc = -ENXIO;
char *endp;
struct lcd_device *ld = to_lcd_device(cdev);
int contrast = simple_strtoul(buf, &endp, 0);
size_t size = endp - buf;

contrast = simple_strtoul(buf, &endp, 0);
if (*endp && !isspace(*endp))
if (*endp && isspace(*endp))
size++;
if (size != count)
return -EINVAL;

down(&ld->sem);
if (likely(ld->props && ld->props->set_contrast)) {
pr_debug("lcd: set contrast to %d\n", contrast);
ld->props->set_contrast(ld, contrast);
rc = count;
} else
rc = -ENXIO;
}
up(&ld->sem);

return rc;
}

static ssize_t lcd_show_max_contrast(struct class_device *cdev, char *buf)
{
int rc;
int rc = -ENXIO;
struct lcd_device *ld = to_lcd_device(cdev);

down(&ld->sem);
if (likely(ld->props))
rc = sprintf(buf, "%d\n", ld->props->max_contrast);
else
rc = -ENXIO;
up(&ld->sem);

return rc;
Expand Down

0 comments on commit 68673af

Please sign in to comment.