device-node: Add null check operation of interface function 95/32995/5
authorJiyoung Yun <jy910.yun@samsung.com>
Fri, 2 Jan 2015 02:10:39 +0000 (11:10 +0900)
committerLukasz Stelmach <l.stelmach@samsung.com>
Wed, 14 Jan 2015 06:52:06 +0000 (22:52 -0800)
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

devices/cpu.c
devices/display.c
devices/extcon.c
devices/led.c
devices/memory.c
devices/power.c
devices/process.c
devices/vibrator.c
include/device-internal.h
src/device-node.c

index fb710d14a0a8871da976d48cb5c903862851f6cd..006008121616d9e686a6a67abf0dfc17ac43d6f8 100644 (file)
@@ -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_freqval);
        case PROP_CPU_CPUINFO_MIN_FREQ:
-               return PLUGIN_GET(cpufreq_cpuinfo_min_freq)(val);
+               return PLUGIN_GET(cpufreq_cpuinfo_min_freqval);
        case PROP_CPU_SCALING_MAX_FREQ:
-               return PLUGIN_GET(cpufreq_scaling_max_freq)(val);
+               return PLUGIN_GET(cpufreq_scaling_max_freqval);
        case PROP_CPU_SCALING_MIN_FREQ:
-               return PLUGIN_GET(cpufreq_scaling_min_freq)(val);
+               return PLUGIN_GET(cpufreq_scaling_min_freqval);
        }
 
        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_freqval);
        case PROP_CPU_SCALING_MIN_FREQ:
-               return PLUGIN_SET(cpufreq_scaling_min_freq)(val);
+               return PLUGIN_SET(cpufreq_scaling_min_freqval);
        }
 
        return -1;
index cba2217c94b7ad0ad570a169ee64731db09558f2..321d58f439c63814faadaaf98d63b53598357948 100644 (file)
@@ -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_brightnessindex, 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_brightnessindex, val, ps_disp_stat);
        case PROP_DISPLAY_ACL_CONTROL:
-               return PLUGIN_GET(backlight_acl_control)(index, val);
+               return PLUGIN_GET(backlight_acl_controlindex, val);
        case PROP_DISPLAY_ONOFF:
-               return PLUGIN_GET(lcd_power)(index, val);
+               return PLUGIN_GET(lcd_powerindex, val);
        case PROP_DISPLAY_BRIGHTNESS_BY_LUX:
-               return PLUGIN_GET(backlight_brightness_by_lux)(lux, val);
+               return PLUGIN_GET(backlight_brightness_by_luxlux, val);
        case PROP_DISPLAY_IMAGE_ENHANCE_MODE:
-               return PLUGIN_GET(image_enhance_mode)(val);
+               return PLUGIN_GET(image_enhance_modeval);
        case PROP_DISPLAY_IMAGE_ENHANCE_SCENARIO:
-               return PLUGIN_GET(image_enhance_scenario)(val);
+               return PLUGIN_GET(image_enhance_scenarioval);
        case PROP_DISPLAY_IMAGE_ENHANCE_TONE:
-               return PLUGIN_GET(image_enhance_tone)(val);
+               return PLUGIN_GET(image_enhance_toneval);
        case PROP_DISPLAY_IMAGE_ENHANCE_OUTDOOR:
-               return PLUGIN_GET(image_enhance_outdoor)(val);
+               return PLUGIN_GET(image_enhance_outdoorval);
        case PROP_DISPLAY_IMAGE_ENHANCE_INFO:
-               return PLUGIN_SYS(image_enhance_info)(val);
+               return PLUGIN_SYS(image_enhance_infoval);
        }
 
        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_brightnessindex, val, ps_disp_stat);
        case PROP_DISPLAY_ACL_CONTROL:
-               return PLUGIN_SET(backlight_acl_control)(index, val);
+               return PLUGIN_SET(backlight_acl_controlindex, val);
        case PROP_DISPLAY_ONOFF:
-               return PLUGIN_SET(lcd_power)(index, val);
+               return PLUGIN_SET(lcd_powerindex, val);
        case PROP_DISPLAY_FRAME_RATE:
-               return PLUGIN_SET(display_frame_rate)(val);
+               return PLUGIN_SET(display_frame_rateval);
        case PROP_DISPLAY_IMAGE_ENHANCE_MODE:
-               return PLUGIN_SET(image_enhance_mode)(val);
+               return PLUGIN_SET(image_enhance_modeval);
        case PROP_DISPLAY_IMAGE_ENHANCE_SCENARIO:
-               return PLUGIN_SET(image_enhance_scenario)(val);
+               return PLUGIN_SET(image_enhance_scenarioval);
        case PROP_DISPLAY_IMAGE_ENHANCE_TONE:
-               return PLUGIN_SET(image_enhance_tone)(val);
+               return PLUGIN_SET(image_enhance_toneval);
        case PROP_DISPLAY_IMAGE_ENHANCE_OUTDOOR:
-               return PLUGIN_SET(image_enhance_outdoor)(val);
+               return PLUGIN_SET(image_enhance_outdoorval);
        }
 
        return -1;
index dc79e2e8fefd49f35d96bd17c64fb069e52107a8..21f7313e1d78f6514a878ee18628b644016c2c63 100644 (file)
@@ -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_onlineval);
        case PROP_EXTCON_EARJACK_ONLINE:
-               return PLUGIN_GET(jack_earjack_online)(val);
+               return PLUGIN_GET(jack_earjack_onlineval);
        case PROP_EXTCON_EARKEY_ONLINE:
-               return PLUGIN_GET(jack_earkey_online)(val);
+               return PLUGIN_GET(jack_earkey_onlineval);
        case PROP_EXTCON_HDMI_ONLINE:
-               return PLUGIN_GET(jack_hdmi_online)(val);
+               return PLUGIN_GET(jack_hdmi_onlineval);
        case PROP_EXTCON_USB_ONLINE:
-               return PLUGIN_GET(jack_usb_online)(val);
+               return PLUGIN_GET(jack_usb_onlineval);
        case PROP_EXTCON_CRADLE_ONLINE:
-               return PLUGIN_GET(jack_cradle_online)(val);
+               return PLUGIN_GET(jack_cradle_onlineval);
        case PROP_EXTCON_TVOUT_ONLINE:
-               return PLUGIN_GET(jack_tvout_online)(val);
+               return PLUGIN_GET(jack_tvout_onlineval);
        case PROP_EXTCON_KEYBOARD_ONLINE:
-               return PLUGIN_GET(jack_keyboard_online)(val);
+               return PLUGIN_GET(jack_keyboard_onlineval);
        case PROP_EXTCON_HDMI_SUPPORT:
-               return PLUGIN_GET(hdmi_support)(val);
+               return PLUGIN_GET(hdmi_supportval);
        case PROP_EXTCON_UART_PATH:
-               return PLUGIN_GET(uart_path)(val);
+               return PLUGIN_GET(uart_pathval);
        case PROP_EXTCON_USB_PATH:
-               return PLUGIN_GET(usb_path)(val);
+               return PLUGIN_GET(usb_pathval);
        }
 
        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_pathval);
                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_pathval);
                if (r == 0) {
                        if (val == PATH_CP)
                                r = run_save_blenv("usbpath", "CP");
index 57db061c79e498219cff433dcb4ccf922199fcdc..becf30e7f345f0b9fd92a9ffc32c2a88a57569bb 100644 (file)
@@ -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_brightnessval);
        case PROP_LED_BRIGHTNESS:
-               return PLUGIN_GET(leds_torch_brightness)(val);
+               return PLUGIN_GET(leds_torch_brightnessval);
        case PROP_LED_HARDKEY:
-               return PLUGIN_GET(hardkey_backlight)(val);
+               return PLUGIN_GET(hardkey_backlightval);
        }
 
        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_brightnessval);
        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_backlightval);
        }
 
        return -1;
index eb6046500270fd2052fe6060fcb102d752038a81..7e11b6a44935400830a39c70382c5cfc2cfbf1c8 100644 (file)
@@ -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_taskval);
        }
 
        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_lv1val);
        case PROP_MEMORY_THRESHOLD_LV2:
-               return PLUGIN_SET(memnotify_threshold_lv2)(val);
+               return PLUGIN_SET(memnotify_threshold_lv2val);
        }
 
        return -1;
index c57943a56dd275982b872a56c22932803c556bc6..30dffe246568fab74f529b5e151ec3934c443e0a 100644 (file)
@@ -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_capacityval);
        case PROP_POWER_CAPACITY_RAW:
-               return PLUGIN_GET(battery_capacity_raw)(val);
+               return PLUGIN_GET(battery_capacity_rawval);
        case PROP_POWER_CHARGE_FULL:
-               return PLUGIN_GET(battery_charge_full)(val);
+               return PLUGIN_GET(battery_charge_fullval);
        case PROP_POWER_CHARGE_NOW:
-               return PLUGIN_GET(battery_charge_now)(val);
+               return PLUGIN_GET(battery_charge_nowval);
        case PROP_POWER_WAKEUP_COUNT:
-               return PLUGIN_GET(power_wakeup_count)(val);
+               return PLUGIN_GET(power_wakeup_countval);
        case PROP_POWER_PRESENT:
-               return PLUGIN_GET(battery_present)(val);
+               return PLUGIN_GET(battery_presentval);
        case PROP_POWER_HEALTH:
-               return PLUGIN_GET(battery_health)(val);
+               return PLUGIN_GET(battery_healthval);
        case PROP_POWER_INSUSPEND_CHARGING_SUPPORT:
-               return PLUGIN_GET(battery_support_insuspend_charging)(val);
+               return PLUGIN_GET(battery_support_insuspend_chargingval);
        }
 
        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_stateval);
        case PROP_POWER_WAKEUP_COUNT:
-               return PLUGIN_SET(power_wakeup_count)(val);
+               return PLUGIN_SET(power_wakeup_countval);
        }
 
        return -1;
index 94ee4c90f9831d37dbca4493a50a5eaf2e321096..985f83ca2007e200b78b03d1c7e77710fb0e6079 100644 (file)
@@ -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_pnpval);
        case PROP_PROCESS_MP_VIP:
-               return PLUGIN_SET(process_monitor_mp_vip)(val);
+               return PLUGIN_SET(process_monitor_mp_vipval);
        }
 
        return -1;
index 80d8e3e761b910c7ba8c94f0e14142ffafa06941..c447b09cce6eeebe7f32aa45d3c698e293e16d51 100644 (file)
@@ -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_levelval);
        case PROP_VIBRATOR_LEVEL_MAX:
-               return PLUGIN_GET(haptic_vibetones_level_max)(val);
+               return PLUGIN_GET(haptic_vibetones_level_maxval);
        }
 
        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_enableval);
        case PROP_VIBRATOR_LEVEL:
-               return PLUGIN_SET(haptic_vibetones_level)(val);
+               return PLUGIN_SET(haptic_vibetones_levelval);
        case PROP_VIBRATOR_ONESHOT:
-               return PLUGIN_SET(haptic_vibetones_oneshot)(val);
+               return PLUGIN_SET(haptic_vibetones_oneshotval);
        }
 
        return -1;
index d0932830209bb03dd81da573b76424bea70c16f8..63a9db5def72f3a3cc3a900fa66adb5c47148ce4 100644 (file)
@@ -19,6 +19,7 @@
 #ifndef __DEVICE_INTERNAL_H__
 #define __DEVICE_INTERNAL_H__
 
+#include <errno.h>
 #include "device-node.h"
 
 #ifndef __CONSTRUCTOR__
 
 #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__ */
index a23ce2b44e93b7574933f07dc8d6ee4249ec6650..07ba91733edcab0bbd32c21e788f26d75a296aa2 100644 (file)
@@ -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);
 }