undefined4 FUN_00407330(char *param_1)
{
int iVar1;
FILE *__stream;
size_t sVar2;
size_t sVar3;
FILE *__s;
int iVar4;
uint uVar5;
undefined4 uVar6;
uint uVar7;
char *__s2;
char *pcVar8;
int iVar9;
fpos_t fStack_460;
timeval local_454;
undefined1 auStack_44c [6];
ushort local_446;
uint local_444;
char acStack_440 [4];
char acStack_43c [1020];
int local_40;
fpos_t *local_3c;
undefined1 *local_38;
timeval *local_34;
timeval *local_30;
iVar1 = sobj_new();
if (iVar1 == 0) {
printf("%s: sobj_new() error!\n","fwupdate");
return 1;
}
__stream = fopen(param_1,"r+") //possible issue identified - semgrep
if (__stream == (FILE *)0x0) {
pcVar8 = "%s: fopen err!\n";
LAB_00407524:
printf(pcVar8,"fwupdate");
uVar6 = 1;
}
else {
local_3c = &fStack_460;
local_38 = auStack_44c;
local_34 = (timeval *)&fStack_460.__state;
local_30 = &local_454;
pcVar8 = (char *)0x0;
local_40 = 0;
iVar9 = 0;
while (iVar4 = feof(__stream), iVar4 == 0) {
iVar4 = ferror(__stream);
uVar6 = 0;
if (iVar4 != 0) goto LAB_004078e4;
fgetpos(__stream,local_3c);
sVar2 = fread(local_38,0xc,1,__stream) //possible issue identified - semgrep
if (sVar2 != 1) {
pcVar8 = "%s: unable to read SEAMA header!\n";
goto LAB_00407524;
}
uVar7 = (local_446 & 0xff) << 8 | (uint)(local_446 >> 8);
if (0x400 < uVar7) {
pcVar8 = "%s: meta too large!\n";
goto LAB_00407524;
}
uVar5 = local_444 << 0x18 | local_444 >> 0x18 | (local_444 & 0xff0000) >> 8 |
(local_444 & 0xff00) << 8;
if ((uVar5 != 0) && (sVar2 = fread(acStack_440,1,0x10,__stream), sVar2 != 0x10)) { //possible issue identified - semgrep
pcVar8 = "%s: checksum err!\n";
goto LAB_00407524;
}
iVar4 = 0x1c;
if (uVar7 != 0) {
sVar2 = fread(acStack_440,1,uVar7,__stream) //possible issue identified - semgrep
if (sVar2 != uVar7) {
pcVar8 = "%s: SEAMA meta error!\n";
goto LAB_00407524;
}
iVar9 = sobj_get_length(iVar1);
pcVar8 = (char *)0x0;
if (iVar9 != 0) {
pcVar8 = (char *)sobj_get_string(iVar1);
}
uVar7 = 0;
iVar9 = local_40;
do {
__s2 = acStack_440 + uVar7;
iVar4 = strncasecmp("dev=",__s2,4);
if (iVar4 == 0) {
if (uVar5 == 0) {
sobj_add_string(iVar1,acStack_440 + uVar7 + 4);
}
else {
pcVar8 = acStack_440 + uVar7 + 4;
}
}
else {
iVar4 = strcasecmp("noheader=1",__s2);
if (iVar4 == 0) {
if (uVar5 == 0) {
local_40 = local_40 + 1;
}
else {
iVar9 = iVar9 + 1;
}
}
}
sVar3 = strlen(__s2);
uVar7 = uVar7 + sVar3 + 1;
iVar4 = sVar2 + 0x1c //possible issue identified - semgrep
} while (uVar7 < sVar2);
}
if (uVar5 != 0) {
if (pcVar8 == (char *)0x0) goto LAB_00407674;
if (iVar9 == 0) {
uVar5 = uVar5 + iVar4;
fsetpos(__stream,local_3c);
}
printf("FWUPDATER: about to write %ld bytes data to %s\n",uVar5,pcVar8);
gettimeofday(local_34,(__timezone_ptr_t)0x0);
__s = fopen(pcVar8,"w+") //possible issue identified - semgrep
while ((uVar5 != 0 && (iVar4 = feof(__stream), iVar4 == 0))) {
iVar4 = ferror(__stream);
if (iVar4 != 0) break;
uVar7 = uVar5;
if (0x400 < uVar5) {
uVar7 = 0x400;
}
sVar2 = fread(acStack_440,1,uVar7,__stream) //possible issue identified - semgrep
uVar5 = uVar5 - sVar2;
if (__s != (FILE *)0x0) {
fwrite(acStack_440,1,sVar2,__s);
}
}
if (__s != (FILE *)0x0) {
fclose(__s);
}
gettimeofday(local_30,(__timezone_ptr_t)0x0);
if (local_454.tv_usec < (int)fStack_460.__state.__value.__wch) {
local_454.tv_usec = local_454.tv_usec + 1000000;
local_454.tv_sec = local_454.tv_sec + -1;
}
printf("FWUPDATER: cost %d.%06d seconds\n",local_454.tv_sec - fStack_460.__state.__count,
local_454.tv_usec - (int)fStack_460.__state.__value);
}
}
LAB_004078e0:
uVar6 = 0;
}
goto LAB_004078e4;
LAB_00407674:
do {
iVar9 = feof(__stream);
if (iVar9 != 0) goto LAB_004078e0;
iVar9 = ferror(__stream);
if (iVar9 != 0) {
uVar6 = 0;
goto LAB_004078e4;
}
uVar7 = uVar5;
if (0x400 < uVar5) {
uVar7 = 0x400;
}
sVar2 = fread(acStack_440,1,uVar7,__stream) //possible issue identified - semgrep
uVar5 = uVar5 - sVar2;
} while (uVar5 != 0);
uVar6 = 0;
LAB_004078e4:
sobj_del(iVar1);
if (__stream != (FILE *)0x0) {
fclose(__stream);
}
return uVar6;
}