summaryrefslogtreecommitdiff
path: root/contrib/ltree/_ltree_gist.c
diff options
context:
space:
mode:
authorTom Lane2007-02-28 22:44:38 +0000
committerTom Lane2007-02-28 22:44:38 +0000
commit9f652d430fbd1e757caaec9fe64d3e94c8693158 (patch)
tree9215d2131d85e73caeb96fe23ba442c17b8d4575 /contrib/ltree/_ltree_gist.c
parentd1ce4f7396aac34233e075d0342ac704593799ce (diff)
Fix up several contrib modules that were using varlena datatypes in not-so-obvious
ways. I'm not totally sure that I caught everything, but at least now they pass their regression tests with VARSIZE/SET_VARSIZE defined to reverse byte order.
Diffstat (limited to 'contrib/ltree/_ltree_gist.c')
-rw-r--r--contrib/ltree/_ltree_gist.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/contrib/ltree/_ltree_gist.c b/contrib/ltree/_ltree_gist.c
index 0bac6475478..4ce8864fb39 100644
--- a/contrib/ltree/_ltree_gist.c
+++ b/contrib/ltree/_ltree_gist.c
@@ -94,7 +94,7 @@ _ltree_compress(PG_FUNCTION_ARGS)
errmsg("array must not contain nulls")));
key = (ltree_gist *) palloc(len);
- key->len = len;
+ SET_VARSIZE(key, len);
key->flag = 0;
MemSet(LTG_SIGN(key), 0, ASIGLEN);
@@ -124,7 +124,7 @@ _ltree_compress(PG_FUNCTION_ARGS)
);
len = LTG_HDRSIZE;
key = (ltree_gist *) palloc(len);
- key->len = len;
+ SET_VARSIZE(key, len);
key->flag = LTG_ALLTRUE;
retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
@@ -204,10 +204,11 @@ _ltree_union(PG_FUNCTION_ARGS)
len = LTG_HDRSIZE + ((flag & LTG_ALLTRUE) ? 0 : ASIGLEN);
result = (ltree_gist *) palloc(len);
- *size = result->len = len;
+ SET_VARSIZE(result, len);
result->flag = flag;
if (!LTG_ISALLTRUE(result))
memcpy((void *) LTG_SIGN(result), (void *) base, sizeof(ABITVEC));
+ *size = len;
PG_RETURN_POINTER(result);
}
@@ -340,26 +341,26 @@ _ltree_picksplit(PG_FUNCTION_ARGS)
if (LTG_ISALLTRUE(GETENTRY(entryvec, seed_1)))
{
datum_l = (ltree_gist *) palloc(LTG_HDRSIZE);
- datum_l->len = LTG_HDRSIZE;
+ SET_VARSIZE(datum_l, LTG_HDRSIZE);
datum_l->flag = LTG_ALLTRUE;
}
else
{
datum_l = (ltree_gist *) palloc(LTG_HDRSIZE + ASIGLEN);
- datum_l->len = LTG_HDRSIZE + ASIGLEN;
+ SET_VARSIZE(datum_l, LTG_HDRSIZE + ASIGLEN);
datum_l->flag = 0;
memcpy((void *) LTG_SIGN(datum_l), (void *) LTG_SIGN(GETENTRY(entryvec, seed_1)), sizeof(ABITVEC));
}
if (LTG_ISALLTRUE(GETENTRY(entryvec, seed_2)))
{
datum_r = (ltree_gist *) palloc(LTG_HDRSIZE);
- datum_r->len = LTG_HDRSIZE;
+ SET_VARSIZE(datum_r, LTG_HDRSIZE);
datum_r->flag = LTG_ALLTRUE;
}
else
{
datum_r = (ltree_gist *) palloc(LTG_HDRSIZE + ASIGLEN);
- datum_r->len = LTG_HDRSIZE + ASIGLEN;
+ SET_VARSIZE(datum_r, LTG_HDRSIZE + ASIGLEN);
datum_r->flag = 0;
memcpy((void *) LTG_SIGN(datum_r), (void *) LTG_SIGN(GETENTRY(entryvec, seed_2)), sizeof(ABITVEC));
}