Name: libtota
Summary: fota update library
-Version: 1.2.4
+Version: 1.2.5
Release: 0
Group: System
License: Apache-2.0 and BSD-2-Clause and BSD-3-Clause and PD
#define DP_HEADER_SIZE 36
#define DP_START_OFFSET 0
#define BACKUPBUFFER_NUM 4
+#define SIZE_4GB (0Xffffffff)
/*******[ Multiprocess API sample implementation ]******/
#define _NOEXEC_
return -1;
}
- *available_flash_size = vfs.f_bsize * vfs.f_bavail;
+ *available_flash_size = ((long long)vfs.f_bsize * (long long)vfs.f_bavail >= (long long)SIZE_4GB) ? SIZE_4GB : vfs.f_bsize * vfs.f_bavail;
if (*available_flash_size == 0) {
*available_flash_size = 0x80000; //Same as Legecy RB
LOGE("available_flash_size=%u(vfs.f_bsize=%d vfs.f_bavail=%d\n",
return E_SS_FAILURE;
}
if (SS_LoadFile(source_filename, &source_file) == 0) {
+ SS_Free(source_file.data);
+
if (memcmp(source_file.sha1, source_sha1, SHA_DIGEST_SIZE) == 0) {
LOGL(LOG_SSENGINE, "Patch Can be applied\n");
- if (source_file.data)
- SS_Free(source_file.data);
} else if (memcmp(source_file.sha1, target_sha1, SHA_DIGEST_SIZE) == 0) {
LOGL(LOG_SSENGINE, "Patch Already applied\n");
- if (source_file.data)
- SS_Free(source_file.data);
return S_SS_SUCCESS;
} else {
//Check for backup file SHA
- SS_Free(source_file.data);
- source_file.data = NULL;
LOGL(LOG_SSENGINE, "Source was currupted, Try loading from backup source\n");
if (SS_LoadFile(target_filename, &target_file) == 0) {
- if (target_file.data)
- SS_Free(target_file.data);
+ SS_Free(target_file.data);
if (memcmp(target_file.sha1, target_sha1, SHA_DIGEST_SIZE) == 0) {
LOGL(LOG_SSENGINE, "Patch Already applied\n");
}
if (SS_LoadFile(SS_BACKUP_SOURCE, &source_file) == 0) {
+ SS_Free(source_file.data);
+
if (memcmp(source_file.sha1, source_sha1, SHA_DIGEST_SIZE) == 0) {
if (SS_CopyFile(SS_BACKUP_SOURCE, source_filename) != S_SS_SUCCESS) {
strerror_r(errno, buf, sizeof(buf));
LOGE("copy of backup to \"%s\" failed: %s\n", source_filename, buf);
SS_SetUpgradeState(E_SS_FSUPDATEFAILED);
- if (source_file.data)
- SS_Free(source_file.data);
return E_SS_FAILURE;
}
LOGL(LOG_SSENGINE,
"Patch Can be applied from using backup file as source\n");
} else {
SS_SetUpgradeState(E_SS_FSSRCCURRUPTED);
- if (source_file.data)
- SS_Free(source_file.data);
return E_SS_FAILURE;
}
} else {
SS_SetUpgradeState(E_SS_FSSRCCURRUPTED);
- if (source_file.data)
- SS_Free(source_file.data);
return E_SS_FAILURE;
}
}
} else {
LOGL(LOG_SSENGINE, "Source was deleted!!\n");
if (SS_LoadFile(target_filename, &target_file) == 0) {
- if (target_file.data)
- SS_Free(target_file.data);
+ SS_Free(target_file.data);
if (memcmp(target_file.sha1, target_sha1, SHA_DIGEST_SIZE) == 0) {
LOGL(LOG_SSENGINE, "Patch Already applied\n");
LOGL(LOG_SSENGINE, "Try loading from backup source\n");
if (SS_LoadFile(SS_BACKUP_SOURCE, &source_file) == 0) {
+ SS_Free(source_file.data);
+
if (memcmp(source_file.sha1, source_sha1, SHA_DIGEST_SIZE) == 0) {
use_backup = 1;
LOGL(LOG_SSENGINE, "Patch Can be applied from using backup file as source\n");
- if (source_file.data)
- SS_Free(source_file.data);
} else {
SS_SetUpgradeState(E_SS_FSSRCCURRUPTED);
- if (source_file.data)
- SS_Free(source_file.data);
return E_SS_FAILURE;
}
} else {
LOGE(" SS_LoadFile from backup source failed!!\n");
SS_SetUpgradeState(E_SS_FSSRCCURRUPTED);
- if (source_file.data)
- SS_Free(source_file.data);
return E_SS_FAILURE;
}
}
if (SS_LoadFile(path, &source_file) == 0) {
if (memcmp(source_file.sha1, source_sha1, SHA_DIGEST_SIZE) != 0) {
SS_Free(source_file.data);
- LOGE("SS_FSVerifyNode - SHA mismatch with SRC - PATH [%s]\n", path);
+ LOGE("SS_FSVerifyNode - SHA mismatch with SRC - PATH [%s] Expected [%x] Actual [%x]\n",
+ path, source_sha1, source_file.sha1);
SS_SetUpgradeState(E_SS_FSSRCCURRUPTED); // Define other error
return E_SS_FAILURE;
}
ua_dataSS->update_delta->ua_patch_path);
if (retval == E_SS_FAILURE) // ONLY test purpose, should enable this
goto CleanUp;
+ if (ua_dataSS->ua_operation == UI_OP_SCOUT) {
SS_UpdateUIProgress(ua_dataSS, ulPatchCount, 0);
+ }
} else if (change_type && strcmp(change_type, SS_STRING_DIFF) == 0) { // && strcmp(file_type,"TPK") == 0){
source_name = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
target_name = strtok_r(NULL, SS_TOEKN_COLON, &saveptr);
LOGE("File Name length Limitation Error File:[%s]\n", patch_name);
goto CleanUp;
}
+ if (ua_dataSS->ua_operation == UI_OP_SCOUT) {
SS_UpdateUIProgress(ua_dataSS, ulPatchCount, 0);
+ }
} else {
SS_SetUpgradeState(E_SS_FSFAILEDTOPARSEDELTAINFO);
LOGE("Patch Name format Error File\n");
ua_dataSS->update_delta->ua_patch_path);
if (retval == E_SS_FAILURE) // ONLY test purpose, should enable this
goto CleanUp;
+ if (ua_dataSS->ua_operation == UI_OP_SCOUT) {
SS_UpdateUIProgress(ua_dataSS, ulPatchCount, 0);
+ }
}
} //For symlink files
ua_dataSS->update_delta->ua_patch_path);
if (retval == E_SS_FAILURE) // ONLY test purpose, should enable this
goto CleanUp;
+ if (ua_dataSS->ua_operation == UI_OP_SCOUT) {
SS_UpdateUIProgress(ua_dataSS, ulPatchCount, 0);
+ }
}
}
}
ua_dataSS->update_delta->ua_patch_path);
if (retval == E_SS_FAILURE) // ONLY test purpose, should enable this
goto CleanUp;
+ if (ua_dataSS->ua_operation == UI_OP_SCOUT) {
SS_UpdateUIProgress(ua_dataSS, ulPatchCount, 0);
+ }
}
}
}
fs_head_node->sym_newref = fs_symlinknewhead;
fs_head_node->ulPatchCount = ulPatchCount;
+ if (ua_dataSS->ua_operation == UI_OP_SCOUT) {
SS_UpdateUIProgress(ua_dataSS, ulPatchCount, 1);
+ }
CleanUp:
fclose(fp);
while (NULL != (ent = getmntent(aFile))) {
if (strcmp(ent->mnt_fsname, block_name) == 0) {
if (statfs(ent->mnt_dir, &sb) == 0)
- LOGL(LOG_SSENGINE, "Total free space = %d, blocks free = %d\n", sb.f_bsize * sb.f_bavail, sb.f_bfree);
+ LOGL(LOG_SSENGINE, "Total free space = %ld, blocks free = %ld\n", sb.f_bsize * sb.f_bavail, sb.f_bfree);
}
}
endmntent(aFile);
- return sb.f_bsize * sb.f_bavail;
+ return ((long long)sb.f_bsize * (long long)sb.f_bavail >= (long long)SIZE_4GB) ? SIZE_4GB : sb.f_bsize * sb.f_bavail ;
}
int SS_FSVerifyPartition(ua_dataSS_t * ua_dataSS, int part_idx)
LOGL(LOG_SSENGINE, "SS_IMGVerfiyPartition - SHA matches with source [%s] \n",
ua_dataSS->parti_info->ua_blk_name);
} else { // Need not compare with Target sha as once upgraded, it should NOT verify same partition again.
+ LOGE("SS_IMGVerfiyPartition - SHA mismatch with SRC [%s] Expected [%x] Actual [%x]\n",
+ ua_dataSS->parti_info->ua_blk_name, source_sha1, source_file.sha1);
SS_SetUpgradeState(E_SS_IMGSRCCURRUPTED);
ulResult = E_SS_FAILURE;
}
};
#endif
-#define MAX_ITEM_SIZE 0x0FFFFFFF
+#define MAX_ITEM_SIZE 0x7FFFFFFF
#define TAR_ITEM_SIZE_POSITION 124
#define TAR_SIZE_OF_ITEM_SIZE 8
#define TAR_SIZE_OF_HEADER 12
char header[TAR_BLOCK_SIZE] = { 0, };
char name[TAR_ITEM_NAME_SIZE + 1] = { 0, };
char size_oct[TAR_SIZE_OF_HEADER] = { 0, };
- int size_dec = 0;
+ unsigned long size_dec = 0;
int blknum = 0;
off_t pos = 0;
off_t tar_len = 0;