diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2015-01-02 11:10:39 +0900 |
---|---|---|
committer | Lukasz Stelmach <l.stelmach@samsung.com> | 2015-01-13 22:52:06 -0800 |
commit | 4d16440882cdff9a2a73346a2de2a1d2d1bddd36 (patch) | |
tree | 6d4e55c0beca19705b3890c0cac145faea8596f3 | |
parent | 032b4a930fed8679f32f7300b5fe747c5ca4e6b0 (diff) | |
download | libdevice-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.c | 12 | ||||
-rw-r--r-- | devices/display.c | 40 | ||||
-rw-r--r-- | devices/extcon.c | 26 | ||||
-rw-r--r-- | devices/led.c | 12 | ||||
-rw-r--r-- | devices/memory.c | 8 | ||||
-rw-r--r-- | devices/power.c | 20 | ||||
-rw-r--r-- | devices/process.c | 6 | ||||
-rw-r--r-- | devices/vibrator.c | 10 | ||||
-rw-r--r-- | include/device-internal.h | 26 | ||||
-rw-r--r-- | src/device-node.c | 8 |
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); } |