From a951dbd0419e3cc045ede249050195e63bd91190 Mon Sep 17 00:00:00 2001 From: Karol Lewandowski Date: Tue, 22 Feb 2022 15:39:02 +0100 Subject: [PATCH] fota_tar: Improve a bit gTarFd handling gTarFd is global fd for tar file, as managed by tar_open() & tar_close(). This commit fixes case when returned fd equals 0 (ie. program working with closed stdin) and avoids depending on local, overwritten vars for cleanup functions, ie: if (gTarFd > 0) fd = gTarFd if (gTarFd < 0) fd = open(..) ... cleanup: if (fd > 0) close(fd) // what fd it closes? gTarFd? locally opened one? Change-Id: I83b227709ad5a97d0b0e3062f3f060cd052d98b4 --- ss_engine/fota_tar.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/ss_engine/fota_tar.c b/ss_engine/fota_tar.c index f37ef1e..af32bb2 100755 --- a/ss_engine/fota_tar.c +++ b/ss_engine/fota_tar.c @@ -208,9 +208,9 @@ int tar_get_item_offset(char *tar, char *item) return -1; }; //check if gTarFd was opened by tar_open during SS_FSUpdateFile then use it - if (gTarFd > 0) + if (gTarFd >= 0) fd = gTarFd; - if (fd < 0) { + else { fd = open(tar, O_RDONLY); if (fd < 0) { LOGE("can't open file(%s).\n", tar); @@ -562,15 +562,16 @@ tar_Data_t *tar_build_cfg_table(char *tar) return NULL; } //check if gTarFd was opened by tar_open during SS_FSUpdateFile then use it - if (gTarFd > 0) + if (gTarFd >= 0) fd = gTarFd; - if (fd < 0) { + else { fd = open(tar, O_RDONLY); if (fd < 0) { LOG("can't open file(%s).\n", tar); return NULL; } } + tar_len = lseek(fd, 0, SEEK_END); if (tar_len < 0) { LOGL(LOG_SSENGINE, "can't read tar_len (%s).\n", tar); @@ -761,7 +762,7 @@ tar_Data_t *tar_cfg_clear_nodes(tar_Data_t * head) int tar_open(char *tar) { - if (gTarFd) + if (gTarFd >= 0) close(gTarFd); gTarFd = open(tar, O_RDONLY); if (gTarFd < 0) { @@ -773,7 +774,7 @@ int tar_open(char *tar) int tar_close() { - if (gTarFd) + if (gTarFd >= 0) close(gTarFd); gTarFd = -1; return 0; @@ -1071,15 +1072,16 @@ int fast_tar_extract_file(char *tar, char *item, char *pathname, int size, int o LOG("Invalid params\n"); return -1; } - if (gTarFd > 0) + if (gTarFd >= 0) fd = gTarFd; - if (fd < 0) { + else { fd = open(tar, O_RDONLY); if (fd < 0) { LOG("can't open file(%s).\n", tar); return -1; } } + pos = lseek(fd, data_offset, SEEK_SET); if (pos < 0) { LOG("lseek fail (%s offset %d).\n", tar, data_offset); -- 2.7.4