summaryrefslogtreecommitdiff
authorJerry Cao <jerry.cao@amlogic.com>2011-06-22 06:43:44 (GMT)
committer Jerry Cao <jerry.cao@amlogic.com>2011-06-22 06:43:44 (GMT)
commit28d2a8104e6d50402d44e3deb0ff245e6d8e7714 (patch)
treefd3039718ed083a92b6b7575ba0355c4e047ee78
parent04a97e59ec5c88f619c31629fe5736a0cc9002e4 (diff)
downloadlights-28d2a8104e6d50402d44e3deb0ff245e6d8e7714.zip
lights-28d2a8104e6d50402d44e3deb0ff245e6d8e7714.tar.gz
lights-28d2a8104e6d50402d44e3deb0ff245e6d8e7714.tar.bz2
Check for valid file descriptor after opening, before writing data into it
Diffstat
-rwxr-xr-xlights.c53
1 files changed, 24 insertions, 29 deletions
diff --git a/lights.c b/lights.c
index f0c1cb5..c387faf 100755
--- a/lights.c
+++ b/lights.c
@@ -5,20 +5,22 @@
#include <hardware/lights.h>
#include <hardware/hardware.h>
-
#define BACKLIGHT "/sys/class/backlight/aml-bl/brightness"
+
static int set_light_backlight(struct light_device_t* dev,
struct light_state_t const* state)
{
- int nwr, ret, fd;
+ int nwr, ret = -1, fd;
char value[20];
int light_level;
light_level =state->color&0xff;
fd = open(BACKLIGHT, O_RDWR);
- nwr = sprintf(value, "%d\n", light_level);
- ret = write(fd, value, nwr);
- close(fd);
+ if (fd > 0) {
+ nwr = sprintf(value, "%d\n", light_level);
+ ret = write(fd, value, nwr);
+ close(fd);
+ }
return ret;
}
@@ -27,44 +29,37 @@ static int open_lights(const struct hw_module_t* module, char const* name,
struct hw_device_t** device)
{
int res = -EINVAL;
- int (*set_light)(struct light_device_t* dev,
- struct light_state_t const* state);
if (strcmp(LIGHT_ID_BACKLIGHT, name) == 0) {
- struct light_device_t *dev = malloc(sizeof(struct light_device_t));
- if (!dev) {
- return res;
- }
-
- set_light = set_light_backlight;
-
- memset(dev, 0, sizeof(*dev));
- dev->common.tag = HARDWARE_DEVICE_TAG;
- dev->common.version = 0;
- dev->common.module = (struct hw_module_t*)module;
- dev->common.close = NULL;
- dev->set_light = set_light;
+ struct light_device_t *dev = malloc(sizeof(struct light_device_t));
+ if (!dev) {
+ return res;
+ }
+
+ memset(dev, 0, sizeof(*dev));
+ dev->common.tag = HARDWARE_DEVICE_TAG;
+ dev->common.version = 0;
+ dev->common.module = (struct hw_module_t*)module;
+ dev->common.close = NULL;
+ dev->set_light = set_light_backlight;
- *device = (struct hw_device_t*)dev;
- res = 0;
+ *device = (struct hw_device_t*)dev;
+ res = 0;
}
+
return res;
}
-
-
-
static struct hw_module_methods_t lights_module_methods = {
.open = open_lights,
};
+
const struct hw_module_t HAL_MODULE_INFO_SYM = {
.tag = HARDWARE_MODULE_TAG,
.version_major = 1,
.version_minor = 0,
.id = LIGHTS_HARDWARE_MODULE_ID,
- .name = "lights Module",
- .author = "",
+ .name = "Backlight",
+ .author = "Amlogic",
.methods = &lights_module_methods,
};
-
-