static int p2p_group_remove_member(struct p2p_group *group, const u8 *addr) { struct p2p_group_member *m, *prev; if (group == NULL) return 0; m = group->members; prev = NULL; while (m) { if (os_memcmp(m->addr, addr, ETH_ALEN) == 0) break; prev = m; m = m->next; } if (m == NULL) return 0; if (prev) prev->next = m->next; else group->members = m->next; p2p_group_free_member(m); group->num_members--; return 1; }
void p2p_group_notif_disassoc(struct p2p_group *group, const u8 *addr) { struct p2p_group_member *m, *prev; if (group == NULL) return; m = group->members; prev = NULL; while (m) { if (os_memcmp(m->addr, addr, ETH_ALEN) == 0) break; prev = m; m = m->next; } if (m) { if (prev) prev->next = m->next; else group->members = m->next; p2p_group_free_member(m); group->num_members--; wpa_msg(group->p2p->cfg->msg_ctx, MSG_DEBUG, "P2P: Remove " "client " MACSTR " from group; num_members=%u/%u", MAC2STR(addr), group->num_members, group->cfg->max_clients); if (group->num_members == group->cfg->max_clients - 1) group->beacon_update = 1; p2p_group_update_ies(group); if (group->num_members == 0) group->cfg->idle_update(group->cfg->cb_ctx, 1); } }
static void p2p_group_free_members(struct p2p_group *group) { struct p2p_group_member *m, *prev; m = group->members; group->members = NULL; group->num_members = 0; while (m) { prev = m; m = m->next; p2p_group_free_member(prev); } }