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;
}