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

undefined4 * susock_server_open(char *param_1,uint param_2,undefined4 param_3)

{
  bool bVar1;
  int iVar2;
  int *piVar3;
  int iVar4;
  undefined4 *puVar5;
  void *pvVar6;
  undefined4 *puVar7;
  uint uVar8;
  FILE *pFVar9;
  char *pcVar10;
  sockaddr local_120 [7];
  stat sStack_b0;
  
  if (param_1 == (char *)0x0) {
    return (undefined4 *)0x0;
  }
  iVar2 = stat(param_1,&sStack_b0)   //possible issue identified - semgrep
  if (iVar2 < 0) {
    iVar2 = socket(1,2,0);
    pFVar9 = _stderr;
    if (-1 < iVar2) {
      local_120[0].sa_family = 1;
      snprintf(local_120[0].sa_data,0x6c,"%s",param_1)   //possible issue identified - semgrep
      iVar4 = bind(iVar2,local_120,0x6e);
      pFVar9 = _stderr;
      if (iVar4 < 0) {
        piVar3 = __errno_location();
        pcVar10 = strerror(*piVar3);
        fprintf(pFVar9,"%s: bind: %s.\n","susock_server_open",pcVar10);
      }
      else {
        puVar5 = (undefined4 *)malloc(0x14)   //possible issue identified - semgrep
        if (puVar5 == (undefined4 *)0x0) {
          fprintf(_stderr,"%s: malloc error.\n","susock_server_open");
        }
        else {
          *puVar5 = 0x5c50c3e7;
          puVar5[4] = param_3;
          puVar5[1] = 0;
          puVar5[3] = 0;
          puVar5[2] = param_2;
          pvVar6 = malloc(param_2 * 0xc)   //possible issue identified - semgrep
          puVar5[3] = pvVar6;
          if (pvVar6 != (void *)0x0) {
            chmod(local_120[0].sa_data,0x1ff)   //possible issue identified - semgrep
            listen(iVar2,param_2);
            puVar5[1] = iVar2;
            uVar8 = 0;
            while( true ) {
              iVar2 = uVar8 * 0xc;
              bVar1 = param_2 <= uVar8;
              uVar8 = uVar8 + 1;
              if (bVar1) break;
              puVar7 = (undefined4 *)(puVar5[3] + iVar2);
              puVar7[1] = 0xffffffff;
              *puVar7 = 0x5c5c71e7;
            }
            return puVar5;
          }
          fprintf(_stderr,"%s: malloc error!\n","susock_server_open");
          susock_close(puVar5);
        }
      }
      close(iVar2);
      return (undefined4 *)0x0;
    }
    piVar3 = __errno_location();
    param_1 = strerror(*piVar3);
    pcVar10 = "%s: socket: %s.\n";
  }
  else {
    pcVar10 = "%s: \'%s\' is already exist!\n";
    pFVar9 = _stderr;
  }
  fprintf(pFVar9,pcVar10,"susock_server_open",param_1);
  return (undefined4 *)0x0;
}