static void int_array_concat(int **res, const int *a) { int reslen, alen, i; int *n; reslen = int_array_len(*res); alen = int_array_len(a); n = os_realloc(*res, (reslen + alen + 1) * sizeof(int)); if (n == NULL) { os_free(*res); *res = NULL; return; } for (i = 0; i <= alen; i++) n[reslen + i] = a[i]; *res = n; }
static void int_array_sort_unique(int *a) { int alen; int i, j; if (a == NULL) return; alen = int_array_len(a); qsort(a, alen, sizeof(int), freq_cmp); i = 0; j = 1; while (a[i] && a[j]) { if (a[i] == a[j]) { j++; continue; } a[++i] = a[j++]; } if (a[i]) i++; a[i] = 0; }
struct wpa_driver_scan_params * wpa_scan_clone_params(const struct wpa_driver_scan_params *src) { struct wpa_driver_scan_params *params; size_t i; u8 *n; params = os_zalloc(sizeof(*params)); if (params == NULL) return NULL; for (i = 0; i < src->num_ssids; i++) { if (src->ssids[i].ssid) { n = os_malloc(src->ssids[i].ssid_len); if (n == NULL) goto failed; os_memcpy(n, src->ssids[i].ssid, src->ssids[i].ssid_len); params->ssids[i].ssid = n; params->ssids[i].ssid_len = src->ssids[i].ssid_len; } } params->num_ssids = src->num_ssids; if (src->extra_ies) { n = os_malloc(src->extra_ies_len); if (n == NULL) goto failed; os_memcpy(n, src->extra_ies, src->extra_ies_len); params->extra_ies = n; params->extra_ies_len = src->extra_ies_len; } if (src->freqs) { int len = int_array_len(src->freqs); params->freqs = os_malloc((len + 1) * sizeof(int)); if (params->freqs == NULL) goto failed; os_memcpy(params->freqs, src->freqs, (len + 1) * sizeof(int)); } if (src->filter_ssids) { params->filter_ssids = os_malloc(sizeof(*params->filter_ssids) * src->num_filter_ssids); if (params->filter_ssids == NULL) goto failed; os_memcpy(params->filter_ssids, src->filter_ssids, sizeof(*params->filter_ssids) * src->num_filter_ssids); params->num_filter_ssids = src->num_filter_ssids; } params->filter_rssi = src->filter_rssi; params->p2p_probe = src->p2p_probe; params->only_new_results = src->only_new_results; return params; failed: wpa_scan_free_params(params); return NULL; }