[TSAM-4115] modify external storage(sdcard) path. 23/74623/2 accepted/tizen/common/20160615.193542 accepted/tizen/ivi/20160615.070420 accepted/tizen/mobile/20160615.070416 accepted/tizen/tv/20160615.070355 accepted/tizen/wearable/20160615.070411 submit/tizen/20160615.040526
authorHyihong Chae <hh.chae@samsung.com>
Wed, 15 Jun 2016 02:41:54 +0000 (11:41 +0900)
committerHyihong Chae <hh.chae@samsung.com>
Wed, 15 Jun 2016 02:48:08 +0000 (11:48 +0900)
Change-Id: Ie204dd8b01207006788fba83b2fecb1a6cf0bb9d
Signed-off-by: HyiHong Chae <hh.chae@samsung.com>
CMakeLists.txt
include/mtp_config.h
include/util/mtp_util.h
packaging/mtp-responder.spec
src/entity/mtp_device.c
src/entity/mtp_store.c
src/mtp_cmd_handler_util.c
src/mtp_init.c
src/mtp_inoti_handler.c
src/util/mtp_support.c
src/util/mtp_util.c

index e3ce4d52926c97be277ac174350fb153fab3f5a3..5dc968a925c8d634d3a3302e3f5cfb0ad3028cdd 100755 (executable)
@@ -13,7 +13,7 @@ AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src/util SRCS)
 
 INCLUDE(FindPkgConfig)
 pkg_check_modules(pkgs REQUIRED glib-2.0 capi-content-media-content
-       capi-media-metadata-extractor vconf dlog tapi capi-system-info libtzplatform-config)
+       capi-media-metadata-extractor vconf dlog tapi capi-system-info storage)
 
 FOREACH(flag ${pkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
index 9d166c3ea023fe9c3ac19507a2e78b79428789d4..561e5d90e13069c5b49aeb2d4eee941e20cad4b2 100755 (executable)
@@ -18,7 +18,6 @@
 #define _MTP_CONFIG_H_
 
 #include <stdbool.h>
-#include <tzplatform_config.h>
 
 /* Function Features */
 #define MTP_USE_INFORMATION_REGISTRY           /* for get and set some information value */
@@ -81,7 +80,7 @@
 #define MTP_STORE_PATH_CHAR            "/home/owner/content"
 
 /* External Storage */
-#define MTP_EXTERNAL_PATH_CHAR tzplatform_mkpath(TZ_SYS_MEDIA, "/sdcard")
+#define MTP_EXTERNAL_PATH_CHAR "/opt/media/SDCardA1"
 #define MTP_DEVICE_ICON                        "/usr/share/mtp/device_icon.ico"
 
 /* File For WMP extesions */
index f2e0af4ef651a5537881f6cf69cbb274c9ccaa37..4e825a369a552d5ff4519319f1701a728c26784c 100755 (executable)
@@ -141,5 +141,6 @@ void _util_set_local_mmc_status(const phone_status_t val);
 void _util_get_usbmode_status(phone_status_t *val);
 phone_status_t _util_get_local_usbmode_status(void);
 void _util_set_local_usbmode_status(const phone_status_t val);
+void _util_get_external_path(char *ext_path);
 
 #endif /* _MTP_UTIL_H_ */
index d3b9e53c8bfdcfd600e3bc61ff60590defc6abb0..366cf698d9d5c282cf33c43b723bab780361dffa 100755 (executable)
@@ -5,7 +5,7 @@ ExcludeArch: %arm aarch64
 
 Name:       mtp-responder
 Summary:    Media Transfer Protocol daemon (responder)
-Version:    0.0.8
+Version:    0.0.9
 Release:    1
 Group:      Network & Connectivity/Other
 License:    Apache-2.0
@@ -20,7 +20,7 @@ BuildRequires: pkgconfig(tapi)
 BuildRequires: pkgconfig(capi-content-media-content)
 BuildRequires: pkgconfig(capi-media-metadata-extractor)
 BuildRequires: pkgconfig(capi-system-info)
-Buildrequires: pkgconfig(libtzplatform-config)
+Buildrequires: pkgconfig(storage)
 Requires(post): /usr/bin/vconftool
 
 
index 5c4a870a61b05b5024ed4fb6fe00f0dc4f9b0b8c..c2e6f6b622c8676082669fb3eae5627fcee7681b 100755 (executable)
@@ -603,6 +603,7 @@ static mtp_bool __add_store_to_device(store_type_t store_type)
        mtp_char *storage_path = NULL;
        mtp_uint32 store_id = 0;
        file_attr_t attrs = { 0, };
+       char ext_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 };
 
        switch (store_type) {
        case MTP_STORAGE_INTERNAL:
@@ -610,7 +611,8 @@ static mtp_bool __add_store_to_device(store_type_t store_type)
                store_id = MTP_INTERNAL_STORE_ID;
                break;
        case MTP_STORAGE_EXTERNAL:
-               storage_path = (mtp_char *)MTP_EXTERNAL_PATH_CHAR;
+               _util_get_external_path(ext_path);
+               storage_path = (mtp_char *)ext_path;
                store_id = MTP_EXTERNAL_STORE_ID;
                break;
        default:
index dbf744ec003998664a3e69547ec1578ed06a08fd..814d062aaf6178d7af5803bcc049aabaf3dde4f1 100755 (executable)
@@ -90,13 +90,16 @@ void _entity_update_store_info_run_time(store_info_t *info,
 
 mtp_bool _entity_get_store_path_by_id(mtp_uint32 store_id, mtp_char *path)
 {
+       char ext_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 };
+
        switch(store_id) {
        case MTP_INTERNAL_STORE_ID :
                g_strlcpy(path, MTP_STORE_PATH_CHAR,
                                MTP_MAX_PATHNAME_SIZE + 1);
                break;
        case MTP_EXTERNAL_STORE_ID :
-               g_strlcpy(path, MTP_EXTERNAL_PATH_CHAR,
+               _util_get_external_path(ext_path);
+               g_strlcpy(path, ext_path,
                                MTP_MAX_PATHNAME_SIZE + 1);
                break;
        default :
@@ -174,14 +177,17 @@ mtp_uint32 _entity_pack_store_info(store_info_t *info, mtp_uchar *buf,
 mtp_uint32 _entity_get_store_id_by_path(const mtp_char *path_name)
 {
        mtp_uint32 store_id = 0;
+       char ext_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 };
 
        retv_if(NULL == path_name, FALSE);
 
+       _util_get_external_path(ext_path);
+
        if (!strncmp(path_name, MTP_STORE_PATH_CHAR,
                                strlen(MTP_STORE_PATH_CHAR))) {
                store_id = MTP_INTERNAL_STORE_ID;
-       } else if (!strncmp(path_name, MTP_EXTERNAL_PATH_CHAR,
-                               strlen(MTP_EXTERNAL_PATH_CHAR))) {
+       } else if (!strncmp(path_name, ext_path,
+                               strlen(ext_path))) {
                store_id = MTP_EXTERNAL_STORE_ID;
        }
 
@@ -940,27 +946,30 @@ mtp_uint16 _entity_delete_obj_mtp_store(mtp_store_t *store,
                DBG("object handle is not PTP_OBJECTHANDLE_ALL. [%ld]\n",
                                obj_handle);
                obj = _entity_get_object_from_store(store, obj_handle);
-               if (_entity_remove_object_mtp_store(store, obj, PTP_FORMATCODE_NOTUSED,
-                                       &response, &atleas_one, read_only)) {
-                       slist_node_t *temp = NULL;
-
-                       temp = _util_delete_node(&(store->obj_list), obj);
-                       g_free(temp);
-                       _util_delete_file_from_db(obj->file_path);
-                       _entity_dealloc_mtp_obj(obj);
-               } else {
-                       switch (response) {
-                       case PTP_RESPONSE_PARTIAL_DELETION:
-                               all_del = FALSE;
-                               break;
-                       case PTP_RESPONSE_OBJ_WRITEPROTECTED:
-                       case PTP_RESPONSE_ACCESSDENIED:
-                               all_del = FALSE;
-                               break;
-                       case PTP_RESPONSE_UNDEFINED:
-                       default:
-                               /* do nothing */
-                               break;
+
+               if (NULL != obj) {
+                       if (_entity_remove_object_mtp_store(store, obj, PTP_FORMATCODE_NOTUSED,
+                                               &response, &atleas_one, read_only)) {
+                               slist_node_t *temp = NULL;
+
+                               temp = _util_delete_node(&(store->obj_list), obj);
+                               g_free(temp);
+                               _util_delete_file_from_db(obj->file_path);
+                               _entity_dealloc_mtp_obj(obj);
+                       } else {
+                               switch (response) {
+                               case PTP_RESPONSE_PARTIAL_DELETION:
+                                       all_del = FALSE;
+                                       break;
+                               case PTP_RESPONSE_OBJ_WRITEPROTECTED:
+                               case PTP_RESPONSE_ACCESSDENIED:
+                                       all_del = FALSE;
+                                       break;
+                               case PTP_RESPONSE_UNDEFINED:
+                               default:
+                                       /* do nothing */
+                                       break;
+                               }
                        }
                }
        }
@@ -1202,8 +1211,11 @@ void _entity_list_modified_files(mtp_uint32 minutes)
                }
        }
        if (TRUE == _device_is_store_mounted(MTP_STORAGE_EXTERNAL)) {
+               char ext_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 };
+               _util_get_external_path(ext_path);
+
                g_snprintf(command, FIND_CMD_LEN, FIND_CMD,
-                               MTP_EXTERNAL_PATH_CHAR, minutes,
+                               ext_path, minutes,
                                MTP_FILES_MODIFIED_FILES);
                DBG("find query is [%s]\n", command);
                ret = system(command);
index 5b1b7c598e1aa28bed2b200b78714727baafe429..a3661efbd559bdeabcd1bff41483e121003eaa72 100755 (executable)
@@ -286,6 +286,9 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name,
                                                        "%s/%s", MTP_STORE_PATH_CHAR,
                                                        MTP_FILE_NAME_WMPINFO_XML);
                                } else {
+                                       char ext_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 };
+                                       _util_get_external_path(ext_path);
+
                                        g_snprintf(wmp_hidden_path,
                                                        MTP_MAX_PATHNAME_SIZE + 1,
                                                        "%s/%s/%s", MTP_USER_DIRECTORY,
@@ -293,7 +296,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name,
                                                        MTP_FILE_NAME_WMPINFO_XML);
                                        g_snprintf(wmp_info_path,
                                                        MTP_MAX_PATHNAME_SIZE + 1,
-                                                       "%s/%s", MTP_EXTERNAL_PATH_CHAR,
+                                                       "%s/%s", ext_path,
                                                        MTP_FILE_NAME_WMPINFO_XML);
                                }
 
index 8210d79a4e2da38ea15c177e75fbf0f2914d3d04..bd98a3ef950d43d4699bb3f594a489108531fb5f 100755 (executable)
@@ -155,10 +155,12 @@ void _mtp_init(add_rem_store_t sel)
        }
        /* External Storage */
        if (MTP_PHONE_MMC_INSERTED == _util_get_local_mmc_status()) {
-               if (access(MTP_EXTERNAL_PATH_CHAR, F_OK) < 0) {
-                       if (FALSE == _util_dir_create(MTP_EXTERNAL_PATH_CHAR, &error)) {
+               char ext_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 };
+               _util_get_external_path(ext_path);
+               if (access(ext_path, F_OK) < 0) {
+                       if (FALSE == _util_dir_create(ext_path, &error)) {
                                ERR("Cannot make directory!! [%s]\n",
-                                               MTP_EXTERNAL_PATH_CHAR);
+                                               ext_path);
                                goto MTP_INIT_FAIL;
                        }
                }
index 6c8f7678aa57c8f29f399143cfe499a4eff2a453..56dcdd456e3e122463c31df671c0dd516dfb31ed 100755 (executable)
@@ -485,8 +485,11 @@ static void __remove_recursive_inoti_watch(mtp_char *path)
 
 static void __clean_up_inoti(void *data)
 {
+       char ext_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 };
+       _util_get_external_path(ext_path);
+
        __remove_recursive_inoti_watch(MTP_STORE_PATH_CHAR);
-       __remove_recursive_inoti_watch((mtp_char *)MTP_EXTERNAL_PATH_CHAR);
+       __remove_recursive_inoti_watch((mtp_char *)ext_path);
        __destroy_inoti_open_files_list();
 
        close(g_inoti_fd);
@@ -557,8 +560,11 @@ static void __process_object_added_event(mtp_char *fullpath,
        }
        parent_obj = _entity_get_object_from_store_by_path(store, parent_path);
        if (NULL == parent_obj) {
+               char ext_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 };
+               _util_get_external_path(ext_path);
+
                if (!g_strcmp0(parent_path, MTP_STORE_PATH_CHAR) ||
-                               !g_strcmp0(parent_path, MTP_EXTERNAL_PATH_CHAR))
+                               !g_strcmp0(parent_path, ext_path))
                {
                        DBG("parent is the root folder");
                        h_parent = 0;
index b5e01da180e07cdb807e4e350d61a2d91c9f89a4..4f715ba3acf007e8bf870f7daea81a09cc8b1d24 100755 (executable)
@@ -468,12 +468,16 @@ mtp_bool _util_is_path_len_valid(const mtp_char *path)
        static mtp_uint32 internal_store_len = 0;
        static mtp_uint32 external_store_len = 0;
 
+       char ext_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 };
+
        retv_if(path == NULL, FALSE);
 
+       _util_get_external_path(ext_path);
+
        if (!is_initialized) {
                is_initialized = TRUE;
                internal_store_len = strlen(MTP_STORE_PATH_CHAR);
-               external_store_len = strlen(MTP_EXTERNAL_PATH_CHAR);
+               external_store_len = strlen(ext_path);
 
                max_store_len = internal_store_len > external_store_len ?
                        internal_store_len : external_store_len;
@@ -483,7 +487,7 @@ mtp_bool _util_is_path_len_valid(const mtp_char *path)
 
        if (!strncmp(path, MTP_STORE_PATH_CHAR, internal_store_len)) {
                root_path_len = internal_store_len;
-       } else if (!strncmp(path, MTP_EXTERNAL_PATH_CHAR, external_store_len)) {
+       } else if (!strncmp(path, ext_path, external_store_len)) {
                root_path_len = external_store_len;
        }
        else {
index 5b0ee9ce992d931d3064f2091a7d768ab5b070b6..afea4f884e93b29369c9b518f39faec7f819076d 100755 (executable)
@@ -28,6 +28,7 @@
 #include "mtp_util.h"
 #include "mtp_support.h"
 #include "mtp_fs.h"
+#include <storage/storage.h>
 
 static phone_state_t g_ph_status = { 0 };
 
@@ -291,3 +292,27 @@ void _util_set_local_usbmode_status(const phone_status_t val)
        g_ph_status.usb_mode_state = val;
        return;
 }
+
+static bool _util_device_supported_cb(int storage_id, storage_type_e type,
+       storage_state_e state, const char *path, void *user_data)
+{
+       char *ext_path = (char *)user_data;
+       
+       if (type == STORAGE_TYPE_EXTERNAL && path != NULL) {
+               strncpy(ext_path, path, strlen(path));
+               DBG("external storage path : %s", ext_path);
+       }
+
+       return TRUE;
+}
+
+void _util_get_external_path(char *ext_path)
+{
+       int error = STORAGE_ERROR_NONE;
+       error = storage_foreach_device_supported(_util_device_supported_cb, ext_path);
+
+       if (error != STORAGE_ERROR_NONE) {
+               ERR("get external storage path Fail");
+               strncpy(ext_path, MTP_EXTERNAL_PATH_CHAR, strlen(MTP_EXTERNAL_PATH_CHAR));
+       }
+}