The idea was to replace index_name_pos(), but that would require a much larger API change in callers. Signed-off-by: Yann Dirson <ydirson@xxxxxxxxxx> --- sorted-array.h | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-) diff --git a/sorted-array.h b/sorted-array.h index 03d5d1e..df07687 100644 --- a/sorted-array.h +++ b/sorted-array.h @@ -1,7 +1,7 @@ #define declare_sorted_array(MAYBESTATIC,ELEMTYPE,LIST,CMP,INIT) \ MAYBESTATIC ELEMTYPE *LIST; \ MAYBESTATIC int LIST##_nr, LIST##_alloc; \ -MAYBESTATIC ELEMTYPE *locate_##LIST(void *data, int insert_ok) \ +MAYBESTATIC int locate_##LIST##_idx(void *data, int insert_ok) \ { \ int first, last; \ \ @@ -12,7 +12,7 @@ MAYBESTATIC ELEMTYPE *locate_##LIST(void *data, int insert_ok) \ ELEMTYPE *nextelem = &(LIST[next]); \ int cmp = CMP(data, nextelem); \ if (!cmp) \ - return nextelem; \ + return next; \ if (cmp < 0) { \ last = next; \ continue; \ @@ -21,7 +21,7 @@ MAYBESTATIC ELEMTYPE *locate_##LIST(void *data, int insert_ok) \ } \ /* not found */ \ if (!insert_ok) \ - return NULL; \ + return -first-1; \ /* insert to make it at "first" */ \ if (LIST##_alloc <= LIST##_nr) { \ LIST##_alloc = alloc_nr(LIST##_alloc); \ @@ -32,5 +32,12 @@ MAYBESTATIC ELEMTYPE *locate_##LIST(void *data, int insert_ok) \ memmove(LIST + first + 1, LIST + first, \ (LIST##_nr - first - 1) * sizeof(*LIST)); \ INIT(&LIST[first], data); \ - return &(LIST[first]); \ + return first; \ +} \ +MAYBESTATIC ELEMTYPE *locate_##LIST(void *data, int insert_ok) \ +{ \ + int idx = locate_##LIST##_idx(data, insert_ok); \ + if (idx < 0) \ + return NULL; \ + return &(LIST[idx]); \ } -- 1.7.2.3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html