undefined4 * ipparse_hostnetwork(char *param_1,uint *param_2)

{
  undefined4 *puVar1;
  netent *pnVar2;
  uint uVar3;
  hostent *phVar4;
  undefined4 *puVar5;
  int iVar6;
  
  puVar1 = (undefined4 *)xtables_numeric_to_ipaddr();
  if (puVar1 == (undefined4 *)0x0) {
    pnVar2 = getnetbyname(param_1);
    if ((pnVar2 == (netent *)0x0) || (pnVar2->n_addrtype != 2)) {
      *param_2 = 0;
      phVar4 = gethostbyname(param_1);
      if ((phVar4 != (hostent *)0x0) && ((phVar4->h_addrtype == 2 && (phVar4->h_length == 4)))) {
        while (phVar4->h_addr_list[*param_2] != (char *)0x0) {
          *param_2 = *param_2 + 1;
        }
        puVar1 = (undefined4 *)xtables_calloc()   //possible issue identified - semgrep
        iVar6 = 0;
        for (uVar3 = 0; uVar3 < *param_2; uVar3 = uVar3 + 1) {
          memcpy((void *)((int)puVar1 + iVar6),*(void **)((int)phVar4->h_addr_list + iVar6),4)   //possible issue identified - semgrep
          iVar6 = iVar6 + 4;
        }
        if (puVar1 != (undefined4 *)0x0) {
          return puVar1;
        }
      }
      puVar1 = (undefined4 *)0x2;
      (**(code **)(xt_params + 0x14))(2,0x5954,param_1);
      return puVar1;
    }
    uVar3 = pnVar2->n_net;
    addr_5298 = uVar3 << 0x18 | uVar3 >> 0x18 | uVar3 >> 8 & 0xff00 | (uVar3 & 0xff00) << 8;
    puVar1 = &addr_5298;
  }
  puVar5 = (undefined4 *)xtables_malloc(4)   //possible issue identified - semgrep
  *puVar5 = *puVar1;
  *param_2 = 1;
  return puVar5;
}