#include <glib.h>
#include <unistd.h>
#include <ctype.h>
+#include <sqlite3.h>
#include <tzplatform_config.h>
#include <pkgmgr-info.h>
#include "aul_svc_db.h"
#include "aul_util.h"
-#define APP_INFO_DB_PATH tzplatform_mkpath(TZ_SYS_DB, ".pkgmgr_parser.db")
+#define APP_INFO_DB_PATH tzplatform_mkpath(TZ_SYS_DB, ".pkgmgr_parser.db")
#define QUERY_MAX_LEN 8192
#define URI_MAX_LEN 4096
"pkg_name text, " \
"PRIMARY KEY(pkg_name)) "
+#define __BIND_TEXT(db, stmt, i, text) \
+do { \
+ if (sqlite3_bind_text(stmt, i, text, -1, SQLITE_STATIC) != SQLITE_OK) { \
+ _E("bind error(index %d): %s", i, sqlite3_errmsg(db)); \
+ sqlite3_finalize(stmt); \
+ return -1; \
+ } \
+} while (0)
+
+#define __BIND_INT(db, stmt, i, int) \
+do { \
+ if (sqlite3_bind_int(stmt, i, int) != SQLITE_OK) { \
+ _E("bind error(index %d): %s", i, sqlite3_errmsg(db)); \
+ sqlite3_finalize(stmt); \
+ return -1; \
+ } \
+} while (0)
+
struct alias_info_s {
char *alias_appid;
char *appid;
}
rc = sqlite3_open_v2(db_path, &svc_db,
- readonly ? SQLITE_OPEN_READONLY : SQLITE_OPEN_READWRITE, NULL);
+ readonly ? SQLITE_OPEN_READONLY : SQLITE_OPEN_READWRITE,
+ NULL);
free(db_path);
if (rc) {
- _E("Can't open database: %d, %s, extended: %d", rc, sqlite3_errmsg(svc_db),
+ _E("Can't open database: %d, %s, extended: %d",
+ rc, sqlite3_errmsg(svc_db),
sqlite3_extended_errcode(svc_db));
if (svc_db) {
sqlite3_close(svc_db);
rc = sqlite3_open_v2(db_path, &app_info_db, SQLITE_OPEN_READONLY, NULL);
free(db_path);
if (rc) {
- _E("Can't open database: %d, %s, extended: %d", rc, sqlite3_errmsg(app_info_db),
- sqlite3_extended_errcode(app_info_db));
+ _E("Can't open database: %d, %s, extended: %d",
+ rc, sqlite3_errmsg(app_info_db),
+ sqlite3_extended_errcode(app_info_db));
goto err;
}
}
sqlite3_create_collation(app_info_db, SVC_COLLATION, SQLITE_UTF8,
- NULL, __collate_appsvc);
+ NULL, __collate_appsvc);
- rc = sqlite3_open_v2(APP_INFO_DB_PATH, &global_app_info_db, SQLITE_OPEN_READONLY, NULL);
+ rc = sqlite3_open_v2(APP_INFO_DB_PATH, &global_app_info_db,
+ SQLITE_OPEN_READONLY, NULL);
if (rc) {
- _E("Can't open database: %d, %s, extended: %d", rc, sqlite3_errmsg(global_app_info_db),
- sqlite3_extended_errcode(global_app_info_db));
+ _E("Can't open database: %d, %s, extended: %d",
+ rc, sqlite3_errmsg(global_app_info_db),
+ sqlite3_extended_errcode(global_app_info_db));
goto err;
}
rc = sqlite3_exec(global_app_info_db, "PRAGMA journal_mode = PERSIST",
- NULL, NULL, NULL);
+ NULL, NULL, NULL);
if (SQLITE_OK != rc) {
_D("Fail to change journal mode\n");
goto err;
}
sqlite3_create_collation(global_app_info_db, SVC_COLLATION, SQLITE_UTF8,
- NULL, __collate_appsvc);
+ NULL, __collate_appsvc);
return 0;
err:
return -1;
}
+static void __fini_app_info_db(void)
+{
+ if (app_info_db) {
+ sqlite3_close(app_info_db);
+ app_info_db = NULL;
+ }
+
+ if (global_app_info_db) {
+ sqlite3_close(global_app_info_db);
+ global_app_info_db = NULL;
+ }
+}
static int __fini(void)
{
return ret;
}
+static int __insert_info(sqlite3 *db, const char *op, const char *mime_type,
+ const char *uri, const char *appid)
+{
+ const char query[] =
+ "INSERT INTO appsvc(operation, mime_type, uri, pkg_name) "
+ "VALUES(?, ?, ?, ?)";
+ sqlite3_stmt *stmt;
+ int idx = 1;
+ int r;
+
+ r = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (r != SQLITE_OK) {
+ _E("Prepare failed: %s", sqlite3_errmsg(db));
+ return -1;
+ }
+
+ __BIND_TEXT(db, stmt, idx++, op);
+ __BIND_TEXT(db, stmt, idx++, mime_type ? mime_type : "NULL");
+ __BIND_TEXT(db, stmt, idx++, uri ? uri : "NULL");
+ __BIND_TEXT(db, stmt, idx++, appid);
+
+ r = sqlite3_step(stmt);
+ if (r != SQLITE_DONE) {
+ _E("Step failed: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ return -1;
+ }
+ sqlite3_finalize(stmt);
+
+ return 0;
+}
+
int _svc_db_add_app(const char *op, const char *mime_type, const char *uri,
- const char *pkg_name, uid_t uid)
+ const char *pkg_name, uid_t uid)
{
- char m[BUF_MAX_LEN];
- char u[URI_MAX_LEN];
- const char insert_query[] =
- "insert into appsvc( operation, mime_type, uri, pkg_name) values(?,?,?,?)";
- sqlite3_stmt* p_statement;
- int result;
+ int r;
if (__init(uid, false) < 0)
return -1;
if (op == NULL)
return -1;
- if (mime_type == NULL)
- strncpy(m, "NULL", BUF_MAX_LEN - 1);
- else
- strncpy(m, mime_type, BUF_MAX_LEN - 1);
+ r = __insert_info(svc_db, op, mime_type, uri, pkg_name);
+ __fini();
- if (uri == NULL)
- strncpy(u, "NULL", URI_MAX_LEN - 1);
- else
- strncpy(u, uri, URI_MAX_LEN - 1);
+ return r;
+}
+static int __delete_info(sqlite3 *db, const char *appid)
+{
+ const char query[] = "DELETE FROM appsvc WHERE pkg_name = ?;";
+ sqlite3_stmt *stmt;
+ int idx = 1;
+ int r;
- result = sqlite3_prepare_v2(svc_db, insert_query, strlen(insert_query),
- &p_statement, NULL);
- if (result != SQLITE_OK) {
- _E("Sqlite3 error [%d] : <%s> preparing <%s> querry\n", result,
- sqlite3_errmsg(svc_db), insert_query);
+ r = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (r != SQLITE_OK) {
+ _E("Prepare failed: %s", sqlite3_errmsg(db));
return -1;
}
- sqlite3_bind_text(p_statement, 1, op, -1, SQLITE_TRANSIENT);
- sqlite3_bind_text(p_statement, 2, m, -1, SQLITE_TRANSIENT);
- sqlite3_bind_text(p_statement, 3, u, -1, SQLITE_TRANSIENT);
- sqlite3_bind_text(p_statement, 4, pkg_name, -1, SQLITE_TRANSIENT);
-
- result = sqlite3_step(p_statement);
- if (result != SQLITE_DONE) {
- _E("Sqlite3 error [%d] : <%s> executing statement\n", result,
- sqlite3_errmsg(svc_db));
- }
+ __BIND_TEXT(db, stmt, idx++, appid);
- result = sqlite3_finalize(p_statement);
- if (result != SQLITE_OK) {
- _E("Sqlite3 error [%d] : <%s> finalizing statement\n", result,
- sqlite3_errmsg(svc_db));
+ r = sqlite3_step(stmt);
+ if (r != SQLITE_DONE) {
+ _E("Step failed: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ return -1;
}
+ sqlite3_finalize(stmt);
- __fini();
return 0;
}
int _svc_db_delete_with_pkgname(const char *pkg_name, uid_t uid)
{
- const char delete_query[] = "delete from appsvc where pkg_name = ?;";
- sqlite3_stmt* p_statement;
- int result;
+ int r;
if (pkg_name == NULL) {
_E("Invalid argument: data to delete is NULL\n");
if (__init(uid, false) < 0)
return -1;
- result = sqlite3_prepare_v2(svc_db, delete_query, strlen(delete_query),
- &p_statement, NULL);
- if (result != SQLITE_OK) {
- _E("Sqlite3 error [%d] : <%s> preparing <%s> querry\n", result,
- sqlite3_errmsg(svc_db), delete_query);
- return -1;
- }
+ r = __delete_info(svc_db, pkg_name);
+ __fini();
- sqlite3_bind_text(p_statement, 1, pkg_name, -1, SQLITE_TRANSIENT);
+ return r;
+}
- result = sqlite3_step(p_statement);
- if (result != SQLITE_DONE) {
- _E("Sqlite3 error [%d] : <%s> executing statement\n", result,
- sqlite3_errmsg(svc_db));
- }
+int _svc_db_delete_all(uid_t uid)
+{
+ const char query[] = "DELETE FROM appsvc;";
+ int r;
- result = sqlite3_finalize(p_statement);
- if (result != SQLITE_OK) {
- _E("Sqlite3 error [%d] : <%s> finalizing statement\n", result,
- sqlite3_errmsg(svc_db));
- }
+ if (__init(uid, false) < 0)
+ return -1;
+ r = sqlite3_exec(svc_db, query, NULL, NULL, NULL);
+ if (r != SQLITE_OK) {
+ _E("Exec failed: %s", sqlite3_errmsg(svc_db));
+ __fini();
+ return -1;
+ }
__fini();
return 0;
}
-int _svc_db_delete_all(uid_t uid)
+static int __get_count(sqlite3 *db, const char *appid)
{
- char query[QUERY_MAX_LEN];
- char* error_message = NULL;
+ const char query[] = "SELECT COUNT(*) FROM appsvc WHERE pkg_name = ?;";
+ sqlite3_stmt *stmt;
+ int idx = 1;
+ int count;
+ int r;
- if (__init(uid, false) < 0)
+ r = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (r != SQLITE_OK) {
+ _E("Prepare failed: %s", sqlite3_errmsg(db));
return -1;
+ }
- snprintf(query, QUERY_MAX_LEN, "delete from appsvc;");
+ __BIND_TEXT(db, stmt, idx++, appid);
- if (SQLITE_OK != sqlite3_exec(svc_db, query, NULL, NULL, &error_message)) {
- _E("Don't execute query = %s, error message = %s\n", query, error_message);
- return -1;
- }
+ r = sqlite3_step(stmt);
+ if (r == SQLITE_ROW)
+ count = sqlite3_column_int(stmt, 0);
+ else
+ count = 0;
- __fini();
+ sqlite3_finalize(stmt);
- return 0;
+ return count;
}
int _svc_db_is_defapp(const char *pkg_name, uid_t uid)
{
- char query[QUERY_MAX_LEN];
- sqlite3_stmt *stmt;
- int cnt = 0;
- int ret = -1;
+ int r;
if (pkg_name == NULL) {
_E("Invalid argument: data to delete is NULL\n");
if (__init(uid, true) < 0)
return 0;
- snprintf(query, QUERY_MAX_LEN,
- "select count(*) from appsvc where pkg_name = '%s';", pkg_name);
+ r = __get_count(svc_db, pkg_name);
+ __fini();
- ret = sqlite3_prepare(svc_db, query, sizeof(query), &stmt, NULL);
- if (ret != SQLITE_OK) {
- _E("prepare error, ret = %d, extended = %d\n", ret,
- sqlite3_extended_errcode(svc_db));
+ if (r < 1)
+ return 0;
+
+ return 1;
+}
+
+static int __get_appid(sqlite3 *db, const char *op, const char *mime_type,
+ const char *uri, char **appid)
+{
+ const char query[] =
+ "SELECT pkg_name FROM appsvc WHERE operation = ? "
+ "AND mime_type = ? AND uri = ?;";
+ sqlite3_stmt *stmt;
+ char *temp;
+ int idx = 1;
+ int r;
+
+ r = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (r != SQLITE_OK) {
+ _E("Prepare failed: %s", sqlite3_errmsg(db));
return -1;
}
- ret = sqlite3_step(stmt);
- if (ret == SQLITE_ROW)
- cnt = sqlite3_column_int(stmt, 0);
+ __BIND_TEXT(db, stmt, idx++, op);
+ __BIND_TEXT(db, stmt, idx++, mime_type ? mime_type : "NULL");
+ __BIND_TEXT(db, stmt, idx++, uri ? uri : "NULL");
- sqlite3_finalize(stmt);
+ r = sqlite3_step(stmt);
+ if (r != SQLITE_ROW) {
+ _E("Step failed: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ return -1;
+ }
- __fini();
+ temp = (char *)sqlite3_column_text(stmt, 0);
+ if (temp) {
+ *appid = strdup(temp);
+ if (*appid == NULL) {
+ _E("Out of memory");
+ sqlite3_finalize(stmt);
+ return -1;
+ }
+ }
- if (cnt < 1) return 0;
+ sqlite3_finalize(stmt);
- return 1;
+ return 0;
}
-char* _svc_db_get_app(const char *op, const char *mime_type, const char *uri,
+char *_svc_db_get_app(const char *op, const char *mime_type, const char *uri,
uid_t uid)
{
- char m[BUF_MAX_LEN];
- char u[URI_MAX_LEN];
- char query[QUERY_MAX_LEN];
- sqlite3_stmt* stmt;
- int ret;
- char* pkgname;
- char* ret_val = NULL;
+ char *appid = NULL;
+ int r;
if (op == NULL)
return NULL;
- if (mime_type == NULL)
- strncpy(m, "NULL", BUF_MAX_LEN - 1);
- else
- strncpy(m, mime_type, BUF_MAX_LEN - 1);
-
- if (uri == NULL)
- strncpy(u, "NULL", URI_MAX_LEN - 1);
- else
- strncpy(u, uri, URI_MAX_LEN - 1);
-
if (__init(uid, true) < 0)
return NULL;
-
- snprintf(query, QUERY_MAX_LEN,
- "select pkg_name from appsvc where operation='%s' and mime_type='%s' and uri='%s'",
- op, m, u);
-
- SECURE_LOGD("query : %s\n", query);
-
- ret = sqlite3_prepare(svc_db, query, strlen(query), &stmt, NULL);
- if (ret != SQLITE_OK) {
- _E("prepare error, ret = %d, extended = %d\n",
- ret, sqlite3_extended_errcode(svc_db));
- goto db_fini;
- }
-
- ret = sqlite3_step(stmt);
- if (ret != SQLITE_ROW) {
- _D("no result");
- goto stmt_finialize;
- }
-
- pkgname = (char*) sqlite3_column_text(stmt, 0);
- if (pkgname) {
- ret_val = malloc(BUF_MAX_LEN);
- if (ret_val == NULL) {
- _E("out of memory");
- goto stmt_finialize;
- }
-
- strncpy(ret_val, (const char *)sqlite3_column_text(stmt, 0), BUF_MAX_LEN - 1);
+ r = __get_appid(svc_db, op, mime_type, uri, &appid);
+ if (r != 0) {
+ __fini();
+ return NULL;
}
-
- SECURE_LOGD("pkgname : %s\n", pkgname);
-
-stmt_finialize:
- ret = sqlite3_finalize(stmt);
- if (ret != SQLITE_OK)
- _D("finalize error(%d)", ret);
-
-db_fini:
__fini();
+ SECURE_LOGD("appid: %s", appid);
- return ret_val;
+ return appid;
}
-static int __appid_compare(gconstpointer data1, gconstpointer data2)
+static int __compare_appid(gconstpointer a, gconstpointer b)
{
- char *a = (char *)data1;
- char *b = (char *)data2;
return strcmp(a, b);
}
-int _svc_db_adjust_list_with_submode(int mainapp_mode, char *win_id, GSList **pkg_list, uid_t uid)
+static int __adjust_list_with_submode(sqlite3 *db, int mainapp_mode,
+ const char *win_id, GSList **list)
{
- sqlite3_stmt* stmt;
- int ret;
- char query[QUERY_MAX_LEN];
- char *subappid = NULL;
- char *submode_mainid = NULL;
- char *excluded_appid = NULL;
- GSList *subapp = NULL;
- GSList *mainapp = NULL;
-
- if (__init_app_info_db(uid) < 0)
- return 0;
-
- snprintf(query, QUERY_MAX_LEN, "select ac.app_id, ai.app_submode_mainid from package_app_app_control as ac, package_app_info ai where ac.app_id = ai.app_id and ai.app_submode_mainid!=''");
- ret = sqlite3_prepare(app_info_db, query, sizeof(query), &stmt, NULL);
- if (ret != SQLITE_OK) {
- _E("prepare error, ret = %d, extended = %d\n", ret,
- sqlite3_extended_errcode(app_info_db));
+ const char query[] =
+ "SELECT ac.app_id, ai.app_submode_mainid "
+ "FROM package_app_app_control as ac, package_app_info ai "
+ "WHERE ac.app_id = ai.app_id AND ai.app_submode_mainid != '';";
+ sqlite3_stmt *stmt;
+ char *sub_appid;
+ char *submode_mainid;
+ char *excluded_appid;
+ GSList *found_subapp;
+ GSList *found_mainapp;
+ int r;
+
+ r = sqlite3_prepare_v2(app_info_db, query, strlen(query), &stmt, NULL);
+ if (r != SQLITE_OK) {
+ _E("Prepare failed: %s", sqlite3_errmsg(app_info_db));
return -1;
}
while (sqlite3_step(stmt) == SQLITE_ROW) {
- subappid = (char *)sqlite3_column_text(stmt, 0);
- submode_mainid = (char *)sqlite3_column_text(stmt, 1);
- subapp = g_slist_find_custom(*pkg_list, subappid, __appid_compare);
-
- if (subapp == NULL)
+ sub_appid = (char *)sqlite3_column_text(stmt, 0);
+ if (sub_appid == NULL)
continue;
- /* find if the main app is in the pkg_list */
- mainapp = g_slist_find_custom(*pkg_list, submode_mainid, __appid_compare);
- if (mainapp == NULL)
+ found_subapp = g_slist_find_custom(*list, sub_appid,
+ __compare_appid);
+ if (found_subapp == NULL)
continue;
- if (win_id && !mainapp_mode)
- /* subapp mode - remove mainapp from list */
- excluded_appid = (char *)mainapp->data;
- else
- /* mainapp mode - remove subapp from list */
- excluded_appid = (char *)subapp->data;
-
- if (excluded_appid) {
- _E("remove %s from app list with submode", excluded_appid);
- *pkg_list = g_slist_remove(*pkg_list, excluded_appid);
- free(excluded_appid);
- excluded_appid = NULL;
- }
- }
-
- sqlite3_finalize(stmt);
- ret = sqlite3_prepare(global_app_info_db, query, sizeof(query), &stmt, NULL);
- if (ret != SQLITE_OK) {
- _E("prepare error, ret = %d, extended = %d\n", ret,
- sqlite3_extended_errcode(app_info_db));
- return -1;
- }
-
- while (sqlite3_step(stmt) == SQLITE_ROW) {
- subappid = (char *)sqlite3_column_text(stmt, 0);
submode_mainid = (char *)sqlite3_column_text(stmt, 1);
- subapp = g_slist_find_custom(*pkg_list, subappid, __appid_compare);
-
- if (subapp == NULL)
+ if (submode_mainid == NULL)
continue;
- /* find if the main app is in the pkg_list */
- mainapp = g_slist_find_custom(*pkg_list, submode_mainid, __appid_compare);
- if (mainapp == NULL)
+ found_mainapp = g_slist_find_custom(*list, submode_mainid,
+ __compare_appid);
+ if (found_mainapp == NULL)
continue;
if (win_id && !mainapp_mode)
- /* subapp mode - remove mainapp from list */
- excluded_appid = (char *)mainapp->data;
+ excluded_appid = (char *)found_mainapp->data;
else
- /* mainapp mode - remove subapp from list */
- excluded_appid = (char *)subapp->data;
+ excluded_appid = (char *)found_subapp->data;
if (excluded_appid) {
- _E("remove %s from app list with submode", excluded_appid);
- *pkg_list = g_slist_remove(*pkg_list, excluded_appid);
+ _E("Remove %s from app list with submode",
+ excluded_appid);
+ *list = g_slist_remove(*list, excluded_appid);
free(excluded_appid);
- excluded_appid = NULL;
}
}
-
sqlite3_finalize(stmt);
+
return 0;
}
-int _svc_db_get_list_with_all_defapps(GSList **pkg_list, uid_t uid)
+int _svc_db_adjust_list_with_submode(int mainapp_mode, char *win_id,
+ GSList **pkg_list, uid_t uid)
{
- char query[QUERY_MAX_LEN];
- sqlite3_stmt* stmt;
- int ret;
- GSList *iter = NULL;
- char *str = NULL;
- char *pkgname = NULL;
- int found;
+ int r;
- if (__init(uid, true) < 0)
+ if (__init_app_info_db(uid) < 0)
+ return 0;
+
+ r = __adjust_list_with_submode(app_info_db, mainapp_mode, win_id,
+ pkg_list);
+ if (r < 0) {
+ __fini_app_info_db();
return -1;
+ }
- snprintf(query, QUERY_MAX_LEN, "select pkg_name from appsvc");
+ r = __adjust_list_with_submode(global_app_info_db, mainapp_mode, win_id,
+ pkg_list);
+ if (r < 0) {
+ __fini_app_info_db();
+ return -1;
+ }
+ __fini_app_info_db();
- ret = sqlite3_prepare(svc_db, query, sizeof(query), &stmt, NULL);
- if (ret != SQLITE_OK) {
- _E("prepare error, ret = %d, extended = %d\n",
- ret, sqlite3_extended_errcode(svc_db));
+ return 0;
+}
+
+static int __get_list_with_query(sqlite3 *db, const char *query, GSList **list)
+{
+ sqlite3_stmt *stmt;
+ GSList *found;
+ char *str;
+ char *appid;
+ int r;
+
+ r = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (r != SQLITE_OK) {
+ _E("Prepare failed: %s", sqlite3_errmsg(svc_db));
return -1;
}
while (sqlite3_step(stmt) == SQLITE_ROW) {
str = (char *)sqlite3_column_text(stmt, 0);
- found = 0;
- for (iter = *pkg_list; iter != NULL; iter = g_slist_next(iter)) {
- pkgname = (char *)iter->data;
- if (strncmp(str, pkgname, MAX_PACKAGE_STR_SIZE - 1) == 0) {
- found = 1;
+ if (str == NULL)
+ continue;
+
+ found = g_slist_find_custom(*list, str, __compare_appid);
+ if (found == NULL) {
+ appid = strdup(str);
+ if (appid == NULL) {
+ _E("Out of memory");
break;
}
- }
- if (found == 0) {
- pkgname = strdup(str);
- *pkg_list = g_slist_append(*pkg_list, (void *)pkgname);
- _D("[%s] is def app", pkgname);
+
+ *list = g_slist_append(*list, appid);
+ _D("%s is added", appid);
}
}
-
- ret = sqlite3_finalize(stmt);
+ sqlite3_finalize(stmt);
return 0;
}
-char *_svc_db_query_builder_add(char *old_query, char *op, char *uri, char *mime, bool collate)
+int _svc_db_get_list_with_all_defapps(GSList **pkg_list, uid_t uid)
+{
+ const char query[] = "SELECT pkg_name FROM appsvc;";
+ int r;
+
+ if (__init(uid, true) < 0)
+ return -1;
+
+ r = __get_list_with_query(svc_db, query, pkg_list);
+ __fini();
+
+ return r;
+}
+
+char *_svc_db_query_builder_add(char *old_query, char *op, char *uri,
+ char *mime, bool collate)
{
char *query;
char *q;
if (collate) {
if (old_query) {
query = sqlite3_mprintf("%s, '%q|%q|%q'",
- old_query, op, uri, mime);
+ old_query, op, uri, mime);
free(old_query);
} else {
query = sqlite3_mprintf("'%q|%q|%q'",
- op, uri, mime);
+ op, uri, mime);
}
} else {
if (old_query) {
query = sqlite3_mprintf("%s OR ac.app_control like '%%%q|%q|%q%%' ",
- old_query, op, uri, mime);
+ old_query, op, uri, mime);
free(old_query);
} else {
query = sqlite3_mprintf("ac.app_control like '%%%q|%q|%q%%' ",
- op, uri, mime);
+ op, uri, mime);
}
}
{
char query[QUERY_MAX_LEN];
- snprintf(query, QUERY_MAX_LEN, "(%s) or (%s)", q1, q2);
+ snprintf(query, sizeof(query), "(%s) or (%s)", q1, q2);
free(q1);
free(q2);
{
char query[QUERY_MAX_LEN];
- snprintf(query, QUERY_MAX_LEN, "%s in(%s)", field, args);
+ snprintf(query, sizeof(query), "%s in(%s)", field, args);
free(args);
return strdup(query);
if (old_query == NULL)
return NULL;
- snprintf(query, QUERY_MAX_LEN,
- "select ac.app_id from package_app_app_control as ac, package_app_info ai where ac.app_id = ai.app_id and ai.component_type='uiapp' and (%s)",
- old_query);
+ snprintf(query, sizeof(query),
+ "SELECT ac.app_id FROM package_app_app_control "
+ "as ac, package_app_info ai "
+ "WHERE ac.app_id = ai.app_id "
+ "AND ai.component_type='uiapp' AND (%s)",
+ old_query);
free(old_query);
int _svc_db_exec_query(const char *query, GSList **pkg_list, uid_t uid)
{
- sqlite3_stmt* stmt;
- int ret;
- GSList *iter = NULL;
- char *str = NULL;
- char *pkgname = NULL;
- int found;
+ int r;
if (__init_app_info_db(uid) < 0)
return 0;
SECURE_LOGD("query : %s\n", query);
- ret = sqlite3_prepare(app_info_db, query, strlen(query), &stmt, NULL);
- if (ret != SQLITE_OK) {
- _E("prepare error, ret = %d, extended = %d\n",
- ret, sqlite3_extended_errcode(app_info_db));
+ r = __get_list_with_query(app_info_db, query, pkg_list);
+ if (r < 0) {
+ __fini_app_info_db();
return -1;
}
- while (sqlite3_step(stmt) == SQLITE_ROW) {
- str = (char *)sqlite3_column_text(stmt, 0);
- found = 0;
- for (iter = *pkg_list; iter != NULL; iter = g_slist_next(iter)) {
- pkgname = (char *)iter->data;
- if (strncmp(str, pkgname, MAX_PACKAGE_STR_SIZE - 1) == 0) {
- found = 1;
- break;
- }
- }
- if (found == 0) {
- pkgname = strdup(str);
- *pkg_list = g_slist_append(*pkg_list, (void *)pkgname);
- _D("%s is added", pkgname);
- }
- }
-
- sqlite3_finalize(stmt);
- ret = sqlite3_prepare(global_app_info_db, query, strlen(query), &stmt, NULL);
- if (ret != SQLITE_OK) {
- _E("prepare error, ret = %d, extended = %d\n",
- ret, sqlite3_extended_errcode(global_app_info_db));
+ r = __get_list_with_query(global_app_info_db, query, pkg_list);
+ if (r < 0) {
+ __fini_app_info_db();
return -1;
}
-
- while (sqlite3_step(stmt) == SQLITE_ROW) {
- str = (char *)sqlite3_column_text(stmt, 0);
- found = 0;
- for (iter = *pkg_list; iter != NULL; iter = g_slist_next(iter)) {
- pkgname = (char *)iter->data;
- if (strncmp(str, pkgname, MAX_PACKAGE_STR_SIZE - 1) == 0) {
- found = 1;
- break;
- }
- }
- if (found == 0) {
- pkgname = strdup(str);
- *pkg_list = g_slist_append(*pkg_list, (void *)pkgname);
- _D("%s is added", pkgname);
- }
- }
-
- sqlite3_finalize(stmt);
+ __fini_app_info_db();
return 0;
}