void FUN_00404a40(int param_1)
{
char *pcVar1;
int iVar2;
undefined4 uVar3;
int *piVar4;
in_addr __in;
int *piVar5;
int iVar6;
undefined4 uVar7;
undefined1 auStack_88 [32];
char acStack_68 [32];
char acStack_48 [32];
while (piVar5 = *(int **)(param_1 + 0xc), piVar5 != (int *)(param_1 + 0xc)) {
piVar4 = (int *)piVar5[1];
iVar6 = *piVar5;
__in.s_addr = piVar5[2];
*piVar4 = iVar6;
*(int **)(iVar6 + 4) = piVar4;
*piVar5 = 0;
piVar5[1] = 0;
pcVar1 = inet_ntoa(__in);
strcpy(acStack_68,pcVar1) //possible issue identified - semgrep
pcVar1 = inet_ntoa((in_addr)*(in_addr_t *)(param_1 + 8));
strcpy(acStack_48,pcVar1) //possible issue identified - semgrep
uVar7 = vifs_get_name((short)piVar5[3]);
verbose("%s: remove route %s --> %s from %s [%d]\n","remove_group",acStack_68,acStack_48,uVar7,
(short)piVar5[3]);
memset(auStack_88,0,0x20) //possible issue identified - semgrep
mrtapi_del_mfc(piVar5[2],*(undefined4 *)(param_1 + 8),(short)piVar5[3],auStack_88);
remove_multicast_ip(*(undefined4 *)(param_1 + 8));
free(piVar5);
}
while (piVar5 = *(int **)(param_1 + 0x14), piVar5 != (int *)(param_1 + 0x14)) {
piVar4 = (int *)piVar5[1];
iVar6 = *piVar5;
*piVar4 = iVar6;
*(int **)(iVar6 + 4) = piVar4;
*piVar5 = 0;
piVar5[1] = 0;
FUN_00404900(piVar5);
}
if (*(int *)(param_1 + 0x1c) != 0) {
sloop_cancel_timeout();
}
uVar7 = *(undefined4 *)(param_1 + 8);
iVar6 = 0;
do {
iVar2 = vifs_is_upstream(iVar6);
if (iVar2 != 0) {
iVar2 = vifs_get_ver_by_id(iVar6);
if (iVar2 == 0x22) {
uVar3 = vifs_get_ipaddr();
send_igmp_v3(uVar3,0x160000e0,0x22,0,uVar7,0,3);
}
else {
iVar2 = vifs_get_ver_by_id(iVar6);
if ((iVar2 == 0x16) || (iVar2 = vifs_get_ver_by_id(iVar6), iVar2 == 0x12)) {
uVar3 = vifs_get_ipaddr(iVar6);
send_igmp(uVar3,0x20000e0,0x17,0,uVar7);
}
}
}
iVar6 = iVar6 + 1;
} while (iVar6 != 8);
return;
}