Remove directories of preload-rw package removed by user 99/237399/5
authorSangyoon Jang <jeremy.jang@samsung.com>
Tue, 30 Jun 2020 05:11:50 +0000 (14:11 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Tue, 14 Jul 2020 07:49:01 +0000 (16:49 +0900)
In some cases, there may be directories by upgrade module.

Change-Id: I63f867c8bdd3a7f756f83a37b52581364edad4c6
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/pkg_upgrade/pkg_upgrade.c

index 1b859d110272a2a92dca6ecaf9a40a655093a976..0b0277dc9fdbb53bead2b7218bdee5799ee39e03 100644 (file)
@@ -43,6 +43,9 @@
 #include <tzplatform_config.h>
 
 #define USR_MANIFEST_DIRECTORY tzplatform_getenv(TZ_SYS_RO_PACKAGES)
+#define OPT_USR_MANIFEST_DIRECTORY     tzplatform_getenv(TZ_SYS_RW_PACKAGES)
+#define RW_PKG_DIRECTORY       tzplatform_getenv(TZ_SYS_RW_APP)
+#define SKEL_DIRECTORY tzplatform_mkpath(TZ_SYS_ETC, "skel/apps_rw")
 
 #define PKGMGR_FOTA_PATH       tzplatform_mkpath(TZ_SYS_GLOBALUSER_DATA, \
        "pkgmgr/fota")
@@ -1294,6 +1297,31 @@ static int __process_ro_fota(GHashTable *preload_rw_table)
        return 0;
 }
 
+static void __remove_pkg_directories(const char *pkgid)
+{
+       int i;
+       int ret;
+       char buf[BUF_SIZE];
+       const char *base_dirs[] = {
+               OPT_USR_MANIFEST_DIRECTORY,
+               RW_PKG_DIRECTORY,
+               SKEL_DIRECTORY,
+               NULL
+       };
+
+       for (i = 0; base_dirs[i] != NULL; i++) {
+               ret = snprintf(buf, sizeof(buf), "%s/%s", base_dirs[i], pkgid);
+               if (ret < 0 || ret > sizeof(buf)) {
+                       printf("snprintf fail\n");
+                       continue;
+               }
+               if (!access(buf, F_OK)) {
+                       if (remove_directory(buf))
+                               _LOGE("failed to remove directory: %s", buf);
+               }
+       }
+}
+
 static int __process_rw_fota(GHashTable *preload_rw_table)
 {
        FILE *fp = NULL;
@@ -1368,6 +1396,10 @@ static int __process_rw_fota(GHashTable *preload_rw_table)
                                _LOG("pkgid[%s] is deleted pkg\n", pkgid);
                                __delete_preload_rw_table(preload_rw_table,
                                                pkgid);
+                               /* maybe there are pkg directories which are
+                                * extracted from opt.zip by FOTA
+                                */
+                               __remove_pkg_directories(pkgid);
                                FREE_AND_NULL(pkgid);
                                continue;
                        }