/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

char * devconf_main(int param_1,char **param_2)

{
  undefined4 *puVar1;
  int iVar2;
  FILE *pFVar3;
  char *pcVar4;
  undefined4 uVar5;
  size_t sVar6;
  char *pcVar7;
  char *pcVar8;
  char *pcVar9;
  code *pcVar10;
  
  uVar5 = DAT_00422a64;
  if ((1 < param_1) && (pcVar8 = param_2[1], *pcVar8 != '-')) {
    iVar2 = strcmp(pcVar8,"get");
    uVar5 = 1;
    if (iVar2 != 0) {
      iVar2 = strcmp(pcVar8,"put");
      if (iVar2 == 0) {
        uVar5 = 2;
      }
      else {
        iVar2 = strcmp(pcVar8,"size");
        uVar5 = 3;
        if (iVar2 != 0) {
          iVar2 = strcmp(pcVar8,"del");
          uVar5 = 4;
          if (iVar2 != 0) {
            iVar2 = strcmp(pcVar8,"dump");
            uVar5 = 5;
            if (iVar2 != 0) {
              iVar2 = strcmp(pcVar8,"devname");
              if (iVar2 == 0) {
                DAT_00422a64 = 6;
                uVar5 = DAT_00422a64;
              }
              else {
                DAT_00422a64 = 0;
                uVar5 = DAT_00422a64;
              }
            }
          }
        }
      }
    }
  }
  while (DAT_00422a64 = uVar5, iVar2 = getopt(param_1,param_2,"hvn:o:z:f:"), 0 < iVar2) {   //possible issue identified - semgrep
    uVar5 = DAT_00422a64;
    if (iVar2 == 0x6e) {
      PTR_s__dev_mtdblock_3_00422170 = _optarg;
    }
    else if (iVar2 < 0x6f) {
      if (iVar2 == 0x66) {
        DAT_00422a70 = _optarg;
      }
      else {
        uVar5 = 0;
        if (iVar2 != 0x68) {
          uVar5 = 9;
        }
LAB_00406bdc:
        FUN_0040693c(uVar5);
        uVar5 = DAT_00422a64;
      }
    }
    else if (iVar2 == 0x76) {
      DAT_00422a68 = DAT_00422a68 + 1;
    }
    else if (iVar2 == 0x7a) {
      DAT_00422160 = atoi(_optarg);
      uVar5 = DAT_00422a64;
    }
    else {
      uVar5 = 9;
      if (iVar2 != 0x6f) goto LAB_00406bdc;
      DAT_00422a6c = atoi(_optarg);
      uVar5 = DAT_00422a64;
    }
  }
  if (DAT_00422160 < 0x11) {
    FUN_004068d8(9,"The block size is too small for devconf !!\n");
  }
  DAT_00422a60 = (undefined4 *)malloc(DAT_00422160)   //possible issue identified - semgrep
  if (DAT_00422a60 == (undefined4 *)0x0) {
    FUN_004068d8(9,"Memory allocation failed !!\n");
  }
  switch(DAT_00422a64) {
  case 1:
    if (DAT_00422a70 == (char *)0x0) goto LAB_00406e0c;
    pFVar3 = (FILE *)FUN_004065ac(&DAT_0040fec0);
    if (pFVar3 == (FILE *)0x0) goto LAB_004070ac;
    pcVar9 = (char *)FUN_00406618(pFVar3);
    if (pcVar9 != (char *)0x0) {
      pcVar10 = fprintf;
      pcVar7 = "DEVCONF: unable to read config data (ret=%d) !\n";
      pFVar3 = _stderr;
      pcVar8 = pcVar9;
      goto LAB_00407080;
    }
    fclose(pFVar3);
    if (DAT_00422a60[2] == 0) {
      pcVar9 = "DEVCONF: no config data available (ret=%d) !\n";
      pcVar8 = (char *)0xffffffff;
    }
    else {
      pFVar3 = fopen(DAT_00422a70,"w+")   //possible issue identified - semgrep
      if (pFVar3 != (FILE *)0x0) {
        fwrite(DAT_00422a60 + 4,1,DAT_00422a60[2],pFVar3);
        pcVar10 = fclose;
        goto LAB_004070dc;
      }
      pcVar9 = "DEVCONF: unable to open config file (%s) to write !\n";
      pcVar8 = DAT_00422a70;
    }
    break;
  case 2:
    if (DAT_00422a70 != (char *)0x0) {
      pFVar3 = fopen(DAT_00422a70,"r")   //possible issue identified - semgrep
      if (pFVar3 == (FILE *)0x0) {
        pcVar9 = "DEVCONF: unable to open config file (%s) to read !\n";
        pcVar8 = DAT_00422a70;
        break;
      }
      memset(DAT_00422a60,0,DAT_00422160);
      sVar6 = fread(DAT_00422a60 + 4,1,DAT_00422160 - 0x10,pFVar3)   //possible issue identified - semgrep
      FUN_00406550("read %d bytes from config file!\n",sVar6);
      fclose(pFVar3);
      pFVar3 = (FILE *)FUN_004065ac(&DAT_004107a4);
      if (pFVar3 == (FILE *)0x0) goto LAB_00406fc4;
LAB_00406f9c:
      pcVar8 = (char *)0x0;
      FUN_0040674c(pFVar3,sVar6);
      fclose(pFVar3);
      goto LAB_004070f8;
    }
LAB_00406e0c:
    fputs("DEVCONF: no config file specified !\n",_stderr);
    goto LAB_00406e24;
  case 3:
    pFVar3 = (FILE *)FUN_004065ac(&DAT_0040fec0);
    if (pFVar3 != (FILE *)0x0) {
      pcVar8 = (char *)FUN_00406618(pFVar3);
      fclose(pFVar3);
      pcVar4 = pcVar8;
      if (pcVar8 != (char *)0x0) goto LAB_00407090;
      pcVar4 = (char *)DAT_00422a60[2];
      pcVar9 = "%d\n";
LAB_0040709c:
      printf(pcVar9,pcVar4);
      goto LAB_004070f8;
    }
    goto LAB_004070ac;
  case 4:
    pFVar3 = (FILE *)FUN_004065ac(&DAT_004107a4);
    if (pFVar3 != (FILE *)0x0) {
      memset(DAT_00422a60,0,DAT_00422160);
      sVar6 = 0;
      goto LAB_00406f9c;
    }
LAB_00406fc4:
    pcVar9 = "DEVCONF: unable to open device (%s) to write !\n";
    pcVar8 = PTR_s__dev_mtdblock_3_00422170;
    break;
  case 5:
    pFVar3 = (FILE *)FUN_004065ac(&DAT_0040fec0);
    if (pFVar3 != (FILE *)0x0) {
      pcVar4 = (char *)FUN_00406618(pFVar3);
      fclose(pFVar3);
      puVar1 = DAT_00422a60;
      if (pcVar4 == (char *)0x0) {
        printf("Magic NO  : 0x%08x\n",*DAT_00422a60);
        printf("Checksum  : 0x%02x\n",(uint)*(byte *)(puVar1 + 3));
        pcVar7 = (char *)puVar1[2];
        pcVar10 = printf;
        pFVar3 = (FILE *)"Data size : %d (0x%x) bytes\n";
        pcVar9 = pcVar7;
        pcVar8 = pcVar4;
LAB_00407080:
        (*pcVar10)(pFVar3,pcVar7,pcVar9);
        goto LAB_004070f8;
      }
LAB_00407090:
      pcVar9 = "Data is corrupted ! (ret=%d)\n";
      pcVar8 = pcVar4;
      goto LAB_0040709c;
    }
LAB_004070ac:
    pcVar9 = "DEVCONF: unable to open device (%s) to read !\n";
    pcVar8 = PTR_s__dev_mtdblock_3_00422170;
    break;
  case 6:
    pcVar10 = puts;
    pcVar9 = (char *)0x0;
    pFVar3 = (FILE *)PTR_s__dev_mtdblock_3_00422170;
LAB_004070dc:
    (*pcVar10)(pFVar3);
    pcVar8 = pcVar9;
    goto LAB_004070f8;
  default:
    FUN_0040693c(9);
    pcVar8 = (char *)0x0;
    goto LAB_004070f8;
  }
  fprintf(_stderr,pcVar9,pcVar8);
LAB_00406e24:
  pcVar8 = (char *)0xffffffff;
LAB_004070f8:
  FUN_0040686c(pcVar8);
  return pcVar8;
}