From 5c3b656b4954202bc527161560ed07f20e84ee04 Mon Sep 17 00:00:00 2001 From: Minje Ahn Date: Thu, 9 May 2024 10:46:28 +0900 Subject: [PATCH] Add sql_autoptr type sql_autoptr: __attribute__((cleanup(sqlite3_free))) char * Change-Id: I28876307617e052a85296fcc0bf366d3f5016f02 Signed-off-by: Minje Ahn --- include/media-svc-db-utils.h | 8 ++- include/media-svc-media.h | 2 +- packaging/libmedia-service.spec | 2 +- src/media-svc-album.c | 21 +++---- src/media-svc-db-utils.c | 79 ++++++++++------------- src/media-svc-media-folder.c | 80 ++++++++---------------- src/media-svc-media.c | 135 +++++++++++++++++----------------------- src/media-svc-storage.c | 105 +++++++++++++------------------ src/media-svc-util.c | 36 ++++------- src/media-svc.c | 7 +-- 10 files changed, 190 insertions(+), 285 deletions(-) diff --git a/include/media-svc-db-utils.h b/include/media-svc-db-utils.h index e5acdc7..6a63ac5 100755 --- a/include/media-svc-db-utils.h +++ b/include/media-svc-db-utils.h @@ -26,8 +26,12 @@ #include #include "media-svc-env.h" -#define SQLITE3_FINALIZE(x) if (x != NULL) sqlite3_finalize(x); -#define SQLITE3_SAFE_FREE(x) {if (x != NULL) {sqlite3_free(x); x = NULL; } } +static inline void __sqlfree(void *p) +{ + void **pp = (void **)p; + sqlite3_free(*pp); +} +#define sql_autoptr __attribute__((cleanup(__sqlfree))) char * int _media_svc_make_table_query(const char *table_name, media_svc_table_slist_e list, uid_t uid); int _media_svc_init_table_query(void); diff --git a/include/media-svc-media.h b/include/media-svc-media.h index d2f750c..088caf7 100755 --- a/include/media-svc-media.h +++ b/include/media-svc-media.h @@ -39,6 +39,6 @@ int _media_svc_update_thumbnail_path(const char *path, const char *thumb_path, u int _media_svc_get_noti_info(sqlite3 *handle, const char *path, media_svc_noti_item **item); int _media_svc_append_query_list(const char *query, uid_t uid); -int _media_svc_get_media(sqlite3 *handle, const char *sql, GList **path_list); +int _media_svc_get_media(sqlite3 *handle, const char *query, GList **path_list); #endif /*_MEDIA_SVC_MEDIA_H_*/ diff --git a/packaging/libmedia-service.spec b/packaging/libmedia-service.spec index 15909c7..6be4817 100644 --- a/packaging/libmedia-service.spec +++ b/packaging/libmedia-service.spec @@ -1,6 +1,6 @@ Name: libmedia-service Summary: Media information service library for multimedia applications -Version: 0.6.4 +Version: 0.6.5 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/media-svc-album.c b/src/media-svc-album.c index be2bb7c..aaf4e7e 100755 --- a/src/media-svc-album.c +++ b/src/media-svc-album.c @@ -26,15 +26,14 @@ int _media_svc_get_album_id(sqlite3 *handle, const char *album, const char *artist, int *album_id) { int ret = MS_MEDIA_ERR_NONE; - sqlite3_stmt *sql_stmt = NULL; - char *sql = NULL; + sqlite3_stmt *stmt = NULL; + sql_autoptr q = NULL; media_svc_retvm_if(!album, MS_MEDIA_ERR_INVALID_PARAMETER, "album is NULL"); media_svc_retvm_if(!artist, MS_MEDIA_ERR_INVALID_PARAMETER, "artist is NULL"); - sql = sqlite3_mprintf("SELECT album_id FROM %s WHERE name=%Q AND artist=%Q", DB_TABLE_ALBUM, album, artist); - ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt); - SQLITE3_SAFE_FREE(sql); + q = sqlite3_mprintf("SELECT album_id FROM %s WHERE name=%Q AND artist=%Q", DB_TABLE_ALBUM, album, artist); + ret = _media_svc_get_result_with_check_record(handle, q, &stmt); if (ret != MS_MEDIA_ERR_NONE) { if (ret == MS_MEDIA_ERR_DB_NO_RECORD) media_svc_debug("there is no album."); @@ -44,9 +43,9 @@ int _media_svc_get_album_id(sqlite3 *handle, const char *album, const char *arti return ret; } - *album_id = sqlite3_column_int(sql_stmt, 0); + *album_id = sqlite3_column_int(stmt, 0); - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); return ret; } @@ -55,13 +54,13 @@ int _media_svc_append_album(sqlite3 *handle, bool is_direct, const char *album, { int ret = MS_MEDIA_ERR_NONE; - char *sql = sqlite3_mprintf("INSERT INTO %s(name, artist, album_art) VALUES (%Q, %Q, %Q);", DB_TABLE_ALBUM, album, artist, album_art); + sql_autoptr q = sqlite3_mprintf("INSERT INTO %s(name, artist, album_art) VALUES (%Q, %Q, %Q);", + DB_TABLE_ALBUM, album, artist, album_art); if (is_direct) - ret = _media_svc_sql_query_direct(sql, uid); + ret = _media_svc_sql_query_direct(q, uid); else - ret = _media_svc_sql_query(sql, uid); + ret = _media_svc_sql_query(q, uid); - SQLITE3_SAFE_FREE(sql); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); int inserted_album_id = 0; diff --git a/src/media-svc-db-utils.c b/src/media-svc-db-utils.c index 51153b3..9c3ecb9 100755 --- a/src/media-svc-db-utils.c +++ b/src/media-svc-db-utils.c @@ -99,10 +99,9 @@ static void __add_column_info(GSList **slist, static int __create_playlist_view(uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; GSList *iter = NULL; column_info_s *col_ptr = NULL; - char *sql = NULL; + sql_autoptr q = NULL; GString *table_query = g_string_new(NULL); media_svc_retvm_if(!table_query, MS_MEDIA_ERR_INTERNAL, "g_string_new failed"); @@ -148,20 +147,17 @@ static int __create_playlist_view(uid_t uid) g_string_append_printf(table_query, ", media.%s", col_ptr->name); } - sql = sqlite3_mprintf(DB_QUERY_VIEW_PLAYLIST, DB_VIEW_PLAYLIST, table_query->str); + q = sqlite3_mprintf(DB_QUERY_VIEW_PLAYLIST, DB_VIEW_PLAYLIST, table_query->str); g_string_free(table_query, TRUE); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - return ret; + return _media_svc_sql_query(q, uid); } static int __create_tag_view(uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; GSList *iter = NULL; column_info_s *col_ptr = NULL; - char *sql = NULL; + sql_autoptr q = NULL; GString *table_query = g_string_new(NULL); media_svc_retvm_if(!table_query, MS_MEDIA_ERR_INTERNAL, "g_string_new failed"); @@ -203,12 +199,10 @@ static int __create_tag_view(uid_t uid) g_string_append_printf(table_query, ", media.%s", col_ptr->name); } - sql = sqlite3_mprintf(DB_QUERY_VIEW_TAG, DB_VIEW_TAG, table_query->str); + q = sqlite3_mprintf(DB_QUERY_VIEW_TAG, DB_VIEW_TAG, table_query->str); g_string_free(table_query, TRUE); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - return ret; + return _media_svc_sql_query(q, uid); } int _media_svc_make_table_query(const char *table_name, media_svc_table_slist_e list, uid_t uid) @@ -217,7 +211,7 @@ int _media_svc_make_table_query(const char *table_name, media_svc_table_slist_e GSList *iter = NULL; table_info_s *tb = NULL; column_info_s *col_ptr = NULL; - char *sql = NULL; + sql_autoptr q = NULL; GString *table_query = g_string_new(NULL); GString *trigger_query = g_string_new(NULL); GString *unique_query = g_string_new(NULL); @@ -281,12 +275,11 @@ int _media_svc_make_table_query(const char *table_name, media_svc_table_slist_e /*send queries */ if (unique_query->len > 0) - sql = sqlite3_mprintf(DB_QUERY_TABLE_WITH_UNIQUE, table_name, table_query->str, unique_query->str); + q = sqlite3_mprintf(DB_QUERY_TABLE_WITH_UNIQUE, table_name, table_query->str, unique_query->str); else - sql = sqlite3_mprintf(DB_QUERY_TABLE, table_name, table_query->str); + q = sqlite3_mprintf(DB_QUERY_TABLE, table_name, table_query->str); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); + ret = _media_svc_sql_query(q, uid); if (ret != MS_MEDIA_ERR_NONE) goto ERROR; @@ -489,14 +482,13 @@ int _media_svc_sql_query(const char *sql_str, uid_t uid) static int __media_svc_query_direct(sqlite3 *handle, const char *query, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; - char *zErrMsg = NULL; + sql_autoptr err = NULL; int retry_count = 0; EXEC_RETRY: - ret = sqlite3_exec(handle, query, NULL, NULL, &zErrMsg); + ret = sqlite3_exec(handle, query, NULL, NULL, &err); if (SQLITE_OK != ret) { - media_svc_sec_error("Error[%s],Query[%s]", zErrMsg, query); - SQLITE3_SAFE_FREE(zErrMsg); + media_svc_sec_error("Error[%s],Query[%s]", err, query); if (ret == SQLITE_BUSY) { ret = MS_MEDIA_ERR_DB_BUSY_FAIL; } else if (ret == SQLITE_CONSTRAINT) { @@ -535,12 +527,12 @@ int _media_svc_sql_query_direct(const char *sql_str, uid_t uid) int _media_svc_check_table_exist(sqlite3 *db_handle, bool *exist) { int ret = MS_MEDIA_ERR_NONE; - sqlite3_stmt *sql_stmt = NULL; - const char *sql = "SELECT name FROM sqlite_master WHERE type='table' AND name='media';"; + sqlite3_stmt *stmt = NULL; + const char *q = "SELECT name FROM sqlite_master WHERE type='table' AND name='media';"; - ret = _media_svc_get_result(db_handle, sql, &sql_stmt); + ret = _media_svc_get_result(db_handle, q, &stmt); media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "_media_svc_get_result failed"); - if (sqlite3_step(sql_stmt) != SQLITE_ROW) { + if (sqlite3_step(stmt) != SQLITE_ROW) { media_svc_debug("Need to create table"); *exist = false; } else { @@ -548,7 +540,7 @@ int _media_svc_check_table_exist(sqlite3 *db_handle, bool *exist) *exist = true; } - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); return MS_MEDIA_ERR_NONE; } @@ -559,7 +551,7 @@ static int __media_svc_check_record(sqlite3_stmt **stmt) if (sqlite3_step(*stmt) != SQLITE_ROW) { media_svc_debug("No record"); - SQLITE3_FINALIZE(*stmt); + sqlite3_finalize(*stmt); return MS_MEDIA_ERR_DB_NO_RECORD; } @@ -605,19 +597,19 @@ int _media_svc_sql_query_list(GList **query_list, uid_t uid) int ret = MS_MEDIA_ERR_NONE; int idx = 0; int length = g_list_length(*query_list); - char *sql = NULL; + char *q = NULL; media_svc_debug("query list length : [%d]", length); for (idx = 0; idx < length; idx++) { - sql = (char *)g_list_nth_data(*query_list, idx); - if (STRING_VALID(sql)) { - ret = media_db_request_update_db(sql, uid); + q = (char *)g_list_nth_data(*query_list, idx); + if (STRING_VALID(q)) { + ret = media_db_request_update_db(q, uid); if (ret != MS_MEDIA_ERR_NONE) media_svc_error("media_db_request_update_db failed : %d", ret); } - SQLITE3_SAFE_FREE(sql); + sqlite3_free(q); } _media_svc_sql_query_release(query_list); @@ -630,8 +622,7 @@ int _media_svc_sql_query_list_direct(GList **query_list, uid_t uid) int ret = MS_MEDIA_ERR_NONE; int idx = 0; int length = g_list_length(*query_list); - char *sql = NULL; - char *zErrMsg = NULL; + char *q = NULL; sqlite3 *handle = NULL; bool with_transaction = true; @@ -642,29 +633,27 @@ int _media_svc_sql_query_list_direct(GList **query_list, uid_t uid) ret = media_db_connect(&handle, uid, true); media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "DB connection failed"); - ret = sqlite3_exec(handle, "BEGIN;", NULL, NULL, &zErrMsg); + ret = sqlite3_exec(handle, "BEGIN;", NULL, NULL, NULL); if (SQLITE_OK != ret) { - media_svc_sec_error("Transaction failed[%s]. Try an individual insert.", zErrMsg); - SQLITE3_SAFE_FREE(zErrMsg); + media_svc_error("transaction failed. try an individual insert."); with_transaction = false; } for (idx = 0; idx < length; idx++) { - sql = (char *)g_list_nth_data(*query_list, idx); - if (STRING_VALID(sql)) { - ret = __media_svc_query_direct(handle, sql, uid); + q = (char *)g_list_nth_data(*query_list, idx); + if (STRING_VALID(q)) { + ret = __media_svc_query_direct(handle, q, uid); if (ret != MS_MEDIA_ERR_NONE) - media_svc_debug("_media_svc_query_direct failed[%s]", sql); + media_svc_debug("_media_svc_query_direct failed[%s]", q); - SQLITE3_SAFE_FREE(sql); + sqlite3_free(q); } } if (with_transaction) { - ret = sqlite3_exec(handle, "COMMIT;", NULL, NULL, &zErrMsg); + ret = sqlite3_exec(handle, "COMMIT;", NULL, NULL, NULL); if (SQLITE_OK != ret) { - media_svc_sec_error("Commit failed[%s]", zErrMsg); - SQLITE3_SAFE_FREE(zErrMsg); + media_svc_error("Commit failed"); media_db_disconnect(handle); _media_svc_sql_query_release(query_list); return MS_MEDIA_ERR_DB_INTERNAL; diff --git a/src/media-svc-media-folder.c b/src/media-svc-media-folder.c index 6d6513c..31cc5e7 100755 --- a/src/media-svc-media-folder.c +++ b/src/media-svc-media-folder.c @@ -29,41 +29,29 @@ static int __media_svc_get_folder_id(sqlite3 *handle, const char *path, long long int *folder_id) { int ret = MS_MEDIA_ERR_NONE; - sqlite3_stmt *sql_stmt = NULL; - char *sql = sqlite3_mprintf("SELECT folder_id FROM %q WHERE folder_path=%Q", DB_TABLE_FOLDER, path); + sqlite3_stmt *stmt = NULL; + sql_autoptr q = sqlite3_mprintf("SELECT folder_id FROM %q WHERE folder_path=%Q", DB_TABLE_FOLDER, path); - ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt); - SQLITE3_SAFE_FREE(sql); + ret = _media_svc_get_result_with_check_record(handle, q, &stmt); media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "failed to get folder id[%d]", ret); - *folder_id = sqlite3_column_int64(sql_stmt, 0); + *folder_id = sqlite3_column_int64(stmt, 0); - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); return ret; } static int __media_svc_append_folder(bool is_direct, const char *storage_id, const char *folder_path, uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; - char *folder_name = NULL; - - folder_name = g_path_get_basename(folder_path); - - /* Sometime SQLITE3 returns NO_RECORD, so need to consider conflict case.. */ - char *sql = sqlite3_mprintf("INSERT OR IGNORE INTO %q(folder_path, folder_name, storage_uuid) VALUES (%Q, %Q, %Q);", + g_autofree gchar *folder_name = g_path_get_basename(folder_path); + sql_autoptr q = sqlite3_mprintf("INSERT OR IGNORE INTO %q(folder_path, folder_name, storage_uuid) VALUES (%Q, %Q, %Q);", DB_TABLE_FOLDER, folder_path, folder_name, storage_id); if (is_direct) - ret = _media_svc_sql_query_direct(sql, uid); - else - ret = _media_svc_sql_query(sql, uid); - - SQLITE3_SAFE_FREE(sql); + return _media_svc_sql_query_direct(q, uid); - g_free(folder_name); - - return ret; + return _media_svc_sql_query(q, uid); } static int __media_svc_append_parent_folder(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, uid_t uid) @@ -100,76 +88,58 @@ static int __media_svc_append_parent_folder(sqlite3 *handle, bool is_direct, con int _media_svc_get_and_append_folder_id_by_path(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, long long int *folder_id, uid_t uid) { - char *dir_path = NULL; int ret = MS_MEDIA_ERR_NONE; - - dir_path = g_path_get_dirname(path); + g_autofree gchar *dir_path = g_path_get_dirname(path); ret = __media_svc_get_folder_id(handle, dir_path, folder_id); if (ret == MS_MEDIA_ERR_DB_NO_RECORD) { ret = __media_svc_append_parent_folder(handle, is_direct, storage_id, dir_path, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("__media_svc_append_parent_folder failed"); - goto FINALIZE; - } + media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "failed to append parent folder"); - ret = __media_svc_get_folder_id(handle, dir_path, folder_id); + return __media_svc_get_folder_id(handle, dir_path, folder_id); } -FINALIZE: - g_free(dir_path); return ret; } int _media_svc_append_by_folder_path(sqlite3 *handle, const char *storage_id, const char *path, uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; + if (_media_svc_check_folder_by_path(handle, path) == MS_MEDIA_ERR_DB_NO_RECORD) + return __media_svc_append_parent_folder(handle, true, storage_id, path, uid); - ret = _media_svc_check_folder_by_path(handle, path); - if (ret == MS_MEDIA_ERR_DB_NO_RECORD) - ret = __media_svc_append_parent_folder(handle, true, storage_id, path, uid); - else - ret = _media_svc_set_folder_validity(true, path, 1, false, uid); - - return ret; + return _media_svc_set_folder_validity(true, path, 1, false, uid); } int _media_svc_set_folder_validity(bool is_direct, const char *start_path, int validity, bool is_recursive, uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; - char *sql = NULL; + sql_autoptr q = NULL; if (is_recursive) { - sql = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE folder_path LIKE '%q/%%' OR folder_path=%Q", + q = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE folder_path LIKE '%q/%%' OR folder_path=%Q", DB_TABLE_FOLDER, validity, start_path, start_path); } else { - sql = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE folder_path=%Q", DB_TABLE_FOLDER, validity, start_path); + q = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE folder_path=%Q", DB_TABLE_FOLDER, validity, start_path); } if (is_direct) - ret = _media_svc_sql_query_direct(sql, uid); - else - ret = _media_svc_sql_query(sql, uid); - - SQLITE3_SAFE_FREE(sql); + return _media_svc_sql_query_direct(q, uid); - return ret; + return _media_svc_sql_query(q, uid); } int _media_svc_check_folder_by_path(sqlite3 *handle, const char *path) { int ret = MS_MEDIA_ERR_NONE; - sqlite3_stmt *sql_stmt = NULL; - char *sql = NULL; + sqlite3_stmt *stmt = NULL; + sql_autoptr q = NULL; media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL"); - sql = sqlite3_mprintf("SELECT 1 FROM %q WHERE folder_path=%Q", DB_TABLE_FOLDER, path); - ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt); - SQLITE3_SAFE_FREE(sql); + q = sqlite3_mprintf("SELECT 1 FROM %q WHERE folder_path=%Q", DB_TABLE_FOLDER, path); + ret = _media_svc_get_result_with_check_record(handle, q, &stmt); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); return MS_MEDIA_ERR_NONE; } diff --git a/src/media-svc-media.c b/src/media-svc-media.c index 705bbd2..2e13202 100755 --- a/src/media-svc-media.c +++ b/src/media-svc-media.c @@ -35,16 +35,15 @@ static __thread GList *g_media_svc_update_list = NULL; int _media_svc_check_data_by_path(sqlite3 *handle, const char *path) { int ret = MS_MEDIA_ERR_NONE; - sqlite3_stmt *sql_stmt = NULL; - char *sql = NULL; + sqlite3_stmt *stmt = NULL; + sql_autoptr q = NULL; media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "Path is NULL"); - sql = sqlite3_mprintf("SELECT 1 FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path); - ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt); - SQLITE3_SAFE_FREE(sql); + q = sqlite3_mprintf("SELECT 1 FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path); + ret = _media_svc_get_result_with_check_record(handle, q, &stmt); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); return ret; } @@ -52,19 +51,18 @@ int _media_svc_check_data_by_path(sqlite3 *handle, const char *path) int _media_svc_get_modified_time(sqlite3 *handle, const char *path, int *modified_time) { int ret = MS_MEDIA_ERR_NONE; - sqlite3_stmt *sql_stmt = NULL; - char *sql = NULL; + sqlite3_stmt *stmt = NULL; + sql_autoptr q = NULL; media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "Path is NULL"); - sql = sqlite3_mprintf("SELECT media_modified_time FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path); - ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt); - SQLITE3_SAFE_FREE(sql); + q = sqlite3_mprintf("SELECT media_modified_time FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path); + ret = _media_svc_get_result_with_check_record(handle, q, &stmt); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - *modified_time = sqlite3_column_int(sql_stmt, 0); + *modified_time = sqlite3_column_int(stmt, 0); - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); return MS_MEDIA_ERR_NONE; } @@ -100,34 +98,28 @@ static char *__media_svc_make_insert_query(media_svc_content_info_s *content_inf int _media_svc_insert_item_stack(media_svc_content_info_s *content_info) { - char *sql = __media_svc_make_insert_query(content_info); - media_svc_retvm_if(!sql, MS_MEDIA_ERR_INVALID_PARAMETER, "make query failed"); + char *q = __media_svc_make_insert_query(content_info); + media_svc_retvm_if(!q, MS_MEDIA_ERR_INVALID_PARAMETER, "make query failed"); - media_svc_sec_debug("Query[%s]", sql); + media_svc_sec_debug("Query[%s]", q); - _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &sql); + _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &q); return MS_MEDIA_ERR_NONE; } int _media_svc_insert_item(media_svc_content_info_s *content_info, uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; - char *sql = __media_svc_make_insert_query(content_info); - media_svc_retvm_if(!sql, MS_MEDIA_ERR_INVALID_PARAMETER, "make query failed"); - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "failed to insert item"); + sql_autoptr q = __media_svc_make_insert_query(content_info); - return MS_MEDIA_ERR_NONE; + return _media_svc_sql_query(q, uid); } int _media_svc_update_item_with_data(bool is_direct, media_svc_content_info_s *content_info, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; - char *sql = sqlite3_mprintf("UPDATE %q SET media_size=%lld, media_modified_time=%d, media_thumbnail_path=%Q, media_title=%Q, album_id=%d, media_album=%Q, media_artist=%Q, media_album_artist=%Q, media_genre=%Q, media_year=%Q, media_recorded_date=%Q, media_track_num=%Q, media_width=%d, media_height=%d, media_datetaken=%Q, orientation=%d, validity=1 WHERE media_path=%Q;", + char *q = sqlite3_mprintf("UPDATE %q SET media_size=%lld, media_modified_time=%d, media_thumbnail_path=%Q, media_title=%Q, album_id=%d, media_album=%Q, media_artist=%Q, media_album_artist=%Q, media_genre=%Q, media_year=%Q, media_recorded_date=%Q, media_track_num=%Q, media_width=%d, media_height=%d, media_datetaken=%Q, orientation=%d, validity=1 WHERE media_path=%Q;", DB_TABLE_MEDIA, content_info->size, content_info->modified_time, @@ -150,11 +142,11 @@ int _media_svc_update_item_with_data(bool is_direct, media_svc_content_info_s *c /* Scanner use only batch insert */ if (is_direct) { - media_svc_sec_debug("Query [%s]", sql); - _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &sql); + media_svc_sec_debug("Query [%s]", q); + _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &q); } else { - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); + ret = _media_svc_sql_query(q, uid); + sqlite3_free(q); } return ret; @@ -162,15 +154,14 @@ int _media_svc_update_item_with_data(bool is_direct, media_svc_content_info_s *c int _media_svc_get_thumbnail_path_by_path(sqlite3 *handle, const char *path, char *thumbnail_path) { int ret = MS_MEDIA_ERR_NONE; - sqlite3_stmt *sql_stmt = NULL; - char *sql = NULL; + sqlite3_stmt *stmt = NULL; + sql_autoptr q = NULL; media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL"); - sql = sqlite3_mprintf("SELECT media_thumbnail_path FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path); + q = sqlite3_mprintf("SELECT media_thumbnail_path FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path); - ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt); - SQLITE3_SAFE_FREE(sql); + ret = _media_svc_get_result_with_check_record(handle, q, &stmt); if (ret != MS_MEDIA_ERR_NONE) { if (ret == MS_MEDIA_ERR_DB_NO_RECORD) media_svc_debug("there is no thumbnail."); @@ -180,45 +171,40 @@ int _media_svc_get_thumbnail_path_by_path(sqlite3 *handle, const char *path, cha return ret; } - g_strlcpy(thumbnail_path, (const char *)sqlite3_column_text(sql_stmt, 0), MEDIA_SVC_PATHNAME_SIZE); + g_strlcpy(thumbnail_path, (const char *)sqlite3_column_text(stmt, 0), MEDIA_SVC_PATHNAME_SIZE); - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); return MS_MEDIA_ERR_NONE; } int _media_svc_delete_item_by_path(const char *path, uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; - char *sql = NULL; + sql_autoptr q = NULL; media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL"); - sql = sqlite3_mprintf("DELETE FROM %q WHERE media_path=%Q;", DB_TABLE_MEDIA, path); + q = sqlite3_mprintf("DELETE FROM %q WHERE media_path=%Q;", DB_TABLE_MEDIA, path); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "failed to delete item"); - - return ret; + return _media_svc_sql_query(q, uid); } int _media_svc_update_item_validity(const char *path, int validity, bool stack_query, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; - char *sql = NULL; + char *q = NULL; media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL"); media_svc_debug("path=[%s], validity=[%d]", path, validity); - sql = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE media_path=%Q;", DB_TABLE_MEDIA, validity, path); + q = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE media_path=%Q;", DB_TABLE_MEDIA, validity, path); if (!stack_query) { - ret = _media_svc_sql_query_direct(sql, uid); - SQLITE3_SAFE_FREE(sql); + ret = _media_svc_sql_query_direct(q, uid); + sqlite3_free(q); } else { - _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &sql); + _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &q); } return ret; @@ -226,26 +212,18 @@ int _media_svc_update_item_validity(const char *path, int validity, bool stack_q int _media_svc_update_thumbnail_path(const char *path, const char *thumb_path, uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; + sql_autoptr q = sqlite3_mprintf("UPDATE %q SET media_thumbnail_path=%Q WHERE media_path=%Q;", + DB_TABLE_MEDIA, thumb_path, path); - char *sql = sqlite3_mprintf("UPDATE %q SET media_thumbnail_path=%Q WHERE media_path=%Q;", DB_TABLE_MEDIA, thumb_path, path); - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - - return ret; + return _media_svc_sql_query(q, uid); } int _media_svc_update_item_by_path(const char *src_path, const char *dst_storage_id, const char *dest_path, const char *file_name, int modified_time, long long int folder_id, uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; - char *query = sqlite3_mprintf("UPDATE %q SET media_path=%Q, media_display_name=%Q, media_modified_time=%d, folder_id=%lld, storage_uuid=%Q WHERE media_path=%Q;", + sql_autoptr q = sqlite3_mprintf("UPDATE %q SET media_path=%Q, media_display_name=%Q, media_modified_time=%d, folder_id=%lld, storage_uuid=%Q WHERE media_path=%Q;", DB_TABLE_MEDIA, dest_path, file_name, modified_time, folder_id, dst_storage_id, src_path); - ret = _media_svc_sql_query(query, uid); - SQLITE3_SAFE_FREE(query); - - return ret; + return _media_svc_sql_query(q, uid); } int _media_svc_list_query_do(media_svc_query_type_e query_type, uid_t uid) @@ -287,21 +265,21 @@ int _media_svc_append_query_list(const char *query, uid_t uid) return ret; } -int _media_svc_get_media(sqlite3 *handle, const char *sql, GList **path_list) +int _media_svc_get_media(sqlite3 *handle, const char *query, GList **path_list) { int ret = MS_MEDIA_ERR_NONE; - sqlite3_stmt *sql_stmt = NULL; + sqlite3_stmt *stmt = NULL; - media_svc_retvm_if(!sql, MS_MEDIA_ERR_INVALID_PARAMETER, "query is NULL"); + media_svc_retvm_if(!query, MS_MEDIA_ERR_INVALID_PARAMETER, "query is NULL"); media_svc_retvm_if(!path_list, MS_MEDIA_ERR_INVALID_PARAMETER, "array is NULL"); - ret = _media_svc_get_result(handle, sql, &sql_stmt); + ret = _media_svc_get_result(handle, query, &stmt); media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "_media_svc_get_result() failed [%d]", ret); - while (sqlite3_step(sql_stmt) == SQLITE_ROW) - *path_list = g_list_append(*path_list, g_strdup((const char *)sqlite3_column_text(sql_stmt, 0))); + while (sqlite3_step(stmt) == SQLITE_ROW) + *path_list = g_list_append(*path_list, g_strdup((const char *)sqlite3_column_text(stmt, 0))); - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); return ret; } @@ -309,24 +287,23 @@ int _media_svc_get_media(sqlite3 *handle, const char *sql, GList **path_list) int _media_svc_get_noti_info(sqlite3 *handle, const char *path, media_svc_noti_item **item) { int ret = MS_MEDIA_ERR_NONE; - sqlite3_stmt *sql_stmt = NULL; - char *sql = NULL; + sqlite3_stmt *stmt = NULL; + sql_autoptr q = NULL; media_svc_retvm_if(item == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "item is NULL"); media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL"); - sql = sqlite3_mprintf("SELECT media_id, media_type, media_mime_type FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path); - ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt); - SQLITE3_SAFE_FREE(sql); + q = sqlite3_mprintf("SELECT media_id, media_type, media_mime_type FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path); + ret = _media_svc_get_result_with_check_record(handle, q, &stmt); media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "_media_svc_get_result_with_check_record() failed [%d]", ret); *item = g_new0(media_svc_noti_item, 1); - (*item)->media_uuid = g_strdup((const char *)sqlite3_column_text(sql_stmt, 0)); - (*item)->media_type = sqlite3_column_int(sql_stmt, 1); - (*item)->mime_type = g_strdup((const char *)sqlite3_column_text(sql_stmt, 2)); + (*item)->media_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 0)); + (*item)->media_type = sqlite3_column_int(stmt, 1); + (*item)->mime_type = g_strdup((const char *)sqlite3_column_text(stmt, 2)); - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); return MS_MEDIA_ERR_NONE; } diff --git a/src/media-svc-storage.c b/src/media-svc-storage.c index 3b0e965..65d9732 100755 --- a/src/media-svc-storage.c +++ b/src/media-svc-storage.c @@ -28,45 +28,37 @@ int _media_svc_check_storage(sqlite3 *handle, const char *storage_id, char **storage_path, int *validity) { int ret = MS_MEDIA_ERR_NONE; - sqlite3_stmt *sql_stmt = NULL; - char *sql = NULL; + sqlite3_stmt *stmt = NULL; + sql_autoptr q = NULL; media_svc_retvm_if(!storage_id, MS_MEDIA_ERR_INVALID_PARAMETER, "storage_id is NULL"); media_svc_retvm_if(!storage_path, MS_MEDIA_ERR_INVALID_PARAMETER, "storage_path is NULL"); media_svc_retvm_if(!validity, MS_MEDIA_ERR_INVALID_PARAMETER, "validity is NULL"); - *storage_path = NULL; - *validity = 0; - - sql = sqlite3_mprintf("SELECT storage_path, validity FROM %q WHERE storage_id=%Q", DB_TABLE_STORAGE, storage_id); - ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt); - SQLITE3_SAFE_FREE(sql); + q = sqlite3_mprintf("SELECT storage_path, validity FROM %q WHERE storage_id=%Q", DB_TABLE_STORAGE, storage_id); + ret = _media_svc_get_result_with_check_record(handle, q, &stmt); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - *storage_path = g_strdup((const char *)sqlite3_column_text(sql_stmt, 0)); - *validity = sqlite3_column_int(sql_stmt, 1); + *storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 0)); + *validity = sqlite3_column_int(stmt, 1); - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); return MS_MEDIA_ERR_NONE; } int _media_svc_append_storage(const char *storage_id, const char *storage_path, uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; - char *sql = sqlite3_mprintf("INSERT INTO %q (storage_id, storage_path) values (%Q, %Q);", - DB_TABLE_STORAGE, storage_id, storage_path); - - ret = _media_svc_sql_query_direct(sql, uid); - SQLITE3_SAFE_FREE(sql); + sql_autoptr q = sqlite3_mprintf("INSERT INTO %q (storage_id, storage_path) values (%Q, %Q);", + DB_TABLE_STORAGE, storage_id, storage_path); - return ret; + return _media_svc_sql_query_direct(q, uid); } int _media_svc_update_storage_path(sqlite3 *handle, const char *storage_id, const char *path, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; - char *sql = NULL; + char *q = NULL; g_autofree gchar *old_storage_path = NULL; int validity = 0; @@ -78,21 +70,21 @@ int _media_svc_update_storage_path(sqlite3 *handle, const char *storage_id, cons media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); /*Storage table update*/ - sql = sqlite3_mprintf("UPDATE %q SET storage_path=%Q WHERE storage_id=%Q", DB_TABLE_STORAGE, path, storage_id); - ret = _media_svc_sql_query_direct(sql, uid); - SQLITE3_SAFE_FREE(sql); + q = sqlite3_mprintf("UPDATE %q SET storage_path=%Q WHERE storage_id=%Q", DB_TABLE_STORAGE, path, storage_id); + ret = _media_svc_sql_query_direct(q, uid); + sqlite3_free(q); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); /*Folder table update*/ - sql = sqlite3_mprintf("UPDATE %q SET folder_path=REPLACE(folder_path, %Q, %Q) WHERE storage_uuid=%Q", DB_TABLE_FOLDER, old_storage_path, path, storage_id); - ret = _media_svc_sql_query_direct(sql, uid); - SQLITE3_SAFE_FREE(sql); + q = sqlite3_mprintf("UPDATE %q SET folder_path=REPLACE(folder_path, %Q, %Q) WHERE storage_uuid=%Q", DB_TABLE_FOLDER, old_storage_path, path, storage_id); + ret = _media_svc_sql_query_direct(q, uid); + sqlite3_free(q); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); /*Media table update*/ - sql = sqlite3_mprintf("UPDATE %q SET media_path=REPLACE(media_path, %Q, %Q) WHERE storage_uuid=%Q", DB_TABLE_MEDIA, old_storage_path, path, storage_id); - ret = _media_svc_sql_query_direct(sql, uid); - SQLITE3_SAFE_FREE(sql); + q = sqlite3_mprintf("UPDATE %q SET media_path=REPLACE(media_path, %Q, %Q) WHERE storage_uuid=%Q", DB_TABLE_MEDIA, old_storage_path, path, storage_id); + ret = _media_svc_sql_query_direct(q, uid); + sqlite3_free(q); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); return ret; @@ -101,16 +93,16 @@ int _media_svc_update_storage_path(sqlite3 *handle, const char *storage_id, cons static int __media_svc_delete_thumbnail(sqlite3 *handle) { int ret = MS_MEDIA_ERR_NONE; - const char *sql = "SELECT media_thumbnail_path FROM media WHERE validity=0 AND media_thumbnail_path IS NOT NULL;"; - sqlite3_stmt *sql_stmt = NULL; + const char *q = "SELECT media_thumbnail_path FROM media WHERE validity=0 AND media_thumbnail_path IS NOT NULL;"; + sqlite3_stmt *stmt = NULL; - ret = _media_svc_get_result(handle, sql, &sql_stmt); + ret = _media_svc_get_result(handle, q, &stmt); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - while (sqlite3_step(sql_stmt) == SQLITE_ROW) - _media_svc_remove_file((const char *)sqlite3_column_text(sql_stmt, 0)); + while (sqlite3_step(stmt) == SQLITE_ROW) + _media_svc_remove_file((const char *)sqlite3_column_text(stmt, 0)); - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); return ret; } @@ -118,42 +110,35 @@ static int __media_svc_delete_thumbnail(sqlite3 *handle) int _media_svc_delete_invalid_storage(sqlite3 *handle, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; - char *sql = NULL; + sql_autoptr q = NULL; ret = __media_svc_delete_thumbnail(handle); media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Fail to remove thumbnail"); - sql = sqlite3_mprintf("DELETE FROM %q WHERE validity=0;DELETE FROM %q WHERE validity=0;DELETE FROM %q WHERE validity=0;", + q = sqlite3_mprintf("DELETE FROM %q WHERE validity=0;DELETE FROM %q WHERE validity=0;DELETE FROM %q WHERE validity=0;", DB_TABLE_MEDIA, DB_TABLE_STORAGE, DB_TABLE_FOLDER); - ret = _media_svc_sql_query_direct(sql, uid); - SQLITE3_SAFE_FREE(sql); - - return ret; + return _media_svc_sql_query_direct(q, uid); } int _media_svc_update_storage_validity(const char *storage_id, int validity, uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; - char *sql = NULL; + sql_autoptr q = NULL; if (!storage_id) - sql = sqlite3_mprintf("UPDATE %q SET validity=%d;UPDATE %q SET validity=%d WHERE storage_uuid IS NOT 'media';UPDATE %q SET validity=%d WHERE storage_uuid IS NOT 'media';", DB_TABLE_STORAGE, validity, DB_TABLE_FOLDER, validity, DB_TABLE_MEDIA, validity); + q = sqlite3_mprintf("UPDATE %q SET validity=%d;UPDATE %q SET validity=%d WHERE storage_uuid IS NOT 'media';UPDATE %q SET validity=%d WHERE storage_uuid IS NOT 'media';", DB_TABLE_STORAGE, validity, DB_TABLE_FOLDER, validity, DB_TABLE_MEDIA, validity); else - sql = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE storage_id=%Q;UPDATE %q SET validity=%d WHERE storage_uuid=%Q;UPDATE %q SET validity=%d WHERE storage_uuid=%Q;", DB_TABLE_STORAGE, validity, storage_id, DB_TABLE_FOLDER, validity, storage_id, DB_TABLE_MEDIA, validity, storage_id); - - ret = _media_svc_sql_query_direct(sql, uid); - SQLITE3_SAFE_FREE(sql); + q = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE storage_id=%Q;UPDATE %q SET validity=%d WHERE storage_uuid=%Q;UPDATE %q SET validity=%d WHERE storage_uuid=%Q;", DB_TABLE_STORAGE, validity, storage_id, DB_TABLE_FOLDER, validity, storage_id, DB_TABLE_MEDIA, validity, storage_id); - return ret; + return _media_svc_sql_query_direct(q, uid); } int _media_svc_get_storage_uuid(sqlite3 *handle, const char *path, char *storage_id, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; - sqlite3_stmt *sql_stmt = NULL; - char *sql = NULL; - char *internal_path = NULL; + sqlite3_stmt *stmt = NULL; + sql_autoptr q = NULL; + g_autofree gchar *internal_path = NULL; media_svc_retvm_if(!path, MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL"); @@ -162,27 +147,23 @@ int _media_svc_get_storage_uuid(sqlite3 *handle, const char *path, char *storage if (STRING_VALID(internal_path) && strncmp(path, internal_path, strlen(internal_path)) == 0) { g_strlcpy(storage_id, DB_TABLE_MEDIA, MEDIA_SVC_UUID_SIZE + 1); - g_free(internal_path); return MS_MEDIA_ERR_NONE; } - g_free(internal_path); + q = sqlite3_mprintf("SELECT storage_id FROM %q WHERE validity=1 AND instr(%Q, storage_path)", DB_TABLE_STORAGE, path); - sql = sqlite3_mprintf("SELECT storage_id FROM %q WHERE validity=1 AND instr(%Q, storage_path)", DB_TABLE_STORAGE, path); - - ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt); - SQLITE3_SAFE_FREE(sql); + ret = _media_svc_get_result_with_check_record(handle, q, &stmt); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - if (STRING_VALID((const char *)sqlite3_column_text(sql_stmt, 0))) - g_strlcpy(storage_id, (const char *)sqlite3_column_text(sql_stmt, 0), MEDIA_SVC_UUID_SIZE + 1); + if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) + g_strlcpy(storage_id, (const char *)sqlite3_column_text(stmt, 0), MEDIA_SVC_UUID_SIZE + 1); - SQLITE3_FINALIZE(sql_stmt); + sqlite3_finalize(stmt); if (!STRING_VALID(storage_id)) { media_svc_error("Not found valid storage id [%s]", path); - ret = MS_MEDIA_ERR_INVALID_PARAMETER; + return MS_MEDIA_ERR_INVALID_PARAMETER; } - return ret; + return MS_MEDIA_ERR_NONE; } diff --git a/src/media-svc-util.c b/src/media-svc-util.c index f3cd14f..a32c1df 100644 --- a/src/media-svc-util.c +++ b/src/media-svc-util.c @@ -1055,7 +1055,7 @@ static int __media_svc_create_wordbook_db(const char *path, sqlite3 **handle) { int ret = SQLITE_OK; sqlite3 *db_handle = NULL; - char *err = NULL; + sql_autoptr err = NULL; ret = sqlite3_open_v2(path, &db_handle, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL); media_svc_retvm_if(ret != SQLITE_OK, ret, "sqlite3_open_v2 failed : %d", ret); @@ -1082,7 +1082,6 @@ static int __media_svc_create_wordbook_db(const char *path, sqlite3 **handle) ERROR: media_svc_error("sqlite3_exec failed : %s", err); - SQLITE3_SAFE_FREE(err); sqlite3_close_v2(db_handle); return ret; @@ -1113,32 +1112,23 @@ static bool __media_svc_get_wordbook_handle(uid_t uid, sqlite3 **handle) static bool __media_svc_is_exist_in_wordbook(sqlite3 *db_handle, const char *path) { - int ret = SQLITE_OK; - char *err = NULL; - char *query = NULL; - - query = sqlite3_mprintf("UPDATE files SET validity=1 WHERE path = %Q", path); + sql_autoptr err = NULL; + sql_autoptr q = sqlite3_mprintf("UPDATE files SET validity=1 WHERE path = %Q", path); - ret = sqlite3_exec(db_handle, query, NULL, NULL, &err); - SQLITE3_SAFE_FREE(query); - if (ret != SQLITE_OK) { + if (sqlite3_exec(db_handle, q, NULL, NULL, &err) != SQLITE_OK) { media_svc_error("Query failed. [%s]", err); - SQLITE3_SAFE_FREE(err); return false; } - return sqlite3_changes(db_handle) > 0 ? true : false; + return (sqlite3_changes(db_handle) > 0); } static void __media_svc_insert_to_wordbook(sqlite3 *db_handle, const char *path) { void *handle = NULL; void (*svc_update) (sqlite3 *, const char *); - char *query = NULL; - - query = sqlite3_mprintf("INSERT INTO files(path) VALUES(%Q);", path); - sqlite3_exec(db_handle, query, NULL, NULL, NULL); - sqlite3_free(query); + sql_autoptr q = sqlite3_mprintf("INSERT INTO files(path) VALUES(%Q);", path); + sqlite3_exec(db_handle, q, NULL, NULL, NULL); handle = dlopen(PATH_PLUGIN_LIB, RTLD_LAZY); if (!handle) { @@ -1198,21 +1188,17 @@ void _media_svc_clean_wordbook(uid_t uid) bool _media_svc_get_matched_list(const char *keyword, uid_t uid, GList **list) { - int ret = SQLITE_OK; sqlite3 *handle = NULL; sqlite3_stmt *stmt = NULL; - char *query = NULL; + sql_autoptr q = NULL; media_svc_retvm_if(!list, false, "list is NULL"); media_svc_retvm_if(!keyword, false, "keyword is NULL"); media_svc_retvm_if(!__media_svc_get_wordbook_handle(uid, &handle), false, "Failed to get handle"); - query = sqlite3_mprintf("SELECT files.path FROM files JOIN (SELECT file_id, sum(frequency) AS freq_sum FROM words WHERE word LIKE '%q%%' GROUP BY file_id ORDER BY freq_sum DESC) w ON files.id = w.file_id;", keyword); - ret = sqlite3_prepare_v2(handle, query, -1, &stmt, NULL); - SQLITE3_SAFE_FREE(query); - - if (ret != SQLITE_OK) { - media_svc_error("Query failed[%d]", ret); + q = sqlite3_mprintf("SELECT files.path FROM files JOIN (SELECT file_id, sum(frequency) AS freq_sum FROM words WHERE word LIKE '%q%%' GROUP BY file_id ORDER BY freq_sum DESC) w ON files.id = w.file_id;", keyword); + if (sqlite3_prepare_v2(handle, q, -1, &stmt, NULL) != SQLITE_OK) { + media_svc_error("query failed"); sqlite3_close_v2(handle); return false; } diff --git a/src/media-svc.c b/src/media-svc.c index 00c1916..7555644 100755 --- a/src/media-svc.c +++ b/src/media-svc.c @@ -615,7 +615,7 @@ int media_svc_create_thumbnail(const char *file_path, int media_type, uid_t uid, { int ret = MS_MEDIA_ERR_NONE; char thumb_path[MEDIA_SVC_PATHNAME_SIZE + 1] = { 0, }; - char *sql = NULL; + sql_autoptr q = NULL; // 1. Check media type if (media_type != MEDIA_SVC_MEDIA_TYPE_IMAGE && media_type != MEDIA_SVC_MEDIA_TYPE_VIDEO) @@ -630,10 +630,9 @@ int media_svc_create_thumbnail(const char *file_path, int media_type, uid_t uid, } // 3. Update creation result to media db - sql = sqlite3_mprintf("UPDATE %q SET media_thumbnail_path='%q' WHERE media_path='%q';", DB_TABLE_MEDIA, thumb_path, file_path); + q = sqlite3_mprintf("UPDATE %q SET media_thumbnail_path=%Q WHERE media_path=%Q", DB_TABLE_MEDIA, thumb_path, file_path); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); + ret = _media_svc_sql_query(q, uid); if (ret != MS_MEDIA_ERR_NONE) { media_svc_error("Failed to update media db [%d]", ret); *thumbnail_path = g_strdup(""); -- 2.7.4