[Feature][T8TSK-242]backup for old fota/delta

Only Configure: No
Affected branch: GSW3.0-Temp-PU
Affected module: fota
Is it addected on both ZXIC and MTK: only MTK
Self-test: Yes
Doc Update: No

Change-Id: Ia61d72ae4f504b375c8def30400a1208dd8c040e
diff --git a/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c b/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
index 0d155dd..d562ae7 100755
--- a/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
+++ b/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
@@ -629,6 +629,23 @@
     return result;
 }
 
+int check_partition()
+{
+    int ret;
+    ret = system("cat /proc/mtd|grep bl2_b");
+    if(ret == 0)
+    {
+        RLOGD("the partition is new\n");
+    }
+    else
+    {
+        RLOGD("the partition is old\n");
+    }
+    return ret;
+
+}
+
+
 int lynq_backup_main(void)
 {
 
@@ -1034,17 +1051,48 @@
 	}
 	if(backup_flag == 1)
     {
-        ret = lynq_backup_main();
-        if(ret != 0)
+        ret = check_partition();
+        if(ret == 0)
         {
-            RLOGD("lynq_backup_main fail\n");
+            RLOGD("the fota pachage is old, partition is new, no do lynq_backup_main\n");
+            up_info.fota_flag[0] = 'e';
+            up_info.fota_flag[1] = 'n';
+            up_info.fota_flag[2] = 'd';
+            up_info.update_result = status;
+            up_info.ota_run = 0;
+            lseek(fd_update_status,0,SEEK_SET);
+            write(fd_update_status, &up_info,sizeof(up_info));
+            sync();
+            close_dev_fd(fd_delta);
+            close(fd_update_status);
+
+            return -1;
         }
         else
         {
-            system("bash /oemapp2/update-partitions.sh");
+            ret = lynq_backup_main();
+            if(ret != 0)
+            {
+                RLOGD("lynq_backup_main fail\n");
+            }
+            else
+            {
+                ret = system("bash /oemapp2/update-partitions.sh");
+                RLOGD("update-partitions.sh ret=%d\n", ret);
+                up_info.fota_flag[0] = 'e';
+                up_info.fota_flag[1] = 'n';
+                up_info.fota_flag[2] = 'd';
+                up_info.update_result = status;
+                up_info.ota_run = 0;
+                lseek(fd_update_status,0,SEEK_SET);
+                write(fd_update_status, &up_info,sizeof(up_info));
+                sync();
+                close_dev_fd(fd_delta);
+                close(fd_update_status);
+                RLOGD("close file and reset fota_flag\n");
+                return 0;
+            }
         }
-        return 0;
-
     }