From 1e3fbccd6cf9ca495c889d368454cc1e6a6146de Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 16 May 2003 18:50:00 +0000 Subject: [PATCH] Fix failure when uniq-ifying an array of zero elements. Teodor Sigaev --- contrib/intarray/_int.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/contrib/intarray/_int.c b/contrib/intarray/_int.c index dc674e09ff8..d0f6db66b2a 100644 --- a/contrib/intarray/_int.c +++ b/contrib/intarray/_int.c @@ -969,6 +969,8 @@ internal_size(int *a, int len) return size; } +#define UNIX_UNIQ(a) a = _int_unique(a) + /* r is sorted and size of r > 1 */ static ArrayType * _int_unique(ArrayType *r) @@ -978,6 +980,9 @@ _int_unique(ArrayType *r) *data; int num = ARRNELEMS(r); + if ( num<2 ) + return r; + data = tmp = dr = ARRPTR(r); while (tmp - data < num) if (*tmp != *dr) @@ -2447,23 +2452,6 @@ if (ARRNELEMS(a) > 1) \ qsort((void*)ARRPTR(a), ARRNELEMS(a),sizeof(int4), \ (direction) ? compASC : compDESC ) -#define UNIX_UNIQ(a) a = resize_intArrayType(a, unix_uniq(ARRPTR(a), ARRNELEMS(a))) - -static int32 -unix_uniq(int32 *array, int32 count) -{ - register int32 i, - k = 0; - - for (i = 1; i < count; i++) - if (array[k] != array[i]) - { - k++; - if (i > k) - array[k] = array[i]; - } - return (k + 1); -} Datum intset(PG_FUNCTION_ARGS)