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