Add sql_autoptr type 19/312519/1
authorMinje Ahn <minje.ahn@samsung.com>
Tue, 11 Jun 2024 05:09:48 +0000 (14:09 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Tue, 11 Jun 2024 05:09:48 +0000 (14:09 +0900)
sql_autoptr:
__attribute__((cleanup(sqlite3_free))) char *

Change-Id: I7e29854976027ab2da2d18dd3ba0e2ca4c6d8ed7
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
include/media_controller_private.h
packaging/capi-media-controller.spec
src/media_controller_db.c
svc/media_controller_db_util.c

index 52ff2a3d32140f8b31b02d8f1549e4fedd871f47..851ee45568ef1e1c9403276b3599e8267d7cc5f1 100644 (file)
@@ -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 */
index 3927a5444ba61dbafd20d3eb975b3d985c0d40d3..986d97260d927a627d42a52bc5df054ad8e5de8b 100644 (file)
@@ -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
index a7fdf5f00059efc280884d5aac1aac499697ae9c..b3c632c079a1070f9d20c0640c025e7f5481f6ef 100644 (file)
@@ -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);
index d5a016ccf75267d990d90135599268e88116f4af..ecbb490ad6d6a440cbe757491c8266030e8e3c4e 100644 (file)
@@ -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);