Remove redundancy of statement evaluation 22/238222/8
authorYunjin Lee <yunjin-.lee@samsung.com>
Thu, 9 Jul 2020 09:11:12 +0000 (18:11 +0900)
committerYunjin Lee <yunjin-.lee@samsung.com>
Wed, 22 Jul 2020 09:35:44 +0000 (18:35 +0900)
- Simple statement evaluation
  - Remove unnecessary value assign
  - Remove redundancy of sqlite3_step and modify
    'do-while' to 'while'
- Add free function for list allocated by
  privilege_db_manager_get_privilege_list()
- TODO: Add error check for some cases
- TODO: Integrate some sql errors
- TODO: Rename privilege_info_db_row & add functions for it

Change-Id: I2973d22e8a21bbe358a8a773da36a77306794c9d
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
capi/include/privilege_db_manager.h
capi/src/privilege_db_manager.c
capi/src/privilege_manager.c

index deef6646fb89320cc6f60f7f82ed5829a093327a..8474f2e385fb111028617e0d9bfa0cc14def24e8 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2013-2019 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright(c) 2013-2020 Samsung Electronics Co., Ltd All Rights Reserved
  *
  * Licensed under the Apache License, Version 2.0(the License);
  * you may not use this file except in compliance with the License.
        extern "C" {
 #endif
 
+/**
+ * @brief Free GList of privilege_info_db_row_s* allocated by privilege_db_manager_get_privilege_list()
+ * @param [in] list The GList allocated by privilege_db_manager_get_privilege_list()
+ */
+void free_privilege_info_db_row_list(GList* list);
+
 /**
  * @brief Free GList allocated by privilege_db_manager APIs
  * @param [in] list The GList allocated by privilege_db_manager APIs
index 39fe2f15fa52277d3db3ddc2e39d1febd2b96c48..4569bbcf032a196b9ff1d193b8f9b33e2850a31d 100755 (executable)
@@ -114,6 +114,11 @@ privilege_profile_type_e get_priv_profile()
        } \
 }
 
+#define SAFE_FREE(var) { if ((var) != NULL) {free(var); var = NULL; } }
+#define SAFE_SQLITE_FREE(sql) { if ((sql) != NULL) {sqlite3_free(sql); sql = NULL; } }
+#define SAFE_SQLITE_FINALIZE(stmt) { if ((stmt) != NULL) {sqlite3_finalize(stmt); stmt = NULL; } }
+#define SAFE_G_LIST_FREE_FULL(list, func) { if ((list) != NULL) {g_list_free_full(list, func); list = NULL; } }
+
 static const char* __get_policy_table(privilege_manager_policy_type_e policy_type)
 {
        switch (policy_type) {
@@ -170,23 +175,19 @@ static int __initialize_db(privilege_db_type_e type, sqlite3 ** db)
 
 static void __finalize_db(sqlite3 *db, sqlite3_stmt *stmt, char* sql)
 {
-       if (stmt != NULL)
-               sqlite3_finalize(stmt);
+       SAFE_SQLITE_FINALIZE(stmt);
+       SAFE_SQLITE_FREE(sql);
 
        if (db != NULL)
                sqlite3_close_v2(db);
-
-       if (sql != NULL)
-               sqlite3_free(sql);
 }
 
 static int __prepare_stmt(sqlite3 *db, char* sql, sqlite3_stmt **stmt)
 {
        TryReturn(sql != NULL, , PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "query is NULL");
 
-       int ret = sqlite3_prepare_v2(db, sql, strlen(sql), stmt, NULL);
-       if (ret != SQLITE_OK) {
-               _LOGE("sqlite3_prepare_v2() failed. ret %d[%s]", ret, sqlite3_errmsg(db));
+       if (sqlite3_prepare_v2(db, sql, strlen(sql), stmt, NULL) != SQLITE_OK) {
+               _LOGE("sqlite3_prepare_v2() failed. ret %d[%s]", sqlite3_errcode(db), sqlite3_errmsg(db));
                return PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY;
        }
 
@@ -202,7 +203,7 @@ static int __make_privilege_list_str(GList *privilege_list, char** privilege_lis
                        temp_privilege_list_str = sqlite3_mprintf("'%q'", privilege_name);
                } else {
                        char* temp = sqlite3_mprintf("%s, '%q'", temp_privilege_list_str, privilege_name);
-                       sqlite3_free(temp_privilege_list_str);
+                       SAFE_SQLITE_FREE(temp_privilege_list_str);
                        temp_privilege_list_str = temp;
                }
                if (temp_privilege_list_str == NULL)
@@ -232,7 +233,7 @@ static void __get_db_error(int *ret)
 
 void privilege_db_manager_list_free(GList* list)
 {
-       g_list_free_full(list, free);
+       SAFE_G_LIST_FREE_FULL(list, free);
 }
 
 int privilege_db_manager_check_black_list(uid_t uid, privilege_manager_package_type_e package_type, GList* privilege_list)
@@ -240,37 +241,57 @@ int privilege_db_manager_check_black_list(uid_t uid, privilege_manager_package_t
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
 
-       int ret = 0;
        int count = 0;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_POLICY_RO, &db);
 
        char *privilege_list_str = NULL;
-    ret = __make_privilege_list_str(privilege_list, &privilege_list_str);
-    TryReturn(ret == 0 && privilege_list_str != NULL, sqlite3_close(db), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] making privilege_list_str for where in query is failed.");
+       TryReturn(__make_privilege_list_str(privilege_list, &privilege_list_str) == 0 && privilege_list_str != NULL, sqlite3_close(db), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] making privilege_list_str for where in query is failed.");
 
-       char *sql = sqlite3_mprintf("select distinct privilege_name from prevent_list where privilege_name in(%s)and (uid=%d or uid=%d) and package_type=%d", privilege_list_str, uid, GLOBAL_USER, package_type);
-       sqlite3_free(privilege_list_str);
+       char *sql = sqlite3_mprintf("select count(distinct privilege_name) from prevent_list where privilege_name in(%s)and (uid=%d or uid=%d) and package_type=%d", privilege_list_str, uid, GLOBAL_USER, package_type);
+       SAFE_SQLITE_FREE(privilege_list_str);
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW)
-                       ++count;
-       } while (ret == SQLITE_ROW);
+       if (sqlite3_step(stmt) == SQLITE_ROW)
+               count = sqlite3_column_int(stmt, 0);
 
        __finalize_db(db, stmt, sql);
 
        return count;
 }
 
+static void __free_privilege_info_db_row(privilege_info_db_row_s* p)
+{
+       SAFE_FREE(p->privilege_name);
+       SAFE_FREE(p);
+}
+
+static void __free_privilege_info_db_row_list(gpointer privilege_info_db_row_list)
+{
+       __free_privilege_info_db_row((privilege_info_db_row_s*)privilege_info_db_row_list);
+}
+
+void free_privilege_info_db_row_list(GList* row_list)
+{
+       SAFE_G_LIST_FREE_FULL(row_list, __free_privilege_info_db_row_list);
+}
+
+static privilege_info_db_row_s* __new_privilege_info_db_row(const char* privilege, int privilege_level_id)
+{
+       privilege_info_db_row_s *p = (privilege_info_db_row_s*)malloc(sizeof(privilege_info_db_row_s));
+       TryReturn(p != NULL, , NULL, "malloc() of privilege_info_db_row_s failed.");
+
+       p->privilege_name = g_strdup(privilege);
+       p->privilege_level_id = privilege_level_id;
+
+       return p;
+}
 
 int privilege_db_manager_get_privilege_list(privilege_manager_package_type_e package_type, GList ** privilege_list)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
@@ -279,24 +300,11 @@ int privilege_db_manager_get_privilege_list(privilege_manager_package_type_e pac
        TRY_PREPARE_STMT(db, sql, &stmt);
 
        GList *temp_privilege_list = NULL;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       privilege_info_db_row_s *privilege_info_db_row = (privilege_info_db_row_s *)malloc(sizeof(privilege_info_db_row_s));
-                       TryReturn(privilege_info_db_row != NULL, free(privilege_info_db_row); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_info_db_row's malloc is failed.");
-
-                       privilege_info_db_row->privilege_name = NULL;
-                       privilege_info_db_row->privilege_level_id = 0;
-
-                       privilege_info_db_row->privilege_name = strdup((char *)sqlite3_column_text(stmt, 0));
-                       TryReturn(privilege_info_db_row->privilege_name != NULL, free(privilege_info_db_row->privilege_name);
-                                         free(privilege_info_db_row);
-                                         __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_name's strdup is failed.");
-                       privilege_info_db_row->privilege_level_id = sqlite3_column_int(stmt, 1);
-
-                       temp_privilege_list = g_list_append(temp_privilege_list, privilege_info_db_row);
-               }
-       } while (ret == SQLITE_ROW);
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               privilege_info_db_row_s *p = __new_privilege_info_db_row((const char*)sqlite3_column_text(stmt, 0), sqlite3_column_int(stmt, 1));
+               TryReturn(p != NULL, free_privilege_info_db_row_list(temp_privilege_list); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] __new_privilege_info_db_row() failed.");
+               temp_privilege_list = g_list_append(temp_privilege_list, p);
+       }
 
        *privilege_list = temp_privilege_list;
 
@@ -309,27 +317,22 @@ int privilege_db_manager_get_mapped_privilege_list(const char *api_version, priv
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
        char *privilege_list_str = NULL;
-       ret = __make_privilege_list_str(privilege_list, &privilege_list_str);
-       TryReturn(ret == 0 && privilege_list_str != NULL, sqlite3_close(db), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] making privilege_list_str for where in query is failed.");
+       TryReturn(__make_privilege_list_str(privilege_list, &privilege_list_str) == 0 && privilege_list_str != NULL, sqlite3_close(db), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] making privilege_list_str for where in query is failed.");
 
        char *sql =  sqlite3_mprintf("select distinct mapped_privilege_name from privilege_mapping where package_type_id=%d and privilege_name in(%s) and from_api_version<=%Q and to_api_version>%Q", package_type, privilege_list_str, api_version, api_version, package_type);
-       sqlite3_free(privilege_list_str);
+       SAFE_SQLITE_FREE(privilege_list_str);
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
        GList *temp_privilege_list = NULL;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       char *privilege_name = strdup((char *)sqlite3_column_text(stmt, 0));
-                       temp_privilege_list = g_list_append(temp_privilege_list, privilege_name);
-               }
-       } while (ret == SQLITE_ROW);
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               char *privilege_name = g_strdup((char *)sqlite3_column_text(stmt, 0));
+               temp_privilege_list = g_list_append(temp_privilege_list, privilege_name);
+       }
 
        *mapped_privilege_list = temp_privilege_list;
 
@@ -342,6 +345,7 @@ int privilege_db_manager_get_privacy_display(const char *privacy_name, char **pr
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
+       int ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
@@ -349,23 +353,22 @@ int privilege_db_manager_get_privacy_display(const char *privacy_name, char **pr
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
-       int ret = sqlite3_step(stmt);
-       if (ret == SQLITE_ROW) {
-               *privacy_display = strdup((char*)sqlite3_column_text(stmt, 0));
-               TryReturn(*privacy_display != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_name's strdup is failed.");
-               __finalize_db(db, stmt, sql);
-               return PRIVILEGE_DB_MANAGER_ERR_NONE;
+       if (sqlite3_step(stmt) == SQLITE_ROW) {
+               *privacy_display = g_strdup((char*)sqlite3_column_text(stmt, 0));
+       } else {
+               ret = PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
        }
 
        __finalize_db(db, stmt, sql);
 
-       return PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
+       return ret;
 }
 
 int privilege_db_manager_get_privilege_display(privilege_manager_package_type_e package_type, const char *privilege_name, __attribute__((unused)) const char *api_version, char **privilege_display)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
+       int ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
@@ -373,23 +376,22 @@ int privilege_db_manager_get_privilege_display(privilege_manager_package_type_e
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
-       int ret = sqlite3_step(stmt);
-       if (ret == SQLITE_ROW) {
-               *privilege_display = strdup((char *)sqlite3_column_text(stmt, 0));
-               TryReturn(*privilege_display != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_name's strdup is failed.");
-               __finalize_db(db, stmt, sql);
-               return PRIVILEGE_DB_MANAGER_ERR_NONE;
+       if (sqlite3_step(stmt) == SQLITE_ROW) {
+               *privilege_display = g_strdup((char *)sqlite3_column_text(stmt, 0));
+       } else {
+               ret = PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
        }
 
        __finalize_db(db, stmt, sql);
 
-       return PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
+       return ret;
 }
 
 int privilege_db_manager_get_privilege_description(privilege_manager_package_type_e package_type, const char *privilege_name, __attribute__((unused)) const char *api_version, char **privilege_description)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
+       int ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
@@ -397,25 +399,22 @@ int privilege_db_manager_get_privilege_description(privilege_manager_package_typ
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
-       int ret = sqlite3_step(stmt);
-       if (ret == SQLITE_ROW) {
-               *privilege_description = strdup((char *)sqlite3_column_text(stmt, 0));
-               TryReturn(*privilege_description != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY] privilege_name's strdup is failed.");
-
-               __finalize_db(db, stmt, sql);
-               return PRIVILEGE_DB_MANAGER_ERR_NONE;
+       if (sqlite3_step(stmt) == SQLITE_ROW) {
+               *privilege_description = g_strdup((char *)sqlite3_column_text(stmt, 0));
+       } else {
+               ret = PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
        }
 
        __finalize_db(db, stmt, sql);
 
-       return PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
+       return ret;
 }
 
 int privilege_db_manager_get_privilege_group_id(privilege_manager_package_type_e package_type, const char *privilege_name, __attribute__((unused)) const char *api_version, int *privilege_group_id)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-
+       int ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
@@ -424,24 +423,21 @@ int privilege_db_manager_get_privilege_group_id(privilege_manager_package_type_e
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
-       int ret = sqlite3_step(stmt);
-       if (ret == SQLITE_ROW) {
+       if (sqlite3_step(stmt) == SQLITE_ROW) {
                *privilege_group_id = (int)sqlite3_column_int(stmt, 0);
-
-               __finalize_db(db, stmt, sql);
-               return PRIVILEGE_DB_MANAGER_ERR_NONE;
+       } else {
+               ret = PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
        }
 
        __finalize_db(db, stmt, sql);
 
-       return PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
+       return ret;
 }
 
 int privilege_db_manager_is(char type, const char* privilege)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int res = 0;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
@@ -468,25 +464,23 @@ int privilege_db_manager_is(char type, const char* privilege)
        if (ret == SQLITE_ROW) {
                switch (type) {
                case 'v':
-                       res = 1;
+                       ret = 1;
                        break;
                case 'p':
                case 'i':
-                       res = sqlite3_column_int(stmt, 0);
+                       ret = sqlite3_column_int(stmt, 0);
                        break;
                }
        } else if (ret == SQLITE_DONE) {
-               _LOGD("[PRIVILEGE_DB_MANAGER] NO DATA TO READ. %s is invalid privilege. ret = %d", privilege, ret);
+               _LOGD("[PRIVILEGE_DB_MANAGER] NO DATA TO READ. %s is invalid privilege.", privilege);
+               ret = 0;
        } else {
-               res = -1;
+               ret = -1;
        }
 
        __finalize_db(db, stmt, sql);
 
-       if (res < 0)
-               return -ret;
-       else
-               return res;
+       return ret;
 }
 
 // TODO: change it to get package's privacy option only.
@@ -505,23 +499,18 @@ int privilege_db_manager_is_privacy_white_list(const char* pkgid, const char* pr
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
-       int res = 0;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       char* privacy_option = strdup((char *)sqlite3_column_text(stmt, 0));
-                       TryReturn(privacy_option != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER] privacy_option strdup failed");
-                       if (privacy_option[privacy_id] == '1') {
-                               res = 1;
-                               free(privacy_option);
-                               break;
-                       }
-                       free(privacy_option);
+       ret = 0;
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               char* privacy_option = (char *)sqlite3_column_text(stmt, 0);
+               if (privacy_option[privacy_id] == '1') {
+                       ret = 1;
+                       break;
                }
-       } while (ret == SQLITE_ROW);
+       }
 
        __finalize_db(db, stmt, sql);
-       return res;
+
+       return ret;
 }
 
 // TODO: make it to get package's privacy option and settable info only.
@@ -530,7 +519,6 @@ int privilege_db_manager_is_user_settable(const char* pkgid, const char* privacy
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
 
-       int res = 1;
        int privacy_id = 0;
        int ret = privilege_db_manager_get_privacy_id(privacy_name, &privacy_id);
        TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE, , ret, "[PRIVILEGE_DB_MANAGER] privilege_db_manager_get_privacy_id failed");
@@ -541,30 +529,21 @@ int privilege_db_manager_is_user_settable(const char* pkgid, const char* privacy
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
-       res = 1;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       char* privacy_option = strdup((char *)sqlite3_column_text(stmt, 0));
-                       TryReturn(privacy_option != NULL, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "[PRIVILEGE_DB_MANAGER] privacy_option strdup failed");
-                       int settable_flag = (int)sqlite3_column_int(stmt, 1);
-                       if (privacy_option[privacy_id] == '1' && settable_flag == 1) {
-                               res = 1;
-                               free(privacy_option);
-                               break;
-                       } else if (privacy_option[privacy_id] == '1' && settable_flag == 0) {
-                               res = 0;
-                               free(privacy_option);
-                               break;
-                       } else {
-                               res = 1;
-                       }
-                       free(privacy_option);
+       ret = 1;
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               char* privacy_option = (char *)sqlite3_column_text(stmt, 0);
+               int settable_flag = (int)sqlite3_column_int(stmt, 1);
+               if (privacy_option[privacy_id] == '1' && settable_flag == 1) {
+                       break;
+               } else if (privacy_option[privacy_id] == '1' && settable_flag == 0) {
+                       ret = 0;
+                       break;
                }
-       } while (ret == SQLITE_ROW);
+       }
 
        __finalize_db(db, stmt, sql);
-       return res;
+
+       return ret;
 }
 
 int privilege_db_manager_is_disabled_privilege(uid_t uid, const char* privilege)
@@ -578,12 +557,9 @@ int privilege_db_manager_is_disabled_privilege(uid_t uid, const char* privilege)
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
-       int ret = sqlite3_step(stmt);
-
-       if (ret == SQLITE_ROW)
+       int ret = 0;
+       if (sqlite3_step(stmt) == SQLITE_ROW)
                ret = 1;
-       else
-               ret = 0;
 
        __finalize_db(db, stmt, sql);
        return ret;
@@ -593,7 +569,6 @@ int privilege_db_manager_get_privacy_list(GList **privacy_list)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
@@ -602,13 +577,10 @@ int privilege_db_manager_get_privacy_list(GList **privacy_list)
        TRY_PREPARE_STMT(db, sql, &stmt);
 
        GList* temp_privacy_list = NULL;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       char *privacy_name = strdup((char *)sqlite3_column_text(stmt, 0));
-                       temp_privacy_list = g_list_append(temp_privacy_list, privacy_name);
-               }
-       } while (ret == SQLITE_ROW);
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               char *privacy_name = g_strdup((char *)sqlite3_column_text(stmt, 0));
+               temp_privacy_list = g_list_append(temp_privacy_list, privacy_name);
+       }
 
        *privacy_list = temp_privacy_list;
 
@@ -622,7 +594,6 @@ int privilege_db_manager_get_privilege_list_by_privacy(const char* privacy, GLis
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
@@ -631,27 +602,23 @@ int privilege_db_manager_get_privilege_list_by_privacy(const char* privacy, GLis
        TRY_PREPARE_STMT(db, sql, &stmt);
 
        GList* temp_privilege_list = NULL;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       char *privilege_name = strdup((char *)sqlite3_column_text(stmt, 0));
-                       temp_privilege_list = g_list_append(temp_privilege_list, privilege_name);
-               }
-       } while (ret == SQLITE_ROW);
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               char *privilege_name = g_strdup((char *)sqlite3_column_text(stmt, 0));
+               temp_privilege_list = g_list_append(temp_privilege_list, privilege_name);
+       }
 
        __finalize_db(db, stmt, sql);
 
        *privilege_list = temp_privilege_list;
 
        return PRIVILEGE_DB_MANAGER_ERR_NONE;
-
 }
 
 int privilege_db_manager_get_privacy_by_privilege(const char* privilege, char** privacy_name)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
+       int ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
@@ -659,10 +626,8 @@ int privilege_db_manager_get_privacy_by_privilege(const char* privilege, char**
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
-       ret = sqlite3_step(stmt);
-       if (ret == SQLITE_ROW) {
-               *privacy_name = strdup((char*)sqlite3_column_text(stmt, 0));
-               ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
+       if (sqlite3_step(stmt) == SQLITE_ROW) {
+               *privacy_name = g_strdup((char*)sqlite3_column_text(stmt, 0));
        } else {
                ret = PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
        }
@@ -676,7 +641,6 @@ int privilege_db_manager_get_same_privacy_grouped_privileges(const char* privile
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_INFO, &db);
 
@@ -685,14 +649,10 @@ int privilege_db_manager_get_same_privacy_grouped_privileges(const char* privile
        TRY_PREPARE_STMT(db, sql, &stmt);
 
        GList* temp_privilege_list = NULL;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       char *privilege_name = strdup((char *)sqlite3_column_text(stmt, 0));
-                       TryReturn(privilege_name != NULL, __finalize_db(db, stmt, sql); g_list_free_full(temp_privilege_list, free), PRIVILEGE_DB_MANAGER_ERR_OUT_OF_MEMORY, "strdup failed");
-                       temp_privilege_list = g_list_append(temp_privilege_list, privilege_name);
-               }
-       } while (ret == SQLITE_ROW);
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               char *privilege_name = g_strdup((char *)sqlite3_column_text(stmt, 0));
+               temp_privilege_list = g_list_append(temp_privilege_list, privilege_name);
+       }
 
        __finalize_db(db, stmt, sql);
 
@@ -718,8 +678,7 @@ int privilege_db_manager_get_privacy_id_by_privilege(const char* privilege, int
 
        int ret = sqlite3_step(stmt);
        if (ret == SQLITE_ROW) {
-               int tmp = (int)sqlite3_column_int(stmt, 0);
-               *privacy_id = tmp;
+               *privacy_id = (int)sqlite3_column_int(stmt, 0);
                ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
        } else {
                ret = PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
@@ -745,10 +704,10 @@ int privilege_db_manager_get_privacy_id(const char* privacy, int *privacy_id)
 
        int ret = sqlite3_step(stmt);
        if (ret == SQLITE_ROW) {
-               int tmp = (int)sqlite3_column_int(stmt, 0);
-               *privacy_id = tmp;
+               *privacy_id = (int)sqlite3_column_int(stmt, 0);
                ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
        } else {
+               _LOGD("privacy %s not exist", privacy);
                ret = PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
        }
 
@@ -762,8 +721,6 @@ int privilege_db_manager_get_black_list(privilege_manager_policy_type_e policy_t
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
-
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_POLICY_RO, &db);
 
@@ -776,15 +733,10 @@ int privilege_db_manager_get_black_list(privilege_manager_policy_type_e policy_t
        TRY_PREPARE_STMT(db, sql, &stmt);
 
        GList *temp_privilege_list = NULL;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       char *privilege_name = strdup((char *)sqlite3_column_text(stmt, 0));
-                       temp_privilege_list = g_list_append(temp_privilege_list, privilege_name);
-               } else if (ret != SQLITE_DONE) {
-                       _LOGE("ret = %d", ret);
-               }
-       } while (ret == SQLITE_ROW);
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               char *privilege_name = g_strdup((char *)sqlite3_column_text(stmt, 0));
+               temp_privilege_list = g_list_append(temp_privilege_list, privilege_name);
+       }
 
        *privilege_list = temp_privilege_list;
 
@@ -797,65 +749,94 @@ int privilege_db_manager_set_black_list(int uid, privilege_manager_package_type_
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
+       char* sql = NULL;
+
        int ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_POLICY_RW, &db);
 
        TryReturn(sqlite3_exec(db, "BEGIN IMMEDIATE TRANSACTION", NULL, NULL, NULL) == SQLITE_OK, __finalize_db(db, NULL, NULL), PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL, "[DB_FAIL] sqlite3_exec for BEGIN IMMEDIATE TRANSACTION failed");
-       GList *l = NULL;
-       for (l = privilege_list; l != NULL; l = l->next) {
+
+       for (GList *l = privilege_list; l != NULL; l = l->next) {
                char *privilege_name = (char *)l->data;
-               char* sql = sqlite3_mprintf("insert or ignore into prevent_list (uid, package_type, privilege_name) values (%d, %d, %Q)", uid, package_type, privilege_name);
-               TryReturn(sql != NULL, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
-               ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
-               TryReturn(ret == SQLITE_OK, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] fail to prepare database: %s", sqlite3_errmsg(db));
-               ret = sqlite3_step(stmt);
-               if (ret != SQLITE_DONE) {
-                       __get_db_error(&ret);
-                       sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL);
-                       __finalize_db(db, stmt, sql);
-                       return ret;
+               sql = sqlite3_mprintf("insert or ignore into prevent_list (uid, package_type, privilege_name) values (%d, %d, %Q)", uid, package_type, privilege_name);
+
+               if (__prepare_stmt(db, sql, &stmt) != PRIVILEGE_DB_MANAGER_ERR_NONE) {
+                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+                       break;
+               }
+
+               if (sqlite3_step(stmt) != SQLITE_DONE) {
+                       _LOGE("sqlite3_step() failed. [%s]", sqlite3_errmsg(db));
+                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+                       break;
                }
-               sqlite3_finalize(stmt);
-               stmt = NULL;
-               sqlite3_free(sql);
+               SAFE_SQLITE_FINALIZE(stmt);
+               SAFE_SQLITE_FREE(sql);
        }
 
-       TryReturn(sqlite3_exec(db, "COMMIT TRANSACTION", NULL, NULL, NULL) == SQLITE_OK, __finalize_db(db, stmt, NULL), PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL, "[DB_FAIL] sqlite3_exec for COMMIT TRANSACTION failed");
-       __finalize_db(db, stmt, NULL);
-       return PRIVILEGE_DB_MANAGER_ERR_NONE;
+       if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE) {
+               _LOGE("DB update failed. Try ROLLBACK TRANSACTION.");
+               if (sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL) != SQLITE_OK) {
+                       _LOGE("[DB_FAIL] sqlite3_exec for 'ROLLBACK TRANSACTION' failed. ret %d[%s]", sqlite3_errcode(db), sqlite3_errmsg(db));
+               }
+       } else {
+               if (sqlite3_exec(db, "COMMIT TRANSACTION", NULL, NULL, NULL) != SQLITE_OK) {
+                       _LOGE("[DB_FAIL] sqlite3_exec for 'COMMIT TRANSACTION' failed. ret %d[%s]", sqlite3_errcode(db), sqlite3_errmsg(db));
+                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+               }
+       }
+
+       __finalize_db(db, stmt, sql);
+
+       return ret;
 }
 
 int privilege_db_manager_unset_black_list(int uid, privilege_manager_package_type_e package_type, GList *privilege_list)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
+       int ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
+       char* sql = NULL;
+
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_POLICY_RW, &db);
 
        TryReturn(sqlite3_exec(db, "BEGIN IMMEDIATE TRANSACTION", NULL, NULL, NULL) == SQLITE_OK, __finalize_db(db, NULL, NULL), PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL, "[DB_FAIL] sqlite3_exec for BEGIN IMMEDIATE TRANSACTION failed");
 
        for (GList *l = privilege_list; l != NULL; l = l->next) {
                char *privilege_name = (char *)l->data;
-               char* sql = sqlite3_mprintf("delete from prevent_list where uid=%d and package_type=%d and privilege_name=%Q", uid, package_type, privilege_name);
-               TryReturn(sql != NULL, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
-               ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
-               TryReturn(ret == SQLITE_OK, __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] fail to prepare database: %s", sqlite3_errmsg(db));
-               ret = sqlite3_step(stmt);
-               if (ret != SQLITE_DONE) {
-                       __get_db_error(&ret);
-                       sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL);
-                       __finalize_db(db, stmt, sql);
-                       return ret;
+               sql = sqlite3_mprintf("delete from prevent_list where uid=%d and package_type=%d and privilege_name=%Q", uid, package_type, privilege_name);
+
+               if (__prepare_stmt(db, sql, &stmt) != PRIVILEGE_DB_MANAGER_ERR_NONE) {
+                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+                       break;
                }
-               sqlite3_finalize(stmt);
-               stmt = NULL;
-               sqlite3_free(sql);
+
+               if (sqlite3_step(stmt) != SQLITE_DONE) {
+                       _LOGE("sqlite3_step() failed. [%s]", sqlite3_errmsg(db));
+                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+                       break;
+               }
+
+               SAFE_SQLITE_FINALIZE(stmt);
+               SAFE_SQLITE_FREE(sql);
        }
 
-       TryReturn(sqlite3_exec(db, "COMMIT TRANSACTION", NULL, NULL, NULL) == SQLITE_OK, __finalize_db(db, stmt, NULL), PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL, "[DB_FAIL] sqlite3_exec for COMMIT TRANSACTION failed");
-       __finalize_db(db, stmt, NULL);
-       return PRIVILEGE_DB_MANAGER_ERR_NONE;
+       if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE) {
+               _LOGE("DB update failed. Try ROLLBACK TRANSACTION.");
+               if (sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL) != SQLITE_OK) {
+                       _LOGE("[DB_FAIL] sqlite3_exec for 'ROLLBACK TRANSACTION' failed. ret %d[%s]", sqlite3_errcode(db), sqlite3_errmsg(db));
+               }
+       } else {
+               if (sqlite3_exec(db, "COMMIT TRANSACTION", NULL, NULL, NULL) != SQLITE_OK) {
+                       _LOGE("[DB_FAIL] sqlite3_exec for 'COMMIT TRANSACTION' failed. ret %d[%s]", sqlite3_errcode(db), sqlite3_errmsg(db));
+                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+               }
+       }
+
+       __finalize_db(db, stmt, sql);
+
+       return ret;
 }
 
 //TODO: Do insert only. DO NOT determine whether to insert or not in here.
@@ -863,9 +844,11 @@ int privilege_db_manager_set_package_critical_privilege_info(const uid_t uid, co
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
+       char* sql = NULL;
+       int ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_PRIVACY_RW, &db);
+
        GList* mapped_privilege_list = NULL;
        ret = privilege_db_manager_get_mapped_privilege_list(api_version, package_type, critical_privilege_list, &mapped_privilege_list);
        TryReturn(ret == PRIVILEGE_DB_MANAGER_ERR_NONE && mapped_privilege_list != NULL, __finalize_db(db, stmt, NULL), PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL, "[DB_FAIL] privilege_db_manager_get_mapped_privilege_list failed");
@@ -875,36 +858,44 @@ int privilege_db_manager_set_package_critical_privilege_info(const uid_t uid, co
        for (GList *l = mapped_privilege_list; l != NULL; l = l->next) {
                char *privilege_name = (char *)l->data;
                if (strstr(privilege_name, "/internal/") == NULL) {
-                       char* sql = NULL;
                        char * privacy_name = NULL;
                        ret = privilege_db_manager_get_privacy_by_privilege(privilege_name, &privacy_name);
                        if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && strstr(privacy_name, "N/A") == NULL && privilege_db_manager_is_user_settable(pkgid, privacy_name) == 1) {
                                sql = sqlite3_mprintf("insert or replace into privacy_package (uid, pkg_id, privacy_name, privilege_name, api_version, is_critical) values (%d, %Q, %Q, %Q, %Q, 1)", uid, pkgid, privacy_name, privilege_name, api_version);
-                               TryReturn(sql != NULL, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); g_list_free_full(mapped_privilege_list, free); free(privacy_name); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
-                               ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
-                               TryReturn(ret == SQLITE_OK, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); g_list_free_full(mapped_privilege_list, free); free(privacy_name); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] fail to prepare database: %s", sqlite3_errmsg(db));
-                               ret = sqlite3_step(stmt);
-                               if (ret != SQLITE_DONE) {
-                                       __get_db_error(&ret);
-                                       sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL);
-                                       g_list_free_full(mapped_privilege_list, free);
-                                       free(privacy_name);
-                                       __finalize_db(db, stmt, sql);
-                                       return ret;
+
+                               if (__prepare_stmt(db, sql, &stmt) != PRIVILEGE_DB_MANAGER_ERR_NONE) {
+                                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+                                       break;
                                }
-                               sqlite3_finalize(stmt);
-                               stmt = NULL;
-                               sqlite3_free(sql);
+
+                               if (sqlite3_step(stmt) != SQLITE_DONE) {
+                                       _LOGE("sqlite3_step() failed. [%s]", sqlite3_errmsg(db));
+                                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+                                       break;
+                               }
+
+                               SAFE_SQLITE_FREE(sql);
+                               SAFE_SQLITE_FINALIZE(stmt);
                        }
-                       if (privacy_name != NULL)
-                               free(privacy_name);
+                       SAFE_FREE(privacy_name);
+               }
+       }
+       SAFE_G_LIST_FREE_FULL(mapped_privilege_list, free);
+       if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE) {
+               _LOGE("DB update failed. Try ROLLBACK TRANSACTION.");
+               if (sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL) != SQLITE_OK) {
+                       _LOGE("[DB_FAIL] sqlite3_exec for 'ROLLBACK TRANSACTION' failed. ret %d[%s]", sqlite3_errcode(db), sqlite3_errmsg(db));
+               }
+       } else {
+               if (sqlite3_exec(db, "COMMIT TRANSACTION", NULL, NULL, NULL) != SQLITE_OK) {
+                       _LOGE("[DB_FAIL] sqlite3_exec for 'COMMIT TRANSACTION' failed. ret %d[%s]", sqlite3_errcode(db), sqlite3_errmsg(db));
+                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
                }
        }
-       g_list_free_full(mapped_privilege_list, free);
 
-       TryReturn(sqlite3_exec(db, "COMMIT TRANSACTION", NULL, NULL, NULL) == SQLITE_OK, __finalize_db(db, stmt, NULL), PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL, "[DB_FAIL] sqlite3_exec for COMMIT TRANSACTION failed");
-       __finalize_db(db, stmt, NULL);
-       return PRIVILEGE_DB_MANAGER_ERR_NONE;
+       __finalize_db(db, stmt, sql);
+
+       return ret;
 }
 
 //TODO: Do insert only. DO NOT determine whether to insert or not in here.
@@ -912,7 +903,9 @@ int privilege_db_manager_set_package_privacy_privilege_info(const uid_t uid, con
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
+       char* sql = NULL;
+
+       int ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_PRIVACY_RW, &db);
 
@@ -925,43 +918,50 @@ int privilege_db_manager_set_package_privacy_privilege_info(const uid_t uid, con
        for (l = mapped_privilege_list; l != NULL; l = l->next) {
                char *privilege_name = (char *)l->data;
                if (strstr(privilege_name, "/internal/") == NULL) {
-                       char* sql = NULL;
                        char * privacy_name = NULL;
                        ret = privilege_db_manager_get_privacy_by_privilege(privilege_name, &privacy_name);
                        if (ret == PRIVILEGE_DB_MANAGER_ERR_NONE && strstr(privacy_name, "N/A") == NULL && privilege_db_manager_is_user_settable(pkgid, privacy_name) == 1) {
                                sql = sqlite3_mprintf("insert or ignore into privacy_package (uid, pkg_id, privacy_name, privilege_name, api_version, is_critical) values (%d, %Q, %Q, %Q, %Q, 0)", uid, pkgid, privacy_name, privilege_name, api_version);
-                               TryReturn(sql != NULL, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); g_list_free_full(mapped_privilege_list, free); free(privacy_name); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] sqlite3_mprintf failed");
-                               ret = sqlite3_prepare_v2(db, sql, strlen(sql), &stmt, NULL);
-                               TryReturn(ret == SQLITE_OK, sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL); g_list_free_full(mapped_privilege_list, free); free(privacy_name); __finalize_db(db, stmt, sql), PRIVILEGE_DB_MANAGER_ERR_INVALID_QUERY, "[DB_FAIL] fail to prepare database: %s", sqlite3_errmsg(db));
-                               ret = sqlite3_step(stmt);
-                               if (ret != SQLITE_DONE) {
-                                       __get_db_error(&ret);
-                                       sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL);
-                                       g_list_free_full(mapped_privilege_list, free);
-                                       free(privacy_name);
-                                       __finalize_db(db, stmt, sql);
-                                       return ret;
+
+                               if (__prepare_stmt(db, sql, &stmt) != PRIVILEGE_DB_MANAGER_ERR_NONE) {
+                                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+                                       break;
                                }
-                               sqlite3_finalize(stmt);
-                               stmt = NULL;
-                               sqlite3_free(sql);
+
+                               if (sqlite3_step(stmt) != SQLITE_DONE) {
+                                       _LOGE("sqlite3_step() failed. [%s]", sqlite3_errmsg(db));
+                                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
+                                       break;
+                               }
+
+                               SAFE_SQLITE_FREE(sql);
+                               SAFE_SQLITE_FINALIZE(stmt);
                        }
-                       if (privacy_name != NULL)
-                               free(privacy_name);
+                       SAFE_FREE(privacy_name);
+               }
+       }
+       SAFE_G_LIST_FREE_FULL(mapped_privilege_list, free);
+       if (ret != PRIVILEGE_DB_MANAGER_ERR_NONE) {
+               _LOGE("DB update failed. Try ROLLBACK TRANSACTION.");
+               if (sqlite3_exec(db, "ROLLBACK TRANSACTION", NULL, NULL, NULL) != SQLITE_OK) {
+                       _LOGE("[DB_FAIL] sqlite3_exec for 'ROLLBACK TRANSACTION' failed. ret %d[%s]", sqlite3_errcode(db), sqlite3_errmsg(db));
+               }
+       } else {
+               if (sqlite3_exec(db, "COMMIT TRANSACTION", NULL, NULL, NULL) != SQLITE_OK) {
+                       _LOGE("[DB_FAIL] sqlite3_exec for 'COMMIT TRANSACTION' failed. ret %d[%s]", sqlite3_errcode(db), sqlite3_errmsg(db));
+                       ret = PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL;
                }
        }
-       g_list_free_full(mapped_privilege_list, free);
 
-       TryReturn(sqlite3_exec(db, "COMMIT TRANSACTION", NULL, NULL, NULL) == SQLITE_OK, __finalize_db(db, stmt, NULL), PRIVILEGE_DB_MANAGER_ERR_DB_UPDATE_FAIL, "[DB_FAIL] sqlite3_exec for COMMIT TRANSACTION failed");
-       __finalize_db(db, stmt, NULL);
-       return PRIVILEGE_DB_MANAGER_ERR_NONE;
+       __finalize_db(db, stmt, sql);
+
+       return ret;
 }
 
 int privilege_db_manager_unset_package_privilege_info(const uid_t uid, const char* pkgid)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_PRIVACY_RW, &db);
 
@@ -969,14 +969,15 @@ int privilege_db_manager_unset_package_privilege_info(const uid_t uid, const cha
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
-       ret = sqlite3_step(stmt);
 
+       int ret = sqlite3_step(stmt);
        if (ret != SQLITE_DONE)
                __get_db_error(&ret);
        else
                ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
 
        __finalize_db(db, stmt, sql);
+
        return ret;
 }
 
@@ -1003,22 +1004,19 @@ int privilege_db_manager_is_privacy_requestable(const uid_t uid, const char* pkg
                        *is_privacy_requestable = true;
                else
                        *is_privacy_requestable = false;
+               ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
        } else if (ret == SQLITE_DONE) {
-               _LOGD("no result!!!!");
-               __finalize_db(db, stmt, sql);
-               return PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
+               ret = PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
        } else {
-               _LOGE("ret = %d, %s", ret, sqlite3_errmsg(db));
-               __finalize_db(db, stmt, sql);
-               return ret;
+               _LOGE("sqlite3_step() failed. et %d[%s]", ret, sqlite3_errmsg(db));
+               //TODO: add error value for internal error
        }
 
        __finalize_db(db, stmt, sql);
 
-       return PRIVILEGE_DB_MANAGER_ERR_NONE;
-
-
+       return ret;
 }
+
 int privilege_db_manager_is_critical_privilege(const uid_t uid, const char* pkgid, const char* privilege, bool* is_critical)
 {
        sqlite3 *db = NULL;
@@ -1037,26 +1035,23 @@ int privilege_db_manager_is_critical_privilege(const uid_t uid, const char* pkgi
                        *is_critical = true;
                else
                        *is_critical = false;
+               ret = PRIVILEGE_DB_MANAGER_ERR_NONE;
        } else if (ret == SQLITE_DONE) {
-               __finalize_db(db, stmt, sql);
-               return PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
+               ret = PRIVILEGE_DB_MANAGER_ERR_NO_EXIST_RESULT;
        } else {
-               _LOGE("ret = %d, %s", ret, sqlite3_errmsg(db));
-               __finalize_db(db, stmt, sql);
-       return ret;
+               _LOGE("ret = %d[%s]", ret, sqlite3_errmsg(db));
+               //TODO: add error value for internal error
        }
 
        __finalize_db(db, stmt, sql);
 
-       return PRIVILEGE_DB_MANAGER_ERR_NONE;
-
+       return ret;
 }
 
 int privilege_db_manager_get_all_privacy_package_list(const uid_t uid, GList** package_list)
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_PRIVACY_RO, &db);
        char *sql = sqlite3_mprintf("select distinct pkg_id from privacy_package where (uid=%d or uid=%d)", uid, GLOBAL_USER);
@@ -1064,13 +1059,10 @@ int privilege_db_manager_get_all_privacy_package_list(const uid_t uid, GList** p
        TRY_PREPARE_STMT(db, sql, &stmt);
 
        GList* temp_package_list = NULL;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       char *pkgid = strdup((char *)sqlite3_column_text(stmt, 0));
-                       temp_package_list = g_list_append(temp_package_list, pkgid);
-               }
-       } while (ret == SQLITE_ROW);
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               char *pkgid = g_strdup((char *)sqlite3_column_text(stmt, 0));
+               temp_package_list = g_list_append(temp_package_list, pkgid);
+       }
 
        __finalize_db(db, stmt, sql);
 
@@ -1085,7 +1077,6 @@ int privilege_db_manager_get_privacy_list_by_pkgid(const uid_t uid, const char*
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_PRIVACY_RO, &db);
 
@@ -1094,13 +1085,10 @@ int privilege_db_manager_get_privacy_list_by_pkgid(const uid_t uid, const char*
        TRY_PREPARE_STMT(db, sql, &stmt);
 
        GList* temp_privacy_list = NULL;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       char *privacy_name = strdup((char *)sqlite3_column_text(stmt, 0));
-                       temp_privacy_list = g_list_append(temp_privacy_list, privacy_name);
-               }
-       } while (ret == SQLITE_ROW);
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               char *privacy_name = g_strdup((char *)sqlite3_column_text(stmt, 0));
+               temp_privacy_list = g_list_append(temp_privacy_list, privacy_name);
+       }
 
        __finalize_db(db, stmt, sql);
 
@@ -1115,21 +1103,18 @@ int privilege_db_manager_get_package_list_by_privacy(const uid_t uid, const char
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_PRIVACY_RO, &db);
+
        char *sql = sqlite3_mprintf("select distinct pkg_id from privacy_package where (uid=%d or uid=%d) and privacy_name=%Q", uid, GLOBAL_USER, privacy);
 
        TRY_PREPARE_STMT(db, sql, &stmt);
 
        GList* temp_package_list = NULL;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       char *pkgid = strdup((char *)sqlite3_column_text(stmt, 0));
-                       temp_package_list = g_list_append(temp_package_list, pkgid);
-               }
-       } while (ret == SQLITE_ROW);
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               char *pkgid = g_strdup((char *)sqlite3_column_text(stmt, 0));
+               temp_package_list = g_list_append(temp_package_list, pkgid);
+       }
 
        __finalize_db(db, stmt, sql);
 
@@ -1144,7 +1129,6 @@ int privilege_db_manager_get_privilege_list_by_pkgid_and_privacy(const uid_t uid
 {
        sqlite3 *db = NULL;
        sqlite3_stmt *stmt = NULL;
-       int ret;
 
        TRY_INIT_DB(PRIVILEGE_DB_TYPE_PRIVACY_RO, &db);
 
@@ -1153,13 +1137,10 @@ int privilege_db_manager_get_privilege_list_by_pkgid_and_privacy(const uid_t uid
        TRY_PREPARE_STMT(db, sql, &stmt);
 
        GList* temp_privilege_list = NULL;
-       do {
-               ret = sqlite3_step(stmt);
-               if (ret == SQLITE_ROW) {
-                       char *privilege_name = strdup((char *)sqlite3_column_text(stmt, 0));
-                       temp_privilege_list = g_list_append(temp_privilege_list, privilege_name);
-               }
-       } while (ret == SQLITE_ROW);
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               char *privilege_name = g_strdup((char *)sqlite3_column_text(stmt, 0));
+               temp_privilege_list = g_list_append(temp_privilege_list, privilege_name);
+       }
 
        __finalize_db(db, stmt, sql);
 
index b2761e5b6633c7fa72808f42f2618449abf2d068..9ee43af07a533df22d5d80ab688396e12af77560 100755 (executable)
@@ -99,17 +99,6 @@ int __get_api_version_code(const char *api_version, api_version_code_t *api_vers
        return PRVMGR_ERR_NONE;
 }
 
-static void __free_privilege_info(privilege_info_db_row_s *privilege_info)
-{
-       SafeFree(privilege_info->privilege_name);
-}
-
-static void __free_privilege_list(gpointer privilege_list)
-{
-       __free_privilege_info((privilege_info_db_row_s*)privilege_list);
-}
-
-
 static int __comp_privilege_name(gconstpointer a, gconstpointer b)
 {
        privilege_info_db_row_s *info = (privilege_info_db_row_s*)a;
@@ -287,7 +276,7 @@ int privilege_manager_verify_privilege(uid_t uid, const char *api_version, privi
 
 FINISH:
        for (unsigned int i = 0; i < g_list_length(privilege_list); ++i) SafeFree(msg_list[i]);
-       g_list_free_full(valid_privilege_list, __free_privilege_list);
+       free_privilege_info_db_row_list(valid_privilege_list);
        return ret_val;
 }