From 1dcf76ba901066958918b8651b26fd6dbbf19f56 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Pawe=C5=82=20Szewczyk?= Date: Mon, 12 Mar 2018 14:00:16 +0100 Subject: [PATCH 01/16] ffs: Fix issues related to starting/stopping ffs MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit In case of ffs we rely on events from ep0, which makes vconf events reduntant. This requires selecting transport as soon as possible and using that info at initialization of other components. Change-Id: I9b164edcd883ae94061b29d5ae494521bf79cc71 Signed-off-by: Paweł Szewczyk --- include/transport/mtp_usb_driver.h | 1 + src/mtp_event_handler.c | 43 +++++++++++++++++++++++--------------- src/mtp_init.c | 6 ++++++ src/transport/mtp_usb_driver.c | 19 ++++++++++++----- src/transport/mtp_usb_driver_ffs.c | 16 +++++++++++++- 5 files changed, 62 insertions(+), 23 deletions(-) diff --git a/include/transport/mtp_usb_driver.h b/include/transport/mtp_usb_driver.h index 968616a..51253d5 100755 --- a/include/transport/mtp_usb_driver.h +++ b/include/transport/mtp_usb_driver.h @@ -83,6 +83,7 @@ typedef enum { /* Maximum repeat count for USB error recovery */ #define MTP_USB_ERROR_MAX_RETRY 5 +mtp_bool _transport_select_driver(void); mtp_bool _transport_init_usb_device(void); void _transport_deinit_usb_device(void); void *_transport_thread_usb_write(void *arg); diff --git a/src/mtp_event_handler.c b/src/mtp_event_handler.c index 417c748..b021a75 100755 --- a/src/mtp_event_handler.c +++ b/src/mtp_event_handler.c @@ -60,22 +60,30 @@ mtp_bool _eh_register_notification_callbacks(void) mtp_int32 ret; phone_status_t val = 0; - _util_get_usb_status(&val); - _util_set_local_usb_status(val); - ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_USB_STATUS, - __handle_usb_notification, NULL); - if (ret < 0) { - ERR("vconf_notify_key_changed(%s) Fail", VCONFKEY_SYSMAN_USB_STATUS); - return FALSE; - } + /* For FFS transport we rely on ep0 events */ + if (_transport_get_type() == MTP_TRANSPORT_FFS) { + DBG("Using FFS transport, assuming established connection"); + _util_set_local_usb_status(MTP_PHONE_USB_DISCONNECTED); + _util_set_local_usbmode_status(1); + } else { + DBG("Using legacy transport, registering vconf notifier"); + _util_get_usb_status(&val); + _util_set_local_usb_status(val); + ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_USB_STATUS, + __handle_usb_notification, NULL); + if (ret < 0) { + ERR("vconf_notify_key_changed(%s) Fail", VCONFKEY_SYSMAN_USB_STATUS); + return FALSE; + } - _util_get_usbmode_status(&val); - _util_set_local_usbmode_status(val); - ret = vconf_notify_key_changed(VCONFKEY_USB_CUR_MODE, - __handle_usb_mode_notification, NULL); - if (ret < 0) { - ERR("vconf_notify_key_changed(%s) Fail", VCONFKEY_USB_CUR_MODE); - return FALSE; + _util_get_usbmode_status(&val); + _util_set_local_usbmode_status(val); + ret = vconf_notify_key_changed(VCONFKEY_USB_CUR_MODE, + __handle_usb_mode_notification, NULL); + if (ret < 0) { + ERR("vconf_notify_key_changed(%s) Fail", VCONFKEY_USB_CUR_MODE); + return FALSE; + } } _util_get_lock_status(&val); @@ -106,12 +114,13 @@ mtp_bool _eh_handle_usb_events(mtp_uint32 type) return TRUE; } - is_usb_inserted = 1; /* check USB connection state */ - if (MTP_PHONE_USB_DISCONNECTED == _util_get_local_usb_status()) { + if (_transport_get_type() != MTP_TRANSPORT_FFS && + MTP_PHONE_USB_DISCONNECTED == _util_get_local_usb_status()) { ERR("USB is disconnected. So just return."); return FALSE; } + is_usb_inserted = 1; _transport_set_usb_discon_state(FALSE); _transport_set_cancel_initialization(FALSE); diff --git a/src/mtp_init.c b/src/mtp_init.c index 02a7b1b..c2643be 100755 --- a/src/mtp_init.c +++ b/src/mtp_init.c @@ -32,6 +32,7 @@ #include "mtp_transport.h" #include "mtp_util.h" #include "mtp_media_info.h" +#include "mtp_usb_driver.h" /* * GLOBAL AND EXTERN VARIABLES @@ -489,6 +490,11 @@ int main(int argc, char *argv[]) { mtp_int32 ret; + if (_transport_select_driver() == FALSE) { + ERR("_transport_select_driver fail"); + return MTP_ERROR_GENERAL; + } + if (_eh_register_notification_callbacks() == FALSE) { ERR("_eh_register_notification_callbacks() Fail"); return MTP_ERROR_GENERAL; diff --git a/src/transport/mtp_usb_driver.c b/src/transport/mtp_usb_driver.c index 6fde025..a856151 100644 --- a/src/transport/mtp_usb_driver.c +++ b/src/transport/mtp_usb_driver.c @@ -23,17 +23,26 @@ static const mtp_usb_driver_t *usb_driver; /* * FUNCTIONS */ -mtp_bool _transport_init_usb_device(void) +mtp_bool _transport_select_driver(void) { if (access(MTP_DRIVER_PATH, F_OK) == 0) { usb_driver = &mtp_usb_driver_slp; - } else if (access(MTP_EP0_PATH, F_OK) == 0 || sd_listen_fds(0) >= 4) { + DBG("SLP driver selected"); + return TRUE; + } + + if (access(MTP_EP0_PATH, F_OK) == 0 || sd_listen_fds(0) >= 4) { usb_driver = &mtp_usb_driver_ffs; - } else { - ERR("No suport for USB gadgets in kernel"); - return FALSE; + DBG("FFS driver selected"); + return TRUE; } + ERR("No suport for USB gadgets in kernel"); + return FALSE; +} + +mtp_bool _transport_init_usb_device(void) +{ return usb_driver->transport_init_usb_device(); } diff --git a/src/transport/mtp_usb_driver_ffs.c b/src/transport/mtp_usb_driver_ffs.c index 091daa8..39abc2d 100755 --- a/src/transport/mtp_usb_driver_ffs.c +++ b/src/transport/mtp_usb_driver_ffs.c @@ -33,6 +33,7 @@ #include "mtp_thread.h" #include "mtp_transport.h" #include "mtp_event_handler.h" +#include "mtp_init.h" #include #include @@ -75,6 +76,7 @@ static mtp_bool __io_init() int ret; if (sd_listen_fds(0) >= 4) { + DBG("socket-activated"); g_usb_ep0 = SD_LISTEN_FDS_START; g_usb_ep_in = SD_LISTEN_FDS_START + 1; g_usb_ep_out = SD_LISTEN_FDS_START + 2; @@ -428,6 +430,15 @@ static void *ffs_transport_thread_usb_control(void *arg) event.u.setup.wLength); __setup(g_usb_ep0, &event.u.setup); break; + case FUNCTIONFS_ENABLE: + DBG("ENABLE"); + _util_set_local_usb_status(MTP_PHONE_USB_CONNECTED); + break; + case FUNCTIONFS_DISABLE: + DBG("DISABLE"); + _util_set_local_usb_status(MTP_PHONE_USB_DISCONNECTED); + _eh_send_event_req_to_eh_thread(EVENT_USB_REMOVED, 0, 0, NULL); + break; } } while (status > 0); @@ -463,6 +474,8 @@ static mtp_int32 __handle_usb_read_err(mtp_int32 err, ERR("_transport_init_usb_device Fail"); continue; } + } else if (err < 0 && errno == ESHUTDOWN) { + DBG("ESHUTDOWN"); } else { ERR("Unknown error : %d, errno [%d] \n", err, errno); break; @@ -483,10 +496,11 @@ static void __clean_up_msg_queue(void *mq_id) { mtp_int32 len = 0; msgq_ptr_t pkt = { 0 }; - msgq_id_t l_mqid = *(msgq_id_t *)mq_id; + msgq_id_t l_mqid; ret_if(mq_id == NULL); + l_mqid = *(msgq_id_t *)mq_id; _transport_set_control_event(PTP_EVENTCODE_CANCELTRANSACTION); while (TRUE == _util_msgq_receive(l_mqid, (void *)&pkt, sizeof(msgq_ptr_t) - sizeof(long), 1, &len)) { -- 2.7.4 From 499e423fba0803e55361e88b641e264f200a8ef9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Pawe=C5=82=20Szewczyk?= Date: Mon, 26 Mar 2018 18:55:00 +0200 Subject: [PATCH 02/16] utils: Wait for user if there are no user sessions MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit At system start systemd will create user session, but this could be after mtp is started. This patch makes the user-finding function wait for user to appear. Change-Id: I80ccbb69faf9085f7cef30e51a09ef4f785c0bd0 Signed-off-by: Paweł Szewczyk --- src/util/mtp_util.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/util/mtp_util.c b/src/util/mtp_util.c index 273fd13..67545c7 100755 --- a/src/util/mtp_util.c +++ b/src/util/mtp_util.c @@ -35,6 +35,10 @@ //#include #include #include +#include + +/* time to wait for user session creation, in ms */ +#define WAIT_FOR_USER_TIMEOUT 10000 static phone_state_t g_ph_status = { 0 }; @@ -360,13 +364,46 @@ void _util_get_external_path(char *external_path) strncpy(external_path, MTP_EXTERNAL_PATH_CHAR, strlen(MTP_EXTERNAL_PATH_CHAR) + 1); } } + +int _util_wait_for_user() +{ + __attribute__((cleanup(sd_login_monitor_unrefp))) sd_login_monitor *monitor = NULL; + int ret; + struct pollfd fds; + + ret = sd_login_monitor_new("uid", &monitor); + if (ret < 0) { + ERR("Failed to allocate login monitor object: %s", strerror(-ret)); + return ret; + } + + fds.fd = sd_login_monitor_get_fd(monitor); + fds.events = sd_login_monitor_get_events(monitor); + + ret = poll(&fds, 1, WAIT_FOR_USER_TIMEOUT); + if (ret < 0) { + ERR("Error polling: %m"); + return -1; + } + + return 0; +} + uid_t _util_get_active_user() { uid_t *active_user_list = NULL; uid_t active_user = 0; int user_cnt = 0; + int ret; user_cnt = sd_get_active_uids(&active_user_list); + if (user_cnt <= 0) { + ret = _util_wait_for_user(); + if (ret < 0) + return -1; + + user_cnt = sd_get_active_uids(&active_user_list); + } if (user_cnt <= 0) { ERR("Active user not exists : %d", user_cnt); -- 2.7.4 From 4ddd75dc29d284aa4a2ee12e2de3ceac392a3da4 Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Tue, 10 Apr 2018 10:44:33 +0900 Subject: [PATCH 03/16] Fix WGID 342646 Change-Id: I04ba9709e5c2c378271a018d96786d0b3ada059b Signed-off-by: saerome.kim --- src/util/mtp_util.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) mode change 100755 => 100644 src/util/mtp_util.c diff --git a/src/util/mtp_util.c b/src/util/mtp_util.c old mode 100755 new mode 100644 index 67545c7..74e32c0 --- a/src/util/mtp_util.c +++ b/src/util/mtp_util.c @@ -373,7 +373,9 @@ int _util_wait_for_user() ret = sd_login_monitor_new("uid", &monitor); if (ret < 0) { - ERR("Failed to allocate login monitor object: %s", strerror(-ret)); + char buf[256] = {0,}; + strerror_r(-ret, buf, sizeof(buf)); + ERR("Failed to allocate login monitor object: [%d]:[%s]", ret, buf); return ret; } -- 2.7.4 From 3dc7b0c209f93ddd6a206c511468f0de9772df9b Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Fri, 4 May 2018 16:17:59 +0900 Subject: [PATCH 04/16] Fixed Svace from MCD: WID 144878 Change-Id: I545451032e112fcab68eae50c9f2ecef3b7e7a51 Signed-off-by: saerome.kim --- src/util/mtp_util.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/util/mtp_util.c b/src/util/mtp_util.c index 74e32c0..3da8ad1 100644 --- a/src/util/mtp_util.c +++ b/src/util/mtp_util.c @@ -345,7 +345,8 @@ static bool _util_device_external_supported_cb(int storage_id, storage_type_e ty //DBG("storage id: %d, path: %s", storage_id, path); if (type == STORAGE_TYPE_EXTERNAL && path != NULL) { - strncpy(storage_path, path, strlen(path)); + strncpy(storage_path, path, strlen(path)+1); + storage_path[strlen(path)] = 0; //DBG("external storage path : %s", storage_path); } @@ -360,8 +361,10 @@ void _util_get_external_path(char *external_path) if (error != STORAGE_ERROR_NONE) { ERR("get external storage path Fail"); - if (external_path != NULL) - strncpy(external_path, MTP_EXTERNAL_PATH_CHAR, strlen(MTP_EXTERNAL_PATH_CHAR) + 1); + if (external_path != NULL) { + strncpy(external_path, MTP_EXTERNAL_PATH_CHAR, sizeof(MTP_EXTERNAL_PATH_CHAR)); + external_path[sizeof(MTP_EXTERNAL_PATH_CHAR) - 1] = 0; + } } } @@ -447,14 +450,16 @@ void _util_get_internal_path(char *internal_path) if (active_name == NULL) { ERR("active_name is NULL"); - strncpy(internal_path, MTP_USER_DIRECTORY, strlen(MTP_USER_DIRECTORY) + 1); + strncpy(internal_path, MTP_USER_DIRECTORY, sizeof(MTP_USER_DIRECTORY)); + internal_path[sizeof(MTP_USER_DIRECTORY) - 1] = 0; return; } if (internal_path != NULL) { - strncpy(internal_path, MTP_INTERNAL_PATH_CHAR, strlen(MTP_INTERNAL_PATH_CHAR) + 1); + strncpy(internal_path, MTP_INTERNAL_PATH_CHAR, sizeof(MTP_INTERNAL_PATH_CHAR)); strncat(internal_path, active_name, strlen(active_name) + 1); strncat(internal_path, "/media", 7); + internal_path[strlen(internal_path)] = 0; } ERR("internal path is %s", internal_path); -- 2.7.4 From 2ae89e427f8d0ff2984f7afeb0ec33d6b733bc8e Mon Sep 17 00:00:00 2001 From: Jihoon Jung Date: Wed, 23 May 2018 16:31:45 +0900 Subject: [PATCH 05/16] change lock screen impl Signed-off-by: Jihoon Jung Change-Id: I782ff868b7decad8669520c28948222fbb6d35aa --- packaging/mtp-responder.spec | 2 +- src/util/mtp_util.c | 10 ++-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/packaging/mtp-responder.spec b/packaging/mtp-responder.spec index 93187ae..d6f5a6e 100755 --- a/packaging/mtp-responder.spec +++ b/packaging/mtp-responder.spec @@ -5,7 +5,7 @@ ExcludeArch: %arm aarch64 Name: mtp-responder Summary: Media Transfer Protocol daemon (responder) -Version: 0.0.25 +Version: 0.0.28 Release: 1 Group: Network & Connectivity/Other License: Apache-2.0 diff --git a/src/util/mtp_util.c b/src/util/mtp_util.c index 3da8ad1..d27d453 100644 --- a/src/util/mtp_util.c +++ b/src/util/mtp_util.c @@ -308,18 +308,12 @@ void _util_set_local_usbmode_status(const phone_status_t val) void _util_get_lock_status(phone_status_t *val) { - mtp_int32 ret = 0; - - struct stat st; -/* mtp_int32 state = 0; - ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE_READ_ONLY, + vconf_get_int(VCONFKEY_IDLE_LOCK_STATE_READ_ONLY, &state); -*/ - ret = stat("/opt/usr/home", &st); - if (ret == -1) + if (state) *val = MTP_PHONE_LOCK_ON; else *val = MTP_PHONE_LOCK_OFF; -- 2.7.4 From 420198c0b90e65675eace41924678fba424f5964 Mon Sep 17 00:00:00 2001 From: Jihoon Jung Date: Thu, 31 May 2018 14:39:00 +0900 Subject: [PATCH 06/16] Add error handling for object copy Signed-off-by: Jihoon Jung Change-Id: Ib001c85a9bb3f3a1294b76aab9889e2da50b2b59 --- include/mtp_config.h | 4 ++-- packaging/mtp-responder.spec | 2 +- src/mtp_cmd_handler_util.c | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/include/mtp_config.h b/include/mtp_config.h index eac1d2e..5d37986 100755 --- a/include/mtp_config.h +++ b/include/mtp_config.h @@ -136,8 +136,8 @@ #define MTP_UNKNOWN_METADATAW L"Unknown" /* strlen(/opt/usr/share/crash/) + MTP path len limit */ -#define MTP_MAX_PATHNAME_SIZE (21 + 255) /* except \0 */ -#define MTP_MAX_FILENAME_SIZE (254) /* except \0 */ +#define MTP_MAX_PATHNAME_SIZE (21 + 1024) /* except \0 */ +#define MTP_MAX_FILENAME_SIZE (1024) /* except \0 */ #define MTP_MAX_CMD_BLOCK_SIZE 36 /* Bytes */ diff --git a/packaging/mtp-responder.spec b/packaging/mtp-responder.spec index d6f5a6e..1cc2c67 100755 --- a/packaging/mtp-responder.spec +++ b/packaging/mtp-responder.spec @@ -5,7 +5,7 @@ ExcludeArch: %arm aarch64 Name: mtp-responder Summary: Media Transfer Protocol daemon (responder) -Version: 0.0.28 +Version: 0.0.29 Release: 1 Group: Network & Connectivity/Other License: Apache-2.0 diff --git a/src/mtp_cmd_handler_util.c b/src/mtp_cmd_handler_util.c index 2b4d495..8bde5db 100755 --- a/src/mtp_cmd_handler_util.c +++ b/src/mtp_cmd_handler_util.c @@ -1595,6 +1595,12 @@ mtp_err_t _hutil_construct_object_entry_prop_list(mtp_uint32 store_id, return MTP_ERROR_STORE_FULL; } + if (store->store_info.free_space <= obj_sz) { + ERR("free space is not enough [%ld bytes]\n", + store->store_info.free_space); + return MTP_ERROR_STORE_FULL; + } + obj_info = _entity_alloc_object_info(); if (obj_info == NULL) { ERR("_entity_alloc_object_info Fail"); -- 2.7.4 From 08a25b32be5374be93cde5ebd9b14c8f07c1b1d6 Mon Sep 17 00:00:00 2001 From: Jihoon Jung Date: Tue, 5 Jun 2018 08:12:43 +0900 Subject: [PATCH 07/16] [Lux US STA] Fix Svace issue Signed-off-by: Jihoon Jung Change-Id: I87c79988f9cbf63e5080b5c8cf51a6907178a9e3 --- packaging/mtp-responder.spec | 4 ++-- src/mtp_init.c | 48 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/packaging/mtp-responder.spec b/packaging/mtp-responder.spec index 1cc2c67..567671b 100755 --- a/packaging/mtp-responder.spec +++ b/packaging/mtp-responder.spec @@ -5,12 +5,12 @@ ExcludeArch: %arm aarch64 Name: mtp-responder Summary: Media Transfer Protocol daemon (responder) -Version: 0.0.29 +Version: 0.0.30 Release: 1 Group: Network & Connectivity/Other License: Apache-2.0 Source0: %{name}-%{version}.tar.gz -Source1001: %{name}.manifest +Source1001: %{name}.manifest BuildRequires: cmake BuildRequires: libgcrypt-devel BuildRequires: pkgconfig(glib-2.0) diff --git a/src/mtp_init.c b/src/mtp_init.c index c2643be..1fca0d2 100755 --- a/src/mtp_init.c +++ b/src/mtp_init.c @@ -331,66 +331,114 @@ static void __read_mtp_conf(void) if (strcasecmp(token, "mmap_threshold") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.mmap_threshold = atoi(token); } else if (strcasecmp(token, "init_rx_ipc_size") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.init_rx_ipc_size = atoi(token); } else if (strcasecmp(token, "init_tx_ipc_size") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.init_tx_ipc_size = atoi(token); } else if (strcasecmp(token, "max_rx_ipc_size") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.max_rx_ipc_size = atoi(token); } else if (strcasecmp(token, "max_tx_ipc_size") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.max_tx_ipc_size = atoi(token); } else if (strcasecmp(token, "read_usb_size") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.read_usb_size = atoi(token); } else if (strcasecmp(token, "write_usb_size") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.write_usb_size = atoi(token); } else if (strcasecmp(token, "read_file_size") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.read_file_size = atoi(token); } else if (strcasecmp(token, "write_file_size") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.write_file_size = atoi(token); } else if (strcasecmp(token, "max_io_buf_size") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.max_io_buf_size = atoi(token); } else if (strcasecmp(token, "read_file_delay") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.read_file_delay = atoi(token); } else if (strcasecmp(token, "support_pthread_sched") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.support_pthread_sched = atoi(token) ? true : false; } else if (strcasecmp(token, "inheritsched") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.inheritsched = *token; } else if (strcasecmp(token, "schedpolicy") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.schedpolicy = *token; } else if (strcasecmp(token, "file_schedparam") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.file_schedparam = atoi(token); } else if (strcasecmp(token, "usb_schedparam") == 0) { token = strtok_r(NULL, "=", &saveptr); + if (token == NULL) + continue; + g_conf.usb_schedparam = atoi(token); } else { -- 2.7.4 From d4502829046b3ddefff739c07a68f75572f129d2 Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Fri, 15 Jun 2018 12:44:01 +0900 Subject: [PATCH 08/16] Fix build warning: 346727 Change-Id: I5712365dde16d052554ce599bf5140325ee602d3 Signed-off-by: saerome.kim --- src/extract_descs/mtp_extract_descs_strs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extract_descs/mtp_extract_descs_strs.c b/src/extract_descs/mtp_extract_descs_strs.c index 947c4e2..7530790 100644 --- a/src/extract_descs/mtp_extract_descs_strs.c +++ b/src/extract_descs/mtp_extract_descs_strs.c @@ -31,7 +31,7 @@ static int write_blob(const char *filename, const void *blob, size_t size) ret = fwrite(blob, size, 1, fp); if (ret < 0) { - fprintf(stderr, "Could not write to %s\n"); + fprintf(stderr, "Could not write to %s\n", filename); goto out; } -- 2.7.4 From 45f7b1bb0ee6bec4760ff8046f95f74a1a749428 Mon Sep 17 00:00:00 2001 From: Jihoon Jung Date: Fri, 22 Jun 2018 14:58:22 +0900 Subject: [PATCH 09/16] Change deprecated multimedia API Signed-off-by: Jihoon Jung Change-Id: I2ededdd023ccaa4eb99e98593d4435fc14b89830 --- src/util/mtp_media_info.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/util/mtp_media_info.c b/src/util/mtp_media_info.c index e1b3bea..87f4b09 100755 --- a/src/util/mtp_media_info.c +++ b/src/util/mtp_media_info.c @@ -778,7 +778,7 @@ void _util_delete_file_from_db(const mtp_char *filepath) { int ret; media_info_h info = NULL; - char *media_id = NULL; + char *path = NULL; mtp_char condition[MEDIA_PATH_COND_MAX_LEN + 1]; ret_if(NULL == filepath); @@ -791,16 +791,16 @@ void _util_delete_file_from_db(const mtp_char *filepath) return; } - ret = media_info_get_media_id(info, &media_id); + ret = media_info_get_file_path(info, &path); if (MEDIA_CONTENT_ERROR_NONE != ret) - ERR("media_info_get_media_id() Fail(%d)", ret); + ERR("media_info_get_file_path() Fail(%d)", ret); - ret = media_info_delete_from_db(media_id); + ret = media_content_scan_file(path); if (MEDIA_CONTENT_ERROR_NONE != ret) - ERR("media_info_delete_from_db() Fail(%d)", ret); + ERR("media_content_scan_file() Fail(%d)", ret); - if (media_id) - free(media_id); + if (path) + free(path); if (info) media_info_destroy(info); -- 2.7.4 From c0158cb8bea0ec7b4db6a70d4581f9d44ac7fcee Mon Sep 17 00:00:00 2001 From: Jihoon Jung Date: Mon, 16 Jul 2018 13:55:41 +0900 Subject: [PATCH 10/16] sync with Tizen 4.0 mtp-responder - Fix svace issue - Fix DDos problem Signed-off-by: Jihoon Jung Change-Id: Iee8fee79f24c0ef7d7e312a4618a8af070964dfa --- packaging/mtp-responder.spec | 2 +- src/mtp_cmd_handler.c | 60 ++++++++++++++++++++++++++++++++++++++++--- src/mtp_cmd_handler_util.c | 2 +- src/mtp_init.c | 7 ----- src/transport/mtp_transport.c | 18 +++++++++---- 5 files changed, 71 insertions(+), 18 deletions(-) diff --git a/packaging/mtp-responder.spec b/packaging/mtp-responder.spec index 567671b..849f491 100755 --- a/packaging/mtp-responder.spec +++ b/packaging/mtp-responder.spec @@ -5,7 +5,7 @@ ExcludeArch: %arm aarch64 Name: mtp-responder Summary: Media Transfer Protocol daemon (responder) -Version: 0.0.30 +Version: 0.0.31 Release: 1 Group: Network & Connectivity/Other License: Apache-2.0 diff --git a/src/mtp_cmd_handler.c b/src/mtp_cmd_handler.c index cce170e..c2e1086 100755 --- a/src/mtp_cmd_handler.c +++ b/src/mtp_cmd_handler.c @@ -42,6 +42,7 @@ extern pthread_mutex_t g_cmd_inoti_mutex; extern mtp_config_t g_conf; mtp_bool g_is_sync_estab = FALSE; +mtp_bool g_is_send_object = FALSE; /* * STATIC VARIABLES @@ -53,6 +54,8 @@ static mtp_uint16 g_count_open_session = 0; static mtp_uint32 g_old_open_session_time = 0; #endif/*MTP_USE_SKIP_CONTINUOUS_OPENSESSION*/ +#define LEN 20 + /* * STATIC FUNCTIONS */ @@ -289,6 +292,21 @@ static void __process_commands(mtp_handler_t *hdlr, cmd_blk_t *cmd) */ if (_device_get_phase() == DEVICE_PHASE_IDLE) { DBG("DATAOUT COMMAND PHASE!!"); + if (hdlr->usb_cmd.code == PTP_OPCODE_SENDOBJECT) { + mtp_char parent_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 }; + + if (g_mgr->ftemp_st.filepath) { + _util_get_parent_path(g_mgr->ftemp_st.filepath, parent_path); + DBG("g_mgr->ftemp_st.filepath:[%s], parent_path[%s]\n", g_mgr->ftemp_st.filepath, parent_path); + + if ((g_strcmp0(parent_path, "/tmp")) != 0) + g_is_send_object = TRUE; + } + + _eh_send_event_req_to_eh_thread(EVENT_START_DATAOUT, + 0, 0, NULL); + } + if (hdlr->usb_cmd.code == PTP_OPCODE_SENDOBJECT) _eh_send_event_req_to_eh_thread(EVENT_START_DATAOUT, 0, 0, NULL); @@ -301,6 +319,8 @@ static void __process_commands(mtp_handler_t *hdlr, cmd_blk_t *cmd) break; case PTP_OPCODE_SENDOBJECT: __send_object(hdlr); + g_is_send_object = FALSE; + _eh_send_event_req_to_eh_thread(EVENT_DONE_DATAOUT, 0, 0, NULL); break; @@ -3266,25 +3286,57 @@ static mtp_bool __receive_temp_file_first_packet(mtp_char *data, mtp_int32 data_len) { mtp_char *filepath = g_mgr->ftemp_st.filepath; + temp_file_struct_t *t = &g_mgr->ftemp_st; mtp_int32 error = 0; mtp_uint32 *data_sz = &g_mgr->ftemp_st.data_size; mtp_char *buffer = g_mgr->ftemp_st.temp_buff; + mtp_char buff[LEN], *ptr; + mtp_char filename[MTP_MAX_FILENAME_SIZE] = {0}; + mtp_uint32 i, num, start, range; + unsigned int seed; _transport_set_mtp_operation_state(MTP_STATE_DATA_TRANSFER_DL); - if (access(filepath, F_OK) == 0) { + if (!g_is_send_object) { + /*create a unique filename for /tmp/.mtptemp.tmp only if + is_send_object = 0. If is_send_object = 0 implies t->filepath + is set in send_object_proplist command to receive the + incoming file */ + start = 'A'; + range = 'Z' - 'A'; + + seed = time(NULL); + for (ptr = buff, i = 1; i < LEN; ++ptr, ++i) { + num = rand_r(&seed) % range; + *ptr = num+start; + } + *ptr = '\0'; + + g_snprintf(filename, MTP_MAX_FILENAME_SIZE, "%s%s%s", "/tmp/.mtptemp", buff, ".tmp"); + + if (t->filepath != NULL) { + g_free(t->filepath); + t->filepath = NULL; + } + + t->filepath = g_strdup(filename); + } + + DBG("t->filepath :%s\n", t->filepath); + + if (access(t->filepath, F_OK) == 0) { if (g_mgr->ftemp_st.fhandle != NULL) { _util_file_close(g_mgr->ftemp_st.fhandle); g_mgr->ftemp_st.fhandle = NULL; /* initialize */ } - if (remove(filepath) < 0) { - ERR_SECURE("remove(%s) Fail", filepath); + if (remove(t->filepath) < 0) { + ERR_SECURE("remove(%s) Fail", t->filepath); __finish_receiving_file_packets(data, data_len); return FALSE; } } - g_mgr->ftemp_st.fhandle = _util_file_open(filepath, MTP_FILE_WRITE, &error); + g_mgr->ftemp_st.fhandle = _util_file_open(t->filepath, MTP_FILE_WRITE, &error); if (g_mgr->ftemp_st.fhandle == NULL) { ERR("First file handle is invalid!!"); __finish_receiving_file_packets(data, data_len); diff --git a/src/mtp_cmd_handler_util.c b/src/mtp_cmd_handler_util.c index 8bde5db..3be88cd 100755 --- a/src/mtp_cmd_handler_util.c +++ b/src/mtp_cmd_handler_util.c @@ -338,7 +338,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, */ path_len = strlen(store->root_path) + strlen(MTP_TEMP_FILE) + 2; - g_mgr->ftemp_st.filepath = g_realloc(g_mgr->ftemp_st.filepath, path_len); + g_mgr->ftemp_st.filepath = (mtp_char*)g_malloc0(path_len); if (g_mgr->ftemp_st.filepath == NULL) { ERR("g_realloc Fail"); _entity_dealloc_mtp_obj(obj); diff --git a/src/mtp_init.c b/src/mtp_init.c index 1fca0d2..a206959 100755 --- a/src/mtp_init.c +++ b/src/mtp_init.c @@ -138,13 +138,6 @@ void _mtp_init(add_rem_store_t sel) _device_set_sync_partner(MTP_DEV_PROPERTY_SYNCPARTNER); } - - g_mgr->ftemp_st.filepath = g_strdup(MTP_TEMP_FILE_DEFAULT); - if (g_mgr->ftemp_st.filepath == NULL) { - ERR("g_strdup() Fail"); - goto MTP_INIT_FAIL; - } - if (g_mgr->ftemp_st.temp_buff == NULL) { /* Allocate memory for temporary */ g_mgr->ftemp_st.temp_buff = (mtp_char *)g_malloc(g_conf.write_file_size); diff --git a/src/transport/mtp_transport.c b/src/transport/mtp_transport.c index c178c51..3e78d89 100755 --- a/src/transport/mtp_transport.c +++ b/src/transport/mtp_transport.c @@ -100,9 +100,14 @@ mtp_err_t _transport_rcv_temp_file_data(mtp_byte *buffer, mtp_uint32 size, } /* delete temp file, it have to be called in receive_data fn */ - if (remove(g_mgr->ftemp_st.filepath) < 0) { - ERR_SECURE("remove(%s) Fail", g_mgr->ftemp_st.filepath); - _util_print_error(); + if (g_mgr->ftemp_st.filepath != NULL) { + if (remove(g_mgr->ftemp_st.filepath) < 0) { + ERR_SECURE("remove(%s) Fail", g_mgr->ftemp_st.filepath); + _util_print_error(); + } + + g_free(g_mgr->ftemp_st.filepath); + g_mgr->ftemp_st.filepath = NULL; } g_mgr->ftemp_st.data_size = 0; @@ -132,8 +137,11 @@ mtp_err_t _transport_rcv_temp_file_info(mtp_byte *buf, char *filepath, g_mgr->ftemp_st.data_size = 0; g_mgr->ftemp_st.data_count = 0; - g_strlcpy(g_mgr->ftemp_st.filepath, MTP_TEMP_FILE_DEFAULT, - MTP_MAX_PATHNAME_SIZE + 1); + if (g_mgr->ftemp_st.filepath != NULL) { + g_free(g_mgr->ftemp_st.filepath); + g_mgr->ftemp_st.filepath = NULL; + } + g_mgr->ftemp_st.fhandle = NULL; g_mgr->ftemp_st.file_size = 0; -- 2.7.4 From b1c3e40ab7c21c4a1eeb0ee8f034b06470f70fdc Mon Sep 17 00:00:00 2001 From: Jihoon Jung Date: Fri, 20 Jul 2018 15:43:22 +0900 Subject: [PATCH 11/16] Change impl about get total / avaiable storage size Signed-off-by: Jihoon Jung Change-Id: Iaff928591797b98c5f66e7a5b74c11339d4b98ec --- CMakeLists.txt | 2 +- src/util/mtp_fs.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b384e2..87b74f9 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,7 +23,7 @@ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wall -Werror-implicit-function-declaration") SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fexceptions -fvisibility=hidden") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIE") -SET(CMAKE_EXE_LINKER_FLAGS " -Wl,--as-needed -pie -Wl,--hash-style=both,-z,relro") +SET(CMAKE_EXE_LINKER_FLAGS " -Wl,--as-needed -pie -Wl,--hash-style=both,-z,relroi ") ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} pthread rt gcrypt) diff --git a/src/util/mtp_fs.c b/src/util/mtp_fs.c index 4085c0e..5723dba 100755 --- a/src/util/mtp_fs.c +++ b/src/util/mtp_fs.c @@ -26,6 +26,7 @@ #include #include #include +#include #include "mtp_fs.h" #include "mtp_util.h" #include "mtp_support.h" @@ -753,7 +754,8 @@ mtp_bool _util_ifind_next(mtp_char *dir_name, DIR *dirp, dir_entry_t *dir_info) return TRUE; } -mtp_bool _util_get_filesystem_info(mtp_char *storepath, fs_info_t *fs_info) +mtp_bool _util_get_filesystem_info_ext(mtp_char *storepath, + fs_info_t *fs_info) { struct statfs buf = { 0 }; mtp_uint64 avail_size = 0; @@ -761,7 +763,7 @@ mtp_bool _util_get_filesystem_info(mtp_char *storepath, fs_info_t *fs_info) mtp_uint64 used_size = 0; if (statfs(storepath, &buf) != 0) { - ERR("statfs Fail"); + ERR("statfs is failed\n"); return FALSE; } @@ -778,6 +780,45 @@ mtp_bool _util_get_filesystem_info(mtp_char *storepath, fs_info_t *fs_info) return TRUE; } +mtp_bool _util_get_filesystem_info_int(mtp_char *storepath, fs_info_t *fs_info) +{ + struct statvfs s; + int ret; + + mtp_uint64 avail_size = 0; + mtp_uint64 capacity = 0; + mtp_uint64 used_size = 0; + + ret = storage_get_internal_memory_size(&s); + if (ret < 0) { + ERR("storage_get_internal_memory_size : ret = %d", ret); + return FALSE; + } + + capacity = (mtp_uint64)s.f_frsize*s.f_blocks; + avail_size = (mtp_uint64)s.f_bsize*s.f_bavail; + used_size = (capacity - avail_size); + + DBG("total : %llu , avail %llu , used %llu", capacity, avail_size, used_size); + + fs_info->disk_size = capacity; + fs_info->reserved_size = used_size; + fs_info->avail_size = avail_size; + + return TRUE; +} + +mtp_bool _util_get_filesystem_info(mtp_char *storepath, + fs_info_t *fs_info) +{ + if (!g_strcmp0(storepath, MTP_EXTERNAL_PATH_CHAR)) + return _util_get_filesystem_info_ext(storepath, fs_info); + else + return _util_get_filesystem_info_int(storepath, fs_info); + + return FALSE; +} + void _util_count_num_lines(FILE* fhandle, mtp_uint32 *num_lines) { if (fhandle == NULL) -- 2.7.4 From bd4b190e780dc78d6ab99ff9f661ec0a3ae1cad6 Mon Sep 17 00:00:00 2001 From: Jihoon Jung Date: Mon, 20 Aug 2018 16:53:53 +0900 Subject: [PATCH 12/16] Store the proper storage description Signed-off-by: Jihoon Jung Change-Id: I2d9d14add6d0de7d9a906aa337facca77f493620 --- include/mtp_config.h | 1 - packaging/mtp-responder.spec | 2 +- src/entity/mtp_store.c | 24 +++++++++++++++++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/include/mtp_config.h b/include/mtp_config.h index 5d37986..7b02960 100755 --- a/include/mtp_config.h +++ b/include/mtp_config.h @@ -115,7 +115,6 @@ /*To determine whether command is for Samsung mobile*/ #define MTP_SAMSUNG_MOBILE 0x1000 -#define MTP_STORAGE_DESC_INT "Phone" #define MTP_STORAGE_DESC_EXT "Card" /*Devices Property*/ diff --git a/packaging/mtp-responder.spec b/packaging/mtp-responder.spec index 849f491..606535f 100755 --- a/packaging/mtp-responder.spec +++ b/packaging/mtp-responder.spec @@ -5,7 +5,7 @@ ExcludeArch: %arm aarch64 Name: mtp-responder Summary: Media Transfer Protocol daemon (responder) -Version: 0.0.31 +Version: 0.0.32 Release: 1 Group: Network & Connectivity/Other License: Apache-2.0 diff --git a/src/entity/mtp_store.c b/src/entity/mtp_store.c index 882fac5..417ec67 100755 --- a/src/entity/mtp_store.c +++ b/src/entity/mtp_store.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "mtp_util.h" #include "mtp_support.h" #include "mtp_device.h" @@ -206,6 +207,8 @@ mtp_bool _entity_init_mtp_store(mtp_store_t *store, mtp_uint32 store_id, mtp_wchar wtemp[MTP_MAX_REG_STRING + 1] = { 0 }; mtp_char serial[MTP_MAX_REG_STRING + 1] = { 0 }; mtp_wchar wserial[MTP_MAX_REG_STRING + 1] = { 0 }; + char *profile = NULL; + char *storage_desc = NULL; retv_if(store == NULL, FALSE); @@ -223,12 +226,31 @@ mtp_bool _entity_init_mtp_store(mtp_store_t *store, mtp_uint32 store_id, switch (store_id) { case MTP_INTERNAL_STORE_ID: store->is_hidden = FALSE; + + system_info_get_platform_string("http://tizen.org/feature/profile", &profile); + if (profile != NULL) { + if (g_strcmp0(profile, "mobile") == 0) { + storage_desc = g_strdup("Phone"); + } else if (g_strcmp0(profile, "wearable") == 0) { + storage_desc = g_strdup("Watch"); + } + } + + if (storage_desc == NULL) + storage_desc = g_strdup("Common"); + _util_utf8_to_utf16(wtemp, sizeof(wtemp) / WCHAR_SIZ, - MTP_STORAGE_DESC_INT); + storage_desc); __init_store_info_params(&(store->store_info), store->store_info.capacity, PTP_STORAGETYPE_FIXEDRAM, PTP_FILESYSTEMTYPE_HIERARCHICAL, PTP_STORAGEACCESS_RWD, wtemp, wserial); + + if (storage_desc != NULL) + g_free(storage_desc); + + if (profile != NULL) + g_free(profile); break; case MTP_EXTERNAL_STORE_ID: -- 2.7.4 From 3871fff5e9c37b03354d58aa5a0da20ab9389e40 Mon Sep 17 00:00:00 2001 From: Taesoo Jun Date: Wed, 12 Sep 2018 11:43:14 +0900 Subject: [PATCH 13/16] Remove unused local variable - __receive_temp_file_first_packet( ) Change-Id: Ia66ea8f4118b4c4239d7dc28d06aaeb000f214ba Signed-off-by: Taesoo Jun --- src/mtp_cmd_handler.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mtp_cmd_handler.c b/src/mtp_cmd_handler.c index c2e1086..95220f1 100755 --- a/src/mtp_cmd_handler.c +++ b/src/mtp_cmd_handler.c @@ -3285,7 +3285,6 @@ void _receive_mq_data_cb(mtp_char *buffer, mtp_int32 buf_len) static mtp_bool __receive_temp_file_first_packet(mtp_char *data, mtp_int32 data_len) { - mtp_char *filepath = g_mgr->ftemp_st.filepath; temp_file_struct_t *t = &g_mgr->ftemp_st; mtp_int32 error = 0; mtp_uint32 *data_sz = &g_mgr->ftemp_st.data_size; -- 2.7.4 From d993df88e1eb204b6d87ef61e505a90fdc893722 Mon Sep 17 00:00:00 2001 From: Lokesh Date: Fri, 26 Oct 2018 17:08:54 +0530 Subject: [PATCH 14/16] Gtest code for mtp-responder Description: Overall coverage rate: lines......: 89.5% (1927 of 2152 lines) functions..: 94.9% (166 of 175 functions) Change-Id: I46e66dc7a1ffb0d8a0f5006e360f67ac0030e171 Signed-off-by: Lokesh --- CMakeLists.txt | 10 +- include/entity/mtp_device.h | 10 +- include/entity/mtp_object.h | 9 + include/entity/mtp_property.h | 8 + include/entity/mtp_store.h | 8 + include/mtp_cmd_handler.h | 8 + include/mtp_cmd_handler_util.h | 8 + include/mtp_event_handler.h | 8 + include/mtp_init.h | 8 + include/mtp_inoti_handler.h | 8 + include/ptp_container.h | 8 + include/transport/mtp_transport.h | 8 + include/transport/mtp_usb_driver.h | 8 + include/util/mtp_fs.h | 8 + include/util/mtp_list.h | 8 + include/util/mtp_media_info.h | 8 + include/util/mtp_msgq.h | 8 + include/util/mtp_support.h | 8 + include/util/mtp_thread.h | 8 + include/util/mtp_util.h | 7 + packaging/mtp-responder.spec | 22 +- src/entity/mtp_device.c | 24 ++ src/entity/mtp_object.c | 19 +- src/entity/mtp_property.c | 48 ++- src/entity/mtp_store.c | 18 +- src/mtp_cmd_handler.c | 11 + src/mtp_cmd_handler_util.c | 85 ++++- src/mtp_event_handler.c | 2 + src/mtp_init.c | 61 ++-- src/mtp_inoti_handler.c | 12 + src/ptp_container.c | 13 + src/transport/mtp_transport.c | 10 + src/transport/mtp_usb_driver.c | 2 + src/transport/mtp_usb_driver_ffs.c | 2 + src/transport/mtp_usb_driver_slp.c | 3 +- src/util/mtp_fs.c | 14 + src/util/mtp_list.c | 12 +- src/util/mtp_media_info.c | 2 + src/util/mtp_msgq.c | 2 + src/util/mtp_support.c | 15 +- src/util/mtp_thread.c | 14 +- src/util/mtp_util.c | 45 ++- unittest/CMakeLists.txt | 64 ++++ unittest/mtpResponder.cpp | 650 +++++++++++++++++++++++++++++++++++++ unittest/mtpResponder.h | 122 +++++++ unittest/mtpconf.h | 45 +++ unittest/unittest.cpp | 618 +++++++++++++++++++++++++++++++++++ 47 files changed, 2029 insertions(+), 70 deletions(-) create mode 100644 unittest/CMakeLists.txt create mode 100644 unittest/mtpResponder.cpp create mode 100644 unittest/mtpResponder.h create mode 100644 unittest/mtpconf.h create mode 100644 unittest/unittest.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 87b74f9..f256ee6 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,10 @@ AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src/entity SRCS) AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src/transport SRCS) AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src/util SRCS) +IF(BUILD_GCOV) + ADD_DEFINITIONS("-DTIZEN_TEST_GCOV") +ENDIF(BUILD_GCOV) + INCLUDE(FindPkgConfig) pkg_check_modules(pkgs REQUIRED glib-2.0 capi-content-media-content capi-media-metadata-extractor vconf dlog tapi capi-system-info storage libsystemd-daemon libsystemd) @@ -20,7 +24,7 @@ FOREACH(flag ${pkgs_CFLAGS}) ENDFOREACH(flag) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wall -Werror-implicit-function-declaration") -SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fexceptions -fvisibility=hidden") +SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fexceptions -fvisibility=hidden -fprofile-arcs -ftest-coverage") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIE") SET(CMAKE_EXE_LINKER_FLAGS " -Wl,--as-needed -pie -Wl,--hash-style=both,-z,relroi ") @@ -40,3 +44,7 @@ ADD_CUSTOM_TARGET(descs_strs ALL DEPENDS descs strs) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/descs DESTINATION /etc/mtp-responder) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/strs DESTINATION /etc/mtp-responder) + +IF(BUILD_GTESTS) + ADD_SUBDIRECTORY(unittest) +ENDIF(BUILD_GTESTS) diff --git a/include/entity/mtp_device.h b/include/entity/mtp_device.h index 3e53f6c..4b242a6 100755 --- a/include/entity/mtp_device.h +++ b/include/entity/mtp_device.h @@ -17,6 +17,10 @@ #ifndef _MTP_DEVICE_H_ #define _MTP_DEVICE_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_store.h" #include "mtp_property.h" @@ -54,7 +58,6 @@ #define MTP_VENDOR_EXTN_ID 0x06 #define MTP_VENDOR_EXTN_VERSION 0x64 - /* This enumeration specifies the type of store. */ typedef enum { MTP_STORAGE_INTERNAL = 0, @@ -269,4 +272,9 @@ mtp_char *_device_get_device_name(void); mtp_char *_device_get_sync_partner(void); void _device_set_sync_partner(mtp_char *sync_ptr); + +#ifdef __cplusplus +} +#endif + #endif /* _MTP_DEVICE_H_ */ diff --git a/include/entity/mtp_object.h b/include/entity/mtp_object.h index 46128a7..ae778d2 100755 --- a/include/entity/mtp_object.h +++ b/include/entity/mtp_object.h @@ -17,6 +17,10 @@ #ifndef _MTP_OBJECT_H_ #define _MTP_OBJECT_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_list.h" #include "ptp_datacodes.h" #include "mtp_fs.h" @@ -35,6 +39,7 @@ * obj_info_t structure : Contains object metadata related information * Size = 26 Bytes */ + typedef struct { mtp_uint32 store_id; /* The storage the object resides */ mtp_uint16 obj_fmt; /* object format code */ @@ -93,4 +98,8 @@ void _entity_copy_mtp_object(mtp_obj_t *dst, mtp_obj_t *src); mtp_bool _entity_remove_reference_child_array(mtp_obj_t *obj, mtp_uint32 handle); void _entity_dealloc_mtp_obj(mtp_obj_t *obj); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_OBJECT_H_ */ diff --git a/include/entity/mtp_property.h b/include/entity/mtp_property.h index 8ad9818..5db1f0a 100755 --- a/include/entity/mtp_property.h +++ b/include/entity/mtp_property.h @@ -17,6 +17,10 @@ #ifndef _MTP_PROPERTY_H_ #define _MTP_PROPERTY_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_list.h" #include "mtp_object.h" @@ -315,4 +319,8 @@ mtp_uint32 _prop_pack_interdep_proplist(obj_interdep_proplist_t *config_list, mtp_uint32 format_code, mtp_uchar *buf, mtp_uint32 size); mtp_bool _get_oma_drm_status(void); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_PROPERTY_H_ */ diff --git a/include/entity/mtp_store.h b/include/entity/mtp_store.h index 32f2427..569fc54 100755 --- a/include/entity/mtp_store.h +++ b/include/entity/mtp_store.h @@ -17,6 +17,10 @@ #ifndef _MTP_STORE_H_ #define _MTP_STORE_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_object.h" @@ -124,4 +128,8 @@ void _entity_store_recursive_enum_folder_objects(mtp_store_t *store, void _entity_list_modified_files(mtp_uint32 minutes); void _entity_copy_store_data(mtp_store_t *dst, mtp_store_t *src); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_STORE_H_ */ diff --git a/include/mtp_cmd_handler.h b/include/mtp_cmd_handler.h index 9e809fe..49c459e 100755 --- a/include/mtp_cmd_handler.h +++ b/include/mtp_cmd_handler.h @@ -17,6 +17,10 @@ #ifndef _MTP_CMD_HANDLER_H_ #define _MTP_CMD_HANDLER_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_object.h" #include "mtp_device.h" #include "ptp_container.h" @@ -97,4 +101,8 @@ mtp_bool _cmd_hdlr_send_response(mtp_handler_t *hdlr, mtp_uint16 resp, mtp_bool _cmd_hdlr_send_response_code(mtp_handler_t *hdlr, mtp_uint16 resp); void _receive_mq_data_cb(mtp_char *buffer, mtp_int32 buf_len); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_CMD_HANDLER_H_ */ diff --git a/include/mtp_cmd_handler_util.h b/include/mtp_cmd_handler_util.h index f360329..e2a9d73 100755 --- a/include/mtp_cmd_handler_util.h +++ b/include/mtp_cmd_handler_util.h @@ -17,6 +17,10 @@ #ifndef _MTP_CMD_HANDLER_UTIL_H_ #define _MTP_CMD_HANDLER_UTIL_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_device.h" typedef struct { @@ -112,4 +116,8 @@ mtp_err_t _hutil_get_playback_skip(mtp_int32 skip_param); mtp_err_t _hutil_format_storage(mtp_uint32 store_id, mtp_uint32 fs_format); mtp_uint32 _hutil_get_storage_info_size(store_info_t *store_info); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_CMD_HANDLER_UTIL_H_ */ diff --git a/include/mtp_event_handler.h b/include/mtp_event_handler.h index e6d4c16..131aca5 100755 --- a/include/mtp_event_handler.h +++ b/include/mtp_event_handler.h @@ -17,6 +17,10 @@ #ifndef _MTP_EVENT_HANDLER_H_ #define _MTP_EVENT_HANDLER_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include #include "mtp_datatype.h" #include "mtp_util.h" @@ -62,4 +66,8 @@ void _handle_lock_status_notification(keynode_t *key, void *data); void _eh_send_event_req_to_eh_thread(event_code_t action, mtp_ulong param1, mtp_ulong param2, void *param3); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_EVENT_HANDLER_H_ */ diff --git a/include/mtp_init.h b/include/mtp_init.h index 2ce28a5..2fdbce9 100755 --- a/include/mtp_init.h +++ b/include/mtp_init.h @@ -17,6 +17,10 @@ #ifndef __MTPMAIN_H_INCLUDED #define __MTPMAIN_H_INCLUDED +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_store.h" #define MTP_LOG_FILE "/var/log/mtp.log" @@ -27,4 +31,8 @@ void _mtp_deinit(void); void _features_supported_info(void); void mtp_end_event(void); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_MAIN_H_ */ diff --git a/include/mtp_inoti_handler.h b/include/mtp_inoti_handler.h index 778d226..7fdd6c7 100755 --- a/include/mtp_inoti_handler.h +++ b/include/mtp_inoti_handler.h @@ -17,6 +17,10 @@ #ifndef _MTP_INOTI_HANDLER_H_ #define _MTP_INOTI_HANDLER_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_config.h" #ifdef MTP_SUPPORT_OBJECTADDDELETE_EVENT #include @@ -45,4 +49,8 @@ mtp_bool _inoti_init_filesystem_evnts(); void _inoti_deinit_filesystem_events(); #endif /* MTP_SUPPORT_OBJECTADDDELETE_EVENT */ +#ifdef __cplusplus +} +#endif + #endif /* _MTP_INOTI_HANDLER_H_ */ diff --git a/include/ptp_container.h b/include/ptp_container.h index e69380b..73a48af 100755 --- a/include/ptp_container.h +++ b/include/ptp_container.h @@ -17,6 +17,10 @@ #ifndef _PTP_CONTAINER_H_ #define _PTP_CONTAINER_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_datatype.h" #define MAX_MTP_PARAMS 5 @@ -100,4 +104,8 @@ mtp_bool _hdlr_send_event_container(cmd_container_t *dst); void _hdlr_conv_cmd_container_byte_order(cmd_container_t *dst); void _hdlr_conv_data_container_byte_order(data_container_t *dst); +#ifdef __cplusplus +} +#endif + #endif /* _PTP_CONTAINER_H_ */ diff --git a/include/transport/mtp_transport.h b/include/transport/mtp_transport.h index e0138c1..a429708 100755 --- a/include/transport/mtp_transport.h +++ b/include/transport/mtp_transport.h @@ -17,6 +17,10 @@ #ifndef _MTP_TRANSPORT_H_ #define _MTP_TRANSPORT_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_datatype.h" #include "mtp_util.h" @@ -54,4 +58,8 @@ mtp_bool _transport_get_usb_discon_state(void); void _transport_set_cancel_initialization(mtp_bool value); mtp_bool _transport_get_cancel_initialization(void); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_TRANSPORT_H_ */ diff --git a/include/transport/mtp_usb_driver.h b/include/transport/mtp_usb_driver.h index 51253d5..dea197c 100755 --- a/include/transport/mtp_usb_driver.h +++ b/include/transport/mtp_usb_driver.h @@ -17,6 +17,10 @@ #ifndef _MTP_USB_DRIVER_H_ #define _MTP_USB_DRIVER_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_config.h" #include "mtp_datatype.h" #include "mtp_msgq.h" @@ -96,4 +100,8 @@ mtp_uint32 _get_tx_pkt_size(void); mtp_uint32 _get_rx_pkt_size(void); mtp_transport_type_t _transport_get_type(void); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_USB_DRIVER_H_ */ diff --git a/include/util/mtp_fs.h b/include/util/mtp_fs.h index 6ce634d..ef47e06 100755 --- a/include/util/mtp_fs.h +++ b/include/util/mtp_fs.h @@ -17,6 +17,10 @@ #ifndef _MTP_FS_H_ #define _MTP_FS_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include #include "mtp_datatype.h" #include "mtp_config.h" @@ -94,4 +98,8 @@ void _util_fill_guid_array(void *guidarray, mtp_uint32 start_index, FILE* fhandl mtp_uint32 size); void FLOGD(const char *fmt, ...); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_FS_H_ */ diff --git a/include/util/mtp_list.h b/include/util/mtp_list.h index 2c50729..14cb2c4 100755 --- a/include/util/mtp_list.h +++ b/include/util/mtp_list.h @@ -17,6 +17,10 @@ #ifndef _MTP_LIST_H_ #define _MTP_LIST_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_datatype.h" #include "mtp_util.h" @@ -43,4 +47,8 @@ void *_util_get_list_next(slist_iterator *iter); slist_node_t *_util_get_first_node(slist_t *l_ptr); void _util_deinit_list_iterator(slist_iterator *iter); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_LIST_H_ */ diff --git a/include/util/mtp_media_info.h b/include/util/mtp_media_info.h index 553562e..b7c611b 100755 --- a/include/util/mtp_media_info.h +++ b/include/util/mtp_media_info.h @@ -17,6 +17,10 @@ #ifndef _MTP_MEDIA_INFO_H_ #define _MTP_MEDIA_INFO_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include #include #include "mtp_config.h" @@ -102,4 +106,8 @@ void _util_free_common_meta(common_meta_t *metadata); void _util_free_video_meta(video_meta_t *video); void _util_free_image_meta(image_meta_t *image); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_MEDIA_INFO_H_ */ diff --git a/include/util/mtp_msgq.h b/include/util/mtp_msgq.h index c6726c2..8fe674a 100755 --- a/include/util/mtp_msgq.h +++ b/include/util/mtp_msgq.h @@ -17,6 +17,10 @@ #ifndef _MTP_MSGQ_H_ #define _MTP_MSGQ_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_datatype.h" #include "mtp_util.h" @@ -39,4 +43,8 @@ mtp_bool _util_msgq_set_size(msgq_id_t mq_id, mtp_uint32 nbytes); mtp_bool _util_rcv_msg_from_mq(msgq_id_t mq_id, unsigned char **pkt, mtp_uint32 *pkt_len, msg_type_t *mtype); +#ifdef __cplusplus +} +#endif + #endif/*_MTP_MSGQ_H_*/ diff --git a/include/util/mtp_support.h b/include/util/mtp_support.h index a67325b..efb4dce 100755 --- a/include/util/mtp_support.h +++ b/include/util/mtp_support.h @@ -17,6 +17,10 @@ #ifndef _MTP_SUPPORT_H_ #define _MTP_SUPPORT_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "mtp_datatype.h" #include "mtp_config.h" @@ -56,4 +60,8 @@ mtp_bool _util_get_unique_dir_path(const mtp_char *exist_path, mtp_char *new_pat mtp_uint32 new_path_buf_len); mtp_int32 _util_system_cmd_wait(const mtp_char *cmd); +#ifdef __cplusplus +} +#endif + #endif /* _MTP_SUPPORT_H_ */ diff --git a/include/util/mtp_thread.h b/include/util/mtp_thread.h index f742158..208ea1b 100755 --- a/include/util/mtp_thread.h +++ b/include/util/mtp_thread.h @@ -17,6 +17,10 @@ #ifndef _MTP_THREAD_H_ #define _MTP_THREAD_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include #include "mtp_datatype.h" #include "mtp_util.h" @@ -57,4 +61,8 @@ mtp_bool _util_thread_join(pthread_t tid, void **data); mtp_bool _util_thread_cancel(pthread_t tid); void _util_thread_exit(void *val_ptr); +#ifdef __cplusplus +} +#endif + #endif /*_MTP_THREAD_H_*/ diff --git a/include/util/mtp_util.h b/include/util/mtp_util.h index c5d56fd..ae958dd 100755 --- a/include/util/mtp_util.h +++ b/include/util/mtp_util.h @@ -17,6 +17,10 @@ #ifndef _MTP_UTIL_H_ #define _MTP_UTIL_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include #include "mtp_config.h" #include "mtp_datatype.h" @@ -152,5 +156,8 @@ void _util_get_internal_path(char *internal_path); mtp_bool _util_media_content_connect(); void _util_media_content_disconnect(); +#ifdef __cplusplus +} +#endif #endif /* _MTP_UTIL_H_ */ diff --git a/packaging/mtp-responder.spec b/packaging/mtp-responder.spec index 606535f..9fdc539 100755 --- a/packaging/mtp-responder.spec +++ b/packaging/mtp-responder.spec @@ -25,6 +25,10 @@ BuildRequires: pkgconfig(libsystemd-daemon) BuildRequires: pkgconfig(libsystemd) Requires(post): /usr/bin/vconftool +%if 0%{?gtests:1} +BuildRequires: pkgconfig(gmock) +%endif + %define upgrade_script_path /usr/share/upgrade/scripts %description @@ -39,7 +43,19 @@ cp %{SOURCE1001} . %build export CFLAGS="$CFLAGS -Wno-deprecated-declarations" -%cmake . +%if 0%{?gcov:1} +export CFLAGS+=" -fprofile-arcs -ftest-coverage" +export CXXFLAGS+=" -fprofile-arcs -ftest-coverage" +export LDFLAGS+=" -lgcov" +%endif + +%cmake . \ +%if 0%{?gtests:1} + -DBUILD_GTESTS=%{?gtests:1}%{!?gtests:0} \ +%endif +%if 0%{?gcov:1} + -DBUILD_GCOV=%{?gcov:1}%{!?gcov:0} +%endif make %{?jobs:-j%jobs} @@ -72,3 +88,7 @@ ln -sf %{_unitdir}/mtp-responder.service %{_sysconfdir}/systemd/default-extra-de %{upgrade_script_path}/500.%{name}-upgrade.sh /etc/mtp-responder/descs /etc/mtp-responder/strs + +%if 0%{?gtests:1} +%{_bindir}/gtest* +%endif diff --git a/src/entity/mtp_device.c b/src/entity/mtp_device.c index da88199..7e380c3 100755 --- a/src/entity/mtp_device.c +++ b/src/entity/mtp_device.c @@ -405,6 +405,7 @@ void _init_mtp_device(void) return; } +/* LCOV_EXCL_START */ mtp_uint32 _get_device_info_size(void) { mtp_uint32 size = 0; @@ -580,6 +581,7 @@ void _reset_mtp_device(void) g_device.phase = DEVICE_PHASE_IDLE; return; } +/* LCOV_EXCL_STOP */ device_prop_desc_t *_device_get_device_property(mtp_uint32 prop_code) { @@ -658,6 +660,7 @@ static mtp_bool __add_store_to_device(store_type_t store_type) * @param[in] store_type Store type * @return TRUE if success, otherwise FALSE. */ +/* LCOV_EXCL_START */ static mtp_bool __remove_store_from_device(store_type_t store_type) { mtp_int32 ii = 0; @@ -699,6 +702,7 @@ mtp_bool _device_is_store_mounted(mtp_int32 store_type) return g_device.is_mounted[store_type]; } +/* LCOV_EXCL_STOP */ mtp_bool _device_install_storage(mtp_int32 type) { @@ -713,18 +717,22 @@ mtp_bool _device_install_storage(mtp_int32 type) lock_status = _util_get_local_lock_status(); if (lock_status == MTP_PHONE_LOCK_OFF) { + /* LCOV_EXCL_START */ int_status = _device_is_store_mounted(MTP_STORAGE_INTERNAL); if (int_status == FALSE) __add_store_to_device(MTP_STORAGE_INTERNAL); + /* LCOV_EXCL_STOP */ } mounted = _util_get_local_mmc_status(); if (mounted == MTP_PHONE_MMC_INSERTED) { + /* LCOV_EXCL_START */ ext_status = _device_is_store_mounted(MTP_STORAGE_EXTERNAL); if (ext_status == FALSE) __add_store_to_device(MTP_STORAGE_EXTERNAL); + /* LCOV_EXCL_STOP */ } break; @@ -740,6 +748,7 @@ mtp_bool _device_install_storage(mtp_int32 type) DBG(" case MTP_ADDREM_EXTERNAL:"); if (MTP_PHONE_MMC_INSERTED != _util_get_local_mmc_status()) break; + /* LCOV_EXCL_START */ mounted = _device_is_store_mounted(MTP_STORAGE_EXTERNAL); if (mounted == FALSE) { if (__add_store_to_device(MTP_STORAGE_EXTERNAL) == FALSE) { @@ -747,6 +756,7 @@ mtp_bool _device_install_storage(mtp_int32 type) return FALSE; } } + /* LCOV_EXCL_STOP */ break; case MTP_ADDREM_ALL: @@ -763,6 +773,7 @@ mtp_bool _device_install_storage(mtp_int32 type) return TRUE; } +/* LCOV_EXCL_START */ mtp_bool _device_uninstall_storage(mtp_int32 type) { switch (type) { @@ -833,6 +844,7 @@ static mtp_err_t __clear_store_data(mtp_uint32 store_id) } return MTP_ERROR_GENERAL; } +/* LCOV_EXCL_STOP */ mtp_store_t *_device_get_store(mtp_uint32 store_id) { @@ -880,6 +892,7 @@ mtp_uint32 _device_get_num_objects(mtp_uint32 store_id) return num_objs; } +/* LCOV_EXCL_START */ mtp_uint32 _device_get_num_objects_with_format(mtp_uint32 store_id, mtp_uint32 format) { @@ -900,6 +913,7 @@ mtp_uint32 _device_get_num_objects_with_format(mtp_uint32 store_id, return num_objs; } +/* LCOV_EXCL_STOP */ mtp_obj_t *_device_get_object_with_handle(mtp_uint32 obj_handle) { @@ -918,6 +932,7 @@ mtp_obj_t *_device_get_object_with_handle(mtp_uint32 obj_handle) return obj; } +/* LCOV_EXCL_START */ mtp_obj_t* _device_get_object_with_path(mtp_char *full_path) { mtp_int32 i = 0; @@ -935,6 +950,7 @@ mtp_obj_t* _device_get_object_with_path(mtp_char *full_path) } return obj; } +/* LCOV_EXCL_STOP */ mtp_uint16 _device_delete_object(mtp_uint32 obj_handle, mtp_uint32 fmt) { @@ -949,6 +965,7 @@ mtp_uint16 _device_delete_object(mtp_uint32 obj_handle, mtp_uint32 fmt) if (store == NULL) { response = PTP_RESPONSE_INVALID_OBJ_HANDLE; } else { + /* LCOV_EXCL_START */ response = _entity_delete_obj_mtp_store(store, obj_handle, fmt, TRUE); } @@ -984,6 +1001,7 @@ mtp_uint16 _device_delete_object(mtp_uint32 obj_handle, mtp_uint32 fmt) response = PTP_RESPONSE_PARTIAL_DELETION; return response; + /* LCOV_EXCL_STOP */ } mtp_store_t *_device_get_store_containing_obj(mtp_uint32 obj_handle) @@ -1011,6 +1029,7 @@ mtp_store_t *_device_get_store_at_index(mtp_uint32 index) return &(g_device.store_list[index]); } +/* LCOV_EXCL_START */ device_prop_desc_t *_device_get_ref_prop_list(void) { return g_device.device_prop_list; @@ -1047,6 +1066,7 @@ mtp_bool _device_set_playback_obj(mtp_uint32 playback_obj) _hdlr_send_event_container(&event); return TRUE; } +/* LCOV_EXCL_STOP */ void _device_get_serial(mtp_char *serial_no, mtp_uint32 len) { @@ -1057,6 +1077,7 @@ void _device_get_serial(mtp_char *serial_no, mtp_uint32 len) return; } +/* LCOV_EXCL_START */ void _device_set_phase(device_phase_t phase) { DBG("Devie phase is set [%d]\n", phase); @@ -1068,6 +1089,7 @@ device_phase_t _device_get_phase(void) { return g_device.phase; } +/* LCOV_EXCL_STOP */ mtp_uint32 _device_get_default_store_id(void) { @@ -1084,10 +1106,12 @@ mtp_uint32 _device_get_num_stores(void) return g_device.num_stores; } +/* LCOV_EXCL_START */ device_status_t _device_get_status(void) { return g_device.status; } +/* LCOV_EXCL_STOP */ mtp_char *_device_get_device_name(void) { diff --git a/src/entity/mtp_object.c b/src/entity/mtp_object.c index d8279e5..1fd5dae 100755 --- a/src/entity/mtp_object.c +++ b/src/entity/mtp_object.c @@ -28,6 +28,7 @@ extern mtp_bool g_is_full_enum; +/* LCOV_EXCL_START */ mtp_bool _entity_get_file_times(mtp_obj_t *obj, ptp_time_string_t *create_tm, ptp_time_string_t *modify_tm) { @@ -74,6 +75,7 @@ mtp_bool _entity_get_file_times(mtp_obj_t *obj, ptp_time_string_t *create_tm, return TRUE; } +/* LCOV_EXCL_STOP */ obj_info_t *_entity_alloc_object_info(void) { @@ -97,6 +99,7 @@ void _entity_init_object_info(obj_info_t *info) memset(info, 0, sizeof(obj_info_t)); } +/* LCOV_EXCL_START */ mtp_uint32 _entity_get_object_info_size(mtp_obj_t *obj, ptp_string_t *file_name) { int ret; @@ -122,6 +125,7 @@ mtp_uint32 _entity_get_object_info_size(mtp_obj_t *obj, ptp_string_t *file_name) return (size); } +/* LCOV_EXCL_STOP */ void _entity_init_object_info_params(obj_info_t *info, mtp_uint32 store_id, mtp_uint32 parent_handle, mtp_char *file_name, dir_entry_t *dir) @@ -170,6 +174,7 @@ mtp_uint32 _entity_parse_raw_obj_info(mtp_uchar *buf, mtp_uint32 buf_sz, retv_if(buf == NULL, 0); retvm_if(buf_sz < FIXED_LENGTH_MEMBERS_SIZE, 0, "buf_sz[%d] is less", buf_sz); + /* LCOV_EXCL_START */ /* Copy Obj Props from store_id till file_size */ memcpy(&(info->store_id), temp, (sizeof(mtp_uint16) * 2 + sizeof(mtp_uint32) * 2)); temp += (sizeof(mtp_uint16) * 2 + sizeof(mtp_uint32) * 2); @@ -407,6 +412,7 @@ void _entity_dealloc_obj_info(obj_info_t *info) info = NULL; return; } +/* LCOV_EXCL_STOP */ mtp_obj_t *_entity_alloc_mtp_object(void) { @@ -460,6 +466,7 @@ mtp_bool _entity_set_object_file_path(mtp_obj_t *obj, void *file_path, return TRUE; } +/* LCOV_EXCL_START */ mtp_bool _entity_check_child_obj_path(mtp_obj_t *obj, mtp_char *src_path, mtp_char *dest_path) { @@ -621,14 +628,7 @@ mtp_bool _entity_set_child_object_path(mtp_obj_t *obj, mtp_char *src_path, } _util_delete_file_from_db(child_obj->file_path); - if (_entity_set_object_file_path(child_obj, dest_child_path, - CHAR_TYPE) == FALSE) { - ERR("Failed to set full path!!"); - _entity_remove_reference_child_array(obj, - child_obj->obj_handle); - _entity_dealloc_mtp_obj(child_obj); - continue; - } + _entity_set_object_file_path(child_obj, dest_child_path, CHAR_TYPE); if (child_obj->obj_info == NULL) { ERR("obj_info is NULL"); @@ -650,6 +650,7 @@ mtp_bool _entity_set_child_object_path(mtp_obj_t *obj, mtp_char *src_path, _prop_deinit_ptparray(&child_arr); return TRUE; } +/* LCOV_EXCL_STOP */ mtp_bool _entity_add_reference_child_array(mtp_obj_t *obj, mtp_uint32 handle) { @@ -661,6 +662,7 @@ mtp_bool _entity_add_reference_child_array(mtp_obj_t *obj, mtp_uint32 handle) return TRUE; } +/* LCOV_EXCL_START */ ptp_array_t *_entity_get_reference_child_array(mtp_obj_t *obj) { return &(obj->child_array); @@ -752,3 +754,4 @@ void _entity_dealloc_mtp_obj(mtp_obj_t *obj) obj = NULL; return; } +/* LCOV_EXCL_STOP */ diff --git a/src/entity/mtp_property.c b/src/entity/mtp_property.c index 9f33c6c..3ab46d5 100755 --- a/src/entity/mtp_property.c +++ b/src/entity/mtp_property.c @@ -83,6 +83,7 @@ static mtp_uint32 __count_interdep_proplist(obj_interdep_proplist_t *config_list /* * FUNCTIONS */ +/* LCOV_EXCL_START */ static mtp_bool __check_object_propcode(obj_prop_desc_t *prop, mtp_uint32 propcode, mtp_uint32 group_code) { @@ -581,6 +582,7 @@ static mtp_bool __prop_common_metadata(mtp_obj_t *obj, return TRUE; } +/* LCOV_EXCL_STOP */ static void __build_supported_common_props(mtp_uchar *count, obj_prop_desc_t *prop) @@ -733,6 +735,7 @@ ptp_array_t *_prop_alloc_ptparray(data_type_t type) return (parray); } +/* LCOV_EXCL_START */ mtp_uint32 _prop_get_size_ptparray(ptp_array_t *parray) { mtp_uint16 size = 0; @@ -759,6 +762,7 @@ mtp_uint32 _prop_get_size_ptparray_without_elemsize(ptp_array_t *parray) return (size * parray->num_ele); } +/* LCOV_EXCL_STOP */ mtp_bool _prop_grow_ptparray(ptp_array_t *parray, mtp_uint32 new_size) { @@ -774,6 +778,7 @@ mtp_bool _prop_grow_ptparray(ptp_array_t *parray, mtp_uint32 new_size) if (new_size < parray->arr_size) return TRUE; + /* LCOV_EXCL_START */ parray->array_entry = g_realloc(parray->array_entry, size * new_size); if (parray->array_entry == NULL) { @@ -783,6 +788,7 @@ mtp_bool _prop_grow_ptparray(ptp_array_t *parray, mtp_uint32 new_size) parray->arr_size = new_size; return TRUE; + /* LCOV_EXCL_STOP */ } mtp_int32 _prop_find_ele_ptparray(ptp_array_t *parray, mtp_uint32 element) @@ -795,6 +801,7 @@ mtp_int32 _prop_find_ele_ptparray(ptp_array_t *parray, mtp_uint32 element) retv_if(parray->array_entry == NULL, ELEMENT_NOT_FOUND); switch (parray->type) { + /* LCOV_EXCL_START */ case UINT8_TYPE: ptr8 = parray->array_entry; for (ii = 0; ii < parray->num_ele; ii++) { @@ -810,7 +817,7 @@ mtp_int32 _prop_find_ele_ptparray(ptp_array_t *parray, mtp_uint32 element) return ii; } break; - + /* LCOV_EXCL_STOP */ case PTR_TYPE: case UINT32_TYPE: ptr32 = parray->array_entry; @@ -826,6 +833,7 @@ mtp_int32 _prop_find_ele_ptparray(ptp_array_t *parray, mtp_uint32 element) return ELEMENT_NOT_FOUND; } +/* LCOV_EXCL_START */ mtp_bool _prop_get_ele_ptparray(ptp_array_t *parray, mtp_uint32 index, void *ele) { mtp_uchar *ptr8 = NULL; @@ -857,6 +865,7 @@ mtp_bool _prop_get_ele_ptparray(ptp_array_t *parray, mtp_uint32 index, void *ele } return TRUE; } +/* LCOV_EXCL_STOP */ mtp_bool _prop_append_ele_ptparray(ptp_array_t *parray, mtp_uint32 element) { @@ -874,6 +883,7 @@ mtp_bool _prop_append_ele_ptparray(ptp_array_t *parray, mtp_uint32 element) } switch (parray->type) { + /* LCOV_EXCL_START */ case UINT8_TYPE: ptr8 = parray->array_entry; ptr8[parray->num_ele++] = (mtp_uchar)element; @@ -883,7 +893,7 @@ mtp_bool _prop_append_ele_ptparray(ptp_array_t *parray, mtp_uint32 element) ptr16 = parray->array_entry; ptr16[parray->num_ele++] = (mtp_uint16) element; break; - + /* LCOV_EXCL_STOP */ case PTR_TYPE: case UINT32_TYPE: ptr32 = parray->array_entry; @@ -897,6 +907,7 @@ mtp_bool _prop_append_ele_ptparray(ptp_array_t *parray, mtp_uint32 element) return TRUE; } +/* LCOV_EXCL_START */ mtp_bool _prop_append_ele128_ptparray(ptp_array_t *parray, mtp_uint64 *element) { mtp_uchar *ptr = NULL; @@ -1103,6 +1114,7 @@ void _prop_destroy_ptparray(ptp_array_t *parray) g_free(parray); return; } +/* LCOV_EXCL_STOP */ mtp_uint16 __get_ptp_array_elem_size(data_type_t type) { @@ -1185,6 +1197,7 @@ void _prop_copy_char_to_ptpstring(ptp_string_t *pstring, void *str, pwchar = (mtp_wchar *)str; if (str == NULL) { + /* LCOV_EXCL_START */ pstring->num_chars = 0; return; } @@ -1207,6 +1220,7 @@ void _prop_copy_char_to_ptpstring(ptp_string_t *pstring, void *str, ERR("Unknown character mode : %d\n", cmode); pstring->num_chars = 0; return; + /* LCOV_EXCL_STOP */ } if (i == MAX_PTP_STRING_CHARS) @@ -1219,6 +1233,7 @@ void _prop_copy_char_to_ptpstring(ptp_string_t *pstring, void *str, return; } +/* LCOV_EXCL_START */ void _prop_copy_time_to_ptptimestring(ptp_time_string_t *pstring, system_time_t *sys_time) { @@ -1247,6 +1262,7 @@ void _prop_copy_time_to_ptptimestring(ptp_time_string_t *pstring, } return; } +/* LCOV_EXCL_STOP */ void _prop_copy_ptpstring(ptp_string_t *dst, ptp_string_t *src) { @@ -1259,6 +1275,7 @@ void _prop_copy_ptpstring(ptp_string_t *dst, ptp_string_t *src) return; } +/* LCOV_EXCL_START */ void _prop_copy_ptptimestring(ptp_time_string_t *dst, ptp_time_string_t *src) { mtp_uint16 ii; @@ -1283,6 +1300,7 @@ mtp_bool _prop_is_equal_ptpstring(ptp_string_t *dst, ptp_string_t *src) } return TRUE; } +/* LCOV_EXCL_STOP */ mtp_uint32 _prop_size_ptpstring(ptp_string_t *pstring) { @@ -1292,6 +1310,7 @@ mtp_uint32 _prop_size_ptpstring(ptp_string_t *pstring) return (pstring->num_chars * sizeof(mtp_wchar) + 1); } +/* LCOV_EXCL_START */ mtp_uint32 _prop_size_ptptimestring(ptp_time_string_t *pstring) { if (pstring == NULL) @@ -1402,6 +1421,7 @@ mtp_uint32 _prop_parse_rawstring(ptp_string_t *pstring, mtp_uchar *buf, return _prop_size_ptpstring(pstring); } } +/* LCOV_EXCL_STOP */ void _prop_destroy_ptpstring(ptp_string_t *pstring) { @@ -1427,12 +1447,14 @@ mtp_bool _prop_is_valid_integer(prop_info_t *prop_info, mtp_uint64 value) return FALSE; } } else if (prop_info->form_flag == ENUM_FORM) { + /* LCOV_EXCL_START */ slist_node_t *node = prop_info->supp_value_list.start; mtp_uint32 ii; for (ii = 0; ii < prop_info->supp_value_list.nnodes; ii++, node = node->link) { if (value == (mtp_uint32) node->value) return TRUE; + /* LCOV_EXCL_STOP */ } /* if it hits here, must be an invalid value */ @@ -1452,6 +1474,7 @@ mtp_bool _prop_is_valid_string(prop_info_t *prop_info, ptp_string_t *pstring) return FALSE; if (prop_info->form_flag == ENUM_FORM) { + /* LCOV_EXCL_START */ slist_node_t *node = NULL; mtp_uint32 ii; ptp_string_t *ele_str = NULL; @@ -1478,6 +1501,7 @@ mtp_bool _prop_is_valid_string(prop_info_t *prop_info, ptp_string_t *pstring) ERR("invalid data time format"); return FALSE; } + /* LCOV_EXCL_STOP */ return TRUE; } else if (prop_info->form_flag == REGULAR_EXPRESSION_FORM) { return TRUE; @@ -1538,6 +1562,7 @@ mtp_bool _prop_set_default_array(prop_info_t *prop_info, mtp_uchar *parray, return FALSE; /* Copies the data into the PTP array */ + /* LCOV_EXCL_START */ if ((prop_info->default_val.array != NULL) && (num_ele != 0)) { mtp_uchar *ptr8 = NULL; mtp_uint16 *ptr16 = NULL; @@ -1571,6 +1596,7 @@ mtp_bool _prop_set_default_array(prop_info_t *prop_info, mtp_uchar *parray, } return TRUE; } + /* LCOV_EXCL_STOP */ return FALSE; } @@ -1614,6 +1640,7 @@ mtp_bool _prop_set_current_string(device_prop_desc_t *prop, ptp_string_t *str) } } +/* LCOV_EXCL_START */ mtp_bool _prop_set_current_array(device_prop_desc_t *prop, mtp_uchar *arr) { mtp_uint32 num_ele = 0; @@ -1908,6 +1935,7 @@ mtp_bool _prop_set_current_array_val(obj_prop_val_t *pval, mtp_uchar *arr, } return FALSE; } +/* LCOV_EXCL_STOP */ #ifdef __BIG_ENDIAN__ mtp_bool _prop_set_current_array_val_usbrawdata(obj_prop_val_t *pval, @@ -2156,6 +2184,7 @@ void _prop_init_device_property_desc(device_prop_desc_t *prop, return; } +/* LCOV_EXCL_START */ mtp_uint32 _prop_size_device_prop_desc(device_prop_desc_t *prop) { /* size :PropCode,Datatype,Getset,formflag */ @@ -2700,6 +2729,7 @@ void _prop_destroy_obj_propval(obj_prop_val_t *pval) return; } +/* LCOV_EXCL_STOP */ static void __init_obj_prop_desc(obj_prop_desc_t *prop, mtp_uint16 propcode, mtp_uint16 data_type, mtp_uchar get_set, mtp_uchar form_flag, @@ -2778,6 +2808,7 @@ static void __init_obj_prop_desc(obj_prop_desc_t *prop, mtp_uint16 propcode, return; } +/* LCOV_EXCL_START */ static mtp_uint32 __get_size_default_val_obj_prop_desc(obj_prop_desc_t *prop) { mtp_uint32 size = 0; @@ -3092,6 +3123,7 @@ mtp_uint32 _prop_pack_default_val_obj_prop_desc(obj_prop_desc_t *prop, return bytes_to_write; } +/* LCOV_EXCL_STOP */ obj_prop_desc_t *_prop_get_obj_prop_desc(mtp_uint32 format_code, mtp_uint32 propcode) @@ -3111,6 +3143,7 @@ obj_prop_desc_t *_prop_get_obj_prop_desc(mtp_uint32 format_code, } switch (format_code) { + /* LCOV_EXCL_START */ case PTP_FMT_MP3: case PTP_FMT_WAVE: for (i = 0; i < NUM_OBJECT_PROP_DESC_MP3; i++) { @@ -3149,12 +3182,14 @@ obj_prop_desc_t *_prop_get_obj_prop_desc(mtp_uint32 format_code, default: break; } + /* LCOV_EXCL_STOP */ ERR("No matched property[0x%x], format[0x%x]!!\n", propcode, format_code); return NULL; } +/* LCOV_EXCL_START */ static void __destroy_obj_prop_desc(obj_prop_desc_t *prop) { slist_node_t *node = NULL; @@ -3592,6 +3627,7 @@ void _prop_destroy_obj_proplist(obj_proplist_t *prop_list) } return; } +/* LCOV_EXCL_STOP */ mtp_bool _prop_add_supp_integer_val(prop_info_t *prop_info, mtp_uint32 value) { @@ -3653,6 +3689,7 @@ mtp_uint32 _prop_get_supp_obj_props(mtp_uint32 format_code, } switch (format_code) { + /* LCOV_EXCL_START */ case PTP_FMT_MP3: case PTP_FMT_WAVE: for (i = 0; i < NUM_OBJECT_PROP_DESC_MP3; i++) { @@ -3690,6 +3727,7 @@ mtp_uint32 _prop_get_supp_obj_props(mtp_uint32 format_code, default: break; } + /* LCOV_EXCL_STOP */ DBG("getsupp_props : format [0x%x], supported list [%d]\n", format_code, supp_props->num_ele); return supp_props->num_ele; @@ -4752,6 +4790,7 @@ mtp_bool _prop_build_supp_props_album(void) return TRUE; } +/* LCOV_EXCL_ST */ void _prop_destroy_supp_obj_props(void) { mtp_uint32 i = 0; @@ -4865,6 +4904,7 @@ static mtp_uint32 __count_interdep_proplist(obj_interdep_proplist_t *config_list } return count; } +/* LCOV_EXCL_STOP */ mtp_uint32 _prop_get_size_interdep_proplist(obj_interdep_proplist_t *config_list, mtp_uint32 format_code) @@ -4877,12 +4917,14 @@ mtp_uint32 _prop_get_size_interdep_proplist(obj_interdep_proplist_t *config_list node = config_list->plist.start; for (ii = 0; ii < config_list->plist.nnodes; ii++) { + /* LCOV_EXCL_START */ prop_config = node->value; if ((prop_config->format_code == format_code) || (prop_config->format_code == PTP_FORMATCODE_NOTUSED)) { size += _prop_get_size_interdep_prop(prop_config); } + /* LCOV_EXCL_STOP */ } return size; } @@ -4901,6 +4943,7 @@ mtp_uint32 _prop_pack_interdep_proplist(obj_interdep_proplist_t *config_list, return 0; } + /* LCOV_EXCL_START */ *(mtp_uint32 *)buf = __count_interdep_proplist(config_list, format_code); #ifdef __BIG_ENDIAN__ @@ -4924,6 +4967,7 @@ mtp_uint32 _prop_pack_interdep_proplist(obj_interdep_proplist_t *config_list, return (mtp_uint32)(temp - buf); } +/* LCOV_EXCL_STOP */ mtp_bool _get_oma_drm_status(void) { diff --git a/src/entity/mtp_store.c b/src/entity/mtp_store.c index 417ec67..07dc8a1 100755 --- a/src/entity/mtp_store.c +++ b/src/entity/mtp_store.c @@ -89,6 +89,7 @@ void _entity_update_store_info_run_time(store_info_t *info, return; } +/* LCOV_EXCL_START */ mtp_bool _entity_get_store_path_by_id(mtp_uint32 store_id, mtp_char *path) { char sto_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 }; @@ -199,6 +200,7 @@ mtp_uint32 _entity_get_store_id_by_path(const mtp_char *path_name) return store_id; } +/* LCOV_EXCL_STOP */ mtp_bool _entity_init_mtp_store(mtp_store_t *store, mtp_uint32 store_id, mtp_char *store_path) @@ -254,6 +256,7 @@ mtp_bool _entity_init_mtp_store(mtp_store_t *store, mtp_uint32 store_id, break; case MTP_EXTERNAL_STORE_ID: + /* LCOV_EXCL_START */ store->is_hidden = FALSE; _util_utf8_to_utf16(wtemp, sizeof(wtemp) / WCHAR_SIZ, MTP_STORAGE_DESC_EXT); @@ -268,7 +271,7 @@ mtp_bool _entity_init_mtp_store(mtp_store_t *store, mtp_uint32 store_id, ERR("store initialization Fail"); return FALSE; } - + /* LCOV_EXCL_STOP */ _util_init_list(&(store->obj_list)); return TRUE; @@ -289,9 +292,11 @@ mtp_obj_t *_entity_add_file_to_store(mtp_store_t *store, mtp_uint32 h_parent, if (_entity_init_mtp_object_params(obj, store->store_id, h_parent, file_path, file_name, file_info) == FALSE) { + /* LCOV_EXCL_START */ ERR("_entity_init_mtp_object_params Fail"); g_free(obj); return NULL; + /* LCOV_EXCL_STOP */ } _entity_add_object_to_store(store, obj); @@ -313,9 +318,12 @@ mtp_obj_t *_entity_add_folder_to_store(mtp_store_t *store, mtp_uint32 h_parent, if (_entity_init_mtp_object_params(obj, store->store_id, h_parent, file_path, file_name, file_info) == FALSE) { + /* LCOV_EXCL_START */ ERR("_entity_init_mtp_object_params Fail"); g_free(obj); return NULL; + /* LCOV_EXCL_STOP */ + } _entity_add_object_to_store(store, obj); @@ -372,6 +380,7 @@ mtp_obj_t *_entity_get_object_from_store(mtp_store_t *store, mtp_uint32 handle) return NULL; } +/* LCOV_EXCL_START */ mtp_obj_t *_entity_get_last_object_from_store(mtp_store_t *store, mtp_uint32 handle) { @@ -1069,12 +1078,14 @@ mtp_bool _entity_check_if_B_parent_of_A(mtp_store_t *store, _prop_deinit_ptparray(&child_arr); return FALSE; } +/* LCOV_EXCL_STOP */ mtp_uint32 _entity_generate_next_obj_handle(void) { return g_next_obj_handle++; } +/* LCOV_EXCL_START */ mtp_uint16 _entity_format_store(mtp_store_t *store, mtp_uint32 fs_format) { mtp_uint16 response; @@ -1134,6 +1145,7 @@ void _entity_destroy_mtp_store(mtp_store_t *store) _util_init_list(&(store->obj_list)); return; } +/* LCOV_EXCL_STOP */ void _entity_store_recursive_enum_folder_objects(mtp_store_t *store, mtp_obj_t *pobj) @@ -1168,11 +1180,13 @@ void _entity_store_recursive_enum_folder_objects(mtp_store_t *store, do { if (TRUE == _transport_get_usb_discon_state()) { + /* LCOV_EXCL_START */ DBG("USB is disconnected"); if (closedir(h_dir) < 0) ERR("Close directory Fail"); return; + /* LCOV_EXCL_STOP */ } _util_get_file_name(entry.filename, file_name); @@ -1214,6 +1228,7 @@ NEXT: return; } +/* LCOV_EXCL_START */ void _entity_list_modified_files(mtp_uint32 minutes) { if (minutes == 0) @@ -1272,3 +1287,4 @@ void _entity_copy_store_data(mtp_store_t *dst, mtp_store_t *src) return; } +/* LCOV_EXCL_STOP */ diff --git a/src/mtp_cmd_handler.c b/src/mtp_cmd_handler.c index 95220f1..fbc1dbf 100755 --- a/src/mtp_cmd_handler.c +++ b/src/mtp_cmd_handler.c @@ -129,6 +129,7 @@ void _cmd_hdlr_reset_cmd(mtp_handler_t *hdlr) #endif /* MTP_USE_SKIP_CONTINUOUS_OPENSESSION */ } +/* LCOV_EXCL_START */ static void __process_commands(mtp_handler_t *hdlr, cmd_blk_t *cmd) { mtp_store_t *store = NULL; @@ -2953,6 +2954,7 @@ void __close_session(mtp_handler_t *hdlr) } return; } +/* LCOV_EXCL_STOP */ mtp_bool _cmd_hdlr_send_response(mtp_handler_t *hdlr, mtp_uint16 resp, mtp_uint32 num_param, mtp_uint32 *params) @@ -2960,6 +2962,9 @@ mtp_bool _cmd_hdlr_send_response(mtp_handler_t *hdlr, mtp_uint16 resp, mtp_bool ret = FALSE; resp_blk_t blk = { 0 }; + if (hdlr == NULL) + return FALSE; + /* LCOV_EXCL_START */ _hdlr_resp_container_init(&blk, resp, hdlr->usb_cmd.tid); ret = _hdlr_add_param_resp_container(&blk, num_param, params); @@ -2975,6 +2980,7 @@ mtp_bool _cmd_hdlr_send_response(mtp_handler_t *hdlr, mtp_uint16 resp, ERR("[%s], Opcode = [0x%4x] ResponseCode[0x%4x], NumParams[%u]\n", "FAIL", hdlr->usb_cmd.code, resp, num_param); } + /* LCOV_EXCL_STOP */ return ret; } @@ -2983,6 +2989,7 @@ mtp_bool _cmd_hdlr_send_response_code(mtp_handler_t *hdlr, mtp_uint16 resp) return _cmd_hdlr_send_response(hdlr, resp, 0, NULL); } +/* LCOV_EXCL_START */ #ifdef MTP_SUPPORT_PRINT_COMMAND static void __print_command(mtp_uint16 code) { @@ -3181,6 +3188,9 @@ void _receive_mq_data_cb(mtp_char *buffer, mtp_int32 buf_len) mtp_word code = 0; mtp_dword trid = 0; + if (buffer == NULL) + return; + for (i = 0; i < MAX_MTP_PARAMS; i++) { /* check size */ /* check number of parameter */ tmp = (cmd_container_t *)&buffer[buf_len - @@ -3440,3 +3450,4 @@ static void __finish_receiving_file_packets(mtp_char *data, mtp_int32 data_len) return; } +/* LCOV_EXCL_STOP */ diff --git a/src/mtp_cmd_handler_util.c b/src/mtp_cmd_handler_util.c index 3be88cd..ba9d3e8 100755 --- a/src/mtp_cmd_handler_util.c +++ b/src/mtp_cmd_handler_util.c @@ -59,6 +59,7 @@ mtp_err_t _hutil_get_storage_entry(mtp_uint32 store_id, store_info_t *info) ERR("Not able to retrieve store"); return MTP_ERROR_GENERAL; } + /* LCOV_EXCL_START */ _entity_update_store_info_run_time(&(store->store_info), store->root_path); @@ -71,6 +72,7 @@ mtp_err_t _hutil_get_storage_entry(mtp_uint32 store_id, store_info_t *info) info->store_type = store->store_info.store_type; info->free_space_in_objs = store->store_info.free_space_in_objs; return MTP_ERROR_NONE; + /* LCOV_EXCL_STOP */ } mtp_err_t _hutil_get_storage_ids(ptp_array_t *store_ids) @@ -124,7 +126,7 @@ mtp_err_t _hutil_set_device_property(mtp_uint32 prop_id, void *data, prop = _device_get_device_property(prop_id); if (prop == NULL) return MTP_ERROR_GENERAL; - +/* LCOV_EXCL_START */ if (prop->propinfo.get_set == PTP_PROPGETSET_GETONLY) return MTP_ERROR_ACCESS_DENIED; @@ -132,6 +134,7 @@ mtp_err_t _hutil_set_device_property(mtp_uint32 prop_id, void *data, return MTP_ERROR_INVALID_OBJ_PROP_VALUE; return MTP_ERROR_NONE; +/* LCOV_EXCL_STOP */ } /* @@ -146,7 +149,7 @@ mtp_err_t _hutil_reset_device_entry(mtp_uint32 prop_id) mtp_uint16 ii = 0; if (prop_id == 0xFFFFFFFF) { - + /* LCOV_EXCL_START */ prop = _device_get_ref_prop_list(); if (prop == NULL) { ERR("property reference is NULL"); @@ -154,6 +157,7 @@ mtp_err_t _hutil_reset_device_entry(mtp_uint32 prop_id) } for (ii = 0; ii < NUM_DEVICE_PROPERTIES; ii++) _prop_reset_device_prop_desc(&prop[ii]); + /* LCOV_EXCL_STOP */ } else { prop = _device_get_device_property(prop_id); if (prop == NULL) @@ -187,7 +191,11 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, mtp_bool is_made_by_mtp = FALSE; mtp_wchar w_file_name[MTP_MAX_FILENAME_SIZE + 1] = { 0 }; + if (obj_info == NULL) + return MTP_ERROR_INVALID_PARAM; + if (obj_info->h_parent != PTP_OBJECTHANDLE_ROOT) { + /* LCOV_EXCL_START */ par_obj = _device_get_object_with_handle(obj_info->h_parent); if (par_obj == NULL) { ERR("parent is not existed."); @@ -202,6 +210,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, _entity_dealloc_obj_info(obj_info); return MTP_ERROR_INVALID_PARENT; } + /* LCOV_EXCL_STOP */ } store = _device_get_store(obj_info->store_id); @@ -240,6 +249,11 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, obj_info->protcn_status = PTP_PROTECTIONSTATUS_NOPROTECTION; } + if (file_name == NULL) { + _entity_dealloc_obj_info(obj_info); + _entity_dealloc_mtp_obj(obj); + return MTP_ERROR_INVALID_PARAM; + } if (strlen(file_name) == 0) { /* Generate a filename in 8.3 format for this object */ g_snprintf(utf8_temp, MTP_MAX_PATHNAME_SIZE + 1, @@ -263,6 +277,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, if (_util_create_path(new_f_path, sizeof(new_f_path), store->root_path, utf8_temp) == FALSE) { + /* LCOV_EXCL_START */ _entity_dealloc_mtp_obj(obj); return MTP_ERROR_GENERAL; } @@ -330,7 +345,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, return MTP_ERROR_GENERAL; } } - + /* LCOV_EXCL_STOP */ /* * g_mgr->ftemp_st.filepath was allocated g_strdup("/tmp/.mtptemp.tmp"); * So if we need to change the path we need to allocate sufficient memory @@ -357,6 +372,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, #ifdef MTP_SUPPORT_ALBUM_ART if (access(new_f_path, F_OK) == 0) { + /* LCOV_EXCL_START */ file_exist = TRUE; /* if file is album, overwrite it. */ mtp_char alb_buf[MTP_MAX_PATHNAME_SIZE + 1] = { 0 }; @@ -385,6 +401,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, alb_ext); } } + /* LCOV_EXCL_STOP */ } #endif /*MTP_SUPPORT_ALBUM_ART*/ @@ -399,6 +416,12 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, obj_info->obj_fmt > MTP_FMT_UNDEFINED_COLLECTION && obj_info->obj_fmt < MTP_FMT_UNDEFINED_DOC; #endif /*MTP_USE_SELFMAKE_ABSTRACTION*/ + /* LCOV_EXCL_START */ + if (new_obj == NULL) { + _entity_dealloc_obj_info(obj_info); + _entity_dealloc_mtp_obj(obj); + return MTP_ERROR_INVALID_PARAM; + } if (obj_info->obj_fmt == PTP_FMT_ASSOCIATION || is_made_by_mtp) { *new_obj = _device_get_object_with_path(new_f_path); @@ -418,7 +441,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, _util_wchar_swprintf(temp_wfname, MTP_MAX_PATHNAME_SIZE + 1, "COPY%d_%s", i, w_file_name); } - + /* LCOV_EXCL_STOP */ /* Save the full path to this object */ _entity_set_object_file_path(obj, new_f_path, CHAR_TYPE); @@ -434,6 +457,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, if (obj_info->obj_fmt == PTP_FMT_ASSOCIATION || is_made_by_mtp) { /* Create the new object */ + /* LCOV_EXCL_START */ DBG("[normal] create association file/folder[%s][0x%x]\n", new_f_path, obj_info->association_type); @@ -470,6 +494,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, _entity_dealloc_mtp_obj(obj); return MTP_ERROR_STORE_FULL; } + /* LCOV_EXCL_STOP */ } else { /* Reserve space for the object: Object itself, and probably * some Filesystem-specific overhead @@ -554,6 +579,9 @@ mtp_err_t _hutil_get_object_entry(mtp_uint32 obj_handle, mtp_obj_t **obj_ptr) if (NULL == obj || NULL == obj->obj_info) return MTP_ERROR_GENERAL; + if (obj_ptr == NULL) + return MTP_ERROR_INVALID_PARAM; + *obj_ptr = obj; return MTP_ERROR_NONE; } @@ -586,6 +614,7 @@ mtp_err_t _hutil_copy_object_entries(mtp_uint32 dst_store_id, return MTP_ERROR_GENERAL; } + /* LCOV_EXCL_START */ if (h_parent > 0) { if (keep_handle) { /* two sam handle can occurs in folder copy case @@ -828,6 +857,7 @@ mtp_err_t _hutil_copy_object_entries(mtp_uint32 dst_store_id, return MTP_ERROR_NONE; } +/* LCOV_EXCL_STOP */ mtp_err_t _hutil_move_object_entry(mtp_uint32 dst_store_id, mtp_uint32 h_parent, mtp_uint32 obj_handle) @@ -847,6 +877,7 @@ mtp_err_t _hutil_move_object_entry(mtp_uint32 dst_store_id, mtp_uint32 h_parent, ERR("object is [%p]\n", obj); return MTP_ERROR_INVALID_OBJECTHANDLE; } + /* LCOV_EXCL_START */ if (NULL == obj->obj_info) { ERR("obj_info is [%p]\n", obj->obj_info); return MTP_ERROR_GENERAL; @@ -1032,6 +1063,7 @@ mtp_err_t _hutil_move_object_entry(mtp_uint32 dst_store_id, mtp_uint32 h_parent, _util_add_file_to_db(new_obj->file_path); return MTP_ERROR_NONE; + /* LCOV_EXCL_STOP */ } return MTP_ERROR_GENERAL; } @@ -1053,6 +1085,7 @@ mtp_err_t _hutil_duplicate_object_entry(mtp_uint32 dst_store_id, return MTP_ERROR_INVALID_OBJECTHANDLE; } + /* LCOV_EXCL_START */ src = _device_get_store_containing_obj(obj_handle); if (NULL == src) { ERR("Source store not found"); @@ -1114,6 +1147,7 @@ mtp_err_t _hutil_duplicate_object_entry(mtp_uint32 dst_store_id, return MTP_ERROR_NONE; } +/* LCOV_EXCL_STOP */ mtp_err_t _hutil_read_file_data_from_offset(mtp_uint32 obj_handle, off_t offset, void *data, mtp_uint32 *data_sz) @@ -1131,6 +1165,7 @@ mtp_err_t _hutil_read_file_data_from_offset(mtp_uint32 obj_handle, off_t offset, return MTP_ERROR_INVALID_OBJECTHANDLE; } + /* LCOV_EXCL_START */ if (obj->obj_info->protcn_status == MTP_PROTECTIONSTATUS_NONTRANSFERABLE_DATA) { @@ -1163,6 +1198,7 @@ mtp_err_t _hutil_read_file_data_from_offset(mtp_uint32 obj_handle, off_t offset, } _util_file_close(h_file); + /* LCOV_EXCL_STOP */ return MTP_ERROR_NONE; } @@ -1178,7 +1214,7 @@ mtp_err_t _hutil_write_file_data(mtp_uint32 store_id, mtp_obj_t *obj, retv_if(obj == NULL, MTP_ERROR_INVALID_PARAM); retv_if(obj->obj_info == NULL, MTP_ERROR_INVALID_PARAM); - + /* LCOV_EXCL_START */ store = _device_get_store(store_id); if (store == NULL) { ERR("destination store is not valid"); @@ -1242,7 +1278,7 @@ mtp_err_t _hutil_write_file_data(mtp_uint32 store_id, mtp_obj_t *obj, #endif /*MTP_USE_RUNTIME_GETOBJECTPROPVALUE*/ _entity_add_object_to_store(store, obj); - + /* LCOV_EXCL_STOP */ return MTP_ERROR_NONE; } @@ -1319,6 +1355,7 @@ mtp_err_t _hutil_get_num_objects(mtp_uint32 store_id, mtp_uint32 h_parent, } } + /* LCOV_EXCL_START */ if (!h_parent) { if (!format) { *num_obj = _device_get_num_objects(store_id); @@ -1373,6 +1410,7 @@ mtp_err_t _hutil_get_num_objects(mtp_uint32 store_id, mtp_uint32 h_parent, *num_obj = _entity_get_num_children(store, h_parent, format); return MTP_ERROR_NONE; } +/* LCOV_EXCL_STOP */ mtp_err_t _hutil_get_object_handles(mtp_uint32 store_id, mtp_uint32 format, mtp_uint32 h_parent, ptp_array_t *handle_arr) @@ -1390,17 +1428,17 @@ mtp_err_t _hutil_get_object_handles(mtp_uint32 store_id, mtp_uint32 format, } if (store_id == PTP_STORAGEID_ALL && h_parent == PTP_OBJECTHANDLE_ROOT) { - for (i = 0; i < _device_get_num_stores(); i++) { - store = _device_get_store_at_index(i); - _entity_get_objects_from_store_by_format(store, format, handle_arr); + for (i = 0; i < _device_get_num_stores(); i++) { // LCOV_EXCL_LINE + store = _device_get_store_at_index(i); // LCOV_EXCL_LINE + _entity_get_objects_from_store_by_format(store, format, handle_arr); // LCOV_EXCL_LINE } return MTP_ERROR_NONE; } else if (store_id == PTP_STORAGEID_ALL && h_parent == PTP_OBJECTHANDLE_ALL) { h_parent = PTP_OBJECTHANDLE_ROOT; - for (i = 0; i < _device_get_num_stores(); i++) { - store = _device_get_store_at_index(i); - _entity_get_child_handles_with_same_format(store, h_parent, format, handle_arr); + for (i = 0; i < _device_get_num_stores(); i++) { // LCOV_EXCL_LINE + store = _device_get_store_at_index(i); // LCOV_EXCL_LINE + _entity_get_child_handles_with_same_format(store, h_parent, format, handle_arr); // LCOV_EXCL_LINE } return MTP_ERROR_NONE; @@ -1411,6 +1449,7 @@ mtp_err_t _hutil_get_object_handles(mtp_uint32 store_id, mtp_uint32 format, return MTP_ERROR_INVALID_STORE; } + /* LCOV_EXCL_START */ _entity_get_objects_from_store_by_format(store, format, handle_arr); return MTP_ERROR_NONE; @@ -1433,6 +1472,7 @@ mtp_err_t _hutil_get_object_handles(mtp_uint32 store_id, mtp_uint32 format, _entity_get_child_handles_with_same_format(store, h_parent, format, handle_arr); return MTP_ERROR_NONE; + /* LCOV_EXCL_STOP */ } mtp_err_t _hutil_construct_object_entry(mtp_uint32 store_id, @@ -1568,6 +1608,7 @@ mtp_err_t _hutil_construct_object_entry_prop_list(mtp_uint32 store_id, mtp_char file_name[MTP_MAX_FILENAME_SIZE + 1] = { 0 }; if (obj_data != NULL && obj_data->obj != NULL) { + /* LCOV_EXCL_START */ store = _device_get_store(obj_data->store_id); if (store != NULL) { DBG("check free size instead of re-calculation"); @@ -1575,6 +1616,7 @@ mtp_err_t _hutil_construct_object_entry_prop_list(mtp_uint32 store_id, (store->root_path)); } _entity_dealloc_mtp_obj(obj_data->obj); + /* LCOV_EXCL_STOP */ } store = _device_get_store(store_id); @@ -1583,6 +1625,7 @@ mtp_err_t _hutil_construct_object_entry_prop_list(mtp_uint32 store_id, return MTP_ERROR_INVALID_STORE; } + /* LCOV_EXCL_START */ if (store->store_info.access == PTP_STORAGEACCESS_R) { ERR("Only read access allowed on store"); return MTP_ERROR_STORE_READ_ONLY; @@ -1908,7 +1951,7 @@ ERROR_EXIT: #endif /* MTP_SUPPORT_ALBUM_ART */ if (obj_info != NULL) _entity_dealloc_obj_info(obj_info); - + /* LCOV_EXCL_STOP */ return resp; } @@ -1924,6 +1967,7 @@ mtp_err_t _hutil_get_object_prop_value(mtp_uint32 obj_handle, return MTP_ERROR_INVALID_OBJECTHANDLE; } + /* LCOV_EXCL_START */ tprop = _prop_get_prop_val(tobj, prop_code); if (tprop != NULL) { memcpy(prop_val, tprop, sizeof(obj_prop_val_t)); @@ -1933,6 +1977,7 @@ mtp_err_t _hutil_get_object_prop_value(mtp_uint32 obj_handle, ERR("can not get the prop value for propcode [0x%x]\n", prop_code); return MTP_ERROR_GENERAL; + /* LCOV_EXCL_STOP */ } mtp_err_t _hutil_update_object_property(mtp_uint32 obj_handle, @@ -1958,6 +2003,7 @@ mtp_err_t _hutil_update_object_property(mtp_uint32 obj_handle, return MTP_ERROR_INVALID_OBJECTHANDLE; } + /* LCOV_EXCL_START */ obj_info = obj->obj_info; /* Avoid to rename file/folder during file operating by phone side. */ if (_util_is_file_opened(obj->file_path) == TRUE) { @@ -2075,7 +2121,7 @@ mtp_err_t _hutil_update_object_property(mtp_uint32 obj_handle, if (prop_sz != NULL) *prop_sz = p_size; - + /* LCOV_EXCL_STOP */ return MTP_ERROR_NONE; } @@ -2122,11 +2168,13 @@ mtp_err_t _hutil_get_object_prop_list(mtp_uint32 obj_handle, mtp_uint32 format, if ((obj_handle != PTP_OBJECTHANDLE_UNDEFINED) && (obj_handle != PTP_OBJECTHANDLE_ALL)) { /* Is this object handle valid? */ + /* LCOV_EXCL_START */ store = _device_get_store_containing_obj(obj_handle); if (store == NULL) { ERR("invalid object handle"); return MTP_ERROR_INVALID_OBJECTHANDLE; } + /* LCOV_EXCL_STOP */ } if (prop_code == PTP_PROPERTY_UNDEFINED) { @@ -2139,6 +2187,7 @@ mtp_err_t _hutil_get_object_prop_list(mtp_uint32 obj_handle, mtp_uint32 format, } } + /* LCOV_EXCL_START */ if (!(obj_handle == PTP_OBJECTHANDLE_ALL || obj_handle == PTP_OBJECTHANDLE_UNDEFINED) && !(format == PTP_FORMATCODE_NOTUSED || @@ -2148,6 +2197,9 @@ mtp_err_t _hutil_get_object_prop_list(mtp_uint32 obj_handle, mtp_uint32 format, return MTP_ERROR_NO_SPEC_BY_FORMAT; } + if (prop_list == NULL) + return MTP_ERROR_INVALID_PARAM; + _util_init_list(&(prop_list->prop_quad_list)); _prop_init_ptparray(obj_arr, UINT32_TYPE); @@ -2179,6 +2231,7 @@ mtp_err_t _hutil_get_object_prop_list(mtp_uint32 obj_handle, mtp_uint32 format, return MTP_ERROR_GENERAL; } } + /* LCOV_EXCL_STOP */ } #ifndef MTP_USE_RUNTIME_GETOBJECTPROPVALUE @@ -2239,6 +2292,7 @@ mtp_err_t _hutil_get_object_references(mtp_uint32 obj_handle, return MTP_ERROR_INVALID_OBJECTHANDLE; } + /* LCOV_EXCL_START */ if (parray == NULL) { *num_ele = 0; return MTP_ERROR_GENERAL; @@ -2267,6 +2321,7 @@ mtp_err_t _hutil_get_object_references(mtp_uint32 obj_handle, } _prop_deinit_ptparray(&ref_arr); + /* LCOV_EXCL_STOP */ return MTP_ERROR_NONE; } @@ -2310,6 +2365,7 @@ mtp_err_t _hutil_get_playback_skip(mtp_int32 skip_param) retv_if(skip_param == 0, MTP_ERROR_INVALID_PARAM); +/* LCOV_EXCL_START */ if (_device_get_playback_obj(&obj_handle) == FALSE) { ERR("_device_get_playback_obj Fail"); return MTP_ERROR_GENERAL; @@ -2380,6 +2436,7 @@ mtp_err_t _hutil_get_playback_skip(mtp_int32 skip_param) return MTP_ERROR_GENERAL; } +/* LCOV_EXCL_STOP */ mtp_err_t _hutil_format_storage(mtp_uint32 store_id, mtp_uint32 fs_format) { diff --git a/src/mtp_event_handler.c b/src/mtp_event_handler.c index b021a75..fc63ae1 100755 --- a/src/mtp_event_handler.c +++ b/src/mtp_event_handler.c @@ -55,6 +55,7 @@ static mtp_bool __send_start_event_to_eh_thread(void); /* * FUNCTIONS */ +/* LCOV_EXCL_START */ mtp_bool _eh_register_notification_callbacks(void) { mtp_int32 ret; @@ -487,3 +488,4 @@ static mtp_bool __send_start_event_to_eh_thread(void) return TRUE; } +/* LCOV_EXCL_STOP */ diff --git a/src/mtp_init.c b/src/mtp_init.c index a206959..f5abc88 100755 --- a/src/mtp_init.c +++ b/src/mtp_init.c @@ -63,6 +63,7 @@ static void __mtp_exit(void); * @param[out] None. * @return None. */ +/* LCOV_EXCL_START */ static void __mtp_exit(void) { long cur_time; @@ -97,6 +98,7 @@ static gboolean __check_internal_storage(gpointer user_data) return true; } +/* LCOV_EXCL_STOP */ void _mtp_init(add_rem_store_t sel) { @@ -150,6 +152,7 @@ void _mtp_init(add_rem_store_t sel) /* Internal Storage */ if (MTP_PHONE_LOCK_OFF == _util_get_local_lock_status()) { mtp_int32 ret; + /* LCOV_EXCL_START */ char inter_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 }; ret = _util_media_content_connect(); @@ -166,9 +169,11 @@ void _mtp_init(add_rem_store_t sel) goto MTP_INIT_FAIL; } } + /* LCOV_EXCL_STOP */ } /* External Storage */ if (MTP_PHONE_MMC_INSERTED == _util_get_local_mmc_status()) { + /* LCOV_EXCL_START */ char ext_path[MTP_MAX_PATHNAME_SIZE + 1] = { 0 }; _util_get_external_path(ext_path); if (access(ext_path, F_OK) < 0) { @@ -178,6 +183,7 @@ void _mtp_init(add_rem_store_t sel) goto MTP_INIT_FAIL; } } + /* LCOV_EXCL_STOP */ } /* Set mtpdeviceinfo */ @@ -300,10 +306,12 @@ static void __read_mtp_conf(void) fp = fopen(MTP_CONFIG_FILE_PATH, "r"); if (fp == NULL) { + /* LCOV_EXCL_START */ DBG("Default configuration is used"); g_conf.is_init = true; __print_mtp_conf(); + /* LCOV_EXCL_STOP */ return; } @@ -320,120 +328,122 @@ static void __read_mtp_conf(void) token = strtok_r(buf, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE if (strcasecmp(token, "mmap_threshold") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.mmap_threshold = atoi(token); } else if (strcasecmp(token, "init_rx_ipc_size") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.init_rx_ipc_size = atoi(token); } else if (strcasecmp(token, "init_tx_ipc_size") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.init_tx_ipc_size = atoi(token); } else if (strcasecmp(token, "max_rx_ipc_size") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.max_rx_ipc_size = atoi(token); } else if (strcasecmp(token, "max_tx_ipc_size") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.max_tx_ipc_size = atoi(token); } else if (strcasecmp(token, "read_usb_size") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.read_usb_size = atoi(token); } else if (strcasecmp(token, "write_usb_size") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.write_usb_size = atoi(token); } else if (strcasecmp(token, "read_file_size") == 0) { + /* LCOV_EXCL_START */ token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.read_file_size = atoi(token); } else if (strcasecmp(token, "write_file_size") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.write_file_size = atoi(token); - + /* LCOV_EXCL_STOP */ } else if (strcasecmp(token, "max_io_buf_size") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.max_io_buf_size = atoi(token); } else if (strcasecmp(token, "read_file_delay") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.read_file_delay = atoi(token); } else if (strcasecmp(token, "support_pthread_sched") == 0) { + /* LCOV_EXCL_START */ token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.support_pthread_sched = atoi(token) ? true : false; } else if (strcasecmp(token, "inheritsched") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.inheritsched = *token; } else if (strcasecmp(token, "schedpolicy") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.schedpolicy = *token; } else if (strcasecmp(token, "file_schedparam") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.file_schedparam = atoi(token); } else if (strcasecmp(token, "usb_schedparam") == 0) { token = strtok_r(NULL, "=", &saveptr); if (token == NULL) - continue; + continue; // LCOV_EXCL_LINE g_conf.usb_schedparam = atoi(token); - + /* LCOV_EXCL_STOP */ } else { ERR("Unknown option : %s\n", buf); } @@ -494,10 +504,12 @@ void _features_supported_info(void) * It must not be called in gthr_mtp_event thread. * It makes dead lock state if it is called in gthr_mtp_event thread. */ +/* LCOV_EXCL_START */ void mtp_end_event(void) { __mtp_exit(); } +/* LCOV_EXCL_STOP */ static inline int _main_init() { @@ -527,10 +539,20 @@ static inline int _main_init() return MTP_ERROR_NONE; } +#ifndef TIZEN_TEST_GTESTS int main(int argc, char *argv[]) { mtp_int32 ret; +#ifdef TIZEN_TEST_GCOV + setenv("GCOV_PREFIX", "/tmp/daemon", 1); +#endif + +#ifdef TIZEN_TEST_GCOV + void __gcov_flush(void); // if you use C++, you should declare extern "C" at out of the function. + __gcov_flush(); +#endif + if (_transport_select_driver() == FALSE) { ERR("_transport_select_driver fail"); return MTP_ERROR_GENERAL; @@ -559,3 +581,4 @@ int main(int argc, char *argv[]) return MTP_ERROR_NONE; } +#endif diff --git a/src/mtp_inoti_handler.c b/src/mtp_inoti_handler.c index 66980f3..c899a75 100755 --- a/src/mtp_inoti_handler.c +++ b/src/mtp_inoti_handler.c @@ -90,6 +90,7 @@ void *_thread_inoti(void *arg) errno = 0; i = 0; length = read(g_inoti_fd, buffer, sizeof(buffer)); + /* LCOV_EXCL_START */ if (length < 0) { ERR("read() Fail"); _util_print_error(); @@ -111,6 +112,7 @@ void *_thread_inoti(void *arg) pthread_cleanup_pop(1); return NULL; + /* LCOV_EXCL_STOP */ } void _inoti_add_watch_for_fs_events(mtp_char *path) @@ -121,6 +123,7 @@ void _inoti_add_watch_for_fs_events(mtp_char *path) if (g_cnt_watch_folder == INOTI_FOLDER_COUNT_MAX) { /* find empty cell */ + /* LCOV_EXCL_START */ for (i = 0; i < INOTI_FOLDER_COUNT_MAX; i++) { /* If not empty */ if (g_inoti_watches[i].wd != 0) @@ -141,6 +144,7 @@ void _inoti_add_watch_for_fs_events(mtp_char *path) IN_DELETE | IN_MOVED_FROM | IN_MOVED_TO); return; + /* LCOV_EXCL_STOP */ } DBG("g_watch_folders[%d] add watch : %s\n", g_cnt_watch_folder, path); @@ -169,6 +173,7 @@ mtp_bool _inoti_init_filesystem_evnts() ret = _util_thread_create(&g_inoti_thrd, "File system inotify thread\n", PTHREAD_CREATE_JOINABLE, _thread_inoti, NULL); if (FALSE == ret) { + /* LCOV_EXCL_START */ ERR("_util_thread_create() Fail"); _util_print_error(); close(g_inoti_fd); @@ -309,6 +314,7 @@ static mtp_bool __process_inoti_event(struct inotify_event *event) return TRUE; } +/* LCOV_EXCL_STOP */ void _inoti_deinit_filesystem_events() { @@ -323,6 +329,7 @@ void _inoti_deinit_filesystem_events() return; } +/* LCOV_EXCL_START */ static void __remove_inoti_watch(mtp_char *path) { mtp_int32 i = 0; @@ -453,6 +460,7 @@ static mtp_bool __get_inoti_event_full_path(mtp_int32 wd, mtp_char *event_name, return TRUE; } +/* LCOV_EXCL_STOP */ static void __remove_recursive_inoti_watch(mtp_char *path) { @@ -492,6 +500,7 @@ static void __clean_up_inoti(void *data) return; } +/* LCOV_EXCL_START */ static void __delete_children_from_store_inoti(mtp_store_t *store, mtp_obj_t *obj) { @@ -682,6 +691,7 @@ static void __process_object_deleted_event(mtp_char *fullpath, return; } +/* LCOV_EXCL_STOP */ static void __destroy_inoti_open_files_list() { @@ -689,6 +699,7 @@ static void __destroy_inoti_open_files_list() ret_if(g_open_files_list == NULL); + /* LCOV_EXCL_START */ while (g_open_files_list) { current = g_open_files_list; g_open_files_list = g_open_files_list->previous; @@ -705,5 +716,6 @@ static void __destroy_inoti_open_files_list() g_open_files_list = NULL; return; + /* LCOV_EXCL_STOP */ } #endif /*MTP_SUPPORT_OBJECTADDDELETE_EVENT*/ diff --git a/src/ptp_container.c b/src/ptp_container.c index 5143569..87e8950 100755 --- a/src/ptp_container.c +++ b/src/ptp_container.c @@ -43,6 +43,7 @@ mtp_uint32 _hdlr_get_param_cmd_container(cmd_container_t *cntr, return 0; } +/* LCOV_EXCL_START */ void _hdlr_copy_cmd_container_unknown_params(cmd_container_t *src, cmd_container_t *dst) { @@ -60,6 +61,7 @@ void _hdlr_copy_cmd_container_unknown_params(cmd_container_t *src, return; } +/* LCOV_EXCL_STOP */ void _hdlr_copy_cmd_container(cmd_container_t *src, cmd_container_t *dst) { @@ -108,6 +110,7 @@ mtp_bool _hdlr_validate_cmd_container(mtp_uchar *blk, mtp_uint32 size) if (size < sizeof(header_container_t) || size > sizeof(cmd_container_t)) return FALSE; + /* LCOV_EXCL_START */ cmd_container_t *ptr = NULL; ptr = (cmd_container_t *)blk; @@ -119,6 +122,7 @@ mtp_bool _hdlr_validate_cmd_container(mtp_uchar *blk, mtp_uint32 size) } return TRUE; + /* LCOV_EXCL_STOP */ } void _hdlr_init_data_container(data_container_t *dst, mtp_uint16 code, @@ -165,6 +169,7 @@ mtp_uchar *_hdlr_alloc_buf_data_container(data_container_t *dst, return (dst->data + sizeof(header_container_t)); } +/* LCOV_EXCL_START */ mtp_bool _hdlr_send_data_container(data_container_t *dst) { mtp_uint32 sent; @@ -187,6 +192,7 @@ mtp_bool _hdlr_send_bulk_data(mtp_uchar *dst, mtp_uint32 len) return TRUE; } +/* LCOV_EXCL_STOP */ mtp_bool _hdlr_rcv_data_container(data_container_t *dst, mtp_uint32 size) { @@ -237,6 +243,7 @@ mtp_bool _hdlr_rcv_data_container(data_container_t *dst, mtp_uint32 size) return TRUE; } +/* LCOV_EXCL_START */ mtp_bool _hdlr_rcv_file_in_data_container(data_container_t *dst, mtp_char *filepath, mtp_uint32 path_len) { @@ -289,6 +296,7 @@ mtp_bool _hdlr_rcv_file_in_data_container(data_container_t *dst, return TRUE; } +/* LCOV_EXCL_STOP */ mtp_uint32 _hdlr_get_payload_size(data_container_t *dst) { @@ -323,6 +331,7 @@ void _hdlr_resp_container_init(cmd_container_t *dst, mtp_uint16 resp_code, return; } +/* LCOV_EXCL_START */ mtp_bool _hdlr_send_resp_container(cmd_container_t *dst) { mtp_uint32 sent = 0; @@ -345,6 +354,7 @@ mtp_bool _hdlr_send_resp_container(cmd_container_t *dst) return TRUE; } +/* LCOV_EXCL_STOP */ void _hdlr_init_event_container(cmd_container_t *dst, mtp_uint16 code, mtp_uint32 tid, mtp_uint32 param1, mtp_uint32 param2) @@ -376,6 +386,8 @@ void _hdlr_init_event_container_with_param(cmd_container_t *dst, #endif /* __BIG_ENDIAN__ */ return; } + +/* LCOV_EXCL_START */ mtp_bool _hdlr_send_event_container(cmd_container_t *dst) { mtp_uint32 sent = 0; @@ -385,6 +397,7 @@ mtp_bool _hdlr_send_event_container(cmd_container_t *dst) return (retval == MTP_ERROR_NONE && sent == dst->len) ? TRUE : FALSE; } +/* LCOV_EXCL_STOP */ void _hdlr_conv_cmd_container_byte_order(cmd_container_t *dst) { diff --git a/src/transport/mtp_transport.c b/src/transport/mtp_transport.c index 3e78d89..ba76b86 100755 --- a/src/transport/mtp_transport.c +++ b/src/transport/mtp_transport.c @@ -56,6 +56,7 @@ static void __transport_deinit_io(); /* * FUNCTIONS */ +/* LCOV_EXCL_START */ void _transport_save_cmd_buffer(mtp_char *buffer, mtp_uint32 size) { memcpy(g_mgr->ftemp_st.cmd_buf, buffer, size); @@ -63,6 +64,7 @@ void _transport_save_cmd_buffer(mtp_char *buffer, mtp_uint32 size) g_mgr->ftemp_st.data_count = 0; return; } +/* LCOV_EXCL_STOP */ mtp_err_t _transport_rcv_temp_file_data(mtp_byte *buffer, mtp_uint32 size, mtp_uint32 *count) @@ -80,6 +82,7 @@ mtp_err_t _transport_rcv_temp_file_data(mtp_byte *buffer, mtp_uint32 size, } /*copy header */ + /* LCOV_EXCL_START */ memcpy(buffer, g_mgr->ftemp_st.header_buf, sizeof(header_container_t)); @@ -514,6 +517,7 @@ static void *__transport_thread_data_rcv(void *func) _util_thread_exit("__transport_thread_data_rcv is over"); return NULL; } +/* LCOV_EXCL_STOP */ void _transport_init_status_info(void) { @@ -521,6 +525,7 @@ void _transport_init_status_info(void) return; } +/* LCOV_EXCL_START */ mtp_int32 _transport_get_control_event(void) { mtp_uint32 event_code; @@ -543,6 +548,7 @@ mtp_state_t _transport_get_mtp_operation_state(void) { return g_status.mtp_op_state; } +/* LCOV_EXCL_STOP */ void _transport_set_mtp_operation_state(mtp_state_t state) { @@ -550,17 +556,20 @@ void _transport_set_mtp_operation_state(mtp_state_t state) return; } +/* LCOV_EXCL_START */ void _transport_set_usb_discon_state(mtp_bool is_usb_discon) { g_status.is_usb_discon = is_usb_discon; return; } +/* LCOV_EXCL_STOP */ mtp_bool _transport_get_usb_discon_state(void) { return g_status.is_usb_discon; } +/* LCOV_EXCL_START */ void _transport_set_cancel_initialization(mtp_bool value) { g_status.cancel_intialization = value; @@ -570,3 +579,4 @@ mtp_bool _transport_get_cancel_initialization(void) { return g_status.cancel_intialization; } +/* LCOV_EXCL_STOP */ diff --git a/src/transport/mtp_usb_driver.c b/src/transport/mtp_usb_driver.c index a856151..3de9ae1 100644 --- a/src/transport/mtp_usb_driver.c +++ b/src/transport/mtp_usb_driver.c @@ -23,6 +23,7 @@ static const mtp_usb_driver_t *usb_driver; /* * FUNCTIONS */ +/* LCOV_EXCL_START */ mtp_bool _transport_select_driver(void) { if (access(MTP_DRIVER_PATH, F_OK) == 0) { @@ -115,3 +116,4 @@ mtp_transport_type_t _transport_get_type(void) return MTP_TRANSPORT_UNKNOWN; } +/* LCOV_EXCL_STOP */ diff --git a/src/transport/mtp_usb_driver_ffs.c b/src/transport/mtp_usb_driver_ffs.c index 39abc2d..68f9803 100755 --- a/src/transport/mtp_usb_driver_ffs.c +++ b/src/transport/mtp_usb_driver_ffs.c @@ -71,6 +71,7 @@ static void __handle_control_request(mtp_int32 request); * FUNCTIONS */ +/* LCOV_EXCL_START */ static mtp_bool __io_init() { int ret; @@ -662,6 +663,7 @@ static mtp_uint32 ffs_transport_get_usb_packet_len(void) return MTP_MAX_PACKET_SIZE_SEND_HS; } +/* LCOV_EXCL_STOP */ const mtp_usb_driver_t mtp_usb_driver_ffs = { diff --git a/src/transport/mtp_usb_driver_slp.c b/src/transport/mtp_usb_driver_slp.c index 79f07b0..5f42d4d 100644 --- a/src/transport/mtp_usb_driver_slp.c +++ b/src/transport/mtp_usb_driver_slp.c @@ -52,6 +52,7 @@ static void __receive_signal(mtp_int32 n, siginfo_t *info, void *unused); /* * FUNCTIONS */ +/* LCOV_EXCL_START */ static mtp_bool slp_transport_init_usb_device(void) { mtp_int32 status = 0; @@ -466,7 +467,7 @@ static mtp_uint32 slp_transport_get_usb_packet_len(void) return MTP_MAX_PACKET_SIZE_SEND_HS; } - +/* LCOV_EXCL_STOP */ const mtp_usb_driver_t mtp_usb_driver_slp = { .transport_init_usb_device = slp_transport_init_usb_device, diff --git a/src/util/mtp_fs.c b/src/util/mtp_fs.c index 5723dba..0c4d48f 100755 --- a/src/util/mtp_fs.c +++ b/src/util/mtp_fs.c @@ -60,6 +60,7 @@ FILE* _util_file_open(const mtp_char *filename, file_mode_t mode, break; case MTP_FILE_WRITE: +/* LCOV_EXCL_START */ fmode = "w"; break; @@ -80,6 +81,7 @@ FILE* _util_file_open(const mtp_char *filename, file_mode_t mode, *error = EINVAL; return NULL; } +/* LCOV_EXCL_STOP */ fhandle = fopen(filename, fmode); if (fhandle == NULL) { @@ -89,6 +91,7 @@ FILE* _util_file_open(const mtp_char *filename, file_mode_t mode, return NULL; } + /* LCOV_EXCL_START*/ fcntl(fileno(fhandle), F_SETFL, O_NOATIME); return fhandle; @@ -569,6 +572,7 @@ DONE: closedir(dir); return ret; } +/* LCOV_EXCL_STOP */ /* * mtp_bool _util_get_file_attrs(const mtp_char *filename, file_attr_t *attrs) @@ -596,6 +600,7 @@ mtp_bool _util_get_file_attrs(const mtp_char *filename, file_attr_t *attrs) /*Reset attribute mode */ attrs->attribute = MTP_FILE_ATTR_MODE_NONE; if (S_ISREG(fileinfo.st_mode)) { + /* LCOV_EXCL_START */ attrs->attribute |= MTP_FILE_ATTR_MODE_REG; if (!((S_IWUSR & fileinfo.st_mode) || (S_IWGRP & fileinfo.st_mode) || @@ -636,6 +641,7 @@ mtp_bool _util_set_file_attrs(const mtp_char *filename, mtp_dword attrib) } return TRUE; } +/* LCOV_EXCL_STOP */ /* * mtp_bool _util_ifind_first(mtp_char *dirname, DIR **dirp, @@ -657,6 +663,7 @@ mtp_bool _util_ifind_first(mtp_char *dirname, DIR **dirp, dir_entry_t *dir_info) dir = opendir(dirname); if (NULL == dir) { + /* LCOV_EXCL_START */ ERR("opendir(%s) Fail", dirname); _util_print_error(); @@ -668,6 +675,7 @@ mtp_bool _util_ifind_first(mtp_char *dirname, DIR **dirp, dir_entry_t *dir_info) _util_print_error(); closedir(dir); return FALSE; + /* LCOV_EXCL_STOP */ } *dirp = dir; @@ -737,6 +745,7 @@ mtp_bool _util_ifind_next(mtp_char *dir_name, DIR *dirp, dir_entry_t *dir_info) case S_IFIFO: case S_IFLNK: case S_IFSOCK: + /* LCOV_EXCL_START */ dir_info->attrs.attribute |= MTP_FILE_ATTR_MODE_SYSTEM; break; @@ -745,6 +754,7 @@ mtp_bool _util_ifind_next(mtp_char *dir_name, DIR *dirp, dir_entry_t *dir_info) ERR_SECURE("%s has unknown type. mode[0x%x]\n", dir_info->filename, stat_buf.st_mode); break; + /* LCOV_EXCL_STOP */ } /* Directory Information */ @@ -754,6 +764,7 @@ mtp_bool _util_ifind_next(mtp_char *dir_name, DIR *dirp, dir_entry_t *dir_info) return TRUE; } +/* LCOV_EXCL_START */ mtp_bool _util_get_filesystem_info_ext(mtp_char *storepath, fs_info_t *fs_info) { @@ -779,6 +790,7 @@ mtp_bool _util_get_filesystem_info_ext(mtp_char *storepath, return TRUE; } +/* LCOV_EXCL_STOP */ mtp_bool _util_get_filesystem_info_int(mtp_char *storepath, fs_info_t *fs_info) { @@ -819,6 +831,7 @@ mtp_bool _util_get_filesystem_info(mtp_char *storepath, return FALSE; } +/* LCOV_EXCL_START */ void _util_count_num_lines(FILE* fhandle, mtp_uint32 *num_lines) { if (fhandle == NULL) @@ -986,3 +999,4 @@ void FLOGD(const char *fmt, ...) fclose(fp); return; } +/* LCOV_EXCL_STOP */ diff --git a/src/util/mtp_list.c b/src/util/mtp_list.c index 4bf2e15..4016ef2 100755 --- a/src/util/mtp_list.c +++ b/src/util/mtp_list.c @@ -41,8 +41,8 @@ mtp_bool _util_add_node(slist_t *l_ptr, void *data) node = (slist_node_t *)g_malloc(sizeof(slist_node_t)); if (node == NULL) { - ERR("g_malloc() Fail"); - return FALSE; + ERR("g_malloc() Fail"); // LCOV_EXCL_LINE + return FALSE; // LCOV_EXCL_LINE } node->value = data; @@ -58,6 +58,7 @@ mtp_bool _util_add_node(slist_t *l_ptr, void *data) return TRUE; } +/* LCOV_EXCL_START */ slist_node_t* _util_delete_node(slist_t *l_ptr, void *data) { retv_if(data == NULL, NULL); @@ -103,6 +104,7 @@ static slist_node_t *__util_del_first_node(slist_t *l_ptr) return temp; } +/* LCOV_EXCL_STOP */ /* This API will send NULL if list does not have elements */ slist_iterator* _util_init_list_iterator(slist_t *l_ptr) @@ -114,8 +116,8 @@ slist_iterator* _util_init_list_iterator(slist_t *l_ptr) temp = (slist_iterator *)g_malloc(sizeof(slist_iterator)); if (temp == NULL) { - ERR("g_malloc() Fail"); - return NULL; + ERR("g_malloc() Fail"); // LCOV_EXCL_LINE + return NULL; // LCOV_EXCL_LINE } temp->node_ptr = l_ptr->start; @@ -136,12 +138,14 @@ void* _util_get_list_next(slist_iterator *iter) return temp->value; } +/* LCOV_EXCL_START */ slist_node_t* _util_get_first_node(slist_t *l_ptr) { retv_if(l_ptr == NULL, NULL); return l_ptr->start; } +/* LCOV_EXCL_STOP */ void _util_deinit_list_iterator(slist_iterator *iter) { diff --git a/src/util/mtp_media_info.c b/src/util/mtp_media_info.c index 87f4b09..293cc39 100755 --- a/src/util/mtp_media_info.c +++ b/src/util/mtp_media_info.c @@ -26,6 +26,7 @@ #include "mtp_support.h" #include "mtp_fs.h" +/* LCOV_EXCL_START */ static bool __fill_media_id_cb(media_info_h media, void *user_data) { mtp_int32 ret = MEDIA_CONTENT_ERROR_NONE; @@ -855,3 +856,4 @@ void _util_free_video_meta(video_meta_t *video) MTP_PAL_SAFE_FREE(video->track); return; } +/* LCOV_EXCL_STOP */ diff --git a/src/util/mtp_msgq.c b/src/util/mtp_msgq.c index aa4b5c6..793dd8f 100755 --- a/src/util/mtp_msgq.c +++ b/src/util/mtp_msgq.c @@ -22,6 +22,7 @@ /* * FUNCTIONS */ +/* LCOV_EXCL_START */ mtp_bool _util_msgq_init(msgq_id_t *mq_id, mtp_uint32 flags) { *mq_id = msgget(IPC_PRIVATE, 0666 | IPC_CREAT); @@ -121,3 +122,4 @@ mtp_bool _util_rcv_msg_from_mq(msgq_id_t mq_id, unsigned char **pkt, return TRUE; } +/* LCOV_EXCL_STOP */ diff --git a/src/util/mtp_support.c b/src/util/mtp_support.c index 8517146..3ef7136 100755 --- a/src/util/mtp_support.c +++ b/src/util/mtp_support.c @@ -30,6 +30,7 @@ static mtp_char *__util_conv_int_to_hex_str(mtp_int32 int_val, mtp_char *str); /* * FUNCTIONS */ +/* LCOV_EXCL_START */ void _util_conv_byte_order(void *data, mtp_int32 size) { mtp_int32 idx; @@ -70,6 +71,7 @@ void _util_conv_byte_order_gen_str(void *str, mtp_int32 size, mtp_int32 elem_sz) return; } +/* LCOV_EXCL_STOP */ /* * If items_written is greater than or equal to dest_size, @@ -89,11 +91,13 @@ mtp_int32 _util_utf16_to_utf8(char *dest, mtp_int32 dest_size, utf8 = g_utf16_to_utf8(utf16, -1, &items_read, &items_written, &error); if (utf8 == NULL) { + /* LCOV_EXCL_START */ ERR("%s\n", error->message); g_error_free(error); dest[0] = '\0'; items_written = 0; + /* LCOV_EXCL_STOP */ } else { g_strlcpy(dest, (char *)utf8, dest_size); g_free(utf8); @@ -119,12 +123,14 @@ mtp_int32 _util_utf8_to_utf16(mtp_wchar *dest, mtp_int32 dest_items, utf16 = g_utf8_to_utf16(src, -1, &items_read, &items_written, &error); if (utf16 == NULL) { + /* LCOV_EXCL_START */ ERR("%s\n", error->message); g_error_free(error); error = NULL; dest[0] = (mtp_wchar)'\0'; items_written = 0; + /* LCOV_EXCL_STOP */ } else { _util_wchar_ncpy(dest, utf16, dest_items); g_free(utf16); @@ -140,6 +146,7 @@ mtp_int32 _util_utf8_to_utf16(mtp_wchar *dest, mtp_int32 dest_items, * @param[out] dest Destination buffer * @return None */ +/* LCOV_EXCL_START */ void _util_wchar_cpy(mtp_wchar *dest, const mtp_wchar *src) { ret_if(src == NULL); @@ -167,6 +174,7 @@ void _util_wchar_cpy(mtp_wchar *dest, const mtp_wchar *src) return; } +/* LCOV_EXCL_STOP */ /* * Copies a unicode string a given numbers of character. @@ -198,6 +206,7 @@ void _util_wchar_ncpy(mtp_wchar *dest, const mtp_wchar *src, unsigned long n) pc1 = (char *)dest; pc2 = (char *)src; + /* LCOV_EXCL_START */ while (n && (*pc2 || *(pc2 + 1))) { --n; *pc1++ = *pc2++; @@ -332,6 +341,7 @@ mtp_err_t _util_wchar_swprintf(mtp_wchar *mtp_wstr, mtp_int32 size, return MTP_ERROR_NONE; } +/* LCOV_EXCL_STOP */ mtp_uint16 _util_get_fmtcode(const mtp_char *extn) { @@ -423,6 +433,7 @@ mtp_bool _util_get_file_name(const mtp_char *fullpath, mtp_char *f_name) * @param[out] f_name gets filled with filename w/o extension * @return True or False based on success or failure */ +/* LCOV_EXCL_START */ mtp_bool _util_get_file_name_wo_extn(const mtp_char *fullpath, mtp_char *f_name) { mtp_char *fname_ptr; @@ -451,6 +462,7 @@ mtp_bool _util_get_file_name_wo_extn(const mtp_char *fullpath, mtp_char *f_name) g_strlcpy(f_name, fname_ptr, ((mtp_uint32)(extn_ptr - fname_ptr) + 1)); return TRUE; } +/* LCOV_EXCL_STOP */ mtp_bool _util_is_path_len_valid(const mtp_char *path) { @@ -517,6 +529,7 @@ mtp_bool _util_create_path(mtp_char *path, mtp_uint32 size, const mtp_char *dir, len = strlen(filename); if (len > MTP_MAX_FILENAME_SIZE) { + /* LCOV_EXCL_START */ ERR("filename is too long :[%u] > [%u]\n", len, MTP_MAX_FILENAME_SIZE); return FALSE; @@ -678,4 +691,4 @@ mtp_int32 _util_system_cmd_wait(const mtp_char *cmd) } } while (1); } - +/* LCOV_EXCL_STOP */ diff --git a/src/util/mtp_thread.c b/src/util/mtp_thread.c index 2ea7380..3ac847a 100644 --- a/src/util/mtp_thread.c +++ b/src/util/mtp_thread.c @@ -30,7 +30,7 @@ mtp_bool _util_thread_create(pthread_t *tid, const mtp_char *tname, error = pthread_attr_init(&attr); if (error != 0) { - ERR("pthread_attr_init Fail [%d], errno [%d]\n", error, errno); + ERR("pthread_attr_init Fail [%d], errno [%d]\n", error, errno); // LCOV_EXCL_LINE return FALSE; } @@ -38,22 +38,26 @@ mtp_bool _util_thread_create(pthread_t *tid, const mtp_char *tname, error = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); if (error != 0) { + /* LCOV_EXCL_START */ ERR("pthread_attr_setdetachstate Fail [%d], errno [%d]\n", error, errno); pthread_attr_destroy(&attr); return FALSE; + /* LCOV_EXCL_STOP */ } } error = pthread_create(tid, &attr, thread_func, arg); if (error != 0) { + /* LCOV_EXCL_START */ ERR("Thread creation Fail [%d], errno [%d]\n", error, errno); pthread_attr_destroy(&attr); return FALSE; + /* LCOV_EXCL_STOP */ } error = pthread_attr_destroy(&attr); if (error != 0) - ERR("pthread_attr_destroy Fail [%d] errno [%d]\n", error, errno); + ERR("pthread_attr_destroy Fail [%d] errno [%d]\n", error, errno); // LCOV_EXCL_LINE return TRUE; } @@ -65,8 +69,8 @@ mtp_bool _util_thread_join(pthread_t tid, void **data) res = pthread_join(tid, data); if (res != 0) { ERR("pthread_join Fail res = [%d] for thread [%u] errno [%d]\n", - res, tid, errno); - return FALSE; + res, tid, errno); // LCOV_EXCL_LINE + return FALSE; // LCOV_EXCL_LINE } return TRUE; @@ -90,8 +94,10 @@ mtp_bool _util_thread_cancel(pthread_t tid) return TRUE; } +/* LCOV_EXCL_START */ void _util_thread_exit(void *val_ptr) { pthread_exit(val_ptr); return; } +/* LCOV_EXCL_STOP */ diff --git a/src/util/mtp_util.c b/src/util/mtp_util.c index d27d453..6de1485 100644 --- a/src/util/mtp_util.c +++ b/src/util/mtp_util.c @@ -43,6 +43,7 @@ static phone_state_t g_ph_status = { 0 }; +/* LCOV_EXCL_START */ void _util_print_error() { /*In glibc-2.7, the longest error message string is 50 characters @@ -52,6 +53,7 @@ void _util_print_error() strerror_r(errno, buff, sizeof(buff)); ERR("Error: [%d]:[%s]\n", errno, buff); } +/* LCOV_EXCL_STOP */ mtp_int32 _util_get_battery_level(void) { @@ -91,6 +93,7 @@ mtp_bool _util_get_serial(mtp_char *serial, mtp_uint32 len) g_free(serial_no); return TRUE; } +/* LCOV_EXCL_START */ g_free(serial_no); handle = tel_init(NULL); @@ -123,6 +126,7 @@ mtp_bool _util_get_serial(mtp_char *serial, mtp_uint32 len) g_free(imei_no); return TRUE; } +/* LCOV_EXCL_STOP */ void _util_get_vendor_ext_desc(mtp_char *vendor_ext_desc, mtp_uint32 len) { @@ -136,9 +140,9 @@ void _util_get_vendor_ext_desc(mtp_char *vendor_ext_desc, mtp_uint32 len) "http://tizen.org/feature/platform.version", &version); if (ret != SYSTEM_INFO_ERROR_NONE) { - ERR("system_info_get_value_string Fail : 0x%X\n", ret); - g_strlcpy(vendor_ext_desc, MTP_VENDOR_EXTENSIONDESC_CHAR, len); - return; + ERR("system_info_get_value_string Fail : 0x%X\n", ret); // LCOV_EXCL_LINE + g_strlcpy(vendor_ext_desc, MTP_VENDOR_EXTENSIONDESC_CHAR, len); // LCOV_EXCL_LINE + return; // LCOV_EXCL_LINE } g_snprintf(vendor_ext_desc, len, "%stizen.org:%s; ", MTP_VENDOR_EXTENSIONDESC_CHAR, version); @@ -158,9 +162,9 @@ void _util_get_model_name(mtp_char *model_name, mtp_uint32 len) "http://tizen.org/system/model_name", &model); if (ret != SYSTEM_INFO_ERROR_NONE) { - ERR("system_info_get_value_string Fail : 0x%X\n", ret); - g_strlcpy(model_name, MTP_DEFAULT_MODEL_NAME, len); - return; + ERR("system_info_get_value_string Fail : 0x%X\n", ret); // LCOV_EXCL_LINE + g_strlcpy(model_name, MTP_DEFAULT_MODEL_NAME, len); // LCOV_EXCL_LINE + return; // LCOV_EXCL_LINE } g_strlcpy(model_name, model, len); g_free(model); @@ -180,18 +184,18 @@ void _util_get_device_version(mtp_char *device_version, mtp_uint32 len) "http://tizen.org/feature/platform.version", &version); if (ret != SYSTEM_INFO_ERROR_NONE) { - ERR("system_info_get_value_string Fail : 0x%X\n", ret); - g_strlcpy(device_version, MTP_DEFAULT_DEVICE_VERSION, len); - return; + ERR("system_info_get_value_string Fail : 0x%X\n", ret); // LCOV_EXCL_LINE + g_strlcpy(device_version, MTP_DEFAULT_DEVICE_VERSION, len); // LCOV_EXCL_LINE + return; // LCOV_EXCL_LINE } ret = system_info_get_platform_string( "http://tizen.org/system/build.string", &build_info); if (ret != SYSTEM_INFO_ERROR_NONE) { - ERR("system_info_get_value_string Fail : 0x%X\n", ret); - g_strlcpy(device_version, MTP_DEFAULT_DEVICE_VERSION, len); - g_free(version); + ERR("system_info_get_value_string Fail : 0x%X\n", ret); // LCOV_EXCL_LINE + g_strlcpy(device_version, MTP_DEFAULT_DEVICE_VERSION, len); // LCOV_EXCL_LINE + g_free(version); // LCOV_EXCL_LINE return; } g_snprintf(device_version, len, "TIZEN %s (%s)", version, build_info); @@ -200,6 +204,7 @@ void _util_get_device_version(mtp_char *device_version, mtp_uint32 len) return; } +/* LCOV_EXCL_START */ void _util_gen_alt_serial(mtp_char *serial, mtp_uint32 len) { struct timeval st; @@ -264,12 +269,14 @@ void _util_get_mmc_status(phone_status_t *val) *val = MTP_PHONE_MMC_INSERTED; return; } +/* LCOV_EXCL_STOP */ phone_status_t _util_get_local_mmc_status(void) { return g_ph_status.mmc_state; } +/* LCOV_EXCL_START */ void _util_set_local_mmc_status(const phone_status_t val) { g_ph_status.mmc_state = val; @@ -319,12 +326,14 @@ void _util_get_lock_status(phone_status_t *val) *val = MTP_PHONE_LOCK_OFF; return; } +/* LCOV_EXCL_STOP */ phone_status_t _util_get_local_lock_status(void) { return g_ph_status.lock_state; } +/* LCOV_EXCL_START */ void _util_set_local_lock_status(const phone_status_t val) { g_ph_status.lock_state = val; @@ -346,6 +355,7 @@ static bool _util_device_external_supported_cb(int storage_id, storage_type_e ty return TRUE; } +/* LCOV_EXCL_STOP */ void _util_get_external_path(char *external_path) { @@ -354,6 +364,7 @@ void _util_get_external_path(char *external_path) error = storage_foreach_device_supported(_util_device_external_supported_cb, external_path); if (error != STORAGE_ERROR_NONE) { +/* LCOV_EXCL_START */ ERR("get external storage path Fail"); if (external_path != NULL) { strncpy(external_path, MTP_EXTERNAL_PATH_CHAR, sizeof(MTP_EXTERNAL_PATH_CHAR)); @@ -387,6 +398,7 @@ int _util_wait_for_user() return 0; } +/* LCOV_EXCL_STOP */ uid_t _util_get_active_user() { @@ -397,20 +409,24 @@ uid_t _util_get_active_user() user_cnt = sd_get_active_uids(&active_user_list); if (user_cnt <= 0) { + /* LCOV_EXCL_START */ ret = _util_wait_for_user(); if (ret < 0) return -1; user_cnt = sd_get_active_uids(&active_user_list); + /* LCOV_EXCL_STOP */ } if (user_cnt <= 0) { + /* LCOV_EXCL_START */ ERR("Active user not exists : %d", user_cnt); if (active_user_list != NULL) free(active_user_list); return -1; + /* LCOV_EXCL_STOP */ } if (active_user_list == NULL) { @@ -443,10 +459,12 @@ void _util_get_internal_path(char *internal_path) active_name = pwd->pw_name; if (active_name == NULL) { + /* LCOV_EXCL_START */ ERR("active_name is NULL"); strncpy(internal_path, MTP_USER_DIRECTORY, sizeof(MTP_USER_DIRECTORY)); internal_path[sizeof(MTP_USER_DIRECTORY) - 1] = 0; return; + /* LCOV_EXCL_STOP */ } if (internal_path != NULL) { @@ -459,6 +477,7 @@ void _util_get_internal_path(char *internal_path) ERR("internal path is %s", internal_path); } +/* LCOV_EXCL_START */ mtp_bool _util_media_content_connect() { mtp_int32 ret = 0; @@ -479,4 +498,4 @@ void _util_media_content_disconnect() { media_content_disconnect(); } - +/* LCOV_EXCL_STOP */ diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt new file mode 100644 index 0000000..e8384c1 --- /dev/null +++ b/unittest/CMakeLists.txt @@ -0,0 +1,64 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(gtest-mtp-responder C CXX) + +SET(GTEST_TEST "gtest-mtp-responder") +ADD_DEFINITIONS("-DUSE_DLOG") + +SET(REQUIRES_LIST ${REQUIRES_LIST} + glib-2.0 + gio-2.0 + gmock + dlog + capi-content-media-content + capi-media-metadata-extractor + vconf + dlog + tapi + capi-system-info + storage + libsystemd-daemon + libsystemd +) + +IF(BUILD_GTESTS) + ADD_DEFINITIONS("-DTIZEN_TEST_GTESTS") +ENDIF(BUILD_GTESTS) +IF(BUILD_GCOV) + ADD_DEFINITIONS("-DTIZEN_TEST_GCOV") +ENDIF(BUILD_GCOV) + +INCLUDE(FindPkgConfig) + +FILE(GLOB GTEST_TEST_SRCS *.cpp ${CMAKE_SOURCE_DIR}/src/*.c ${CMAKE_SOURCE_DIR}/src/entity/*.c ${CMAKE_SOURCE_DIR}/src/transport/*.c ${CMAKE_SOURCE_DIR}/src/util/*.c ) + +PKG_CHECK_MODULES(GTEST_TEST_PKG REQUIRED ${REQUIRES_LIST}) + +FOREACH(flag ${GTEST_TEST_PKG_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +INCLUDE_DIRECTORIES(${GTEST_TEST_PKG_INCLUDE_DIRS}) +LINK_DIRECTORIES(${GTEST_TEST_PKG_LIBRARY_DIRS}) + +INCLUDE_DIRECTORIES(${pkgs_INCLUDE_DIRS}) +LINK_DIRECTORIES(${pkgs_LIBRARY_DIRS}) + + +SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wall -fPIE") +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}") +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie") + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/entity) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/transport) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/util) + +#AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src SRCS) +#AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src/entity SRCS) +#AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src/transport SRCS) +#AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src/util SRCS) + +ADD_EXECUTABLE(${GTEST_TEST} ${GTEST_TEST_SRCS}) +TARGET_LINK_LIBRARIES(${GTEST_TEST} ${GTEST_TEST_LDFLAGS} ${GTEST_TEST_PKG_LDFLAGS} ${LIBRARY} ${pkgs_LDFLAGS} -ldl -lgcov -lpthread -lrt -lgcrypt) +INSTALL(TARGETS ${GTEST_TEST} RUNTIME DESTINATION bin) diff --git a/unittest/mtpResponder.cpp b/unittest/mtpResponder.cpp new file mode 100644 index 0000000..ba12b65 --- /dev/null +++ b/unittest/mtpResponder.cpp @@ -0,0 +1,650 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +#include "mtpResponder.h" + +MtpResponder::MtpResponder(void) +{ + +} + +MtpResponder::~MtpResponder(void) +{ + _mtp_deinit(); +} + + +int MtpResponder::mtp_init(add_rem_store_t sel) +{ + _mtp_init(sel); + + return ERROR_NONE; +} + +int MtpResponder::mtp_deinit(void) +{ + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + _mtp_deinit(); + + return ERROR_NONE; +} + +int MtpResponder::hutil_get_storage_entry(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _hutil_get_storage_entry(0, NULL); + + return ret; +} + +int MtpResponder::hutil_get_storage_ids(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ptp_array_t store_ids = {UINT32_TYPE, 0, 0, NULL}; + + ret = _hutil_get_storage_ids(&store_ids); + + return ret; +} + +int MtpResponder::hutil_get_device_property(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _hutil_get_device_property(0, NULL); + + return ret; +} + +int MtpResponder::hutil_set_device_property(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _hutil_set_device_property(0, NULL, 0); + + return ret; +} + +int MtpResponder::hutil_reset_device_entry(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _hutil_reset_device_entry(0); + + return ret; +} + +int MtpResponder::hutil_add_object_entry(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _hutil_add_object_entry(NULL, NULL, NULL); + + return ret; +} + +int MtpResponder::hutil_remove_object_entry(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _hutil_remove_object_entry(0, 0); + + return ret; +} + +int MtpResponder::hutil_get_object_entry(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_obj_t *ptr_mtp_obj = NULL; + ret = _hutil_get_object_entry(0, &ptr_mtp_obj); + + return ret; +} + +int MtpResponder::hutil_copy_object_entries(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_uint32 new_hobj = 0; + ret = _hutil_copy_object_entries(0, 0, 0, 0, &new_hobj, 0); + + return ret; +} + +int MtpResponder::hutil_move_object_entry(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _hutil_move_object_entry(0, 0, 0); + + return ret; +} + +int MtpResponder::hutil_duplicate_object_entry(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_uint32 new_handle = 0; + ret = _hutil_duplicate_object_entry(0, 0, 0, &new_handle); + + return ret; +} + +int MtpResponder::hutil_read_file_data_from_offset(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_uint32 data_sz = 0; + mtp_char data[] = "aaaaaaaaaa"; + ret = _hutil_read_file_data_from_offset(0, (off_t)0, (void*)data, &data_sz); + + return ret; +} + +int MtpResponder::hutil_write_file_data(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_char fpath[] = "/Phone/DCIM/abc.txt"; + ret = _hutil_write_file_data(0, NULL, fpath); + + return ret; +} + +int MtpResponder::hutil_get_object_entry_size(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_uint64 obj_sz = 0; + ret = _hutil_get_object_entry_size(0, &obj_sz); + + return ret; +} + +#ifdef MTP_SUPPORT_SET_PROTECTION +int MtpResponder::hutil_set_protection(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _hutil_set_protection(0, 0); + + return ret; +} +#endif /* MTP_SUPPORT_SET_PROTECTION */ + +int MtpResponder::hutil_get_num_objects(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_uint32 num_obj = 0; + ret = _hutil_get_num_objects(0, 0, 0, &num_obj); + + return ret; +} + +int MtpResponder::hutil_get_object_handles(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ptp_array_t handle_arr = {UINT32_TYPE, 0, 0, NULL}; + ret = _hutil_get_object_handles(0, 0, 0, &handle_arr); + + return ret; +} + +int MtpResponder::hutil_construct_object_entry(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + obj_data_t obj_data = {0, 0, NULL}; + mtp_obj_t *mtp_obj = NULL; + mtp_char data[] = "aaaaaaaaa"; + ret = _hutil_construct_object_entry(0, 0, &obj_data, &mtp_obj, (void*)data, 0); + + return ret; +} + +//======================================== + +int MtpResponder::hutil_construct_object_entry_prop_list(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + obj_data_t obj_data = {0, 0, NULL}; + mtp_obj_t *mtp_obj = NULL; + mtp_char data[] = "aaaaaaaaa"; + mtp_uint32 err_idx = 0; + ret = _hutil_construct_object_entry_prop_list(0, 0, 0, 0, &obj_data, &mtp_obj, (void*)data, 0, &err_idx); + + return ret; +} + +int MtpResponder::hutil_get_object_prop_value(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_obj_t *mtp_obj = NULL; + ret = _hutil_get_object_prop_value(0, 0, NULL, &mtp_obj); + + return ret; +} + +int MtpResponder::hutil_update_object_property(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_uint16 data_type = 0; + mtp_char buf[] = "aaaaaa"; + mtp_uint32 prop_sz = 0; + ret = _hutil_update_object_property(0, 0, &data_type, (void*)buf, 0, &prop_sz); + + return ret; +} + +int MtpResponder::hutil_get_prop_desc(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_char data[] = "aaaaaa"; + ret = _hutil_get_prop_desc(0, 0, &data); + + return ret; +} + +int MtpResponder::hutil_get_object_prop_supported(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ptp_array_t prop_arr = {UINT32_TYPE, 0, 0, NULL}; + + ret = _hutil_get_object_prop_supported(0, &prop_arr); + + return ret; +} + +int MtpResponder::hutil_get_object_prop_list(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ptp_array_t obj_arr = {UINT32_TYPE, 0, 0, NULL}; + + #ifdef MTP_USE_RUNTIME_GETOBJECTPROPVALUE + ret = _hutil_get_object_prop_list(0, 0, 0, 0, 0, NULL, &obj_arr); + #else /* MTP_USE_RUNTIME_GETOBJECTPROPVALUE */ + ret = _hutil_get_object_prop_list(0, 0, 0, 0, 0, NULL); + #endif /* MTP_USE_RUNTIME_GETOBJECTPROPVALUE */ + + return ret; +} + +int MtpResponder::hutil_add_object_references_enhanced(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_uchar buffer[] = "aaaaaaaa"; + ret = _hutil_add_object_references_enhanced(0, buffer, 0); + + return ret; +} + +int MtpResponder::hutil_remove_object_reference(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _hutil_remove_object_reference(0, 0); + + return ret; +} + +int MtpResponder::hutil_get_object_references(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ptp_array_t parray = {UINT32_TYPE, 0, 0, NULL}; + mtp_uint32 num_ele = 0; + ret = _hutil_get_object_references(0, &parray, &num_ele); + + return ret; +} + +int MtpResponder::hutil_get_number_of_objects(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_uint32 num_obj = 0; + ret = _hutil_get_number_of_objects(0, &num_obj); + + return ret; +} + +int MtpResponder::hutil_get_interdep_prop_config_list_size(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_uint32 list_sz = 0; + ret = _hutil_get_interdep_prop_config_list_size(&list_sz, 0); + + return ret; +} + +int MtpResponder::hutil_get_interdep_prop_config_list_data(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_char data[] = "aaaaaaaa"; + ret = _hutil_get_interdep_prop_config_list_data(data, 0, 0); + + return ret; +} + +int MtpResponder::hutil_get_playback_skip(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _hutil_get_playback_skip(0); + + return ret; +} + +int MtpResponder::hutil_format_storage(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _hutil_format_storage(0, 0); + + return ret; +} + +int MtpResponder::hutil_get_storage_info_size(void) +{ + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + int ret_size = -1; + store_info_t store_info; + ret_size = _hutil_get_storage_info_size(&store_info); + + if (ret_size >= 0) + return ERROR_NONE; + return ERROR_OPERATION_FAILED; +} + +//================== _MTP_CMD_HANDLER_H_ ====================== + +int MtpResponder::cmd_hdlr_send_response(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + mtp_uint32 params = 0; + ret = _cmd_hdlr_send_response(NULL, 0, 0, ¶ms); + + return ret; +} + +int MtpResponder::cmd_hdlr_send_response_code(void) +{ + int ret = 0; + add_rem_store_t sel = MTP_ADDREM_AUTO; + _mtp_init(sel); + + ret = _cmd_hdlr_send_response_code(NULL, 0); + + return ret; +} + +//================== _MTP_EVENT_HANDLER_H_ ====================== + +int MtpResponder::hdlr_get_param_cmd_container(void) +{ + int ret = 0; + + cmd_container_t cntr; + mtp_uint32 index = 0; + _hdlr_init_cmd_container(&cntr); + + ret = _hdlr_get_param_cmd_container(&cntr, index); + + return ret; +} + +int MtpResponder::hdlr_add_param_resp_container(void) +{ + int ret = 0; + + cmd_container_t cntr; + cmd_container_t dst; + mtp_uint32 param = 0; + _hdlr_init_cmd_container(&cntr); + _hdlr_copy_cmd_container(&cntr, &dst); + + ret = _hdlr_add_param_resp_container(&dst, 0, ¶m); + + return (!ret); +} + +int MtpResponder::hdlr_validate_cmd_container(void) +{ + int ret = 0; + + cmd_container_t cntr; + _hdlr_init_cmd_container(&cntr); + + ret = _hdlr_validate_cmd_container((mtp_uchar*)&cntr, 0); + + return (!ret); +} + +int MtpResponder::hdlr_alloc_buf_data_container(void) +{ + data_container_t dst; + _hdlr_init_data_container(&dst, 0, 0); + + mtp_uchar *ptr = NULL; + ptr = _hdlr_alloc_buf_data_container(&dst, 0, 0); + + if (ptr == NULL) + return ERROR_OPERATION_FAILED; + return ERROR_NONE; +} + +int MtpResponder::hdlr_send_data_container(void) +{ + int ret = 0; + + data_container_t dst; + _hdlr_init_data_container(&dst, 0, 0); + _hdlr_alloc_buf_data_container(&dst, 0, 0); + + ret = _hdlr_send_data_container(&dst); + + return ret; +} + +int MtpResponder::hdlr_send_bulk_data(void) +{ + int ret = 0; + + data_container_t dst; + _hdlr_init_data_container(&dst, 0, 0); + + ret = _hdlr_send_bulk_data((mtp_uchar*)&dst, sizeof(data_container_t)); + + return ret; +} + +int MtpResponder::hdlr_rcv_data_container(void) +{ + int ret = 0; + + data_container_t dst; + _hdlr_init_data_container(&dst, 0, 0); + + ret = _hdlr_rcv_data_container(&dst, 0); + + return ret; +} + +int MtpResponder::hdlr_get_payload_size(void) +{ + int payload_size = -1; + + data_container_t dst; + _hdlr_init_data_container(&dst, 0, 0); + + payload_size = _hdlr_get_payload_size(&dst); + + if (payload_size >= 0) + return ERROR_NONE; + return ERROR_OPERATION_FAILED; +} + +int MtpResponder::hdlr_get_payload_data(void) +{ + mtp_uchar *ptr = NULL; + + data_container_t dst; + _hdlr_init_data_container(&dst, 0, 0); + _hdlr_alloc_buf_data_container(&dst, 0, 0); + + ptr = _hdlr_get_payload_data(&dst); + + if (ptr != NULL) + return ERROR_NONE; + return ERROR_OPERATION_FAILED; +} + +int MtpResponder::hdlr_resp_container_init(void) +{ + cmd_container_t dst; + _hdlr_resp_container_init(&dst, 0, 0); + + return ERROR_NONE; +} + +int MtpResponder::hdlr_init_event_container(void) +{ + cmd_container_t dst; + _hdlr_init_event_container(&dst, 0, 0, 0, 0); + + return ERROR_NONE; +} + +int MtpResponder::hdlr_init_event_container_with_param(void) +{ + cmd_container_t dst; + _hdlr_init_event_container_with_param(&dst, 0, 0, 0, 0); + + return ERROR_NONE; +} + +int MtpResponder::hdlr_conv_cmd_container_byte_order(void) +{ + cmd_container_t dst; + _hdlr_conv_cmd_container_byte_order(&dst); + + return ERROR_NONE; +} + +int MtpResponder::hdlr_conv_data_container_byte_order(void) +{ + data_container_t dst; + _hdlr_conv_data_container_byte_order(&dst); + + return ERROR_NONE; +} + + + + + + diff --git a/unittest/mtpResponder.h b/unittest/mtpResponder.h new file mode 100644 index 0000000..6d62c39 --- /dev/null +++ b/unittest/mtpResponder.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef __MTP_RESPONDER_H__ +#define __MTP_RESPONDER_H__ + +#include +#include + +#include "mtpconf.h" +#include "mtp_init.h" + +#include "mtp_thread.h" +#include "mtp_support.h" +#include "mtp_device.h" +#include "mtp_event_handler.h" +#include "mtp_cmd_handler.h" +#include "mtp_cmd_handler_util.h" +#include "mtp_inoti_handler.h" +#include "mtp_transport.h" +#include "mtp_util.h" +#include "mtp_media_info.h" +#include "mtp_usb_driver.h" +#include "mtp_descs_strings.h" + +class MtpResponder { + private: + public: + MtpResponder(void); + ~MtpResponder(void); + + int mtp_init(add_rem_store_t sel); + int mtp_deinit(void); + int hutil_get_storage_entry(void); + int hutil_get_storage_ids(void); + int hutil_get_device_property(void); + int hutil_set_device_property(void); + int hutil_reset_device_entry(void); + int hutil_add_object_entry(void); + int hutil_remove_object_entry(void); + int hutil_get_object_entry(void); + int hutil_copy_object_entries(void); + int hutil_move_object_entry(void); + int hutil_duplicate_object_entry(void); + int hutil_read_file_data_from_offset(void); + int hutil_write_file_data(void); + int hutil_get_object_entry_size(void); + int hutil_set_protection(void); + int hutil_get_num_objects(void); + int hutil_get_object_handles(void); + int hutil_construct_object_entry(void); + +//======================================== + + int hutil_construct_object_entry_prop_list(void); + int hutil_get_object_prop_value(void); + int hutil_update_object_property(void); + int hutil_get_prop_desc(void); + int hutil_get_object_prop_supported(void); + int hutil_get_object_prop_list(void); + int hutil_add_object_references_enhanced(void); + int hutil_remove_object_reference(void); + int hutil_get_object_references(void); + int hutil_get_number_of_objects(void); + int hutil_get_interdep_prop_config_list_size(void); + int hutil_get_interdep_prop_config_list_data(void); + int hutil_get_playback_skip(void); + int hutil_format_storage(void); + int hutil_get_storage_info_size(void); + +//================== _MTP_CMD_HANDLER_H_ ====================== + + int cmd_hdlr_send_response(void); + int cmd_hdlr_send_response_code(void); + +//================== _MTP_EVENT_HANDLER_H_ ====================== + + int hdlr_get_param_cmd_container(void); + int hdlr_add_param_resp_container(void); + int hdlr_validate_cmd_container(void); + int hdlr_alloc_buf_data_container(void); + int hdlr_send_data_container(void); + int hdlr_send_bulk_data(void); + int hdlr_rcv_data_container(void); + int hdlr_get_payload_size(void); + int hdlr_get_payload_data(void); + int hdlr_resp_container_init(void); + int hdlr_init_event_container(void); + int hdlr_init_event_container_with_param(void); + int hdlr_conv_cmd_container_byte_order(void); + int hdlr_conv_data_container_byte_order(void); + + + + + +}; +#endif /* __MTP_RESPONDER_H__ */ + + + + + + + + + + + + diff --git a/unittest/mtpconf.h b/unittest/mtpconf.h new file mode 100644 index 0000000..a8c6fa8 --- /dev/null +++ b/unittest/mtpconf.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef __MTPCONF_H__ +#define __MTPCONF_H__ + +#include + +#ifdef USE_DLOG +#include +#undef LOG_TAG +#define LOG_TAG "MTP_RESPONDER_TEST" +#define GLOGD(format, args...) LOGD(format, ##args) +#else +#define GLOGD(format, args...) +#endif + +typedef enum { + ERROR_NONE = 0, + ERROR_NOT_PERMITTED = -1, + ERROR_OUT_OF_MEMORY = -2, + ERROR_PERMISSION_DENIED = -3, + ERROR_RESOURCE_BUSY = -4, + ERROR_INVALID_OPERATION = -5, + ERROR_INVALID_PARAMETER = -6, + ERROR_NOT_SUPPORTED = -7, + ERROR_OPERATION_FAILED = -8, + ERROR_NOT_INITIALIZED = -9, + ERROR_ALREADY_INITIALIZED = -10, + ERROR_IN_PROGRESS = -11, +} error_e; +#endif /* __MTPCONF_H__ */ + diff --git a/unittest/unittest.cpp b/unittest/unittest.cpp new file mode 100644 index 0000000..bfe3f24 --- /dev/null +++ b/unittest/unittest.cpp @@ -0,0 +1,618 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "mtpResponder.h" + +using ::testing::InitGoogleTest; +using ::testing::Test; +using ::testing::TestCase; + +#ifdef TIZEN_TEST_GCOV +extern "C" void __gcov_flush(void); +#endif + +TEST(MtpResponder_t, mtp_init_p0) +{ + int ret = 0; + MtpResponder mtp; + add_rem_store_t sel = MTP_ADDREM_AUTO; + + ret = mtp.mtp_init(sel); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, mtp_init_p1) +{ + int ret = 0; + MtpResponder mtp; + add_rem_store_t sel = MTP_ADDREM_INTERNAL; + + ret = mtp.mtp_init(sel); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, mtp_init_p2) +{ + int ret = 0; + MtpResponder mtp; + add_rem_store_t sel = MTP_ADDREM_EXTERNAL; + + ret = mtp.mtp_init(sel); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, mtp_init_p3) +{ + int ret = 0; + MtpResponder mtp; + add_rem_store_t sel = MTP_ADDREM_ALL; + + ret = mtp.mtp_init(sel); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, mtp_deinit_p0) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.mtp_deinit(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_storage_entry_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_storage_entry(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_storage_ids_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_storage_ids(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_device_property_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_device_property(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_set_device_property_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_set_device_property(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_reset_device_entry_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_reset_device_entry(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_add_object_entry_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_add_object_entry(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_remove_object_entry_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_remove_object_entry(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_object_entry_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_object_entry(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_copy_object_entries_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_copy_object_entries(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_move_object_entry_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_move_object_entry(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_duplicate_object_entry_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_duplicate_object_entry(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_read_file_data_from_offset_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_read_file_data_from_offset(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_write_file_data_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_write_file_data(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_object_entry_size_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_object_entry_size(); + + EXPECT_NE(ERROR_NONE, ret); +} + +#ifdef MTP_SUPPORT_SET_PROTECTION +TEST(MtpResponder_t, hutil_set_protection_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_set_protection(); + + EXPECT_NE(ERROR_NONE, ret); +} +#endif /* MTP_SUPPORT_SET_PROTECTION */ + +TEST(MtpResponder_t, hutil_get_num_objects_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_num_objects(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_object_handles_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_object_handles(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_construct_object_entry_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_construct_object_entry(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +//======================================== + +TEST(MtpResponder_t, hutil_construct_object_entry_prop_list_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_construct_object_entry_prop_list(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_object_prop_value_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_object_prop_value(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_update_object_property_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_update_object_property(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_prop_desc_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_prop_desc(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_object_prop_supported_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_object_prop_supported(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_object_prop_list_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_object_prop_list(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_add_object_references_enhanced_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_add_object_references_enhanced(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_remove_object_reference_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_remove_object_reference(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_object_references_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_object_references(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_number_of_objects_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_number_of_objects(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_interdep_prop_config_list_size_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_interdep_prop_config_list_size(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_interdep_prop_config_list_data_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_interdep_prop_config_list_data(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_playback_skip_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_playback_skip(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_format_storage_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_format_storage(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hutil_get_storage_info_size_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hutil_get_storage_info_size(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +//================== _MTP_CMD_HANDLER_H_ ====================== + +TEST(MtpResponder_t, cmd_hdlr_send_response_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.cmd_hdlr_send_response(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, cmd_hdlr_send_response_code_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.cmd_hdlr_send_response_code(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +//================== _MTP_EVENT_HANDLER_H_ ====================== + +TEST(MtpResponder_t, hdlr_get_param_cmd_container_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_get_param_cmd_container(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hdlr_add_param_resp_container_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_add_param_resp_container(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hdlr_validate_cmd_container_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_validate_cmd_container(); + + EXPECT_NE(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hdlr_alloc_buf_data_container_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_alloc_buf_data_container(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +/* +TEST(MtpResponder_t, hdlr_send_data_container_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_send_data_container(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hdlr_send_bulk_data_n) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_send_bulk_data(); + + EXPECT_EQ(ERROR_NONE, ret); +} +*/ +TEST(MtpResponder_t, hdlr_rcv_data_container_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_rcv_data_container(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hdlr_get_payload_size_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_get_payload_size(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hdlr_get_payload_data_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_get_payload_data(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hdlr_resp_container_init_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_resp_container_init(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hdlr_init_event_container_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_init_event_container(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hdlr_init_event_container_with_param_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_init_event_container_with_param(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hdlr_conv_cmd_container_byte_order_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_conv_cmd_container_byte_order(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +TEST(MtpResponder_t, hdlr_conv_data_container_byte_order_p) +{ + int ret = 0; + MtpResponder mtp; + + ret = mtp.hdlr_conv_data_container_byte_order(); + + EXPECT_EQ(ERROR_NONE, ret); +} + +//mtp_bool _hdlr_rcv_file_in_data_container(data_container_t *dst, mtp_char *filepath, mtp_uint32 path_len); + + + +//======================================== + +int main(int argc, char **argv) +{ +#ifdef TIZEN_TEST_GCOV + setenv("GCOV_PREFIX", "/tmp", 1); +#endif + + InitGoogleTest(&argc, argv); + int ret = RUN_ALL_TESTS(); + +#ifdef TIZEN_TEST_GCOV + __gcov_flush(); +#endif + return ret; +} + + + + + -- 2.7.4 From 9953df068da82935fb293541986db5045caa4558 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Pawe=C5=82=20Szewczyk?= Date: Thu, 8 Nov 2018 18:22:52 +0100 Subject: [PATCH 15/16] Add restart-on-failure in service file MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit To prevent socket from closing functionfs endpoints descriptors, the service should not fail definitely. This patch make it restart on its own on failure. To prevent fast restarting in case of repeating failure, the delay is added to the restart mechanism. Change-Id: I3db100c6dda88a605f7fbb6e35dc8783cd4d4252 Signed-off-by: Paweł Szewczyk --- mtp-responder.service | 3 +++ mtp-responder.socket | 1 + 2 files changed, 4 insertions(+) diff --git a/mtp-responder.service b/mtp-responder.service index 69433c4..c8fae61 100755 --- a/mtp-responder.service +++ b/mtp-responder.service @@ -1,5 +1,6 @@ [Unit] Description=MTP responder +StartLimitIntervalSec=0 [Service] User=network_fw @@ -11,3 +12,5 @@ KillMode=process SmackProcessLabel=System USBFunctionDescriptors=/etc/mtp-responder/descs USBFunctionStrings=/etc/mtp-responder/strs +RestartSec=3 +Restart=on-failure diff --git a/mtp-responder.socket b/mtp-responder.socket index e430830..c5e9d1c 100755 --- a/mtp-responder.socket +++ b/mtp-responder.socket @@ -4,3 +4,4 @@ Description=MTP responder functionfs socket [Socket] ListenUSBFunction=/dev/usb-funcs/mtp/default Service=mtp-responder.service +TriggerLimitIntervalSec=0 -- 2.7.4 From b7065d9e6689c262ec01e0e40f50b00edd91bc15 Mon Sep 17 00:00:00 2001 From: Taesoo Jun Date: Mon, 10 Dec 2018 14:33:33 +0900 Subject: [PATCH 16/16] Fix dlog format issues Change-Id: I52f47f8249e7b51e341691e66067ba882178f4de --- include/util/mtp_thread.h | 6 +++--- src/entity/mtp_object.c | 6 +++--- src/entity/mtp_store.c | 2 +- src/mtp_cmd_handler.c | 4 ++-- src/mtp_cmd_handler_util.c | 10 +++++----- src/mtp_event_handler.c | 4 ++-- src/ptp_container.c | 2 +- src/transport/mtp_transport.c | 2 +- src/transport/mtp_usb_driver_ffs.c | 4 ++-- src/transport/mtp_usb_driver_slp.c | 2 +- src/util/mtp_thread.c | 4 ++-- 11 files changed, 23 insertions(+), 23 deletions(-) diff --git a/include/util/mtp_thread.h b/include/util/mtp_thread.h index 208ea1b..4b9a0cf 100755 --- a/include/util/mtp_thread.h +++ b/include/util/mtp_thread.h @@ -30,7 +30,7 @@ typedef void *(*thread_func_t) (void *pArg); #define UTIL_LOCK_MUTEX(mut)\ do {\ int lock_ret = 0;\ - DBG("Thread [%d] trying to lock the Mutex \n", syscall(__NR_gettid));\ + DBG("Thread [%ld] trying to lock the Mutex \n", syscall(__NR_gettid));\ lock_ret = pthread_mutex_lock(mut);\ if (lock_ret != 0) {\ if (lock_ret == EDEADLK) {\ @@ -39,7 +39,7 @@ typedef void *(*thread_func_t) (void *pArg); ERR("Error locking mutex. Error = %d \n", lock_ret);\ } \ } else {\ - DBG("Mutex locked by thread [%d] \n", syscall(__NR_gettid));\ + DBG("Mutex locked by thread [%ld] \n", syscall(__NR_gettid));\ } \ } while (0);\ @@ -51,7 +51,7 @@ typedef void *(*thread_func_t) (void *pArg); if (unlock_ret != 0) {\ ERR("Error unlocking mutex. Error = %d \n", unlock_ret);\ } else {\ - DBG("Mutex unlocked by thread [%d] \n", syscall(__NR_gettid));\ + DBG("Mutex unlocked by thread [%ld] \n", syscall(__NR_gettid));\ } \ } while (0);\ diff --git a/src/entity/mtp_object.c b/src/entity/mtp_object.c index 1fd5dae..5c8f3a1 100755 --- a/src/entity/mtp_object.c +++ b/src/entity/mtp_object.c @@ -501,7 +501,7 @@ mtp_bool _entity_check_child_obj_path(mtp_obj_t *obj, _prop_init_ptparray(&child_arr, UINT32_TYPE); _entity_get_child_handles(src_store, obj->obj_handle, &child_arr); - DBG("obj_handle[%d], src_path[%s], dest_path[%s], num elements[%ld]\n", + DBG("obj_handle[%d], src_path[%s], dest_path[%s], num elements[%u]\n", obj->obj_handle, src_path, dest_path, child_arr.num_ele); for (idx = 0; idx < child_arr.num_ele; idx++) { @@ -597,7 +597,7 @@ mtp_bool _entity_set_child_object_path(mtp_obj_t *obj, mtp_char *src_path, _prop_init_ptparray(&child_arr, UINT32_TYPE); _entity_get_child_handles(src_store, obj->obj_handle, &child_arr); - DBG("Object handle[%ld], src_path[%s], dest_path[%s], Numchild[%ld]\n", + DBG("Object handle[%u], src_path[%s], dest_path[%s], Numchild[%u]\n", obj->obj_handle, src_path, dest_path, child_arr.num_ele); for (idx = 0; idx < child_arr.num_ele; idx++) { @@ -605,7 +605,7 @@ mtp_bool _entity_set_child_object_path(mtp_obj_t *obj, mtp_char *src_path, child_obj = _entity_get_object_from_store(src_store, child_handle_arr[idx]); if (NULL == child_obj) continue; - DBG_SECURE("obj_handle[%ld], full path[%s]\n", child_obj->obj_handle, + DBG_SECURE("obj_handle[%u], full path[%s]\n", child_obj->obj_handle, child_obj->file_path); g_strlcpy(temp_child_path, child_obj->file_path, sizeof(temp_child_path)); diff --git a/src/entity/mtp_store.c b/src/entity/mtp_store.c index 07dc8a1..d8fc4a8 100755 --- a/src/entity/mtp_store.c +++ b/src/entity/mtp_store.c @@ -976,7 +976,7 @@ mtp_uint16 _entity_delete_obj_mtp_store(mtp_store_t *store, } } else { - DBG("object handle is not PTP_OBJECTHANDLE_ALL. [%ld]\n", + DBG("object handle is not PTP_OBJECTHANDLE_ALL. [%u]\n", obj_handle); obj = _entity_get_object_from_store(store, obj_handle); diff --git a/src/mtp_cmd_handler.c b/src/mtp_cmd_handler.c index fbc1dbf..c3bbbab 100755 --- a/src/mtp_cmd_handler.c +++ b/src/mtp_cmd_handler.c @@ -3216,7 +3216,7 @@ void _receive_mq_data_cb(mtp_char *buffer, mtp_int32 buf_len) code = tmp->code; trid = tmp->tid; - DBG("len[%ld], type[0x%x], code [0x%x], trid[0x%x]\n", + DBG("len[%lu], type[0x%x], code [0x%x], trid[0x%lu]\n", len, type, code, trid); if (_hdlr_validate_cmd_container((mtp_byte *)tmp, len) @@ -3285,7 +3285,7 @@ void _receive_mq_data_cb(mtp_char *buffer, mtp_int32 buf_len) /* ignore other case */ ERR("MTP device phase[%d], unknown device PHASE\n", _device_get_phase()); - ERR("PhaseUnknown-> pData[0x%x], length=[%d]", buffer, buf_len); + ERR("PhaseUnknown-> pData[0x%p], length=[%d]", buffer, buf_len); _device_set_phase(DEVICE_PHASE_IDLE); _transport_set_mtp_operation_state(MTP_STATE_ONSERVICE); } diff --git a/src/mtp_cmd_handler_util.c b/src/mtp_cmd_handler_util.c index ba9d3e8..56e275b 100755 --- a/src/mtp_cmd_handler_util.c +++ b/src/mtp_cmd_handler_util.c @@ -221,7 +221,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, } if (store->store_info.free_space < obj_info->file_size) { - ERR("free space is not enough [%ld] bytes, object size[%ld]\n", + ERR("free space is not enough [%llu] bytes, object size[%llu]\n", store->store_info.free_space, obj_info->file_size); _entity_dealloc_obj_info(obj_info); return MTP_ERROR_STORE_FULL; @@ -407,7 +407,7 @@ mtp_err_t _hutil_add_object_entry(obj_info_t *obj_info, mtp_char *file_name, if (file_exist == FALSE) { DBG_SECURE("Found a unique file name for the incoming object\ - [%s]\n", temp_wfname); + [0x%p]\n", temp_wfname); break; } @@ -1534,7 +1534,7 @@ mtp_err_t _hutil_construct_object_entry(mtp_uint32 store_id, if ((store->store_info.free_space) == 0 || (store->store_info.free_space > store->store_info.capacity)) { - ERR("free space is not enough [%ld:%ld]\n", + ERR("free space is not enough [%llu:%llu]\n", store->store_info.free_space, store->store_info.capacity); return MTP_ERROR_STORE_FULL; @@ -1633,13 +1633,13 @@ mtp_err_t _hutil_construct_object_entry_prop_list(mtp_uint32 store_id, if ((store->store_info.free_space) == 0 || (store->store_info.free_space > store->store_info.capacity)) { - ERR("free space is not enough [%ld bytes]\n", + ERR("free space is not enough [%llu bytes]\n", store->store_info.free_space); return MTP_ERROR_STORE_FULL; } if (store->store_info.free_space <= obj_sz) { - ERR("free space is not enough [%ld bytes]\n", + ERR("free space is not enough [%llu bytes]\n", store->store_info.free_space); return MTP_ERROR_STORE_FULL; } diff --git a/src/mtp_event_handler.c b/src/mtp_event_handler.c index fc63ae1..a2aa7e0 100755 --- a/src/mtp_event_handler.c +++ b/src/mtp_event_handler.c @@ -303,14 +303,14 @@ static mtp_bool __send_events_from_device_to_pc(mtp_dword store_id, switch (ptp_event) { case PTP_EVENTCODE_STOREADDED: DBG("case PTP_EVENTCODE_STOREADDED:"); - DBG("store_id [0x%x]\n", store_id); + DBG("store_id [0x%lu]\n", store_id); _hdlr_init_event_container(&event, PTP_EVENTCODE_STOREADDED, 0, store_id, 0); break; case PTP_EVENTCODE_STOREREMOVED: DBG("case PTP_EVENTCODE_STOREREMOVED"); - DBG("store_id [0x%x]\n", store_id); + DBG("store_id [0x%lu]\n", store_id); _hdlr_init_event_container(&event, PTP_EVENTCODE_STOREREMOVED, 0, store_id, 0); break; diff --git a/src/ptp_container.c b/src/ptp_container.c index 87e8950..9d44f57 100755 --- a/src/ptp_container.c +++ b/src/ptp_container.c @@ -289,7 +289,7 @@ mtp_bool _hdlr_rcv_file_in_data_container(data_container_t *dst, ERR("HEADER FAILURE"); ERR("HEADER length[%d], Type[%d], Code[%d], tid[%d]\n", dst->len, dst->type, dst->code, dst->tid); - ERR("EXPECTED length[%d], Type[%d], Code[%d], tid[%d]\n", + ERR("EXPECTED length[%llu], Type[%d], Code[%d], tid[%d]\n", bytes_rcvd, CONTAINER_DATA_BLK, exp_code, exp_tid); return FALSE; } diff --git a/src/transport/mtp_transport.c b/src/transport/mtp_transport.c index ba76b86..bcb3125 100755 --- a/src/transport/mtp_transport.c +++ b/src/transport/mtp_transport.c @@ -513,7 +513,7 @@ static void *__transport_thread_data_rcv(void *func) } } - ERR("thread_data_rcv[%u] exiting\n", g_data_rcv); + ERR("thread_data_rcv[%lu] exiting\n", g_data_rcv); _util_thread_exit("__transport_thread_data_rcv is over"); return NULL; } diff --git a/src/transport/mtp_usb_driver_ffs.c b/src/transport/mtp_usb_driver_ffs.c index 68f9803..4c3e844 100755 --- a/src/transport/mtp_usb_driver_ffs.c +++ b/src/transport/mtp_usb_driver_ffs.c @@ -311,7 +311,7 @@ static int __setup(int ep0, struct usb_ctrlrequest *ctrl) DBG(__FILE__ "(%s):%d: USB_PTPREQUEST_%s", __func__, __LINE__, requests[ctrl->bRequest-0x64]); if (wValue != 0 || wIndex != 0 || wLength != 6) { - DBG("Invalid request parameters: wValue:%d wIndex:%d wLength:%d\n"); + DBG("Invalid request parameters: wValue:%hu wIndex:%hu wLength:%hu\n", wIndex, wValue, wLength); rc = -EINVAL; goto stall; } @@ -353,7 +353,7 @@ stall: if (status != -1 || errno != EL2HLT) { ERR(__FILE__"(%s):%d:stall error\n", - __func__, __LINE__, ctrl->bRequestType, ctrl->bRequest); + __func__, __LINE__); rc = errno; } return rc; diff --git a/src/transport/mtp_usb_driver_slp.c b/src/transport/mtp_usb_driver_slp.c index 5f42d4d..7ae85e3 100644 --- a/src/transport/mtp_usb_driver_slp.c +++ b/src/transport/mtp_usb_driver_slp.c @@ -330,7 +330,7 @@ static void __handle_control_request(mtp_int32 request) memcpy(&(cancelreq_data.io_code), buffer, sizeof(mtp_word)); memcpy(&(cancelreq_data.tid), &buffer[2], sizeof(mtp_dword)); - DBG("cancel io code [%d], transaction id [%ld]\n", + DBG("cancel io code [%d], transaction id [%du]\n", cancelreq_data.io_code, cancelreq_data.tid); break; diff --git a/src/util/mtp_thread.c b/src/util/mtp_thread.c index 3ac847a..e779a50 100644 --- a/src/util/mtp_thread.c +++ b/src/util/mtp_thread.c @@ -68,7 +68,7 @@ mtp_bool _util_thread_join(pthread_t tid, void **data) res = pthread_join(tid, data); if (res != 0) { - ERR("pthread_join Fail res = [%d] for thread [%u] errno [%d]\n", + ERR("pthread_join Fail res = [%d] for thread [%lu] errno [%d]\n", res, tid, errno); // LCOV_EXCL_LINE return FALSE; // LCOV_EXCL_LINE } @@ -87,7 +87,7 @@ mtp_bool _util_thread_cancel(pthread_t tid) res = pthread_cancel(tid); if (res != 0) { - ERR("pthread_cancel Fail [%d] errno [%d]\n", tid, errno); + ERR("pthread_cancel Fail [%lu] errno [%d]\n", tid, errno); return FALSE; } -- 2.7.4