From: Minje Ahn Date: Tue, 11 Jun 2024 05:09:48 +0000 (+0900) Subject: Add sql_autoptr type X-Git-Tag: accepted/tizen/unified/20240612.100030~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=aaa55093bde3b0572ba9a4c7ea649fec88f501b6;p=platform%2Fcore%2Fapi%2Fmedia-controller.git Add sql_autoptr type sql_autoptr: __attribute__((cleanup(sqlite3_free))) char * Change-Id: I7e29854976027ab2da2d18dd3ba0e2ca4c6d8ed7 Signed-off-by: Minje Ahn --- diff --git a/include/media_controller_private.h b/include/media_controller_private.h index 52ff2a3..851ee45 100644 --- a/include/media_controller_private.h +++ b/include/media_controller_private.h @@ -131,6 +131,12 @@ extern "C" { #define MC_STRING_VALID(str) (str && strlen(str) > 0) #define MC_STRING_DELIMITER "VAL_SEP" +static inline void __sqlfree(char **pp) +{ + sqlite3_free(*pp); +} +#define sql_autoptr __attribute__((cleanup(__sqlfree))) char * + #define MC_DB_NAME ".media_controller.db" /* USER VERSION */ diff --git a/packaging/capi-media-controller.spec b/packaging/capi-media-controller.spec index 3927a54..986d972 100644 --- a/packaging/capi-media-controller.spec +++ b/packaging/capi-media-controller.spec @@ -1,6 +1,6 @@ Name: capi-media-controller Summary: A media controller library in Tizen Native API -Version: 1.0.2 +Version: 1.0.3 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/media_controller_db.c b/src/media_controller_db.c index a7fdf5f..b3c632c 100644 --- a/src/media_controller_db.c +++ b/src/media_controller_db.c @@ -55,18 +55,17 @@ static int __mc_db_get_record(sqlite3 *handle, const char *sql_str, sqlite3_stmt static int __mc_db_get_int_value(sqlite3 *handle, const char *server_name, const char *column, int *value) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name"); mc_retvm_if(!column, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "Invalid column"); mc_retvm_if(!value, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid value"); - sql_str = sqlite3_mprintf("SELECT %q FROM %q WHERE name=%Q", column, MC_DB_TABLE_SERVER_INFO, server_name); + q = sqlite3_mprintf("SELECT %q FROM %q WHERE name=%Q", column, MC_DB_TABLE_SERVER_INFO, server_name); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); - mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret); + ret = __mc_db_get_record(handle, q, &stmt); + mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_record failed [%d]", ret); *value = sqlite3_column_int(stmt, 0); sqlite3_finalize(stmt); @@ -228,14 +227,13 @@ int _mc_db_update_ability_supported(const char *server_name, const media_control int _mc_db_get_latest_server_info(sqlite3 *handle, char **latest_server_name, mc_server_state_e *state) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; *latest_server_name = NULL; - sql_str = sqlite3_mprintf("SELECT name, server_state FROM %q WHERE name IN (SELECT name FROM %q)", MC_DB_TABLE_SERVER_INFO, MC_DB_TABLE_LATEST_SERVER); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); + q = sqlite3_mprintf("SELECT name, server_state FROM %q WHERE name IN (SELECT name FROM %q)", MC_DB_TABLE_SERVER_INFO, MC_DB_TABLE_LATEST_SERVER); + ret = __mc_db_get_record(handle, q, &stmt); if (ret == MEDIA_CONTROLLER_ERROR_NONE) { *latest_server_name = g_strdup((const char *)sqlite3_column_text(stmt, 0)); *state = sqlite3_column_int(stmt, 1); @@ -255,18 +253,17 @@ int _mc_db_get_playback_info(sqlite3 *handle, const char *server_name, mc_playba { int ret = MEDIA_CONTROLLER_ERROR_NONE; media_controller_playback_s *_playback = NULL; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name"); mc_retvm_if(!playback, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid playback"); - sql_str = sqlite3_mprintf("SELECT playback_state, playback_position, playlist_name, playlist_index, playback_content_type, age_rating FROM %q WHERE name=%Q", + q = sqlite3_mprintf("SELECT playback_state, playback_position, playlist_name, playlist_index, playback_content_type, age_rating FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); - mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret); + ret = __mc_db_get_record(handle, q, &stmt); + mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_record failed [%d]", ret); _playback = g_new0(media_controller_playback_s, 1); @@ -316,16 +313,15 @@ static int __mc_db_get_metadata(sqlite3_stmt *stmt, int col, mc_metadata_h *meta int _mc_db_get_metadata_info(sqlite3 *handle, const char *server_name, mc_metadata_h *metadata) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name"); mc_retvm_if(!metadata, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid metadata"); - sql_str = sqlite3_mprintf("SELECT %s FROM %q WHERE name=%Q", META_LIST, MC_DB_TABLE_LATEST_META, server_name); + q = sqlite3_mprintf("SELECT %s FROM %q WHERE name=%Q", META_LIST, MC_DB_TABLE_LATEST_META, server_name); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); + ret = __mc_db_get_record(handle, q, &stmt); mc_retvm_if(ret == TIZEN_ERROR_NO_DATA, MEDIA_CONTROLLER_ERROR_NONE, "no metadata info"); mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_record failed [%d]", ret); @@ -347,17 +343,15 @@ int _mc_db_get_repeat_mode(sqlite3 *handle, const char *server_name, mc_repeat_m int _mc_db_get_icon_uri(sqlite3 *handle, const char *server_name, char **uri) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name"); mc_retvm_if(!uri, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid uri"); - sql_str = sqlite3_mprintf("SELECT icon_uri FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name); - - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); - mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret); + q = sqlite3_mprintf("SELECT icon_uri FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name); + ret = __mc_db_get_record(handle, q, &stmt); + mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_record failed [%d]", ret); *uri = g_strdup((const char *)sqlite3_column_text(stmt, 0)); sqlite3_finalize(stmt); @@ -368,17 +362,16 @@ int _mc_db_get_icon_uri(sqlite3 *handle, const char *server_name, char **uri) static int __mc_db_get_ability(sqlite3 *handle, const char *server_name, unsigned long long *decided, unsigned long long *supported) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name"); mc_retvm_if(!decided, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid decided"); mc_retvm_if(!supported, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid supported"); - sql_str = sqlite3_mprintf("SELECT ability_decided, ability_supported FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name); + q = sqlite3_mprintf("SELECT ability_decided, ability_supported FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); + ret = __mc_db_get_record(handle, q, &stmt); mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret); *decided = (unsigned long long)sqlite3_column_int64(stmt, 0); @@ -500,16 +493,15 @@ int _mc_db_get_display_rotation_ability(sqlite3 *handle, const char *server_name int _mc_db_get_playlist_count(sqlite3 *handle, const char *server_name) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; int count = 0; sqlite3_stmt *stmt = NULL; mc_retvm_if(!server_name, 0, "Invalid server_name"); - sql_str = sqlite3_mprintf("SELECT COUNT(DISTINCT playlist_name) FROM %q WHERE server_name = %Q", MC_DB_TABLE_PLAYLIST, server_name); + q = sqlite3_mprintf("SELECT COUNT(DISTINCT playlist_name) FROM %q WHERE server_name = %Q", MC_DB_TABLE_PLAYLIST, server_name); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); + ret = __mc_db_get_record(handle, q, &stmt); mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, 0, "__mc_db_get_record failed [%d]", ret); count = sqlite3_column_int(stmt, 0); @@ -521,7 +513,7 @@ int _mc_db_get_playlist_count(sqlite3 *handle, const char *server_name) int _mc_db_get_foreach_playlist(sqlite3 *handle, const char *server_name, mc_playlist_cb callback, void *user_data) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; GList *playlists = NULL; GList *node = NULL; @@ -530,11 +522,10 @@ int _mc_db_get_foreach_playlist(sqlite3 *handle, const char *server_name, mc_pla mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name"); mc_retvm_if(!callback, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid callback"); - sql_str = sqlite3_mprintf("SELECT playlist_name FROM %q WHERE server_name=%Q GROUP BY playlist_name", MC_DB_TABLE_PLAYLIST, server_name); - mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null"); + q = sqlite3_mprintf("SELECT playlist_name FROM %q WHERE server_name=%Q GROUP BY playlist_name", MC_DB_TABLE_PLAYLIST, server_name); + mc_retvm_if(!q, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null"); - ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &stmt, NULL); - sqlite3_free(sql_str); + ret = sqlite3_prepare_v2(handle, q, strlen(q), &stmt, NULL); mc_retvm_if(SQLITE_OK != ret, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "prepare error [%s]", sqlite3_errmsg(handle)); while (sqlite3_step(stmt) == SQLITE_ROW) { @@ -565,17 +556,16 @@ int _mc_db_get_foreach_playlist(sqlite3 *handle, const char *server_name, mc_pla gboolean _mc_db_is_playlist_exist(sqlite3 *handle, const char *server_name, const char *playlist_name) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; mc_retvm_if(!handle, FALSE, "Invalid handle"); mc_retvm_if(!server_name, FALSE, "Invalid server_name"); mc_retvm_if(!playlist_name, FALSE, "Invalid playlist_name"); - sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE server_name=%Q AND playlist_name=%Q", MC_DB_TABLE_PLAYLIST, server_name, playlist_name); + q = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE server_name=%Q AND playlist_name=%Q", MC_DB_TABLE_PLAYLIST, server_name, playlist_name); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); + ret = __mc_db_get_record(handle, q, &stmt); mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret); ret = sqlite3_column_int(stmt, 0); @@ -611,17 +601,16 @@ int _mc_db_get_playlist_by_name(sqlite3 *handle, mc_priv_type_e type, const char int _mc_db_get_playlist_item_count(sqlite3 *handle, const char *server_name, char *playlist_name) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; int count = 0; sqlite3_stmt *stmt = NULL; mc_retvm_if(!server_name, 0, "Invalid server_name"); mc_retvm_if(!playlist_name, 0, "Invalid playlist_name"); - sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE server_name=%Q AND playlist_name=%Q AND item_index IS NOT NULL", MC_DB_TABLE_PLAYLIST, server_name, playlist_name); + q = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE server_name=%Q AND playlist_name=%Q AND item_index IS NOT NULL", MC_DB_TABLE_PLAYLIST, server_name, playlist_name); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); + ret = __mc_db_get_record(handle, q, &stmt); mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, 0, "__mc_db_get_record failed [%d]", ret); count = sqlite3_column_int(stmt, 0); @@ -633,7 +622,7 @@ int _mc_db_get_playlist_item_count(sqlite3 *handle, const char *server_name, cha int _mc_db_get_playlist_item(sqlite3 *handle, const char *server_name, char *playlist_name, mc_playlist_item_cb callback, void *user_data) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; mc_playlist_item_s *item = NULL; GList *item_list = NULL; @@ -644,11 +633,10 @@ int _mc_db_get_playlist_item(sqlite3 *handle, const char *server_name, char *pla mc_retvm_if(!playlist_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid playlist_name"); mc_retvm_if(!callback, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid callback"); - sql_str = sqlite3_mprintf("SELECT item_index, %s FROM %q WHERE server_name=%Q AND playlist_name=%Q AND item_index IS NOT NULL ORDER BY ROWID", META_LIST, MC_DB_TABLE_PLAYLIST, server_name, playlist_name); - mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null"); + q = sqlite3_mprintf("SELECT item_index, %s FROM %q WHERE server_name=%Q AND playlist_name=%Q AND item_index IS NOT NULL ORDER BY ROWID", META_LIST, MC_DB_TABLE_PLAYLIST, server_name, playlist_name); + mc_retvm_if(!q, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null"); - ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &stmt, NULL); - sqlite3_free(sql_str); + ret = sqlite3_prepare_v2(handle, q, strlen(q), &stmt, NULL); mc_retvm_if(SQLITE_OK != ret, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "prepare error [%s]", sqlite3_errmsg(handle)); while (sqlite3_step(stmt) == SQLITE_ROW) { @@ -684,17 +672,16 @@ int _mc_db_get_playlist_item(sqlite3 *handle, const char *server_name, char *pla gboolean _mc_db_is_exist_server(sqlite3 *handle, const char *server_name) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; mc_retvm_if(!server_name, FALSE, "Invalid server_name"); mc_secure_debug("server_name [%s]", server_name); - sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name='%q'", MC_DB_TABLE_SERVER_INFO, server_name); + q = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); + ret = __mc_db_get_record(handle, q, &stmt); mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret); ret = sqlite3_column_int(stmt, 0); @@ -712,17 +699,16 @@ gboolean _mc_db_is_exist_server(sqlite3 *handle, const char *server_name) gboolean _mc_db_is_activated_client(sqlite3 *handle, const char *client_name) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; mc_retvm_if(!client_name, FALSE, "Invalid client_name"); mc_secure_debug("client name [%s]", client_name); - sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name='%q' AND type=%d", MC_DB_TABLE_APP_LIST, client_name, MC_PRIV_TYPE_CLIENT); + q = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name=%Q AND type=%d", MC_DB_TABLE_APP_LIST, client_name, MC_PRIV_TYPE_CLIENT); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); + ret = __mc_db_get_record(handle, q, &stmt); mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret); ret = sqlite3_column_int(stmt, 0); @@ -740,17 +726,16 @@ gboolean _mc_db_is_activated_client(sqlite3 *handle, const char *client_name) gboolean _mc_db_is_activated_server(sqlite3 *handle, const char *server_name) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; mc_retvm_if(!server_name, FALSE, "Invalid server_name"); mc_secure_debug("server name [%s]", server_name); - sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name='%q' AND type=%d", MC_DB_TABLE_APP_LIST, server_name, MC_PRIV_TYPE_SERVER); + q = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name=%Q AND type=%d", MC_DB_TABLE_APP_LIST, server_name, MC_PRIV_TYPE_SERVER); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); + ret = __mc_db_get_record(handle, q, &stmt); mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret); ret = sqlite3_column_int(stmt, 0); @@ -768,17 +753,16 @@ gboolean _mc_db_is_activated_server(sqlite3 *handle, const char *server_name) gboolean _mc_db_is_latest_server(sqlite3 *handle, const char *server_name) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; mc_retvm_if(!server_name, FALSE, "server_name is NULL"); mc_secure_debug("server name [%s]", server_name); - sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name=%Q", MC_DB_TABLE_LATEST_SERVER, server_name); + q = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name=%Q", MC_DB_TABLE_LATEST_SERVER, server_name); - ret = __mc_db_get_record(handle, sql_str, &stmt); - sqlite3_free(sql_str); + ret = __mc_db_get_record(handle, q, &stmt); mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret); ret = sqlite3_column_int(stmt, 0); @@ -790,7 +774,7 @@ gboolean _mc_db_is_latest_server(sqlite3 *handle, const char *server_name) int _mc_db_foreach_server_list(sqlite3 *handle, mc_activated_server_cb callback, void *user_data) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; int idx = 0; GList *list = NULL; @@ -798,10 +782,9 @@ int _mc_db_foreach_server_list(sqlite3 *handle, mc_activated_server_cb callback, mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle"); - sql_str = sqlite3_mprintf("SELECT name FROM %q WHERE type=%d", MC_DB_TABLE_APP_LIST, MC_PRIV_TYPE_SERVER); - mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null"); - ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &stmt, NULL); - sqlite3_free(sql_str); + q = sqlite3_mprintf("SELECT name FROM %q WHERE type=%d", MC_DB_TABLE_APP_LIST, MC_PRIV_TYPE_SERVER); + mc_retvm_if(!q, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null"); + ret = sqlite3_prepare_v2(handle, q, strlen(q), &stmt, NULL); mc_retvm_if(SQLITE_OK != ret, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "prepare error [%s]", sqlite3_errmsg(handle)); ret = sqlite3_step(stmt); @@ -848,7 +831,7 @@ int _mc_db_foreach_server_list(sqlite3 *handle, mc_activated_server_cb callback, int _mc_db_foreach_client_list(sqlite3 *handle, mc_activated_client_cb callback, void *user_data) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; int idx = 0; GList *list = NULL; @@ -856,10 +839,9 @@ int _mc_db_foreach_client_list(sqlite3 *handle, mc_activated_client_cb callback, mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle"); - sql_str = sqlite3_mprintf("SELECT name FROM %q WHERE type=%d", MC_DB_TABLE_APP_LIST, MC_PRIV_TYPE_CLIENT); - mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null"); - ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &stmt, NULL); - sqlite3_free(sql_str); + q = sqlite3_mprintf("SELECT name FROM %q WHERE type=%d", MC_DB_TABLE_APP_LIST, MC_PRIV_TYPE_CLIENT); + mc_retvm_if(!q, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null"); + ret = sqlite3_prepare_v2(handle, q, strlen(q), &stmt, NULL); mc_retvm_if(SQLITE_OK != ret, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "prepare error [%s]", sqlite3_errmsg(handle)); ret = sqlite3_step(stmt); diff --git a/svc/media_controller_db_util.c b/svc/media_controller_db_util.c index d5a016c..ecbb490 100644 --- a/svc/media_controller_db_util.c +++ b/svc/media_controller_db_util.c @@ -84,16 +84,11 @@ static int __mc_db_busy_handler(void *pData, int count) static int __mc_db_disable_journal_mode(sqlite3 *handle) { int ret = SQLITE_OK; - char *sql = NULL; mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle"); - sql = sqlite3_mprintf("%s", "PRAGMA journal_mode = OFF"); - mc_retvm_if(!MC_STRING_VALID(sql), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null"); - - ret = sqlite3_exec(handle, sql, NULL, NULL, NULL); - sqlite3_free(sql); - mc_retvm_if(SQLITE_OK != ret, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL Error[%s] when change the journal mode", sqlite3_errmsg(handle)); + ret = sqlite3_exec(handle, "PRAGMA journal_mode = OFF", NULL, NULL, NULL); + mc_retvm_if(SQLITE_OK != ret, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "query failed[%s]", sqlite3_errmsg(handle)); return MEDIA_CONTROLLER_ERROR_NONE; } @@ -101,18 +96,17 @@ static int __mc_db_disable_journal_mode(sqlite3 *handle) static gboolean __mc_db_is_latest(sqlite3 *handle, const char *server_name) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; sqlite3_stmt *stmt = NULL; gboolean is_latest = FALSE; mc_retvm_if(handle == NULL, FALSE, "Handle is NULL"); mc_retvm_if(server_name == NULL, FALSE, "server_name is NULL"); - sql_str = sqlite3_mprintf("SELECT 1 FROM %q WHERE name=%Q", MC_DB_TABLE_LATEST_SERVER, server_name); - mc_retvm_if(!MC_STRING_VALID(sql_str), FALSE, "SQL string is null"); + q = sqlite3_mprintf("SELECT 1 FROM %q WHERE name=%Q", MC_DB_TABLE_LATEST_SERVER, server_name); + mc_retvm_if(!q, FALSE, "allocation failed"); - ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &stmt, NULL); - sqlite3_free(sql_str); + ret = sqlite3_prepare_v2(handle, q, strlen(q), &stmt, NULL); mc_retvm_if(SQLITE_OK != ret, FALSE, "prepare error [%s]", sqlite3_errmsg(handle)); if (sqlite3_step(stmt) == SQLITE_ROW) @@ -176,7 +170,7 @@ static int __mc_update_latest_server_state_to_vconf(mc_server_state_e server_sta static int __mc_update_latest_server_info_to_db(sqlite3 *handle, mc_server_state_e server_state, mc_playback_states_e playback_state) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; unsigned long long ability_decided = 0, ability_supported = 0; mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid handle"); @@ -184,19 +178,18 @@ static int __mc_update_latest_server_info_to_db(sqlite3 *handle, mc_server_state /* Update DB */ if (server_state == MC_SERVER_STATE_DEACTIVATE) { __mc_db_set_default_ability(&ability_decided, &ability_supported); - sql_str = sqlite3_mprintf("UPDATE %q SET server_state=%d, playback_state=%d, \ + q = sqlite3_mprintf("UPDATE %q SET server_state=%d, playback_state=%d, \ display_mode=%d, display_rotation=%d, ability_decided=%llu, ability_supported=%llu \ WHERE name IN (SELECT name FROM %q)", MC_DB_TABLE_SERVER_INFO, server_state, playback_state, MC_DISPLAY_MODE_FULL_SCREEN, MC_DISPLAY_ROTATION_NONE, ability_decided, ability_supported, MC_DB_TABLE_LATEST_SERVER); } else { - sql_str = sqlite3_mprintf("UPDATE %q SET server_state=%d, playback_state=%d WHERE name IN (SELECT name FROM %q)", + q = sqlite3_mprintf("UPDATE %q SET server_state=%d, playback_state=%d WHERE name IN (SELECT name FROM %q)", MC_DB_TABLE_SERVER_INFO, server_state, playback_state, MC_DB_TABLE_LATEST_SERVER); } - ret = mc_db_util_update_db(handle, sql_str); - sqlite3_free(sql_str); + ret = mc_db_util_update_db(handle, q); mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to mc_db_util_update_db [%d]", ret); return __mc_update_latest_server_state_to_vconf(server_state, playback_state); @@ -219,74 +212,48 @@ static int __mc_update_latest_server_info_to_vconf(const char *server_name, mc_s static int __mc_db_activate_server(sqlite3 *db_handle, const char *app_id) { - int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; mc_debug_fenter(); mc_retvm_if(!app_id, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid app_id"); - if (__mc_db_is_latest(db_handle, app_id)) { - ret = __mc_update_latest_server_info_to_db(db_handle, MC_SERVER_STATE_ACTIVATE, MC_PLAYBACK_STATE_STOPPED); - } else { - sql_str = sqlite3_mprintf("INSERT OR REPLACE INTO %q(name) VALUES (%Q)", MC_DB_TABLE_SERVER_INFO, app_id); - ret = mc_db_util_update_db(db_handle, sql_str); - sqlite3_free(sql_str); - } + if (__mc_db_is_latest(db_handle, app_id)) + return __mc_update_latest_server_info_to_db(db_handle, MC_SERVER_STATE_ACTIVATE, MC_PLAYBACK_STATE_STOPPED); - mc_debug_fleave(); + q = sqlite3_mprintf("INSERT OR REPLACE INTO %q(name) VALUES (%Q)", MC_DB_TABLE_SERVER_INFO, app_id); - return ret; + return mc_db_util_update_db(db_handle, q); } static int __mc_db_insert_to_list(sqlite3 *db_handle, const char *app_id, mc_priv_type_e priv_type) { - int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; mc_debug_fenter(); - mc_retvm_if(!app_id, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid app_id"); mc_secure_debug("app_id: %s, priv_type: %d", app_id, priv_type); - sql_str = sqlite3_mprintf("INSERT OR IGNORE INTO %q VALUES ('%q', %d)", MC_DB_TABLE_APP_LIST, app_id, priv_type); - mc_retvm_if(sql_str == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "sql_str is NULL"); + q = sqlite3_mprintf("INSERT OR IGNORE INTO %q VALUES ('%q', %d)", MC_DB_TABLE_APP_LIST, app_id, priv_type); + mc_retvm_if(!q, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "allocation failed"); - ret = mc_db_util_update_db(db_handle, sql_str); - if (ret != MEDIA_CONTROLLER_ERROR_NONE) - mc_error("mc_db_util_update_db error : %d", ret); - - sqlite3_free(sql_str); - - mc_debug_fleave(); - - return ret; + return mc_db_util_update_db(db_handle, q); } static int __mc_db_delete_from_list(sqlite3 *db_handle, const char *app_id, mc_priv_type_e priv_type) { - int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; + sql_autoptr q = NULL; mc_debug_fenter(); - mc_retvm_if(!app_id, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid app_id"); mc_secure_debug("app_id: %s, priv_type: %d", app_id, priv_type); - sql_str = sqlite3_mprintf("DELETE FROM %q WHERE name=%Q AND type=%d", MC_DB_TABLE_APP_LIST, app_id, priv_type); - mc_retvm_if(sql_str == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "sql_str is NULL"); - - ret = mc_db_util_update_db(db_handle, sql_str); - if (ret != MEDIA_CONTROLLER_ERROR_NONE) - mc_error("mc_db_util_update_db error : %d", ret); - - sqlite3_free(sql_str); - - mc_debug_fleave(); + q = sqlite3_mprintf("DELETE FROM %q WHERE name=%Q AND type=%d", MC_DB_TABLE_APP_LIST, app_id, priv_type); + mc_retvm_if(!q, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "allocation failed"); - return ret; + return mc_db_util_update_db(db_handle, q); } char *mc_db_get_db_path(uid_t uid) @@ -353,28 +320,25 @@ void mc_db_disconnect(sqlite3 *handle) int mc_db_util_check_integrity(sqlite3 *handle) { - int ret = 0; + int ret = SQLITE_OK; sqlite3_stmt *stmt = NULL; - const char integrity_check_query[] = "PRAGMA integrity_check"; mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle"); - ret = sqlite3_prepare_v2(handle, integrity_check_query, strlen(integrity_check_query), &stmt, NULL); + ret = sqlite3_prepare_v2(handle, "PRAGMA integrity_check", -1, &stmt, NULL); if (ret != SQLITE_OK) { mc_error("prepare error, ret = %d, error = %s", ret, sqlite3_errmsg(handle)); return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; } - ret = sqlite3_step(stmt); - if (ret != SQLITE_ROW) { + if (sqlite3_step(stmt) != SQLITE_ROW) { mc_error("integrity_check failed in step"); sqlite3_finalize(stmt); return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; } - char* check_result = (char*) sqlite3_column_text(stmt, 0); - if (check_result == NULL || strncmp(check_result, "ok", strlen(check_result))) { - mc_error("integrity_check failed - result(%s)\n", check_result); + if (sqlite3_stricmp("ok", (const char *)sqlite3_column_text(stmt, 0)) != 0) { + mc_error("consistency error detected"); sqlite3_finalize(stmt); return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; } @@ -503,7 +467,6 @@ int mc_db_util_create_tables(sqlite3 *handle) int mc_db_util_update_db(sqlite3 *handle, const char *sql_str) { int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *err_msg = NULL; int retry_count = 0; mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle"); @@ -512,16 +475,13 @@ int mc_db_util_update_db(sqlite3 *handle, const char *sql_str) mc_secure_debug("Update query [%s]", sql_str); while (1) { - ret = sqlite3_exec(handle, sql_str, NULL, NULL, &err_msg); - + ret = sqlite3_exec(handle, sql_str, NULL, NULL, NULL); if (ret == SQLITE_OK) break; - mc_error("failed to update db[%d, %s]", ret, err_msg); - sqlite3_free(err_msg); + mc_error("failed to update db[%d, %s]", ret, sqlite3_errmsg(handle)); - if (ret == SQLITE_LOCKED && - retry_count++ < RETRY_CNT) { + if (ret == SQLITE_LOCKED && retry_count++ < RETRY_CNT) { mc_warning("Locked retry[%d]", retry_count); usleep(SLEEP_TIME); continue; @@ -541,15 +501,7 @@ int mc_db_util_init_latest_server_table(sqlite3 *handle) int mc_db_util_delete_app_list(sqlite3 *handle) { - int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; - - sql_str = sqlite3_mprintf("DELETE FROM %q", MC_DB_TABLE_APP_LIST); - ret = mc_db_util_update_db(handle, sql_str); - sqlite3_free(sql_str); - mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Delete app_list failed [%d]", ret); - - return ret; + return mc_db_util_update_db(handle, "DELETE FROM app_list;"); } int mc_db_util_get_user_version(sqlite3 *handle, int *version) @@ -574,15 +526,9 @@ int mc_db_util_get_user_version(sqlite3 *handle, int *version) int mc_db_util_set_user_version(sqlite3 *handle) { - int ret = MEDIA_CONTROLLER_ERROR_NONE; - char *sql_str = NULL; - - sql_str = sqlite3_mprintf("PRAGMA user_version=%d", MC_DB_LATEST_VERSION); - ret = mc_db_util_update_db(handle, sql_str); - sqlite3_free(sql_str); - mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Update user_version failed [%d]", ret); + sql_autoptr q = sqlite3_mprintf("PRAGMA user_version=%d", MC_DB_LATEST_VERSION); - return ret; + return mc_db_util_update_db(handle, q); } /* g_strdup_printf replaces NULL to "(null)"*/ @@ -850,7 +796,7 @@ int mc_db_request(uid_t uid, const char *data, int data_size) { int ret = MEDIA_CONTROLLER_ERROR_NONE; gchar **params = NULL; - char *sql_str = NULL; + sql_autoptr q = NULL; mc_retvm_if(!data, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid data"); mc_retvm_if(data_size <= 0 , MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid data_size"); @@ -858,10 +804,9 @@ int mc_db_request(uid_t uid, const char *data, int data_size) params = g_strsplit(data, MC_STRING_DELIMITER, 0); mc_retvm_if(!params, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail to parsing query"); - ret = __parse_db_request(params, &sql_str); + ret = __parse_db_request(params, &q); if (ret == MEDIA_CONTROLLER_ERROR_NONE) { - ret = __update_db_request(uid, params, sql_str); - sqlite3_free(sql_str); + ret = __update_db_request(uid, params, q); } g_strfreev(params);