Bug fix. 'mc_client_foreach_server_subscribed' return incorrectly changed server_name 11/182011/2 accepted/tizen/4.0/unified/20180620.131342 submit/tizen_4.0/20180620.012106
authorJiyong Min <jiyong.min@samsung.com>
Tue, 19 Jun 2018 23:06:13 +0000 (08:06 +0900)
committerJiyong Min <jiyong.min@samsung.com>
Tue, 19 Jun 2018 23:43:54 +0000 (08:43 +0900)
Change-Id: Iba14d810882197609fd0b4cffe605c5d270078a6

packaging/capi-media-controller.spec
src/media_controller_client.c

index 1d6fca29e6416d9e3f7bf593ff2928d08f6d140f..c4d2a764598c31c4f89cb93a12186b0607c6f6f6 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       capi-media-controller
 Summary:    A media controller library in Tizen Native API
-Version:    0.1.54
+Version:    0.1.55
 Release:    1
 Group:      Multimedia/API
 License:    Apache-2.0
index 1d681462d451f21069507719b5f60aec25b926eb..0ea44de5fc76b8c78a2a7787b554d933a97444fc 100755 (executable)
@@ -273,8 +273,16 @@ static int __mc_client_register_filter_listener(media_controller_client_s *mc_cl
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Fail mc_util_make_filter_interface_name");
 
        ret = mc_ipc_register_listener(&mc_client->listeners, mc_client->dconn, filter_interface_name, signal_name, callback, user_data);
-       if (ret == MEDIA_CONTROLLER_ERROR_NONE)
-               *filter_list = g_list_append(*filter_list, strdup(filter_interface_name));
+       if (ret == MEDIA_CONTROLLER_ERROR_NONE) {
+               char *filter_data = (char *)g_strdup(server_name);
+               if (filter_data == NULL) {
+                       mc_debug("memeory allocation failed");
+                       mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, filter_interface_name, signal_name);
+                       MC_SAFE_FREE(filter_interface_name);
+                       return MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
+               }
+               *filter_list = g_list_append(*filter_list, filter_data);
+       }
 
        MC_SAFE_FREE(filter_interface_name);
 
@@ -319,7 +327,7 @@ static int __mc_client_unregister_filter_listener(media_controller_client_s *mc_
                        interface_name = g_list_nth_data(*filter_list, idx);
 
                        if (MC_STRING_VALID(interface_name)) {
-                               if (g_strcmp0(interface_name, filter_interface_name) == 0) {
+                               if (g_strcmp0(interface_name, server_name) == 0) {
                                        mc_debug("Unset subscriber [%d][%s]", idx, interface_name);
                                        *filter_list = g_list_remove(*filter_list, interface_name);
                                        MC_SAFE_FREE(interface_name);
@@ -355,16 +363,6 @@ static int __mc_client_unregister_filter_listener(media_controller_client_s *mc_
        return ret;
 }
 
-static int __mc_parse_server_name(const char *interface_name, char **server_name)
-{
-       mc_retvm_if(interface_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "interface_name is NULL");
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "server_name is NULL");
-
-       *server_name = strdup(interface_name + strlen(MC_DBUS_UPDATE_INTERFACE) + 1);
-
-       return MEDIA_CONTROLLER_ERROR_NONE;
-}
-
 static int __mc_client_send_command(mc_client_h client, const char *server_name, const char *command_type, const char *command, const char *signal_name, const char *message, char **request_id)
 {
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
@@ -752,7 +750,6 @@ int mc_client_foreach_server_subscribed(mc_client_h client, const mc_subscriptio
        int idx = 0;
        char *server_name = NULL;
        GList *filter_list = NULL;
-       char *filter_data = NULL;
        int filter_cnt = 0;
 
        mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
@@ -787,17 +784,13 @@ int mc_client_foreach_server_subscribed(mc_client_h client, const mc_subscriptio
        filter_cnt = g_list_length(filter_list);
 
        for (idx = 0; idx < filter_cnt; idx++) {
-               filter_data = (char*)g_list_nth_data(filter_list, idx);
-               ret = __mc_parse_server_name(filter_data, &server_name);
-               mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail __mc_parse_server_name");
-
+               server_name = g_strdup((char*)g_list_nth_data(filter_list, idx));
                if (MC_STRING_VALID(server_name)) {
                        if (callback(server_name, user_data) == false) {
                                MC_SAFE_FREE(server_name);
                                break;
                        }
                }
-
                MC_SAFE_FREE(server_name);
        }