From d75c7c0c5e4f2b3b78dea98b5e4d39fbf5c2a972 Mon Sep 17 00:00:00 2001 From: Minje Ahn Date: Mon, 23 Mar 2020 17:04:00 +0900 Subject: [PATCH] Improve condition replace function Change-Id: Ib3cb85eedece3aecd8e8b161166fe7a46e91f9bb Signed-off-by: Minje Ahn --- include/media_info_private.h | 2 +- include/media_util_private.h | 2 +- include_product/media_info_private.h | 2 +- include_product/media_util_private.h | 2 +- src/media_db.c | 45 +++++++-------- src/media_filter.c | 60 +++++++------------- src/media_util_private.c | 105 +++++------------------------------ 7 files changed, 56 insertions(+), 162 deletions(-) diff --git a/include/media_info_private.h b/include/media_info_private.h index f0f6ea0..0a32424 100755 --- a/include/media_info_private.h +++ b/include/media_info_private.h @@ -56,7 +56,7 @@ extern "C" { #define LOG_TAG "CAPI_CONTENT_MEDIA_CONTENT" -#define SAFE_STRLCPY(dst, src, n) ((g_strlcpy(dst, src, n) < n) ? TRUE : FALSE) +#define SAFE_STRLCPY(dst, src, n) g_strlcpy(dst, src, n); #define SAFE_STRLCAT(dst, src, n) g_strlcat(dst, src, n); #define SAFE_FREE(src) {if (src) {free(src); src = NULL; } } #define STRING_VALID(str) ((str != NULL && strlen(str) > 0) ? TRUE : FALSE) diff --git a/include/media_util_private.h b/include/media_util_private.h index a734ea7..cf523ec 100755 --- a/include/media_util_private.h +++ b/include/media_util_private.h @@ -36,7 +36,7 @@ int _media_util_get_file_time(const char *path); int _media_util_check_ignore_file(const char *path, bool *ignore); int _media_util_check_ignore_dir(const char *dir_path, bool *ignore); int _media_content_check_dir(const char *path); -int _media_content_replace_path_in_condition(const char *condition, char *replace_condition, bool replace); +char * _media_content_replace_path_in_condition(const char *condition); int _media_content_replace_path(const char *path, char *replace_path); diff --git a/include_product/media_info_private.h b/include_product/media_info_private.h index 0a5ce35..e9127e7 100755 --- a/include_product/media_info_private.h +++ b/include_product/media_info_private.h @@ -59,7 +59,7 @@ extern "C" { #define LOG_TAG "CAPI_CONTENT_MEDIA_CONTENT" -#define SAFE_STRLCPY(dst, src, n) ((g_strlcpy(dst, src, n) < n) ? TRUE : FALSE) +#define SAFE_STRLCPY(dst, src, n) g_strlcpy(dst, src, n); #define SAFE_STRLCAT(dst, src, n) g_strlcat(dst, src, n); #define SAFE_FREE(src) {if (src) {free(src); src = NULL; } } #define STRING_VALID(str) ((str != NULL && strlen(str) > 0) ? TRUE : FALSE) diff --git a/include_product/media_util_private.h b/include_product/media_util_private.h index 28d4190..bafa61b 100755 --- a/include_product/media_util_private.h +++ b/include_product/media_util_private.h @@ -36,7 +36,7 @@ int _media_util_get_file_time(const char *path); int _media_util_check_ignore_file(const char *path, bool *ignore); int _media_util_check_ignore_dir(const char *dir_path, bool *ignore); int _media_content_check_dir(const char *path); -int _media_content_replace_path_in_condition(const char *condition, char *replace_condition, bool replace); +char * _media_content_replace_path_in_condition(const char *condition); int _media_content_replace_path(const char *path, char *replace_path); #ifdef _USE_SENIOR_MODE diff --git a/src/media_db.c b/src/media_db.c index f9d144d..eeacd67 100755 --- a/src/media_db.c +++ b/src/media_db.c @@ -203,62 +203,51 @@ int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *gro { int ret = MEDIA_CONTENT_ERROR_NONE; sqlite3_stmt *stmt = NULL; - char select_query[MAX_QUERY_SIZE] = {0, }; + char *select_query = NULL; char *condition_query = NULL; char *option_query = NULL; filter_s *_filter = (filter_s *)filter; - memset(select_query, 0x00, sizeof(select_query)); - switch (group_type) { case MEDIA_GROUP_ALBUM: if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, _filter->storage_id); + select_query = g_strdup_printf(SELECT_ALBUM_COUNT, _filter->storage_id); else - snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, DB_VIEW_MEDIA); + select_query = g_strdup_printf(SELECT_ALBUM_COUNT, DB_VIEW_MEDIA); break; case MEDIA_GROUP_FOLDER: if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id); + select_query = g_strdup_printf(SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id); else - snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT, DB_VIEW_MEDIA); + select_query = g_strdup_printf(SELECT_FOLDER_COUNT, DB_VIEW_MEDIA); break; case MEDIA_GROUP_PLAYLIST: - if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_COUNT, sizeof(select_query))) { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } + select_query = g_strdup(SELECT_PLAYLIST_COUNT); break; case MEDIA_GROUP_TAG: - if (!SAFE_STRLCPY(select_query, SELECT_TAG_COUNT, sizeof(select_query))) { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } + select_query = g_strdup(SELECT_TAG_COUNT); break; case MEDIA_GROUP_BOOKMARK: if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, _filter->storage_id); + select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT, _filter->storage_id); else - snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, DB_VIEW_MEDIA); + select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT, DB_VIEW_MEDIA); break; case MEDIA_GROUP_STORAGE: - if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_COUNT, sizeof(select_query))) { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } + select_query = g_strdup(SELECT_STORAGE_COUNT); break; case MEDIA_GROUP_FACE: if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, _filter->storage_id); + select_query = g_strdup_printf(SELECT_FACE_COUNT, _filter->storage_id); else - snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, DB_VIEW_MEDIA); + select_query = g_strdup_printf(SELECT_FACE_COUNT, DB_VIEW_MEDIA); break; default: @@ -267,11 +256,15 @@ int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *gro } ret = __media_db_make_query(filter, &condition_query, &option_query); - media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + g_free(select_query); + return ret; + } ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); - SAFE_FREE(condition_query); - SAFE_FREE(option_query); + g_free(select_query); + g_free(condition_query); + g_free(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); if (sqlite3_step(stmt) == SQLITE_ROW) diff --git a/src/media_filter.c b/src/media_filter.c index 93bbef1..8ca675f 100755 --- a/src/media_filter.c +++ b/src/media_filter.c @@ -140,7 +140,7 @@ int media_filter_create(filter_h *filter) media_content_retvm_if(filter == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid filter"); - filter_s *_filter = (filter_s*)calloc(1, sizeof(filter_s)); + filter_s *_filter = (filter_s *)calloc(1, sizeof(filter_s)); media_content_retvm_if(_filter == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY"); _filter->storage_id = NULL; @@ -162,7 +162,7 @@ int media_filter_create(filter_h *filter) int media_filter_destroy(filter_h filter) { int ret = MEDIA_CONTENT_ERROR_NONE; - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if (_filter) { SAFE_FREE(_filter->storage_id); @@ -182,7 +182,7 @@ int media_filter_destroy(filter_h filter) int media_filter_set_offset(filter_h filter, int offset, int count) { int ret = MEDIA_CONTENT_ERROR_NONE; - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if (_filter != NULL) { _filter->offset = offset; @@ -198,7 +198,7 @@ int media_filter_set_offset(filter_h filter, int offset, int count) int media_filter_set_condition(filter_h filter, const char *condition, media_content_collation_e collate_type) { int ret = MEDIA_CONTENT_ERROR_NONE; - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if ((_filter != NULL) && STRING_VALID(condition) && ((collate_type >= MEDIA_CONTENT_COLLATE_DEFAULT) && (collate_type <= MEDIA_CONTENT_COLLATE_LOCALIZED))) { @@ -208,13 +208,8 @@ int media_filter_set_condition(filter_h filter, const char *condition, media_con if (STRING_VALID(_filter->condition)) SAFE_FREE(_filter->condition); - char new_condition[MAX_QUERY_SIZE] = {0, }; - memset(new_condition, 0, sizeof(new_condition)); - ret = _media_content_replace_path_in_condition(condition, new_condition, TRUE); - media_content_retvm_if(!STRING_VALID(new_condition), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed"); - - _filter->condition = strdup(new_condition); - media_content_retvm_if(_filter->condition == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY"); + _filter->condition = _media_content_replace_path_in_condition(condition); + media_content_retvm_if(_filter->condition == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "Fail to _media_content_replace_path_in_condition"); media_content_sec_debug("Condition string : %s", _filter->condition); @@ -230,7 +225,7 @@ int media_filter_set_condition(filter_h filter, const char *condition, media_con int media_filter_set_order(filter_h filter, media_content_order_e order_type, const char *order_keyword, media_content_collation_e collate_type) { int ret = MEDIA_CONTENT_ERROR_NONE; - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if ((_filter != NULL) && STRING_VALID(order_keyword) && ((order_type == MEDIA_CONTENT_ORDER_ASC) || (order_type == MEDIA_CONTENT_ORDER_DESC)) @@ -257,7 +252,7 @@ int media_filter_set_storage(filter_h filter, const char *storage_id) { int ret = MEDIA_CONTENT_ERROR_NONE; media_content_warn("DEPRECATION WARNING: media_filter_set_storage() is deprecated and will be removed from next release. Use media_filter_set_condition() with MEDIA_PATH keyword instead."); - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if ((_filter != NULL) && STRING_VALID(storage_id)) { if (STRING_VALID(_filter->storage_id)) @@ -278,7 +273,7 @@ int media_filter_set_storage(filter_h filter, const char *storage_id) int media_filter_get_offset(filter_h filter, int *offset, int *count) { int ret = MEDIA_CONTENT_ERROR_NONE; - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if (_filter) { *offset = _filter->offset; @@ -294,16 +289,11 @@ int media_filter_get_offset(filter_h filter, int *offset, int *count) int media_filter_get_condition(filter_h filter, char **condition, media_content_collation_e *collate_type) { int ret = MEDIA_CONTENT_ERROR_NONE; - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if (_filter) { if (STRING_VALID(_filter->condition) && _filter->is_full_condition == false) { - char new_condition[MAX_QUERY_SIZE] = {0, }; - memset(new_condition, 0, sizeof(new_condition)); - ret = _media_content_replace_path_in_condition(_filter->condition, new_condition, FALSE); - media_content_retvm_if(!STRING_VALID(new_condition), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed"); - - *condition = strdup(new_condition); + *condition = strdup(_filter->condition); media_content_retvm_if(*condition == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY"); } else { *condition = NULL; @@ -321,7 +311,7 @@ int media_filter_get_condition(filter_h filter, char **condition, media_content_ int media_filter_get_order(filter_h filter, media_content_order_e* order_type, char **order_keyword, media_content_collation_e *collate_type) { int ret = MEDIA_CONTENT_ERROR_NONE; - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if (_filter) { if (STRING_VALID(_filter->order_keyword) && _filter->is_full_order == false) { @@ -345,7 +335,7 @@ int media_filter_get_storage(filter_h filter, char **storage_id) { int ret = MEDIA_CONTENT_ERROR_NONE; media_content_warn("DEPRECATION WARNING: media_filter_get_storage() is deprecated and will be removed from next release."); - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if (_filter) { if (STRING_VALID(_filter->storage_id)) { @@ -365,7 +355,7 @@ int media_filter_get_storage(filter_h filter, char **storage_id) int media_filter_set_condition_v2(filter_h filter, const char *condition) { int ret = MEDIA_CONTENT_ERROR_NONE; - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if ((_filter != NULL) && STRING_VALID(condition)) { _filter->is_full_condition = true; @@ -373,13 +363,8 @@ int media_filter_set_condition_v2(filter_h filter, const char *condition) if (STRING_VALID(_filter->condition)) SAFE_FREE(_filter->condition); - char new_condition[MAX_QUERY_SIZE] = {0, }; - memset(new_condition, 0, sizeof(new_condition)); - ret = _media_content_replace_path_in_condition(condition, new_condition, TRUE); - media_content_retvm_if(!STRING_VALID(new_condition), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed"); - - _filter->condition = strdup(new_condition); - media_content_retvm_if(_filter->condition == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY"); + _filter->condition = _media_content_replace_path_in_condition(condition); + media_content_retvm_if(_filter->condition == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "Fail to _media_content_replace_path_in_condition"); media_content_sec_debug("Condition string : %s", _filter->condition); } else { @@ -393,16 +378,11 @@ int media_filter_set_condition_v2(filter_h filter, const char *condition) int media_filter_get_condition_v2(filter_h filter, char **condition) { int ret = MEDIA_CONTENT_ERROR_NONE; - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if (_filter) { if (STRING_VALID(_filter->condition) && _filter->is_full_condition == true) { - char new_condition[MAX_QUERY_SIZE] = {0, }; - memset(new_condition, 0, sizeof(new_condition)); - ret = _media_content_replace_path_in_condition(_filter->condition, new_condition, FALSE); - media_content_retvm_if(!STRING_VALID(new_condition), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed"); - - *condition = strdup(new_condition); + *condition = strdup(_filter->condition); media_content_retvm_if(*condition == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY"); } else { *condition = NULL; @@ -418,7 +398,7 @@ int media_filter_get_condition_v2(filter_h filter, char **condition) int media_filter_set_order_v2(filter_h filter, const char *order) { int ret = MEDIA_CONTENT_ERROR_NONE; - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if ((_filter != NULL) && STRING_VALID(order)) { _filter->is_full_order = true; @@ -438,7 +418,7 @@ int media_filter_set_order_v2(filter_h filter, const char *order) int media_filter_get_order_v2(filter_h filter, char **order) { int ret = MEDIA_CONTENT_ERROR_NONE; - filter_s *_filter = (filter_s*)filter; + filter_s *_filter = (filter_s *)filter; if (_filter) { if (STRING_VALID(_filter->order_keyword) && _filter->is_full_order == true) { diff --git a/src/media_util_private.c b/src/media_util_private.c index e621f81..e8a226e 100755 --- a/src/media_util_private.c +++ b/src/media_util_private.c @@ -249,10 +249,7 @@ int _media_util_check_ignore_dir(const char *dir_path, bool *ignore) char search_path[MAX_PATH_LEN] = {0, }; memset(search_path, 0, sizeof(search_path)); - if (!SAFE_STRLCPY(search_path, dir_path, sizeof(search_path))) { - media_content_error("MEDIA_CONTENT_ERROR_INVALID_OPERATION(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_OPERATION); - return MEDIA_CONTENT_ERROR_INVALID_OPERATION; - } + SAFE_STRLCPY(search_path, dir_path, sizeof(search_path)); while (STRING_VALID(search_path)) { if ((*ignore = __is_scan_ignore_exist(search_path))) @@ -333,104 +330,28 @@ int _media_content_check_dir(const char *path) } -int _media_content_replace_path_in_condition(const char *condition, char *replace_condition, bool replace) +char * _media_content_replace_path_in_condition(const char *condition) { - int ret = MEDIA_CONTENT_ERROR_NONE; - #ifdef _USE_TVPD_MODE - snprintf(replace_condition, MAX_QUERY_SIZE, "%s", condition); + return g_strdup(condition); #else - char old_condition[MAX_QUERY_SIZE] = {0, }; - char new_condition[MAX_QUERY_SIZE] = {0, }; - char *find = NULL; - unsigned int str_len = 0; - - char *find_str = NULL; - char *to_replace_str = NULL; - - if (replace == TRUE) { //change User session path to System session path - find_str = g_strdup(MEDIA_ROOT_PATH_INTERNAL_OLD); - if (!STRING_VALID(find_str)) { - media_content_error("strdup failed"); - ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION; - goto ERROR; - } - - to_replace_str = g_strdup(MEDIA_ROOT_PATH_INTERNAL); - if (!STRING_VALID(to_replace_str)) { - media_content_error("Get TZ_USER_CONTENT failed"); - ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION; - goto ERROR; - } - } else { - find_str = g_strdup(MEDIA_ROOT_PATH_INTERNAL); - if (!STRING_VALID(find_str)) { - media_content_error("Get TZ_USER_CONTENT failed"); - ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION; - goto ERROR; - } + char **split_list = NULL; + char *result = NULL; - to_replace_str = g_strdup(MEDIA_ROOT_PATH_INTERNAL_OLD); - if (!STRING_VALID(to_replace_str)) { - media_content_error("strdup failed"); - ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION; - goto ERROR; - } - } - - memset(old_condition, 0, sizeof(old_condition)); - memset(new_condition, 0, sizeof(new_condition)); + if (!STRING_VALID(MEDIA_ROOT_PATH_INTERNAL_OLD) || !STRING_VALID(MEDIA_ROOT_PATH_INTERNAL)) + return NULL; media_content_sec_debug("Old condition[%s]", condition); - if (!SAFE_STRLCPY(new_condition, condition, sizeof(new_condition))) { - media_content_error("MEDIA_CONTENT_ERROR_INVALID_OPERATION(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_OPERATION); - ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION; - goto ERROR; - } - - if (g_strcmp0(find_str, to_replace_str)) - find = strstr(new_condition, find_str); + split_list = g_strsplit(condition, MEDIA_ROOT_PATH_INTERNAL_OLD, -1); + if (!split_list) + return NULL; - while (find != NULL) { - str_len = find - new_condition; + result = g_strjoinv(MEDIA_ROOT_PATH_INTERNAL, split_list); + g_strfreev(split_list); - memset(old_condition, 0, sizeof(old_condition)); - if (!SAFE_STRLCPY(old_condition, new_condition, sizeof(old_condition))) { - media_content_error("MEDIA_CONTENT_ERROR_INVALID_OPERATION(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_OPERATION); - ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION; - goto ERROR; - } - memset(new_condition, 0, sizeof(new_condition)); - - snprintf(new_condition, str_len + 1, "%s", old_condition); - - SAFE_STRLCAT(new_condition, to_replace_str, sizeof(new_condition)); - SAFE_STRLCAT(new_condition, old_condition + str_len + strlen(find_str), sizeof(new_condition)); - - find = strstr(new_condition, find_str); - } - - if (!SAFE_STRLCPY(replace_condition, new_condition, MAX_QUERY_SIZE)) { - media_content_error("MEDIA_CONTENT_ERROR_INVALID_OPERATION(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_OPERATION); - ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION; - goto ERROR; - } - - media_content_sec_debug("repl cond[%s]", replace_condition); - - if (!STRING_VALID(replace_condition)) { - media_content_error("replace failed"); - ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION; - goto ERROR; - } - -ERROR: - SAFE_FREE(find_str); - SAFE_FREE(to_replace_str); + return result; #endif - - return ret; } int _media_content_replace_path(const char *path, char *replace_path) -- 2.7.4