undefined4 FUN_0040c004(uint param_1,undefined4 *param_2,undefined4 param_3,undefined4 param_4)

{
  undefined4 uVar1;
  int iVar2;
  undefined4 uVar3;
  undefined4 *puVar4;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  
  if (((param_1 & 0xf) == 0) && (puVar4 = (undefined4 *)((int)param_2 + param_1), param_1 != 0)) {
    if (param_2 < puVar4) {
      do {
        local_38 = *param_2;
        local_34 = param_2[1];
        local_30 = param_2[2];
        local_2c = param_2[3];
        iVar2 = dhcp6_find_listval(param_4,3,&local_38,0);
        if (iVar2 == 0) {
          iVar2 = dhcp6_add_listval(param_4,3,&local_38,0);
          if (iVar2 == 0) {
            uVar3 = dhcp6optstr(param_3);
            dprintf(3,"dhcp6_get_addr","failed to copy %s address",uVar3);
            return 0xffffffff;
          }
        }
        else {
          uVar3 = dhcp6optstr(param_3);
          uVar1 = in6addr2str(&local_38,0);
          dprintf(6,"dhcp6_get_addr","duplicated %s address (%s)",uVar3,uVar1);
        }
        param_2 = param_2 + 4;
        uVar3 = 0;
      } while (param_2 < puVar4);
    }
    else {
      uVar3 = 0;
    }
  }
  else {
    dprintf(6,"dhcp6_get_addr","malformed DHCP option: type %d, len %d",param_3,param_1);
    uVar3 = 0xffffffff;
  }
  return uVar3;
}