aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJouni Malinen <j@w1.fi>2013-12-25 20:02:57 +0200
committerSteve Kondik <shade@chemlab.org>2014-06-12 14:08:00 -0700
commit8dc0b95c114af13003170600d7bfead97fdeaadc (patch)
tree78afffe6af592441528ab1080cdef3453e82d24b
parent337f60b95fcdb44723d0eb4e8540d7cb218e4c96 (diff)
downloadandroid_external_wpa_supplicant_8-8dc0b95c114af13003170600d7bfead97fdeaadc.tar.gz
android_external_wpa_supplicant_8-8dc0b95c114af13003170600d7bfead97fdeaadc.tar.bz2
android_external_wpa_supplicant_8-8dc0b95c114af13003170600d7bfead97fdeaadc.zip
Move int_array helpfer functions to utils/common.c.
These can be useful outside scan.c, so make them available. Git-commit: 98eda9c26d8ed4f8fd8449da9cdc359418253df7 Git-repo : git://w1.fi/srv/git/hostap.git CRs-fixed:593066 Signed-hostap: Jouni Malinen <j@w1.fi> Change-Id: Id4b2a67e4947636871e6a6c4f84df22c51d61d59
-rw-r--r--src/utils/common.c92
-rw-r--r--src/utils/common.h4
-rw-r--r--wpa_supplicant/scan.c68
3 files changed, 96 insertions, 68 deletions
diff --git a/src/utils/common.c b/src/utils/common.c
index 79a58904..f0981732 100644
--- a/src/utils/common.c
+++ b/src/utils/common.c
@@ -718,3 +718,95 @@ char * freq_range_list_str(const struct wpa_freq_range_list *list)
return buf;
}
+
+
+int int_array_len(const int *a)
+{
+ int i;
+ for (i = 0; a && a[i]; i++)
+ ;
+ return i;
+}
+
+
+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_array(*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 int freq_cmp(const void *a, const void *b)
+{
+ int _a = *(int *) a;
+ int _b = *(int *) b;
+
+ if (_a == 0)
+ return 1;
+ if (_b == 0)
+ return -1;
+ return _a - _b;
+}
+
+
+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;
+}
+
+
+void int_array_add_unique(int **res, int a)
+{
+ int reslen;
+ int *n;
+
+ for (reslen = 0; *res && (*res)[reslen]; reslen++) {
+ if ((*res)[reslen] == a)
+ return; /* already in the list */
+ }
+
+ n = os_realloc_array(*res, reslen + 2, sizeof(int));
+ if (n == NULL) {
+ os_free(*res);
+ *res = NULL;
+ return;
+ }
+
+ n[reslen] = a;
+ n[reslen + 1] = 0;
+
+ *res = n;
+}
diff --git a/src/utils/common.h b/src/utils/common.h
index 399ab796..ec3939db 100644
--- a/src/utils/common.h
+++ b/src/utils/common.h
@@ -518,6 +518,10 @@ int freq_range_list_includes(const struct wpa_freq_range_list *list,
unsigned int freq);
char * freq_range_list_str(const struct wpa_freq_range_list *list);
+int int_array_len(const int *a);
+void int_array_concat(int **res, const int *a);
+void int_array_sort_unique(int *a);
+void int_array_add_unique(int **res, int a);
/*
* gcc 4.4 ends up generating strict-aliasing warnings about some very common
diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c
index 3d940376..a8288c5d 100644
--- a/wpa_supplicant/scan.c
+++ b/wpa_supplicant/scan.c
@@ -141,74 +141,6 @@ static void wpa_supplicant_assoc_try(struct wpa_supplicant *wpa_s,
}
-static int int_array_len(const int *a)
-{
- int i;
- for (i = 0; a && a[i]; i++)
- ;
- return i;
-}
-
-
-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_array(*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 int freq_cmp(const void *a, const void *b)
-{
- int _a = *(int *) a;
- int _b = *(int *) b;
-
- if (_a == 0)
- return 1;
- if (_b == 0)
- return -1;
- return _a - _b;
-}
-
-
-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;
-}
-
-
/**
* wpa_supplicant_trigger_scan - Request driver to start a scan
* @wpa_s: Pointer to wpa_supplicant data