summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiyoung Yun <jy910.yun@samsung.com>2015-01-02 11:10:39 +0900
committerLukasz Stelmach <l.stelmach@samsung.com>2015-01-13 22:52:06 -0800
commit4d16440882cdff9a2a73346a2de2a1d2d1bddd36 (patch)
tree6d4e55c0beca19705b3890c0cac145faea8596f3
parent032b4a930fed8679f32f7300b5fe747c5ca4e6b0 (diff)
downloadlibdevice-node-4d16440882cdff9a2a73346a2de2a1d2d1bddd36.tar.gz
libdevice-node-4d16440882cdff9a2a73346a2de2a1d2d1bddd36.tar.bz2
libdevice-node-4d16440882cdff9a2a73346a2de2a1d2d1bddd36.zip
device-node: Add null check operation of interface function
If there is no interface for something to do, it will return -ENOTSUP error instead of segfault. Bug-Tizen: TC-1932 Signed-off-by: Jiyoung Yun <jy910.yun@samsung.com> Change-Id: If9dfdaecf53c88e14879dc66986e12cdcd1c2355
-rw-r--r--devices/cpu.c12
-rw-r--r--devices/display.c40
-rw-r--r--devices/extcon.c26
-rw-r--r--devices/led.c12
-rw-r--r--devices/memory.c8
-rw-r--r--devices/power.c20
-rw-r--r--devices/process.c6
-rw-r--r--devices/vibrator.c10
-rw-r--r--include/device-internal.h26
-rw-r--r--src/device-node.c8
10 files changed, 89 insertions, 79 deletions
diff --git a/devices/cpu.c b/devices/cpu.c
index fb710d1..0060081 100644
--- a/devices/cpu.c
+++ b/devices/cpu.c
@@ -23,13 +23,13 @@ static int cpu_get_prop(int prop, int *val)
{
switch (prop) {
case PROP_CPU_CPUINFO_MAX_FREQ:
- return PLUGIN_GET(cpufreq_cpuinfo_max_freq)(val);
+ return PLUGIN_GET(cpufreq_cpuinfo_max_freq, val);
case PROP_CPU_CPUINFO_MIN_FREQ:
- return PLUGIN_GET(cpufreq_cpuinfo_min_freq)(val);
+ return PLUGIN_GET(cpufreq_cpuinfo_min_freq, val);
case PROP_CPU_SCALING_MAX_FREQ:
- return PLUGIN_GET(cpufreq_scaling_max_freq)(val);
+ return PLUGIN_GET(cpufreq_scaling_max_freq, val);
case PROP_CPU_SCALING_MIN_FREQ:
- return PLUGIN_GET(cpufreq_scaling_min_freq)(val);
+ return PLUGIN_GET(cpufreq_scaling_min_freq, val);
}
return -1;
@@ -39,9 +39,9 @@ static int cpu_set_prop(int prop, int val)
{
switch (prop) {
case PROP_CPU_SCALING_MAX_FREQ:
- return PLUGIN_SET(cpufreq_scaling_max_freq)(val);
+ return PLUGIN_SET(cpufreq_scaling_max_freq, val);
case PROP_CPU_SCALING_MIN_FREQ:
- return PLUGIN_SET(cpufreq_scaling_min_freq)(val);
+ return PLUGIN_SET(cpufreq_scaling_min_freq, val);
}
return -1;
diff --git a/devices/display.c b/devices/display.c
index cba2217..321d58f 100644
--- a/devices/display.c
+++ b/devices/display.c
@@ -34,7 +34,7 @@ static int display_get_prop(int __prop, int *val)
int disp_cnt;
int r;
- r = PLUGIN_GET(display_count)(&disp_cnt);
+ r = PLUGIN_GET(display_count, &disp_cnt);
if (r < 0) {
_E("Get display count failed");
return -1;
@@ -52,7 +52,7 @@ static int display_get_prop(int __prop, int *val)
*val = disp_cnt;
return 0;
case PROP_DISPLAY_MAX_BRIGHTNESS:
- return PLUGIN_GET(backlight_max_brightness)(index, val);
+ return PLUGIN_GET(backlight_max_brightness, index, val);
case PROP_DISPLAY_BRIGHTNESS:
/* check power saving */
vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_SYSMODE_STATUS, &ps_stat);
@@ -60,23 +60,23 @@ static int display_get_prop(int __prop, int *val)
vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_DISPLAY, &ps_disp_stat);
if (ps_disp_stat != 1)
ps_disp_stat = 0;
- return PLUGIN_GET(backlight_brightness)(index, val, ps_disp_stat);
+ return PLUGIN_GET(backlight_brightness, index, val, ps_disp_stat);
case PROP_DISPLAY_ACL_CONTROL:
- return PLUGIN_GET(backlight_acl_control)(index, val);
+ return PLUGIN_GET(backlight_acl_control, index, val);
case PROP_DISPLAY_ONOFF:
- return PLUGIN_GET(lcd_power)(index, val);
+ return PLUGIN_GET(lcd_power, index, val);
case PROP_DISPLAY_BRIGHTNESS_BY_LUX:
- return PLUGIN_GET(backlight_brightness_by_lux)(lux, val);
+ return PLUGIN_GET(backlight_brightness_by_lux, lux, val);
case PROP_DISPLAY_IMAGE_ENHANCE_MODE:
- return PLUGIN_GET(image_enhance_mode)(val);
+ return PLUGIN_GET(image_enhance_mode, val);
case PROP_DISPLAY_IMAGE_ENHANCE_SCENARIO:
- return PLUGIN_GET(image_enhance_scenario)(val);
+ return PLUGIN_GET(image_enhance_scenario, val);
case PROP_DISPLAY_IMAGE_ENHANCE_TONE:
- return PLUGIN_GET(image_enhance_tone)(val);
+ return PLUGIN_GET(image_enhance_tone, val);
case PROP_DISPLAY_IMAGE_ENHANCE_OUTDOOR:
- return PLUGIN_GET(image_enhance_outdoor)(val);
+ return PLUGIN_GET(image_enhance_outdoor, val);
case PROP_DISPLAY_IMAGE_ENHANCE_INFO:
- return PLUGIN_SYS(image_enhance_info)(val);
+ return PLUGIN_SYS(image_enhance_info, val);
}
return -1;
@@ -91,7 +91,7 @@ static int display_set_prop(int __prop, int val)
int disp_cnt;
int r;
- r = PLUGIN_GET(display_count)(&disp_cnt);
+ r = PLUGIN_GET(display_count, &disp_cnt);
if (r < 0) {
_E("Get display count failed");
return -1;
@@ -110,21 +110,21 @@ static int display_set_prop(int __prop, int val)
vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_DISPLAY, &ps_disp_stat);
if (ps_disp_stat != 1)
ps_disp_stat = 0;
- return PLUGIN_SET(backlight_brightness)(index, val, ps_disp_stat);
+ return PLUGIN_SET(backlight_brightness, index, val, ps_disp_stat);
case PROP_DISPLAY_ACL_CONTROL:
- return PLUGIN_SET(backlight_acl_control)(index, val);
+ return PLUGIN_SET(backlight_acl_control, index, val);
case PROP_DISPLAY_ONOFF:
- return PLUGIN_SET(lcd_power)(index, val);
+ return PLUGIN_SET(lcd_power, index, val);
case PROP_DISPLAY_FRAME_RATE:
- return PLUGIN_SET(display_frame_rate)(val);
+ return PLUGIN_SET(display_frame_rate, val);
case PROP_DISPLAY_IMAGE_ENHANCE_MODE:
- return PLUGIN_SET(image_enhance_mode)(val);
+ return PLUGIN_SET(image_enhance_mode, val);
case PROP_DISPLAY_IMAGE_ENHANCE_SCENARIO:
- return PLUGIN_SET(image_enhance_scenario)(val);
+ return PLUGIN_SET(image_enhance_scenario, val);
case PROP_DISPLAY_IMAGE_ENHANCE_TONE:
- return PLUGIN_SET(image_enhance_tone)(val);
+ return PLUGIN_SET(image_enhance_tone, val);
case PROP_DISPLAY_IMAGE_ENHANCE_OUTDOOR:
- return PLUGIN_SET(image_enhance_outdoor)(val);
+ return PLUGIN_SET(image_enhance_outdoor, val);
}
return -1;
diff --git a/devices/extcon.c b/devices/extcon.c
index dc79e2e..21f7313 100644
--- a/devices/extcon.c
+++ b/devices/extcon.c
@@ -98,27 +98,27 @@ static int extcon_get_prop(int prop, int *val)
{
switch (prop) {
case PROP_EXTCON_TA_ONLINE:
- return PLUGIN_GET(jack_charger_online)(val);
+ return PLUGIN_GET(jack_charger_online, val);
case PROP_EXTCON_EARJACK_ONLINE:
- return PLUGIN_GET(jack_earjack_online)(val);
+ return PLUGIN_GET(jack_earjack_online, val);
case PROP_EXTCON_EARKEY_ONLINE:
- return PLUGIN_GET(jack_earkey_online)(val);
+ return PLUGIN_GET(jack_earkey_online, val);
case PROP_EXTCON_HDMI_ONLINE:
- return PLUGIN_GET(jack_hdmi_online)(val);
+ return PLUGIN_GET(jack_hdmi_online, val);
case PROP_EXTCON_USB_ONLINE:
- return PLUGIN_GET(jack_usb_online)(val);
+ return PLUGIN_GET(jack_usb_online, val);
case PROP_EXTCON_CRADLE_ONLINE:
- return PLUGIN_GET(jack_cradle_online)(val);
+ return PLUGIN_GET(jack_cradle_online, val);
case PROP_EXTCON_TVOUT_ONLINE:
- return PLUGIN_GET(jack_tvout_online)(val);
+ return PLUGIN_GET(jack_tvout_online, val);
case PROP_EXTCON_KEYBOARD_ONLINE:
- return PLUGIN_GET(jack_keyboard_online)(val);
+ return PLUGIN_GET(jack_keyboard_online, val);
case PROP_EXTCON_HDMI_SUPPORT:
- return PLUGIN_GET(hdmi_support)(val);
+ return PLUGIN_GET(hdmi_support, val);
case PROP_EXTCON_UART_PATH:
- return PLUGIN_GET(uart_path)(val);
+ return PLUGIN_GET(uart_path, val);
case PROP_EXTCON_USB_PATH:
- return PLUGIN_GET(usb_path)(val);
+ return PLUGIN_GET(usb_path, val);
}
return -1;
@@ -130,7 +130,7 @@ static int extcon_set_prop(int prop, int val)
switch (prop) {
case PROP_EXTCON_UART_PATH:
- r = PLUGIN_SET(uart_path)(val);
+ r = PLUGIN_SET(uart_path, val);
if (r == 0) {
if (val == PATH_CP)
r = run_save_blenv("uartpath", "CP");
@@ -139,7 +139,7 @@ static int extcon_set_prop(int prop, int val)
}
return r;
case PROP_EXTCON_USB_PATH:
- r = PLUGIN_SET(usb_path)(val);
+ r = PLUGIN_SET(usb_path, val);
if (r == 0) {
if (val == PATH_CP)
r = run_save_blenv("usbpath", "CP");
diff --git a/devices/led.c b/devices/led.c
index 57db061..becf30e 100644
--- a/devices/led.c
+++ b/devices/led.c
@@ -23,11 +23,11 @@ static int led_get_prop(int prop, int *val)
{
switch (prop) {
case PROP_LED_MAX_BRIGHTNESS:
- return PLUGIN_GET(leds_torch_max_brightness)(val);
+ return PLUGIN_GET(leds_torch_max_brightness, val);
case PROP_LED_BRIGHTNESS:
- return PLUGIN_GET(leds_torch_brightness)(val);
+ return PLUGIN_GET(leds_torch_brightness, val);
case PROP_LED_HARDKEY:
- return PLUGIN_GET(hardkey_backlight)(val);
+ return PLUGIN_GET(hardkey_backlight, val);
}
return -1;
@@ -37,11 +37,11 @@ static int led_set_prop(int prop, int val)
{
switch (prop) {
case PROP_LED_BRIGHTNESS:
- return PLUGIN_SET(leds_torch_brightness)(val);
+ return PLUGIN_SET(leds_torch_brightness, val);
case PROP_LED_IR_COMMAND:
- return PLUGIN_SET(irled_control)((char*)val);
+ return PLUGIN_SET(irled_control, (char*)val);
case PROP_LED_HARDKEY:
- return PLUGIN_SET(hardkey_backlight)(val);
+ return PLUGIN_SET(hardkey_backlight, val);
}
return -1;
diff --git a/devices/memory.c b/devices/memory.c
index eb60465..7e11b6a 100644
--- a/devices/memory.c
+++ b/devices/memory.c
@@ -23,9 +23,9 @@ static int memory_get_prop(int prop, int *val)
{
switch (prop) {
case PROP_MEMORY_NODE:
- return PLUGIN_GET(memnotify_node)((char*)val);
+ return PLUGIN_GET(memnotify_node, (char*)val);
case PROP_MEMORY_VICTIM_TASK:
- return PLUGIN_GET(memnotify_victim_task)(val);
+ return PLUGIN_GET(memnotify_victim_task, val);
}
return -1;
@@ -35,9 +35,9 @@ static int memory_set_prop(int prop, int val)
{
switch (prop) {
case PROP_MEMORY_THRESHOLD_LV1:
- return PLUGIN_SET(memnotify_threshold_lv1)(val);
+ return PLUGIN_SET(memnotify_threshold_lv1, val);
case PROP_MEMORY_THRESHOLD_LV2:
- return PLUGIN_SET(memnotify_threshold_lv2)(val);
+ return PLUGIN_SET(memnotify_threshold_lv2, val);
}
return -1;
diff --git a/devices/power.c b/devices/power.c
index c57943a..30dffe2 100644
--- a/devices/power.c
+++ b/devices/power.c
@@ -23,21 +23,21 @@ static int power_get_prop(int prop, int *val)
{
switch (prop) {
case PROP_POWER_CAPACITY:
- return PLUGIN_GET(battery_capacity)(val);
+ return PLUGIN_GET(battery_capacity, val);
case PROP_POWER_CAPACITY_RAW:
- return PLUGIN_GET(battery_capacity_raw)(val);
+ return PLUGIN_GET(battery_capacity_raw, val);
case PROP_POWER_CHARGE_FULL:
- return PLUGIN_GET(battery_charge_full)(val);
+ return PLUGIN_GET(battery_charge_full, val);
case PROP_POWER_CHARGE_NOW:
- return PLUGIN_GET(battery_charge_now)(val);
+ return PLUGIN_GET(battery_charge_now, val);
case PROP_POWER_WAKEUP_COUNT:
- return PLUGIN_GET(power_wakeup_count)(val);
+ return PLUGIN_GET(power_wakeup_count, val);
case PROP_POWER_PRESENT:
- return PLUGIN_GET(battery_present)(val);
+ return PLUGIN_GET(battery_present, val);
case PROP_POWER_HEALTH:
- return PLUGIN_GET(battery_health)(val);
+ return PLUGIN_GET(battery_health, val);
case PROP_POWER_INSUSPEND_CHARGING_SUPPORT:
- return PLUGIN_GET(battery_support_insuspend_charging)(val);
+ return PLUGIN_GET(battery_support_insuspend_charging, val);
}
return -1;
@@ -47,9 +47,9 @@ static int power_set_prop(int prop, int val)
{
switch (prop) {
case PROP_POWER_STATE:
- return PLUGIN_SET(power_state)(val);
+ return PLUGIN_SET(power_state, val);
case PROP_POWER_WAKEUP_COUNT:
- return PLUGIN_SET(power_wakeup_count)(val);
+ return PLUGIN_SET(power_wakeup_count, val);
}
return -1;
diff --git a/devices/process.c b/devices/process.c
index 94ee4c9..985f83c 100644
--- a/devices/process.c
+++ b/devices/process.c
@@ -23,7 +23,7 @@ static int process_get_prop(int prop, int *val)
{
switch (prop) {
case PROP_PROCESS_NODE:
- return PLUGIN_GET(process_monitor_node)((char*)val);
+ return PLUGIN_GET(process_monitor_node, (char*)val);
}
return -1;
@@ -33,9 +33,9 @@ static int process_set_prop(int prop, int val)
{
switch (prop) {
case PROP_PROCESS_MP_PNP:
- return PLUGIN_SET(process_monitor_mp_pnp)(val);
+ return PLUGIN_SET(process_monitor_mp_pnp, val);
case PROP_PROCESS_MP_VIP:
- return PLUGIN_SET(process_monitor_mp_vip)(val);
+ return PLUGIN_SET(process_monitor_mp_vip, val);
}
return -1;
diff --git a/devices/vibrator.c b/devices/vibrator.c
index 80d8e3e..c447b09 100644
--- a/devices/vibrator.c
+++ b/devices/vibrator.c
@@ -23,9 +23,9 @@ static int vibrator_get_prop(int prop, int *val)
{
switch (prop) {
case PROP_VIBRATOR_LEVEL:
- return PLUGIN_GET(haptic_vibetones_level)(val);
+ return PLUGIN_GET(haptic_vibetones_level, val);
case PROP_VIBRATOR_LEVEL_MAX:
- return PLUGIN_GET(haptic_vibetones_level_max)(val);
+ return PLUGIN_GET(haptic_vibetones_level_max, val);
}
return -1;
@@ -35,11 +35,11 @@ static int vibrator_set_prop(int prop, int val)
{
switch (prop) {
case PROP_VIBRATOR_ENABLE:
- return PLUGIN_SET(haptic_vibetones_enable)(val);
+ return PLUGIN_SET(haptic_vibetones_enable, val);
case PROP_VIBRATOR_LEVEL:
- return PLUGIN_SET(haptic_vibetones_level)(val);
+ return PLUGIN_SET(haptic_vibetones_level, val);
case PROP_VIBRATOR_ONESHOT:
- return PLUGIN_SET(haptic_vibetones_oneshot)(val);
+ return PLUGIN_SET(haptic_vibetones_oneshot, val);
}
return -1;
diff --git a/include/device-internal.h b/include/device-internal.h
index d093283..63a9db5 100644
--- a/include/device-internal.h
+++ b/include/device-internal.h
@@ -19,6 +19,7 @@
#ifndef __DEVICE_INTERNAL_H__
#define __DEVICE_INTERNAL_H__
+#include <errno.h>
#include "device-node.h"
#ifndef __CONSTRUCTOR__
@@ -44,12 +45,23 @@
#define DEVMAN_PLUGIN_PATH "/usr/lib/libslp_devman_plugin.so"
-#ifndef PLUGIN_DEFINE
-#define PLUGIN_DEFINE
-#define PLUGIN_SYS(node) plugin_intf->OEM_sys_##node
-#define PLUGIN_GET(node) plugin_intf->OEM_sys_get_##node
-#define PLUGIN_SET(node) plugin_intf->OEM_sys_set_##node
-#endif
+#define DEF_SYS(node) default_plugin.OEM_sys_##node
+#define DEF_GET(node) default_plugin.OEM_sys_get_##node
+#define DEF_SET(node) default_plugin.OEM_sys_set_##node
+
+#define OEM_SYS(node) oem_intf->OEM_sys_##node
+#define OEM_GET(node) oem_intf->OEM_sys_get_##node
+#define OEM_SET(node) oem_intf->OEM_sys_set_##node
+
+#define PLUGIN_SYS(node, ...) \
+ (oem_intf && OEM_SYS(node) ? OEM_SYS(node)(__VA_ARGS__) : \
+ DEF_SYS(node) ? DEF_SYS(node)(__VA_ARGS__) : -ENOTSUP)
+#define PLUGIN_GET(node, ...) \
+ (oem_intf && OEM_GET(node) ? OEM_GET(node)(__VA_ARGS__) : \
+ DEF_GET(node) ? DEF_GET(node)(__VA_ARGS__) : -ENOTSUP)
+#define PLUGIN_SET(node, ...) \
+ (oem_intf && OEM_SET(node) ? OEM_SET(node)(__VA_ARGS__) : \
+ DEF_SET(node) ? DEF_SET(node)(__VA_ARGS__) : -ENOTSUP)
struct device {
enum device_type type;
@@ -61,7 +73,7 @@ struct device {
void add_device(const enum device_type *devtype);
void remove_device(const enum device_type *devtype);
-extern const OEM_sys_devman_plugin_interface *plugin_intf;
+extern const OEM_sys_devman_plugin_interface *oem_intf;
extern const OEM_sys_devman_plugin_interface default_plugin;
#endif /* __DEVICE_INTERNAL_H__ */
diff --git a/src/device-node.c b/src/device-node.c
index a23ce2b..07ba917 100644
--- a/src/device-node.c
+++ b/src/device-node.c
@@ -28,7 +28,7 @@
static GList *dev_head;
static void *dlopen_handle;
-const OEM_sys_devman_plugin_interface *plugin_intf;
+const OEM_sys_devman_plugin_interface *oem_intf;
void add_device(const enum device_type *devtype)
{
@@ -153,8 +153,8 @@ static void __CONSTRUCTOR__ module_init(void)
goto ERROR;
}
- plugin_intf = OEM_sys_get_devman_plugin_interface();
- if (!plugin_intf) {
+ oem_intf = OEM_sys_get_devman_plugin_interface();
+ if (!oem_intf) {
_E("get_devman_plugin_interface() failed");
goto ERROR;
}
@@ -162,8 +162,6 @@ static void __CONSTRUCTOR__ module_init(void)
return;
ERROR:
- plugin_intf = &default_plugin;
-
if (dlopen_handle)
dlclose(dlopen_handle);
}