return 0;
}
+static int __insert_preload_rw_table(GHashTable *preload_rw_table,
+ const char *pkgid)
+{
+ char *package = strdup(pkgid);
+ retvm_if(package == NULL, -1, "strdup failed\n");
+ g_hash_table_insert(preload_rw_table, package, NULL);
+ return 0;
+}
+
static int __pkgid_list_cb(const pkgmgrinfo_pkginfo_h handle, void *user_data)
{
int ret = -1;
return ret;
}
+static int __preload_rw_pkgid_list_cb(const pkgmgrinfo_pkginfo_h handle,
+ void *user_data)
+{
+ int ret;
+ char *pkgid;
+ GHashTable *preload_rw_table = (GHashTable *)user_data;
+
+ ret = pkgmgrinfo_pkginfo_get_pkgid(handle, &pkgid);
+ retvm_if(ret < 0, -1, "pkgmgrinfo_pkginfo_get_pkgid failed");
+
+ ret = __insert_preload_rw_table(preload_rw_table, pkgid);
+ retvm_if(ret < 0, -1, "__insert_preload_rw_table fail\n");
+ return 0;
+}
+
static void __str_trim(char *input)
{
char *trim_str = input;
return ret;
}
+static int __find_preload_rw_pkgid_from_db(GHashTable *preload_rw_table)
+{
+ int ret;
+ pkgmgrinfo_pkginfo_filter_h handle;
+
+ ret = pkgmgrinfo_pkginfo_filter_create(&handle);
+ retvm_if(ret != PMINFO_R_OK, -1,
+ "pkginfo filter handle create failed\n");
+
+ ret = pkgmgrinfo_pkginfo_filter_add_bool(handle,
+ PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD, 1);
+ tryvm_if(ret != PMINFO_R_OK, ret = -1, "pkgmgrinfo_pkginfo_filter_add_bool"
+ "(PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD) failed\n");
+
+ ret = pkgmgrinfo_pkginfo_filter_add_bool(handle,
+ PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE, 1);
+ tryvm_if(ret != PMINFO_R_OK, ret = -1, "pkgmgrinfo_pkginfo_filter_add_bool"
+ "(PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE) failed\n");
+
+ ret = pkgmgrinfo_pkginfo_filter_add_bool(handle,
+ PMINFO_PKGINFO_PROP_PACKAGE_READONLY, 0);
+ tryvm_if(ret != PMINFO_R_OK, ret = -1, "pkgmgrinfo_pkginfo_filter_add_bool"
+ "(PMINFO_PKGINFO_PROP_PACKAGE_READONLY) failed\n");
+
+ ret = pkgmgrinfo_pkginfo_filter_add_bool(handle,
+ PMINFO_PKGINFO_PROP_PACKAGE_SYSTEM, 0);
+ tryvm_if(ret != PMINFO_R_OK, ret = -1, "pkgmgrinfo_pkginfo_filter_add_bool"
+ "(PMINFO_PKGINFO_PROP_PACKAGE_SYSTEM) failed\n");
+
+ ret = pkgmgrinfo_pkginfo_filter_foreach_pkginfo(handle,
+ __preload_rw_pkgid_list_cb, (void *)preload_rw_table);
+ err_if(ret != PMINFO_R_OK,
+ "pkgmgrinfo_pkginfo_filter_foreach_pkginfo() failed\n");
+
+ ret = 0;
+catch:
+ pkgmgrinfo_pkginfo_filter_destroy(handle);
+ return ret;
+}
+
static int __find_matched_pkgid_from_list(const char *source_file,
const char *target_file)
{
return ret;
}
-static int __insert_preload_rw_table(GHashTable *preload_rw_table,
- const char *pkgid)
-{
- g_hash_table_insert(preload_rw_table, strdup(pkgid), NULL);
- return 0;
-}
-
static int __install_preload_rw(const char *pkgid, const char *pkgtype,
GHashTable *preload_rw_table)
{
preload_rw_table = g_hash_table_new_full(
g_str_hash, g_str_equal, free, NULL);
- ret = __fill_preload_rw_table(preload_rw_table);
- retvm_if(ret < 0, -1, "__fill_preload_rw_table is failed.\n");
+ if (__fill_preload_rw_table(preload_rw_table) < 0) {
+ ret = __find_preload_rw_pkgid_from_db(preload_rw_table);
+ retvm_if(ret < 0, -1, "__find_preload_rw_pkgid_from_db is failed\n");
+ }
if (argc == 1) {
ret = __process_ro_fota(preload_rw_table);