diff options
author | Thomas Haller <thaller@redhat.com> | 2015-12-22 11:53:45 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-12-25 20:36:43 +0100 |
commit | c2bafa61537ba3699d94f87f20fd93b9484950b4 (patch) | |
tree | ab58ae2c11e67273de487fe18a9e764083b139ec /shared | |
parent | 766f31507b02c4721bdbabdc79755ff23652d6c6 (diff) |
nmtst: add nmtst_find_all_indexes()
Diffstat (limited to 'shared')
-rw-r--r-- | shared/nm-test-utils.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/shared/nm-test-utils.h b/shared/nm-test-utils.h index 27a8d1642..31b24eac9 100644 --- a/shared/nm-test-utils.h +++ b/shared/nm-test-utils.h @@ -807,6 +807,49 @@ nmtst_reexec_sudo (void) g_error (">> exec %s failed: %d - %s", __nmtst_internal.sudo_cmd, errsv, strerror (errsv)); } +/*****************************************************************************/ + +inline static gsize +nmtst_find_all_indexes (gpointer *elements, + gsize n_elements, + gpointer *needles, + gsize n_needles, + gboolean (*equal_fcn) (gpointer element, gpointer needle, gpointer user_data), + gpointer user_data, + gssize *out_idx) +{ + gsize i, j, k; + gsize found = 0; + + for (i = 0; i < n_needles; i++) { + gssize idx = -1; + + for (j = 0; j < n_elements; j++) { + + /* no duplicates */ + for (k = 0; k < i; k++) { + if (out_idx[k] == j) + goto next; + } + + if (equal_fcn (elements[j], needles[i], user_data)) { + idx = j; + break; + } +next: + ; + } + + out_idx[i] = idx; + if (idx >= 0) + found++; + } + + return found; +} + +/*****************************************************************************/ + #define __define_nmtst_static(NUM,SIZE) \ inline static const char * \ nmtst_static_##SIZE##_##NUM (const char *str) \ |