summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2003-05-16 18:50:00 +0000
committerTom Lane2003-05-16 18:50:00 +0000
commit5eb4a0c648b403e8aa6e349e6a284cc7e74758d4 (patch)
treecb51360a9325f3634155f552c39150e301cafe20
parentaeb7888e118eee4e867a45b4bdc83d609a94a10b (diff)
Fix failure when uniq-ifying an array of zero elements.
Teodor Sigaev
-rw-r--r--contrib/intarray/_int.c22
1 files changed, 5 insertions, 17 deletions
diff --git a/contrib/intarray/_int.c b/contrib/intarray/_int.c
index 199a39adc9..09c7960e15 100644
--- a/contrib/intarray/_int.c
+++ b/contrib/intarray/_int.c
@@ -967,6 +967,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)
@@ -976,6 +978,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)
@@ -2445,23 +2450,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)