diff options
author | Tom Lane | 2007-02-28 22:44:38 +0000 |
---|---|---|
committer | Tom Lane | 2007-02-28 22:44:38 +0000 |
commit | 9f652d430fbd1e757caaec9fe64d3e94c8693158 (patch) | |
tree | 9215d2131d85e73caeb96fe23ba442c17b8d4575 /contrib/ltree/_ltree_gist.c | |
parent | d1ce4f7396aac34233e075d0342ac704593799ce (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.c | 15 |
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)); } |