upgrade-apply-deltafs: Change path handling to work with relative pathnames and remov... 95/280995/5
authorAntoni Adaszkiewicz <a.adaszkiewi@samsung.com>
Tue, 6 Sep 2022 14:26:35 +0000 (16:26 +0200)
committerAntoni Adaszkiewicz <a.adaszkiewi@samsung.com>
Mon, 7 Nov 2022 10:02:48 +0000 (11:02 +0100)
to mount upgraded partition on /run/upgrade-sysroot

Change-Id: Ifdb6c8a4d336fc7375f2a47409abd43d60be9997

src/upgrade-apply-deltafs/engine/SS_UPI.c
src/upgrade-apply-deltafs/engine/fota_common.h
src/upgrade-apply-deltafs/ua.c

index 4e013fe..87cccc0 100755 (executable)
@@ -736,7 +736,8 @@ HARD:NEW:system/lib/firmware/vbc_eq:/opt/system/vbc_eq
                snprintf(new_patch_path, MAX_FILE_PATH, "%s%s", ua_dataSS->parti_info->ua_subject_name, SS_COMPRESSED_FILE);
                if (tar_get_item_size(ua_dataSS->update_data->ua_delta_path, new_patch_path) <= 0) {
                        SS_SetUpgradeState(E_SS_FSFAILEDTOPARSEDELTAINFO);
-                       LOGE("New files not present in Patch\n");
+                       LOGE("New files not present in Patch and they should be\n");
+                       retval = E_SS_FAILURE;
                        goto CleanUp;
                }
        }
@@ -1334,15 +1335,15 @@ int SS_FSUpdateFile(int ubFileType, ua_dataSS_t * ua_dataSS, int ulPatchCount, f
                {
                        LOGL(LOG_SSENGINE, "NEWFILES mode start\n");
                        LOGL(LOG_SSENGINE, "Starting New file upgrade for   [%s]\n", patch_path);
-                       if (tar_extract_file(ua_dataSS->update_data->ua_delta_path, (char *)patch_path, new_compressed_path) >=
-                               0)
+                       if (tar_extract_file(ua_dataSS->update_data->ua_delta_path, (char *)patch_path, new_compressed_path) >= 0) {
                                if (_7zdecompress(new_compressed_path) == 0)
                                        LOGL(LOG_SSENGINE, "7zip extracted  successfully %s\n", ua_dataSS->parti_info->ua_parti_name);
                                else
                                        LOGL(LOG_SSENGINE, "7zip extraction error for %s\n", ua_dataSS->parti_info->ua_parti_name);
-                       else
-                               LOGL(LOG_SSENGINE, "tar extraction error for %s\n", ua_dataSS->parti_info->ua_parti_name);
-                       SS_DeleteFile(new_compressed_path);
+                               SS_DeleteFile(new_compressed_path);
+                       } else {
+                               LOGL(LOG_SSENGINE, "No %s in %s, becouse there are no new files\n", SS_COMPRESSED_FILE, ua_dataSS->parti_info->ua_parti_name);
+                       }
                        LOGL(LOG_SSENGINE, "NEWFILES mode end\n");
                }
                break;
@@ -1569,7 +1570,7 @@ int SS_FSUpdatemain(ua_dataSS_t * ua_dataSS)
         if (ulResult == S_SS_SUCCESS) {
                 //new file extraction start
                snprintf(new_patch_path, SS_MAX_FILE_PATH, "%s%s", ua_dataSS->parti_info->ua_subject_name, SS_COMPRESSED_FILE);  // subject name wil have fw slash as part of cfg file
-               LOGL(LOG_SSENGINE, "File path created to extract new files : [%s]\n", new_patch_path);
+               LOGL(LOG_SSENGINE, "File path to extract new files : [%s]\n", new_patch_path);
                ulResult =
                        SS_FSUpdateFile(NEWFILES, ua_dataSS, head_ptr_node->ulPatchCount, head_ptr_node->new_ref, new_patch_path);
                //new file extraction end
index e93e28e..cc3869f 100755 (executable)
@@ -38,10 +38,10 @@ typedef u32 size_t;
 #define SECTOR_SIZE                    512F
 #define SS_KERNEL_DELTA_HEADER         128
 
-#define SS_BACKUP_SOURCE                "/saved.file"       //How to make sure there is SPACE
-#define SS_PATCHFILE_SOURCE             "/patchfile.file"   //define in common place
-#define SS_PATCHLIST_BKUPLOC            "/patchlist.txt"
-#define SS_NEW_COMPRESSED_FILE          "/system.7z"
+#define SS_BACKUP_SOURCE                "saved.file"       //How to make sure there is SPACE
+#define SS_PATCHFILE_SOURCE             "patchfile.file"   //define in common place
+#define SS_PATCHLIST_BKUPLOC            "patchlist.txt"
+#define SS_NEW_COMPRESSED_FILE          "system.7z"
 
 #define SS_PATCHLISTFORMAT             ".txt"
 #define SS_PATCH_ATTR_FORMAT           "_attr.txt"
index 0f62be2..6f49a43 100755 (executable)
@@ -60,6 +60,7 @@ static char log_folder[MAX_FOLDER_PATH];
 static char result_folder[MAX_FOLDER_PATH];
 static char temp_folder[MAX_FOLDER_PATH];
 static char log_path[MAX_FILE_PATH];
+static char mnt_point[MAX_FILE_PATH];
 
 static ua_part_info_t s_part_info;
 
@@ -93,10 +94,10 @@ void print_usage(const char *msg)
        if (msg) {
                printf("%s\n", msg);
        }
-       printf("print_usage: upgrade-apply-deltafs --archive delta_dir --dest label --archive-file label.img\n"
+       printf("print_usage: upgrade-apply-deltafs --archive delta_dir --dest directory --archive-file label.img\n"
        "delta_dir: directory path where delta.tar file is located\n"
-       "label: label of the partition to be updated\n"
-       "label.img: name of the file inside of delta that is to be used during upgrade\n"
+       "directory: directory where partition to be upgraded is mounted\n"
+       "label.img: name of the directory inside of delta that is to be used during upgrade\n"
        );
 }
 
@@ -347,6 +348,12 @@ int update_all()
        int ret = OK;
        int cause = 0, item_size = 0;
        unsigned long ui32Operation = UI_OP_SCOUT;
+       char * org_dir = getcwd(NULL, 0);
+
+       if ((ret = chdir(mnt_point)) < 0) {
+               cause = ret;
+               goto CleanUp;
+       }
 
        item_size = tar_get_item_size(s_update_data.ua_delta_path, s_part_info.ua_subject_name);
        if (item_size > 0)
@@ -412,12 +419,18 @@ int update_all()
                }
        }
 
+       if ((ret = chdir(org_dir)) < 0) {
+               cause = ret;
+               goto CleanUp;
+       }
+
        get_time_stamp();
        LOG("[%s] Update End ..............................................................\n", ts);
 
  CleanUp:
        if (ret != OK)
                save_cause(cause);
+               free(org_dir);
 
        return ret;
 }
@@ -734,6 +747,8 @@ int main(int argc, char **argv)
 {
        char ver_str[MAX_PATH];
        int ret = FAIL;
+       char *dot_pos;
+       int len;
        temp_opt my_opt;
        log_init();
        if(arg_parse(argc, argv, &my_opt) < 0) {
@@ -749,6 +764,7 @@ int main(int argc, char **argv)
        snprintf(delta_path, sizeof(delta_path)-1, "%s/%s", delta_folder, DEFAULT_DELTA_NAME);
        s_update_data.ua_delta_folder = strdup(delta_folder);
 
+       snprintf(mnt_point, sizeof(mnt_point)-1, "%s", my_opt.dest);
        snprintf(temp_folder, sizeof(temp_folder)-1, "%s", TEMP_FOLDER);
        snprintf(log_folder, sizeof(log_folder)-1, "%s", SYSTEM_LOG_DIR);
        snprintf(fota_result, sizeof(fota_result), "%s/%s", result_folder, "result");
@@ -760,7 +776,12 @@ int main(int argc, char **argv)
                goto Results;
        }
 
-       s_part_info.ua_parti_name = my_opt.dest;
+       dot_pos = strchr(my_opt.archive_file, '.');
+       len = (dot_pos - my_opt.archive_file);
+       s_part_info.ua_parti_name = (char*)malloc(sizeof(char) * (len + 1));
+       strncpy(s_part_info.ua_parti_name, my_opt.archive_file, len);
+       s_part_info.ua_parti_name[len] = '\0';
+
        s_part_info.ua_subject_name = my_opt.archive_file;
        s_update_cfg.source_img_size = 0; // TODO lets see if 0 will work