Index: contrib/btree_gist/btree_bit.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/btree_gist/btree_bit.c,v
retrieving revision 1.6
diff -c -r1.6 btree_bit.c
*** contrib/btree_gist/btree_bit.c	1 Jul 2005 13:44:55 -0000	1.6
--- contrib/btree_gist/btree_bit.c	14 Feb 2007 12:01:11 -0000
***************
*** 70,76 ****
  	int			s = INTALIGN(VARBITBYTES(leaf) + VARHDRSZ);
  
  	out = palloc(s);
! 	VARATT_SIZEP(out) = s;
  	memcpy((void *) VARDATA(out), (void *) VARBITS(leaf), VARBITBYTES(leaf));
  	return out;
  }
--- 70,76 ----
  	int			s = INTALIGN(VARBITBYTES(leaf) + VARHDRSZ);
  
  	out = palloc(s);
! 	SET_VARLENA_LEN(out,s);
  	memcpy((void *) VARDATA(out), (void *) VARBITS(leaf), VARBITBYTES(leaf));
  	return out;
  }
Index: contrib/fuzzystrmatch/dmetaphone.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/fuzzystrmatch/dmetaphone.c,v
retrieving revision 1.10
diff -c -r1.10 dmetaphone.c
*** contrib/fuzzystrmatch/dmetaphone.c	22 Sep 2006 21:39:56 -0000	1.10
--- contrib/fuzzystrmatch/dmetaphone.c	14 Feb 2007 12:01:23 -0000
***************
*** 168,174 ****
  	memset(result, 0, rsize);
  	rptr = VARDATA(result);
  	memcpy(rptr, code, strlen(code));
! 	VARATT_SIZEP(result) = rsize;
  	PG_RETURN_TEXT_P(result);
  }
  
--- 168,174 ----
  	memset(result, 0, rsize);
  	rptr = VARDATA(result);
  	memcpy(rptr, code, strlen(code));
! 	SET_VARLENA_LEN(result,rsize);
  	PG_RETURN_TEXT_P(result);
  }
  
***************
*** 209,215 ****
  	memset(result, 0, rsize);
  	rptr = VARDATA(result);
  	memcpy(rptr, code, strlen(code));
! 	VARATT_SIZEP(result) = rsize;
  	PG_RETURN_TEXT_P(result);
  }
  
--- 209,215 ----
  	memset(result, 0, rsize);
  	rptr = VARDATA(result);
  	memcpy(rptr, code, strlen(code));
! 	SET_VARLENA_LEN(result,rsize);
  	PG_RETURN_TEXT_P(result);
  }
  
Index: contrib/hstore/hstore_op.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/hstore/hstore_op.c,v
retrieving revision 1.3
diff -c -r1.3 hstore_op.c
*** contrib/hstore/hstore_op.c	5 Dec 2006 17:36:00 -0000	1.3
--- contrib/hstore/hstore_op.c	14 Feb 2007 12:02:36 -0000
***************
*** 310,316 ****
  	{
  		text	   *item = (text *) palloc(VARHDRSZ + ptr->keylen);
  
! 		VARATT_SIZEP(item) = VARHDRSZ + ptr->keylen;
  		memcpy(VARDATA(item), base + ptr->pos, ptr->keylen);
  		d[ptr - ARRPTR(hs)] = PointerGetDatum(item);
  		ptr++;
--- 310,316 ----
  	{
  		text	   *item = (text *) palloc(VARHDRSZ + ptr->keylen);
  
! 		SET_VARLENA_LEN(item, VARHDRSZ + ptr->keylen);
  		memcpy(VARDATA(item), base + ptr->pos, ptr->keylen);
  		d[ptr - ARRPTR(hs)] = PointerGetDatum(item);
  		ptr++;
***************
*** 355,361 ****
  		int			vallen = (ptr->valisnull) ? 0 : ptr->vallen;
  		text	   *item = (text *) palloc(VARHDRSZ + vallen);
  
! 		VARATT_SIZEP(item) = VARHDRSZ + vallen;
  		memcpy(VARDATA(item), base + ptr->pos + ptr->keylen, vallen);
  		d[ptr - ARRPTR(hs)] = PointerGetDatum(item);
  		ptr++;
--- 355,361 ----
  		int			vallen = (ptr->valisnull) ? 0 : ptr->vallen;
  		text	   *item = (text *) palloc(VARHDRSZ + vallen);
  
! 		SET_VARLENA_LEN(item, VARHDRSZ + vallen);
  		memcpy(VARDATA(item), base + ptr->pos + ptr->keylen, vallen);
  		d[ptr - ARRPTR(hs)] = PointerGetDatum(item);
  		ptr++;
***************
*** 431,437 ****
  		HEntry	   *ptr = &(ARRPTR(st->hs)[st->i]);
  		text	   *item = (text *) palloc(VARHDRSZ + ptr->keylen);
  
! 		VARATT_SIZEP(item) = VARHDRSZ + ptr->keylen;
  		memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos, ptr->keylen);
  		st->i++;
  
--- 431,437 ----
  		HEntry	   *ptr = &(ARRPTR(st->hs)[st->i]);
  		text	   *item = (text *) palloc(VARHDRSZ + ptr->keylen);
  
! 		SET_VARLENA_LEN(item, VARHDRSZ + ptr->keylen);
  		memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos, ptr->keylen);
  		st->i++;
  
***************
*** 483,489 ****
  			int			vallen = ptr->vallen;
  			text	   *item = (text *) palloc(VARHDRSZ + vallen);
  
! 			VARATT_SIZEP(item) = VARHDRSZ + vallen;
  			memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos + ptr->keylen, vallen);
  			st->i++;
  
--- 483,489 ----
  			int			vallen = ptr->vallen;
  			text	   *item = (text *) palloc(VARHDRSZ + vallen);
  
! 			SET_VARLENA_LEN(item, VARHDRSZ + vallen);
  			memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos + ptr->keylen, vallen);
  			st->i++;
  
***************
*** 593,599 ****
  		HeapTuple	tuple;
  
  		item = (text *) palloc(VARHDRSZ + ptr->keylen);
! 		VARATT_SIZEP(item) = VARHDRSZ + ptr->keylen;
  		memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos, ptr->keylen);
  		dvalues[0] = PointerGetDatum(item);
  
--- 593,599 ----
  		HeapTuple	tuple;
  
  		item = (text *) palloc(VARHDRSZ + ptr->keylen);
! 		SET_VARLENA_LEN(item, VARHDRSZ + ptr->keylen);
  		memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos, ptr->keylen);
  		dvalues[0] = PointerGetDatum(item);
  
***************
*** 607,613 ****
  			int			vallen = ptr->vallen;
  
  			item = (text *) palloc(VARHDRSZ + vallen);
! 			VARATT_SIZEP(item) = VARHDRSZ + vallen;
  			memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos + ptr->keylen, vallen);
  			dvalues[1] = PointerGetDatum(item);
  		}
--- 607,613 ----
  			int			vallen = ptr->vallen;
  
  			item = (text *) palloc(VARHDRSZ + vallen);
! 			SET_VARLENA_LEN(item, VARHDRSZ + vallen);
  			memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos + ptr->keylen, vallen);
  			dvalues[1] = PointerGetDatum(item);
  		}
Index: contrib/intarray/_int_bool.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/intarray/_int_bool.c,v
retrieving revision 1.9
diff -c -r1.9 _int_bool.c
*** contrib/intarray/_int_bool.c	7 Feb 2007 00:32:15 -0000	1.9
--- contrib/intarray/_int_bool.c	14 Feb 2007 12:02:57 -0000
***************
*** 766,772 ****
  	if (len == 0)
  	{
  		res = (text *) palloc(1 + VARHDRSZ);
! 		VARATT_SIZEP(res) = 1 + VARHDRSZ;
  		*((char *) VARDATA(res)) = 'T';
  	}
  	else
--- 766,772 ----
  	if (len == 0)
  	{
  		res = (text *) palloc(1 + VARHDRSZ);
! 		SET_VARLENA_LEN(res, 1 + VARHDRSZ);
  		*((char *) VARDATA(res)) = 'T';
  	}
  	else
***************
*** 778,784 ****
  		infix(&nrm, true);
  
  		res = (text *) palloc(nrm.cur - nrm.buf + VARHDRSZ);
! 		VARATT_SIZEP(res) = nrm.cur - nrm.buf + VARHDRSZ;
  		memcpy(VARDATA(res), nrm.buf, nrm.cur - nrm.buf);
  	}
  	pfree(q);
--- 778,784 ----
  		infix(&nrm, true);
  
  		res = (text *) palloc(nrm.cur - nrm.buf + VARHDRSZ);
! 		SET_VARLENA_LEN(res, nrm.cur - nrm.buf + VARHDRSZ);
  		memcpy(VARDATA(res), nrm.buf, nrm.cur - nrm.buf);
  	}
  	pfree(q);
Index: contrib/ltree/ltree_op.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/ltree/ltree_op.c,v
retrieving revision 1.14
diff -c -r1.14 ltree_op.c
*** contrib/ltree/ltree_op.c	4 Oct 2006 00:29:45 -0000	1.14
--- contrib/ltree/ltree_op.c	14 Feb 2007 12:03:27 -0000
***************
*** 557,563 ****
  		curlevel = LEVEL_NEXT(curlevel);
  	}
  
! 	VARATT_SIZEP(out) = VARHDRSZ + (ptr - VARDATA(out));
  	PG_FREE_IF_COPY(in, 0);
  
  	PG_RETURN_POINTER(out);
--- 557,563 ----
  		curlevel = LEVEL_NEXT(curlevel);
  	}
  
! 	SET_VARLENA_LEN(out, VARHDRSZ + (ptr - VARDATA(out)));
  	PG_FREE_IF_COPY(in, 0);
  
  	PG_RETURN_POINTER(out);
Index: contrib/pg_trgm/trgm_op.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/pg_trgm/trgm_op.c,v
retrieving revision 1.6
diff -c -r1.6 trgm_op.c
*** contrib/pg_trgm/trgm_op.c	26 Jan 2007 17:45:41 -0000	1.6
--- contrib/pg_trgm/trgm_op.c	14 Feb 2007 12:03:32 -0000
***************
*** 203,209 ****
  	{
  		text	   *item = (text *) palloc(VARHDRSZ + 3);
  
! 		VARATT_SIZEP(item) = VARHDRSZ + 3;
  		CPTRGM(VARDATA(item), ptr);
  		d[ptr - GETARR(trg)] = PointerGetDatum(item);
  		ptr++;
--- 203,209 ----
  	{
  		text	   *item = (text *) palloc(VARHDRSZ + 3);
  
! 		SET_VARLENA_LEN(item, VARHDRSZ + 3);
  		CPTRGM(VARDATA(item), ptr);
  		d[ptr - GETARR(trg)] = PointerGetDatum(item);
  		ptr++;
Index: contrib/pgcrypto/pgcrypto.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/pgcrypto/pgcrypto.c,v
retrieving revision 1.25
diff -c -r1.25 pgcrypto.c
*** contrib/pgcrypto/pgcrypto.c	10 Nov 2006 06:28:29 -0000	1.25
--- contrib/pgcrypto/pgcrypto.c	14 Feb 2007 12:04:00 -0000
***************
*** 68,74 ****
  	hlen = px_md_result_size(md);
  
  	res = (text *) palloc(hlen + VARHDRSZ);
! 	VARATT_SIZEP(res) = hlen + VARHDRSZ;
  
  	arg = PG_GETARG_BYTEA_P(0);
  	len = VARSIZE(arg) - VARHDRSZ;
--- 68,74 ----
  	hlen = px_md_result_size(md);
  
  	res = (text *) palloc(hlen + VARHDRSZ);
! 	SET_VARLENA_LEN(res, hlen + VARHDRSZ);
  
  	arg = PG_GETARG_BYTEA_P(0);
  	len = VARSIZE(arg) - VARHDRSZ;
***************
*** 106,112 ****
  	hlen = px_hmac_result_size(h);
  
  	res = (text *) palloc(hlen + VARHDRSZ);
! 	VARATT_SIZEP(res) = hlen + VARHDRSZ;
  
  	arg = PG_GETARG_BYTEA_P(0);
  	key = PG_GETARG_BYTEA_P(1);
--- 106,112 ----
  	hlen = px_hmac_result_size(h);
  
  	res = (text *) palloc(hlen + VARHDRSZ);
! 	SET_VARLENA_LEN(res, hlen + VARHDRSZ);
  
  	arg = PG_GETARG_BYTEA_P(0);
  	key = PG_GETARG_BYTEA_P(1);
***************
*** 150,156 ****
  				 errmsg("gen_salt: %s", px_strerror(len))));
  
  	res = (text *) palloc(len + VARHDRSZ);
! 	VARATT_SIZEP(res) = len + VARHDRSZ;
  	memcpy(VARDATA(res), buf, len);
  
  	PG_FREE_IF_COPY(arg0, 0);
--- 150,156 ----
  				 errmsg("gen_salt: %s", px_strerror(len))));
  
  	res = (text *) palloc(len + VARHDRSZ);
! 	SET_VARLENA_LEN(res, len + VARHDRSZ);
  	memcpy(VARDATA(res), buf, len);
  
  	PG_FREE_IF_COPY(arg0, 0);
***************
*** 184,190 ****
  				 errmsg("gen_salt: %s", px_strerror(len))));
  
  	res = (text *) palloc(len + VARHDRSZ);
! 	VARATT_SIZEP(res) = len + VARHDRSZ;
  	memcpy(VARDATA(res), buf, len);
  
  	PG_FREE_IF_COPY(arg0, 0);
--- 184,190 ----
  				 errmsg("gen_salt: %s", px_strerror(len))));
  
  	res = (text *) palloc(len + VARHDRSZ);
! 	SET_VARLENA_LEN(res, len + VARHDRSZ);
  	memcpy(VARDATA(res), buf, len);
  
  	PG_FREE_IF_COPY(arg0, 0);
***************
*** 238,244 ****
  	clen = strlen(cres);
  
  	res = (text *) palloc(clen + VARHDRSZ);
! 	VARATT_SIZEP(res) = clen + VARHDRSZ;
  	memcpy(VARDATA(res), cres, clen);
  	pfree(resbuf);
  
--- 238,244 ----
  	clen = strlen(cres);
  
  	res = (text *) palloc(clen + VARHDRSZ);
! 	SET_VARLENA_LEN(res, clen + VARHDRSZ);
  	memcpy(VARDATA(res), cres, clen);
  	pfree(resbuf);
  
***************
*** 293,299 ****
  				 errmsg("encrypt error: %s", px_strerror(err))));
  	}
  
! 	VARATT_SIZEP(res) = VARHDRSZ + rlen;
  	PG_RETURN_BYTEA_P(res);
  }
  
--- 293,299 ----
  				 errmsg("encrypt error: %s", px_strerror(err))));
  	}
  
! 	SET_VARLENA_LEN(res, VARHDRSZ + rlen);
  	PG_RETURN_BYTEA_P(res);
  }
  
***************
*** 336,342 ****
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("decrypt error: %s", px_strerror(err))));
  
! 	VARATT_SIZEP(res) = VARHDRSZ + rlen;
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_FREE_IF_COPY(key, 1);
--- 336,342 ----
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("decrypt error: %s", px_strerror(err))));
  
! 	SET_VARLENA_LEN(res, VARHDRSZ + rlen);
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_FREE_IF_COPY(key, 1);
***************
*** 389,395 ****
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("encrypt_iv error: %s", px_strerror(err))));
  
! 	VARATT_SIZEP(res) = VARHDRSZ + rlen;
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_FREE_IF_COPY(key, 1);
--- 389,395 ----
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("encrypt_iv error: %s", px_strerror(err))));
  
! 	SET_VARLENA_LEN(res, VARHDRSZ + rlen);
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_FREE_IF_COPY(key, 1);
***************
*** 443,449 ****
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("decrypt_iv error: %s", px_strerror(err))));
  
! 	VARATT_SIZEP(res) = VARHDRSZ + rlen;
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_FREE_IF_COPY(key, 1);
--- 443,449 ----
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("decrypt_iv error: %s", px_strerror(err))));
  
! 	SET_VARLENA_LEN(res, VARHDRSZ + rlen);
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_FREE_IF_COPY(key, 1);
***************
*** 469,475 ****
  				 errmsg("Length not in range")));
  
  	res = palloc(VARHDRSZ + len);
! 	VARATT_SIZEP(res) = VARHDRSZ + len;
  
  	/* generate result */
  	err = px_get_random_bytes((uint8 *) VARDATA(res), len);
--- 469,475 ----
  				 errmsg("Length not in range")));
  
  	res = palloc(VARHDRSZ + len);
! 	SET_VARLENA_LEN(res, VARHDRSZ + len);
  
  	/* generate result */
  	err = px_get_random_bytes((uint8 *) VARDATA(res), len);
Index: contrib/pgcrypto/pgp-pgsql.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/pgcrypto/pgp-pgsql.c,v
retrieving revision 1.8
diff -c -r1.8 pgp-pgsql.c
*** contrib/pgcrypto/pgp-pgsql.c	10 Nov 2006 06:28:29 -0000	1.8
--- contrib/pgcrypto/pgp-pgsql.c	14 Feb 2007 12:04:18 -0000
***************
*** 152,158 ****
  	dst_len = strlen((char *) dst);
  	res = palloc(dst_len + VARHDRSZ);
  	memcpy(VARDATA(res), dst, dst_len);
! 	VARATT_SIZEP(res) = VARHDRSZ + dst_len;
  	pfree(dst);
  	return res;
  }
--- 152,158 ----
  	dst_len = strlen((char *) dst);
  	res = palloc(dst_len + VARHDRSZ);
  	memcpy(VARDATA(res), dst, dst_len);
! 	SET_VARLENA_LEN(res, VARHDRSZ + dst_len);
  	pfree(dst);
  	return res;
  }
***************
*** 514,520 ****
  	/* res_len includes VARHDRSZ */
  	res_len = mbuf_steal_data(dst, &restmp);
  	res = (bytea *) restmp;
! 	VARATT_SIZEP(res) = res_len;
  
  	if (tmp_data)
  		clear_and_pfree(tmp_data);
--- 514,520 ----
  	/* res_len includes VARHDRSZ */
  	res_len = mbuf_steal_data(dst, &restmp);
  	res = (bytea *) restmp;
! 	SET_VARLENA_LEN(res, res_len);
  
  	if (tmp_data)
  		clear_and_pfree(tmp_data);
***************
*** 615,621 ****
  
  	/* res_len includes VARHDRSZ */
  	res = (bytea *) restmp;
! 	VARATT_SIZEP(res) = res_len;
  
  	if (need_text && got_unicode)
  	{
--- 615,621 ----
  
  	/* res_len includes VARHDRSZ */
  	res = (bytea *) restmp;
! 	SET_VARLENA_LEN(res, res_len);
  
  	if (need_text && got_unicode)
  	{
***************
*** 858,864 ****
  		ereport(ERROR,
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("Overflow - encode estimate too small")));
! 	VARATT_SIZEP(res) = VARHDRSZ + res_len;
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_RETURN_TEXT_P(res);
--- 858,864 ----
  		ereport(ERROR,
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("Overflow - encode estimate too small")));
! 	SET_VARLENA_LEN(res, VARHDRSZ + res_len);
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_RETURN_TEXT_P(res);
***************
*** 889,895 ****
  		ereport(ERROR,
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("Overflow - decode estimate too small")));
! 	VARATT_SIZEP(res) = VARHDRSZ + res_len;
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_RETURN_TEXT_P(res);
--- 889,895 ----
  		ereport(ERROR,
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("Overflow - decode estimate too small")));
! 	SET_VARLENA_LEN(res, VARHDRSZ + res_len);
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_RETURN_TEXT_P(res);
***************
*** 917,923 ****
  		ereport(ERROR,
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("%s", px_strerror(res_len))));
! 	VARATT_SIZEP(res) = VARHDRSZ + res_len;
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_RETURN_TEXT_P(res);
--- 917,923 ----
  		ereport(ERROR,
  				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
  				 errmsg("%s", px_strerror(res_len))));
! 	SET_VARLENA_LEN(res, VARHDRSZ + res_len);
  
  	PG_FREE_IF_COPY(data, 0);
  	PG_RETURN_TEXT_P(res);
Index: contrib/sslinfo/sslinfo.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/sslinfo/sslinfo.c,v
retrieving revision 1.5
diff -c -r1.5 sslinfo.c
*** contrib/sslinfo/sslinfo.c	4 Oct 2006 00:29:46 -0000	1.5
--- contrib/sslinfo/sslinfo.c	14 Feb 2007 12:04:24 -0000
***************
*** 140,146 ****
  		pfree(dp);
  
  	BIO_free(membuf);
! 	VARATT_SIZEP(result) = outlen + VARHDRSZ;
  	PG_RETURN_TEXT_P(result);
  }
  
--- 140,146 ----
  		pfree(dp);
  
  	BIO_free(membuf);
! 	SET_VARLENA_LEN(result, outlen + VARHDRSZ);
  	PG_RETURN_TEXT_P(result);
  }
  
***************
*** 322,328 ****
  	 */
  	if (dp != sp)
  		pfree(dp);
! 	VARATT_SIZEP(result) = outlen + VARHDRSZ;
  	PG_RETURN_TEXT_P(result);
  }
  
--- 322,328 ----
  	 */
  	if (dp != sp)
  		pfree(dp);
! 	SET_VARLENA_LEN(result, outlen + VARHDRSZ);
  	PG_RETURN_TEXT_P(result);
  }
  
Index: contrib/tsearch2/common.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/tsearch2/common.c,v
retrieving revision 1.9
diff -c -r1.9 common.c
*** contrib/tsearch2/common.c	4 Oct 2006 00:29:46 -0000	1.9
--- contrib/tsearch2/common.c	14 Feb 2007 12:04:30 -0000
***************
*** 36,42 ****
  	text	   *out = (text *) palloc(len + VARHDRSZ);
  
  	memcpy(VARDATA(out), in, len);
! 	VARATT_SIZEP(out) = len + VARHDRSZ;
  	return out;
  }
  
--- 36,42 ----
  	text	   *out = (text *) palloc(len + VARHDRSZ);
  
  	memcpy(VARDATA(out), in, len);
! 	SET_VARLENA_LEN(out, len + VARHDRSZ);
  	return out;
  }
  
Index: contrib/tsearch2/ginidx.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/tsearch2/ginidx.c,v
retrieving revision 1.4
diff -c -r1.4 ginidx.c
*** contrib/tsearch2/ginidx.c	31 Jan 2007 15:09:45 -0000	1.4
--- contrib/tsearch2/ginidx.c	14 Feb 2007 12:04:38 -0000
***************
*** 37,43 ****
  		{
  			text	   *txt = (text *) palloc(VARHDRSZ + we->len);
  
! 			VARATT_SIZEP(txt) = VARHDRSZ + we->len;
  			memcpy(VARDATA(txt), STRPTR(vector) + we->pos, we->len);
  
  			entries[i] = PointerGetDatum(txt);
--- 37,43 ----
  		{
  			text	   *txt = (text *) palloc(VARHDRSZ + we->len);
  
! 			SET_VARLENA_LEN(txt, VARHDRSZ + we->len);
  			memcpy(VARDATA(txt), STRPTR(vector) + we->pos, we->len);
  
  			entries[i] = PointerGetDatum(txt);
***************
*** 89,95 ****
  
  				txt = (text *) palloc(VARHDRSZ + item[i].length);
  
! 				VARATT_SIZEP(txt) = VARHDRSZ + item[i].length;
  				memcpy(VARDATA(txt), GETOPERAND(query) + item[i].distance, item[i].length);
  
  				entries[j++] = PointerGetDatum(txt);
--- 89,95 ----
  
  				txt = (text *) palloc(VARHDRSZ + item[i].length);
  
! 				SET_VARLENA_LEN(txt, VARHDRSZ + item[i].length);
  				memcpy(VARDATA(txt), GETOPERAND(query) + item[i].distance, item[i].length);
  
  				entries[j++] = PointerGetDatum(txt);
Index: contrib/tsearch2/query.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/tsearch2/query.c,v
retrieving revision 1.31
diff -c -r1.31 query.c
*** contrib/tsearch2/query.c	12 Feb 2007 14:14:33 -0000	1.31
--- contrib/tsearch2/query.c	14 Feb 2007 12:04:45 -0000
***************
*** 907,913 ****
  	if (query->size == 0)
  	{
  		res = (text *) palloc(VARHDRSZ);
! 		VARATT_SIZEP(res) = VARHDRSZ;
  		PG_RETURN_POINTER(res);
  	}
  
--- 907,913 ----
  	if (query->size == 0)
  	{
  		res = (text *) palloc(VARHDRSZ);
! 		SET_VARLENA_LEN(res, VARHDRSZ);
  		PG_RETURN_POINTER(res);
  	}
  
***************
*** 916,922 ****
  	if (!q)
  	{
  		res = (text *) palloc(1 + VARHDRSZ);
! 		VARATT_SIZEP(res) = 1 + VARHDRSZ;
  		*((char *) VARDATA(res)) = 'T';
  	}
  	else
--- 916,922 ----
  	if (!q)
  	{
  		res = (text *) palloc(1 + VARHDRSZ);
! 		SET_VARLENA_LEN(res, 1 + VARHDRSZ);
  		*((char *) VARDATA(res)) = 'T';
  	}
  	else
***************
*** 929,935 ****
  		infix(&nrm, true);
  
  		res = (text *) palloc(nrm.cur - nrm.buf + VARHDRSZ);
! 		VARATT_SIZEP(res) = nrm.cur - nrm.buf + VARHDRSZ;
  		memcpy(VARDATA(res), nrm.buf, nrm.cur - nrm.buf);
  		pfree(q);
  	}
--- 929,935 ----
  		infix(&nrm, true);
  
  		res = (text *) palloc(nrm.cur - nrm.buf + VARHDRSZ);
! 		SET_VARLENA_LEN(res, nrm.cur - nrm.buf + VARHDRSZ);
  		memcpy(VARDATA(res), nrm.buf, nrm.cur - nrm.buf);
  		pfree(q);
  	}
Index: contrib/tsearch2/rank.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/tsearch2/rank.c,v
retrieving revision 1.22
diff -c -r1.22 rank.c
*** contrib/tsearch2/rank.c	26 Jan 2007 17:45:41 -0000	1.22
--- contrib/tsearch2/rank.c	14 Feb 2007 12:04:49 -0000
***************
*** 839,845 ****
  	if (!doc)
  	{
  		out = palloc(VARHDRSZ);
! 		VARATT_SIZEP(out) = VARHDRSZ;
  		PG_FREE_IF_COPY(txt, 0);
  		PG_FREE_IF_COPY(query, 1);
  		PG_RETURN_POINTER(out);
--- 839,845 ----
  	if (!doc)
  	{
  		out = palloc(VARHDRSZ);
! 		SET_VARLENA_LEN(out, VARHDRSZ);
  		PG_FREE_IF_COPY(txt, 0);
  		PG_FREE_IF_COPY(query, 1);
  		PG_RETURN_POINTER(out);
***************
*** 910,916 ****
  		dwptr++;
  	}
  
! 	VARATT_SIZEP(out) = cptr - ((char *) out);
  
  	pfree(dw);
  	for (i = 0; i < rlen; i++)
--- 910,916 ----
  		dwptr++;
  	}
  
! 	SET_VARLENA_LEN(out, cptr - ((char *) out));
  
  	pfree(dw);
  	for (i = 0; i < rlen; i++)
Index: contrib/tsearch2/ts_cfg.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/tsearch2/ts_cfg.c,v
retrieving revision 1.21
diff -c -r1.21 ts_cfg.c
*** contrib/tsearch2/ts_cfg.c	4 Oct 2006 00:29:46 -0000	1.21
--- contrib/tsearch2/ts_cfg.c	14 Feb 2007 12:04:51 -0000
***************
*** 555,561 ****
  		wrd++;
  	}
  
! 	VARATT_SIZEP(out) = ptr - ((char *) out);
  	return out;
  }
  
--- 555,561 ----
  		wrd++;
  	}
  
! 	SET_VARLENA_LEN(out, ptr - ((char *) out));
  	return out;
  }
  
Index: contrib/xml2/xpath.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/xml2/xpath.c,v
retrieving revision 1.14
diff -c -r1.14 xpath.c
*** contrib/xml2/xpath.c	4 Oct 2006 00:29:47 -0000	1.14
--- contrib/xml2/xpath.c	14 Feb 2007 12:04:56 -0000
***************
*** 212,218 ****
  	ressize = strlen(tt);
  	tout = (text *) palloc(ressize + VARHDRSZ);
  	memcpy(VARDATA(tout), tt, ressize);
! 	VARATT_SIZEP(tout) = ressize + VARHDRSZ;
  
  	xmlFree(tt);
  
--- 212,218 ----
  	ressize = strlen(tt);
  	tout = (text *) palloc(ressize + VARHDRSZ);
  	memcpy(VARDATA(tout), tt, ressize);
! 	SET_VARLENA_LEN(tout, ressize + VARHDRSZ);
  
  	xmlFree(tt);
  
***************
*** 612,618 ****
  	ressize = strlen(xpresstr);
  	xpres = (text *) palloc(ressize + VARHDRSZ);
  	memcpy(VARDATA(xpres), xpresstr, ressize);
! 	VARATT_SIZEP(xpres) = ressize + VARHDRSZ;
  
  	/* Free various storage */
  	xmlCleanupParser();
--- 612,618 ----
  	ressize = strlen(xpresstr);
  	xpres = (text *) palloc(ressize + VARHDRSZ);
  	memcpy(VARDATA(xpres), xpresstr, ressize);
! 	SET_VARLENA_LEN(xpres, ressize + VARHDRSZ);
  
  	/* Free various storage */
  	xmlCleanupParser();
Index: contrib/xml2/xslt_proc.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/contrib/xml2/xslt_proc.c,v
retrieving revision 1.7
diff -c -r1.7 xslt_proc.c
*** contrib/xml2/xslt_proc.c	11 Sep 2006 15:30:32 -0000	1.7
--- contrib/xml2/xslt_proc.c	14 Feb 2007 12:04:58 -0000
***************
*** 129,135 ****
  
  	tres = palloc(reslen + VARHDRSZ);
  	memcpy(VARDATA(tres), resstr, reslen);
! 	VARATT_SIZEP(tres) = reslen + VARHDRSZ;
  
  	PG_RETURN_TEXT_P(tres);
  }
--- 129,135 ----
  
  	tres = palloc(reslen + VARHDRSZ);
  	memcpy(VARDATA(tres), resstr, reslen);
! 	SET_VARLENA_LEN(tres, reslen + VARHDRSZ);
  
  	PG_RETURN_TEXT_P(tres);
  }
Index: doc/src/sgml/xfunc.sgml
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/doc/src/sgml/xfunc.sgml,v
retrieving revision 1.125
diff -c -r1.125 xfunc.sgml
*** doc/src/sgml/xfunc.sgml	1 Feb 2007 19:10:24 -0000	1.125
--- doc/src/sgml/xfunc.sgml	14 Feb 2007 12:06:47 -0000
***************
*** 1645,1651 ****
       * VARSIZE is the total size of the struct in bytes.
       */
      text *new_t = (text *) palloc(VARSIZE(t));
!     VARATT_SIZEP(new_t) = VARSIZE(t);
      /*
       * VARDATA is a pointer to the data region of the struct.
       */
--- 1645,1651 ----
       * VARSIZE is the total size of the struct in bytes.
       */
      text *new_t = (text *) palloc(VARSIZE(t));
!     SET_VARLENA_LEN(new_t, VARSIZE(t));
      /*
       * VARDATA is a pointer to the data region of the struct.
       */
***************
*** 1661,1667 ****
      int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
      text *new_text = (text *) palloc(new_text_size);
  
!     VARATT_SIZEP(new_text) = new_text_size;
      memcpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1) - VARHDRSZ);
      memcpy(VARDATA(new_text) + (VARSIZE(arg1) - VARHDRSZ),
             VARDATA(arg2), VARSIZE(arg2) - VARHDRSZ);
--- 1661,1667 ----
      int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
      text *new_text = (text *) palloc(new_text_size);
  
!     SET_VARLENA_LEN(new_text, new_text_size);
      memcpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1) - VARHDRSZ);
      memcpy(VARDATA(new_text) + (VARSIZE(arg1) - VARHDRSZ),
             VARDATA(arg2), VARSIZE(arg2) - VARHDRSZ);
***************
*** 1831,1837 ****
       * VARSIZE is the total size of the struct in bytes.
       */
      text     *new_t = (text *) palloc(VARSIZE(t));
!     VARATT_SIZEP(new_t) = VARSIZE(t);
      /*
       * VARDATA is a pointer to the data region of the struct.
       */
--- 1831,1837 ----
       * VARSIZE is the total size of the struct in bytes.
       */
      text     *new_t = (text *) palloc(VARSIZE(t));
!     SET_VARLENA_LEN(new_t, VARSIZE(t));
      /*
       * VARDATA is a pointer to the data region of the struct.
       */
***************
*** 1851,1857 ****
      int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
      text *new_text = (text *) palloc(new_text_size);
  
!     VARATT_SIZEP(new_text) = new_text_size;
      memcpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1) - VARHDRSZ);
      memcpy(VARDATA(new_text) + (VARSIZE(arg1) - VARHDRSZ),
             VARDATA(arg2), VARSIZE(arg2) - VARHDRSZ);
--- 1851,1857 ----
      int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
      text *new_text = (text *) palloc(new_text_size);
  
!     SET_VARLENA_LEN(new_text, new_text_size);
      memcpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1) - VARHDRSZ);
      memcpy(VARDATA(new_text) + (VARSIZE(arg1) - VARHDRSZ),
             VARDATA(arg2), VARSIZE(arg2) - VARHDRSZ);
Index: src/backend/access/common/reloptions.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/access/common/reloptions.c,v
retrieving revision 1.3
diff -c -r1.3 reloptions.c
*** src/backend/access/common/reloptions.c	5 Jan 2007 22:19:21 -0000	1.3
--- src/backend/access/common/reloptions.c	14 Feb 2007 12:06:57 -0000
***************
*** 131,137 ****
  			len = VARHDRSZ + strlen(def->defname) + 1 + strlen(value);
  			/* +1 leaves room for sprintf's trailing null */
  			t = (text *) palloc(len + 1);
! 			VARATT_SIZEP(t) = len;
  			sprintf((char *) VARATT_DATA(t), "%s=%s", def->defname, value);
  
  			astate = accumArrayResult(astate, PointerGetDatum(t),
--- 131,137 ----
  			len = VARHDRSZ + strlen(def->defname) + 1 + strlen(value);
  			/* +1 leaves room for sprintf's trailing null */
  			t = (text *) palloc(len + 1);
! 			SET_VARLENA_LEN(t, len);
  			sprintf((char *) VARATT_DATA(t), "%s=%s", def->defname, value);
  
  			astate = accumArrayResult(astate, PointerGetDatum(t),
***************
*** 267,273 ****
  	}
  
  	result = (StdRdOptions *) palloc(sizeof(StdRdOptions));
! 	VARATT_SIZEP(result) = sizeof(StdRdOptions);
  
  	result->fillfactor = fillfactor;
  
--- 267,273 ----
  	}
  
  	result = (StdRdOptions *) palloc(sizeof(StdRdOptions));
! 	SET_VARLENA_LEN(result, sizeof(StdRdOptions));
  
  	result->fillfactor = fillfactor;
  
Index: src/backend/access/heap/tuptoaster.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/access/heap/tuptoaster.c,v
retrieving revision 1.70
diff -c -r1.70 tuptoaster.c
*** src/backend/access/heap/tuptoaster.c	4 Feb 2007 20:00:37 -0000	1.70
--- src/backend/access/heap/tuptoaster.c	14 Feb 2007 12:10:09 -0000
***************
*** 104,110 ****
  
  			tmp = (PGLZ_Header *) toast_fetch_datum(attr);
  			result = (varattrib *) palloc(PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
! 			VARATT_SIZEP(result) = PGLZ_RAW_SIZE(tmp) + VARHDRSZ;
  			pglz_decompress(tmp, VARATT_DATA(result));
  			pfree(tmp);
  		}
--- 104,110 ----
  
  			tmp = (PGLZ_Header *) toast_fetch_datum(attr);
  			result = (varattrib *) palloc(PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
! 			SET_VARLENA_LEN(result, PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
  			pglz_decompress(tmp, VARATT_DATA(result));
  			pfree(tmp);
  		}
***************
*** 124,130 ****
  		PGLZ_Header *tmp = (PGLZ_Header *) attr;
  
  		result = (varattrib *) palloc(PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
! 		VARATT_SIZEP(result) = PGLZ_RAW_SIZE(tmp) + VARHDRSZ;
  		pglz_decompress(tmp, VARATT_DATA(result));
  	}
  	else
--- 124,130 ----
  		PGLZ_Header *tmp = (PGLZ_Header *) attr;
  
  		result = (varattrib *) palloc(PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
! 		SET_VARLENA_LEN(result, PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
  		pglz_decompress(tmp, VARATT_DATA(result));
  	}
  	else
***************
*** 162,168 ****
  			tmp = (PGLZ_Header *) attr;		/* compressed in main tuple */
  
  		preslice = (varattrib *) palloc(PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
! 		VARATT_SIZEP(preslice) = PGLZ_RAW_SIZE(tmp) + VARHDRSZ;
  		pglz_decompress(tmp, VARATT_DATA(preslice));
  
  		if (tmp != (PGLZ_Header *) attr)
--- 162,168 ----
  			tmp = (PGLZ_Header *) attr;		/* compressed in main tuple */
  
  		preslice = (varattrib *) palloc(PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
! 		SET_VARLENA_LEN(preslice, PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
  		pglz_decompress(tmp, VARATT_DATA(preslice));
  
  		if (tmp != (PGLZ_Header *) attr)
***************
*** 193,199 ****
  		slicelength = attrsize - sliceoffset;
  
  	result = (varattrib *) palloc(slicelength + VARHDRSZ);
! 	VARATT_SIZEP(result) = slicelength + VARHDRSZ;
  
  	memcpy(VARDATA(result), VARDATA(preslice) + sliceoffset, slicelength);
  
--- 193,199 ----
  		slicelength = attrsize - sliceoffset;
  
  	result = (varattrib *) palloc(slicelength + VARHDRSZ);
! 	SET_VARLENA_LEN(result, slicelength + VARHDRSZ);
  
  	memcpy(VARDATA(result), VARDATA(preslice) + sliceoffset, slicelength);
  
***************
*** 957,963 ****
  		VARATT_SIZE(tmp) < VARATT_SIZE(value))
  	{
  		/* successful compression */
! 		VARATT_SIZEP(tmp) |= VARATT_FLAG_COMPRESSED;
  		return PointerGetDatum(tmp);
  	}
  	else
--- 957,963 ----
  		VARATT_SIZE(tmp) < VARATT_SIZE(value))
  	{
  		/* successful compression */
! 		SET_VARLENA_COMPRESSED(tmp);
  		return PointerGetDatum(tmp);
  	}
  	else
***************
*** 1056,1062 ****
  		 * Build a tuple and store it
  		 */
  		t_values[1] = Int32GetDatum(chunk_seq++);
! 		VARATT_SIZEP(&chunk_data) = chunk_size + VARHDRSZ;
  		memcpy(VARATT_DATA(&chunk_data), data_p, chunk_size);
  		toasttup = heap_form_tuple(toasttupDesc, t_values, t_isnull);
  		if (!HeapTupleIsValid(toasttup))
--- 1056,1062 ----
  		 * Build a tuple and store it
  		 */
  		t_values[1] = Int32GetDatum(chunk_seq++);
! 		SET_VARLENA_LEN(&chunk_data, chunk_size + VARHDRSZ);
  		memcpy(VARATT_DATA(&chunk_data), data_p, chunk_size);
  		toasttup = heap_form_tuple(toasttupDesc, t_values, t_isnull);
  		if (!HeapTupleIsValid(toasttup))
***************
*** 1184,1192 ****
  	numchunks = ((ressize - 1) / TOAST_MAX_CHUNK_SIZE) + 1;
  
  	result = (varattrib *) palloc(ressize + VARHDRSZ);
! 	VARATT_SIZEP(result) = ressize + VARHDRSZ;
  	if (VARATT_IS_COMPRESSED(attr))
! 		VARATT_SIZEP(result) |= VARATT_FLAG_COMPRESSED;
  
  	/*
  	 * Open the toast relation and its index
--- 1184,1192 ----
  	numchunks = ((ressize - 1) / TOAST_MAX_CHUNK_SIZE) + 1;
  
  	result = (varattrib *) palloc(ressize + VARHDRSZ);
! 	SET_VARLENA_LEN(result, ressize + VARHDRSZ);
  	if (VARATT_IS_COMPRESSED(attr))
! 		SET_VARLENA_COMPRESSED(result);
  
  	/*
  	 * Open the toast relation and its index
***************
*** 1326,1335 ****
  		length = attrsize - sliceoffset;
  
  	result = (varattrib *) palloc(length + VARHDRSZ);
! 	VARATT_SIZEP(result) = length + VARHDRSZ;
  
  	if (VARATT_IS_COMPRESSED(attr))
! 		VARATT_SIZEP(result) |= VARATT_FLAG_COMPRESSED;
  
  	if (length == 0)
  		return result;			/* Can save a lot of work at this point! */
--- 1326,1335 ----
  		length = attrsize - sliceoffset;
  
  	result = (varattrib *) palloc(length + VARHDRSZ);
! 	SET_VARLENA_LEN(result, length + VARHDRSZ);
  
  	if (VARATT_IS_COMPRESSED(attr))
! 		SET_VARLENA_COMPRESSED(result);
  
  	if (length == 0)
  		return result;			/* Can save a lot of work at this point! */
Index: src/backend/catalog/pg_conversion.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/catalog/pg_conversion.c,v
retrieving revision 1.35
diff -c -r1.35 pg_conversion.c
*** src/backend/catalog/pg_conversion.c	14 Feb 2007 01:58:56 -0000	1.35
--- src/backend/catalog/pg_conversion.c	14 Feb 2007 12:10:13 -0000
***************
*** 338,344 ****
  	 */
  	len = strlen(result) + VARHDRSZ;
  	retval = palloc(len);
! 	VARATT_SIZEP(retval) = len;
  	memcpy(VARDATA(retval), result, len - VARHDRSZ);
  
  	pfree(result);
--- 338,344 ----
  	 */
  	len = strlen(result) + VARHDRSZ;
  	retval = palloc(len);
! 	SET_VARLENA_LEN(retval, len);
  	memcpy(VARDATA(retval), result, len - VARHDRSZ);
  
  	pfree(result);
Index: src/backend/executor/execQual.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/executor/execQual.c,v
retrieving revision 1.213
diff -c -r1.213 execQual.c
*** src/backend/executor/execQual.c	6 Feb 2007 17:35:20 -0000	1.213
--- src/backend/executor/execQual.c	14 Feb 2007 12:10:16 -0000
***************
*** 2967,2973 ****
  		int		len = buf.len + VARHDRSZ;
  
  		result = palloc(len);
! 		VARATT_SIZEP(result) = len;
  		memcpy(VARDATA(result), buf.data, buf.len);
  	}
  
--- 2967,2973 ----
  		int		len = buf.len + VARHDRSZ;
  
  		result = palloc(len);
! 		SET_VARLENA_LEN(result, len);
  		memcpy(VARDATA(result), buf.data, buf.len);
  	}
  
Index: src/backend/libpq/be-fsstubs.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/libpq/be-fsstubs.c,v
retrieving revision 1.84
diff -c -r1.84 be-fsstubs.c
*** src/backend/libpq/be-fsstubs.c	5 Jan 2007 22:19:29 -0000	1.84
--- src/backend/libpq/be-fsstubs.c	14 Feb 2007 12:10:19 -0000
***************
*** 304,310 ****
  
  	retval = (bytea *) palloc(VARHDRSZ + len);
  	totalread = lo_read(fd, VARDATA(retval), len);
! 	VARATT_SIZEP(retval) = totalread + VARHDRSZ;
  
  	PG_RETURN_BYTEA_P(retval);
  }
--- 304,310 ----
  
  	retval = (bytea *) palloc(VARHDRSZ + len);
  	totalread = lo_read(fd, VARDATA(retval), len);
! 	SET_VARLENA_LEN(retval, totalread + VARHDRSZ);
  
  	PG_RETURN_BYTEA_P(retval);
  }
Index: src/backend/libpq/pqformat.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/libpq/pqformat.c,v
retrieving revision 1.43
diff -c -r1.43 pqformat.c
*** src/backend/libpq/pqformat.c	5 Jan 2007 22:19:29 -0000	1.43
--- src/backend/libpq/pqformat.c	14 Feb 2007 12:10:21 -0000
***************
*** 386,392 ****
  
  	/* Insert correct length into bytea length word */
  	Assert(buf->len >= VARHDRSZ);
! 	VARATT_SIZEP(result) = buf->len;
  
  	return result;
  }
--- 386,392 ----
  
  	/* Insert correct length into bytea length word */
  	Assert(buf->len >= VARHDRSZ);
! 	SET_VARLENA_LEN(result, buf->len);
  
  	return result;
  }
Index: src/backend/storage/large_object/inv_api.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/storage/large_object/inv_api.c,v
retrieving revision 1.121
diff -c -r1.121 inv_api.c
*** src/backend/storage/large_object/inv_api.c	5 Jan 2007 22:19:38 -0000	1.121
--- src/backend/storage/large_object/inv_api.c	14 Feb 2007 12:10:28 -0000
***************
*** 607,613 ****
  			off += n;
  			/* compute valid length of new page */
  			len = (len >= off) ? len : off;
! 			VARATT_SIZEP(&workbuf.hdr) = len + VARHDRSZ;
  
  			/*
  			 * Form and insert updated tuple
--- 607,613 ----
  			off += n;
  			/* compute valid length of new page */
  			len = (len >= off) ? len : off;
! 			SET_VARLENA_LEN(&workbuf.hdr, len + VARHDRSZ);
  
  			/*
  			 * Form and insert updated tuple
***************
*** 651,657 ****
  			obj_desc->offset += n;
  			/* compute valid length of new page */
  			len = off + n;
! 			VARATT_SIZEP(&workbuf.hdr) = len + VARHDRSZ;
  
  			/*
  			 * Form and insert updated tuple
--- 651,657 ----
  			obj_desc->offset += n;
  			/* compute valid length of new page */
  			len = off + n;
! 			SET_VARLENA_LEN(&workbuf.hdr, len + VARHDRSZ);
  
  			/*
  			 * Form and insert updated tuple
Index: src/backend/utils/adt/arrayfuncs.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/arrayfuncs.c,v
retrieving revision 1.136
diff -c -r1.136 arrayfuncs.c
*** src/backend/utils/adt/arrayfuncs.c	5 Jan 2007 22:19:39 -0000	1.136
--- src/backend/utils/adt/arrayfuncs.c	14 Feb 2007 12:10:32 -0000
***************
*** 1573,1579 ****
  		sprintf(p, "[%d:%d]", lb[i], dimv[i] + lb[i] - 1);
  		p += strlen(p);
  	}
! 	VARATT_SIZEP(result) = strlen(VARDATA(result)) + VARHDRSZ;
  
  	PG_RETURN_TEXT_P(result);
  }
--- 1573,1579 ----
  		sprintf(p, "[%d:%d]", lb[i], dimv[i] + lb[i] - 1);
  		p += strlen(p);
  	}
! 	SET_VARLENA_LEN(result, strlen(VARDATA(result)) + VARHDRSZ);
  
  	PG_RETURN_TEXT_P(result);
  }
Index: src/backend/utils/adt/cash.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/cash.c,v
retrieving revision 1.69
diff -c -r1.69 cash.c
*** src/backend/utils/adt/cash.c	3 Jan 2007 01:19:50 -0000	1.69
--- src/backend/utils/adt/cash.c	14 Feb 2007 12:10:56 -0000
***************
*** 860,866 ****
  
  	/* make a text type for output */
  	result = (text *) palloc(strlen(buf) + VARHDRSZ);
! 	VARATT_SIZEP(result) = strlen(buf) + VARHDRSZ;
  	memcpy(VARDATA(result), buf, strlen(buf));
  
  	PG_RETURN_TEXT_P(result);
--- 860,866 ----
  
  	/* make a text type for output */
  	result = (text *) palloc(strlen(buf) + VARHDRSZ);
! 	SET_VARLENA_LEN(result, strlen(buf) + VARHDRSZ);
  	memcpy(VARDATA(result), buf, strlen(buf));
  
  	PG_RETURN_TEXT_P(result);
Index: src/backend/utils/adt/char.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/char.c,v
retrieving revision 1.46
diff -c -r1.46 char.c
*** src/backend/utils/adt/char.c	5 Jan 2007 22:19:40 -0000	1.46
--- src/backend/utils/adt/char.c	14 Feb 2007 12:11:03 -0000
***************
*** 203,213 ****
  	 */
  	if (arg1 != '\0')
  	{
! 		VARATT_SIZEP(result) = VARHDRSZ + 1;
  		*(VARDATA(result)) = arg1;
  	}
  	else
! 		VARATT_SIZEP(result) = VARHDRSZ;
  
  	PG_RETURN_TEXT_P(result);
  }
--- 203,213 ----
  	 */
  	if (arg1 != '\0')
  	{
! 		SET_VARLENA_LEN(result, VARHDRSZ + 1);
  		*(VARDATA(result)) = arg1;
  	}
  	else
! 		SET_VARLENA_LEN(result, VARHDRSZ);
  
  	PG_RETURN_TEXT_P(result);
  }
Index: src/backend/utils/adt/date.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/date.c,v
retrieving revision 1.127
diff -c -r1.127 date.c
*** src/backend/utils/adt/date.c	5 Jan 2007 22:19:40 -0000	1.127
--- src/backend/utils/adt/date.c	14 Feb 2007 12:11:09 -0000
***************
*** 891,897 ****
  
  	result = palloc(len);
  
! 	VARATT_SIZEP(result) = len;
  	memmove(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
--- 891,897 ----
  
  	result = palloc(len);
  
! 	SET_VARLENA_LEN(result, len);
  	memmove(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
***************
*** 1634,1640 ****
  
  	result = palloc(len);
  
! 	VARATT_SIZEP(result) = len;
  	memmove(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
--- 1634,1640 ----
  
  	result = palloc(len);
  
! 	SET_VARLENA_LEN(result, len);
  	memmove(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
***************
*** 2419,2425 ****
  
  	result = palloc(len);
  
! 	VARATT_SIZEP(result) = len;
  	memmove(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
--- 2419,2425 ----
  
  	result = palloc(len);
  
! 	SET_VARLENA_LEN(result, len);
  	memmove(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
Index: src/backend/utils/adt/dbsize.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/dbsize.c,v
retrieving revision 1.10
diff -c -r1.10 dbsize.c
*** src/backend/utils/adt/dbsize.c	5 Jan 2007 22:19:40 -0000	1.10
--- src/backend/utils/adt/dbsize.c	14 Feb 2007 12:11:12 -0000
***************
*** 396,402 ****
  		}
  	}
  
! 	VARATT_SIZEP(result) = strlen(VARDATA(result)) + VARHDRSZ;
  
  	PG_RETURN_TEXT_P(result);
  }
--- 396,402 ----
  		}
  	}
  
! 	SET_VARLENA_LEN(result, strlen(VARDATA(result)) + VARHDRSZ);
  
  	PG_RETURN_TEXT_P(result);
  }
Index: src/backend/utils/adt/encode.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/encode.c,v
retrieving revision 1.18
diff -c -r1.18 encode.c
*** src/backend/utils/adt/encode.c	5 Jan 2007 22:19:40 -0000	1.18
--- src/backend/utils/adt/encode.c	14 Feb 2007 12:11:22 -0000
***************
*** 63,69 ****
  	if (res > resultlen)
  		elog(FATAL, "overflow - encode estimate too small");
  
! 	VARATT_SIZEP(result) = VARHDRSZ + res;
  
  	PG_RETURN_TEXT_P(result);
  }
--- 63,69 ----
  	if (res > resultlen)
  		elog(FATAL, "overflow - encode estimate too small");
  
! 	SET_VARLENA_LEN(result, VARHDRSZ + res);
  
  	PG_RETURN_TEXT_P(result);
  }
***************
*** 99,105 ****
  	if (res > resultlen)
  		elog(FATAL, "overflow - decode estimate too small");
  
! 	VARATT_SIZEP(result) = VARHDRSZ + res;
  
  	PG_RETURN_BYTEA_P(result);
  }
--- 99,105 ----
  	if (res > resultlen)
  		elog(FATAL, "overflow - decode estimate too small");
  
! 	SET_VARLENA_LEN(result, VARHDRSZ + res);
  
  	PG_RETURN_BYTEA_P(result);
  }
Index: src/backend/utils/adt/float.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/float.c,v
retrieving revision 1.148
diff -c -r1.148 float.c
*** src/backend/utils/adt/float.c	20 Jan 2007 21:47:10 -0000	1.148
--- src/backend/utils/adt/float.c	14 Feb 2007 12:11:30 -0000
***************
*** 1214,1220 ****
  
  	result = (text *) palloc(len);
  
! 	VARATT_SIZEP(result) = len;
  	memcpy(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
--- 1214,1220 ----
  
  	result = (text *) palloc(len);
  
! 	SET_VARLENA_LEN(result, len);
  	memcpy(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
***************
*** 1265,1271 ****
  
  	result = (text *) palloc(len);
  
! 	VARATT_SIZEP(result) = len;
  	memcpy(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
--- 1265,1271 ----
  
  	result = (text *) palloc(len);
  
! 	SET_VARLENA_LEN(result, len);
  	memcpy(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
Index: src/backend/utils/adt/formatting.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/formatting.c,v
retrieving revision 1.124
diff -c -r1.124 formatting.c
*** src/backend/utils/adt/formatting.c	14 Feb 2007 05:10:55 -0000	1.124
--- src/backend/utils/adt/formatting.c	14 Feb 2007 12:12:09 -0000
***************
*** 2958,2964 ****
  	reslen = strlen(result);
  	res = (text *) palloc(reslen + VARHDRSZ);
  	memcpy(VARDATA(res), result, reslen);
! 	VARATT_SIZEP(res) = reslen + VARHDRSZ;
  
  	pfree(result);
  	return res;
--- 2958,2964 ----
  	reslen = strlen(result);
  	res = (text *) palloc(reslen + VARHDRSZ);
  	memcpy(VARDATA(res), result, reslen);
! 	SET_VARLENA_LEN(res, reslen + VARHDRSZ);
  
  	pfree(result);
  	return res;
***************
*** 4762,4768 ****
  	result		= (text *) palloc( len + 1 + VARHDRSZ);		\
  									\
  	strcpy( VARDATA(result), VARDATA(result_tmp));			\
! 	VARATT_SIZEP(result) = len + VARHDRSZ;				\
  	pfree(result_tmp);						\
  } while(0)
  
--- 4762,4768 ----
  	result		= (text *) palloc( len + 1 + VARHDRSZ);		\
  									\
  	strcpy( VARDATA(result), VARDATA(result_tmp));			\
!     SET_VARLENA_LEN(result, len + VARHDRSZ);					\
  	pfree(result_tmp);						\
  } while(0)
  
Index: src/backend/utils/adt/genfile.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/genfile.c,v
retrieving revision 1.15
diff -c -r1.15 genfile.c
*** src/backend/utils/adt/genfile.c	1 Feb 2007 19:10:28 -0000	1.15
--- src/backend/utils/adt/genfile.c	14 Feb 2007 12:12:18 -0000
***************
*** 135,141 ****
  				(errcode_for_file_access(),
  				 errmsg("could not read file \"%s\": %m", filename)));
  
! 	VARATT_SIZEP(buf) = nbytes + VARHDRSZ;
  
  	FreeFile(file);
  	pfree(filename);
--- 135,141 ----
  				(errcode_for_file_access(),
  				 errmsg("could not read file \"%s\": %m", filename)));
  
! 	SET_VARLENA_LEN(buf, nbytes + VARHDRSZ);
  
  	FreeFile(file);
  	pfree(filename);
***************
*** 261,267 ****
  			continue;
  
  		result = palloc(len + VARHDRSZ);
! 		VARATT_SIZEP(result) = len + VARHDRSZ;
  		memcpy(VARDATA(result), de->d_name, len);
  
  		SRF_RETURN_NEXT(funcctx, PointerGetDatum(result));
--- 261,267 ----
  			continue;
  
  		result = palloc(len + VARHDRSZ);
! 		SET_VARLENA_LEN(result, len + VARHDRSZ);
  		memcpy(VARDATA(result), de->d_name, len);
  
  		SRF_RETURN_NEXT(funcctx, PointerGetDatum(result));
Index: src/backend/utils/adt/int.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/int.c,v
retrieving revision 1.78
diff -c -r1.78 int.c
*** src/backend/utils/adt/int.c	1 Feb 2007 19:10:28 -0000	1.78
--- src/backend/utils/adt/int.c	14 Feb 2007 12:12:24 -0000
***************
*** 350,356 ****
  	text	   *result = (text *) palloc(7 + VARHDRSZ); /* sign,5 digits, '\0' */
  
  	pg_itoa(arg1, VARDATA(result));
! 	VARATT_SIZEP(result) = strlen(VARDATA(result)) + VARHDRSZ;
  	PG_RETURN_TEXT_P(result);
  }
  
--- 350,356 ----
  	text	   *result = (text *) palloc(7 + VARHDRSZ); /* sign,5 digits, '\0' */
  
  	pg_itoa(arg1, VARDATA(result));
! 	SET_VARLENA_LEN(result, strlen(VARDATA(result)) + VARHDRSZ);
  	PG_RETURN_TEXT_P(result);
  }
  
***************
*** 381,387 ****
  	text	   *result = (text *) palloc(12 + VARHDRSZ);		/* sign,10 digits,'\0' */
  
  	pg_ltoa(arg1, VARDATA(result));
! 	VARATT_SIZEP(result) = strlen(VARDATA(result)) + VARHDRSZ;
  	PG_RETURN_TEXT_P(result);
  }
  
--- 381,387 ----
  	text	   *result = (text *) palloc(12 + VARHDRSZ);		/* sign,10 digits,'\0' */
  
  	pg_ltoa(arg1, VARDATA(result));
! 	SET_VARLENA_LEN(result, strlen(VARDATA(result)) + VARHDRSZ);
  	PG_RETURN_TEXT_P(result);
  }
  
Index: src/backend/utils/adt/int8.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/int8.c,v
retrieving revision 1.64
diff -c -r1.64 int8.c
*** src/backend/utils/adt/int8.c	1 Feb 2007 19:10:28 -0000	1.64
--- src/backend/utils/adt/int8.c	14 Feb 2007 12:12:26 -0000
***************
*** 1171,1177 ****
  
  	result = (text *) palloc(VARHDRSZ + len);
  
! 	VARATT_SIZEP(result) = len + VARHDRSZ;
  	memcpy(VARDATA(result), s, len);
  
  	pfree(s);
--- 1171,1177 ----
  
  	result = (text *) palloc(VARHDRSZ + len);
  
! 	SET_VARLENA_LEN(result, len + VARHDRSZ);
  	memcpy(VARDATA(result), s, len);
  
  	pfree(s);
Index: src/backend/utils/adt/like.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/like.c,v
retrieving revision 1.67
diff -c -r1.67 like.c
*** src/backend/utils/adt/like.c	5 Jan 2007 22:19:41 -0000	1.67
--- src/backend/utils/adt/like.c	14 Feb 2007 12:12:29 -0000
***************
*** 532,538 ****
  		}
  	}
  
! 	VARATT_SIZEP(result) = r - ((char *) result);
  
  	PG_RETURN_BYTEA_P(result);
  }
--- 532,538 ----
  		}
  	}
  
! 	SET_VARLENA_LEN(result, r - ((char *) result));
  
  	PG_RETURN_BYTEA_P(result);
  }
Index: src/backend/utils/adt/like_match.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/like_match.c,v
retrieving revision 1.14
diff -c -r1.14 like_match.c
*** src/backend/utils/adt/like_match.c	5 Jan 2007 22:19:41 -0000	1.14
--- src/backend/utils/adt/like_match.c	14 Feb 2007 12:12:31 -0000
***************
*** 332,338 ****
  		}
  	}
  
! 	VARATT_SIZEP(result) = r - ((char *) result);
  
  	return result;
  }
--- 332,338 ----
  		}
  	}
  
! 	SET_VARLENA_LEN(result, r - ((char *) result));
  
  	return result;
  }
Index: src/backend/utils/adt/mac.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/mac.c,v
retrieving revision 1.36
diff -c -r1.36 mac.c
*** src/backend/utils/adt/mac.c	11 Jan 2006 08:43:12 -0000	1.36
--- src/backend/utils/adt/mac.c	14 Feb 2007 12:12:33 -0000
***************
*** 163,169 ****
  
  	result = palloc(len);
  
! 	VARATT_SIZEP(result) = len;
  	memmove(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
--- 163,169 ----
  
  	result = palloc(len);
  
! 	SET_VARLENA_LEN(result, len);
  	memmove(VARDATA(result), str, (len - VARHDRSZ));
  
  	pfree(str);
Index: src/backend/utils/adt/nabstime.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/nabstime.c,v
retrieving revision 1.149
diff -c -r1.149 nabstime.c
*** src/backend/utils/adt/nabstime.c	5 Jan 2007 22:19:41 -0000	1.149
--- src/backend/utils/adt/nabstime.c	14 Feb 2007 12:12:35 -0000
***************
*** 1596,1602 ****
  
  	len = VARHDRSZ + strlen(buf);
  	result = (text *) palloc(len);
! 	VARATT_SIZEP(result) = len;
  	memcpy(VARDATA(result), buf, strlen(buf));
  	PG_RETURN_TEXT_P(result);
  }
--- 1596,1602 ----
  
  	len = VARHDRSZ + strlen(buf);
  	result = (text *) palloc(len);
! 	SET_VARLENA_LEN(result, len);
  	memcpy(VARDATA(result), buf, strlen(buf));
  	PG_RETURN_TEXT_P(result);
  }
Index: src/backend/utils/adt/network.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/network.c,v
retrieving revision 1.67
diff -c -r1.67 network.c
*** src/backend/utils/adt/network.c	2 Jan 2007 22:21:08 -0000	1.67
--- src/backend/utils/adt/network.c	14 Feb 2007 12:44:39 -0000
***************
*** 105,113 ****
  					 errdetail("Value has bits set to right of mask.")));
  	}
  
! 	VARATT_SIZEP(dst) = VARHDRSZ +
! 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 		ip_addrsize(dst);
  	ip_bits(dst) = bits;
  
  	return dst;
--- 105,114 ----
  					 errdetail("Value has bits set to right of mask.")));
  	}
  
! 	SET_VARLENA_LEN(dst,
! 					VARHDRSZ +
! 					((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 					ip_addrsize(dst));
  	ip_bits(dst) = bits;
  
  	return dst;
***************
*** 220,228 ****
  		/* translator: %s is inet or cidr */
  				 errmsg("invalid length in external \"%s\" value",
  						is_cidr ? "cidr" : "inet")));
! 	VARATT_SIZEP(addr) = VARHDRSZ +
! 		((char *) ip_addr(addr) - (char *) VARDATA(addr)) +
! 		ip_addrsize(addr);
  
  	addrptr = (char *) ip_addr(addr);
  	for (i = 0; i < nb; i++)
--- 221,230 ----
  		/* translator: %s is inet or cidr */
  				 errmsg("invalid length in external \"%s\" value",
  						is_cidr ? "cidr" : "inet")));
! 	SET_VARLENA_LEN(addr,
! 					VARHDRSZ +
! 					((char *) ip_addr(addr) - (char *) VARDATA(addr)) +
! 					ip_addrsize(addr));
  
  	addrptr = (char *) ip_addr(addr);
  	for (i = 0; i < nb; i++)
***************
*** 638,644 ****
  	/* Return string as a text datum */
  	len = strlen(tmp);
  	ret = (text *) palloc(len + VARHDRSZ);
! 	VARATT_SIZEP(ret) = len + VARHDRSZ;
  	memcpy(VARDATA(ret), tmp, len);
  	PG_RETURN_TEXT_P(ret);
  }
--- 640,646 ----
  	/* Return string as a text datum */
  	len = strlen(tmp);
  	ret = (text *) palloc(len + VARHDRSZ);
! 	SET_VARLENA_LEN(ret, len + VARHDRSZ);
  	memcpy(VARDATA(ret), tmp, len);
  	PG_RETURN_TEXT_P(ret);
  }
***************
*** 667,673 ****
  	/* Return string as a text datum */
  	len = strlen(tmp);
  	ret = (text *) palloc(len + VARHDRSZ);
! 	VARATT_SIZEP(ret) = len + VARHDRSZ;
  	memcpy(VARDATA(ret), tmp, len);
  	PG_RETURN_TEXT_P(ret);
  }
--- 669,675 ----
  	/* Return string as a text datum */
  	len = strlen(tmp);
  	ret = (text *) palloc(len + VARHDRSZ);
! 	SET_VARLENA_LEN(ret, len + VARHDRSZ);
  	memcpy(VARDATA(ret), tmp, len);
  	PG_RETURN_TEXT_P(ret);
  }
***************
*** 692,698 ****
  	/* Return string as a text datum */
  	len = strlen(tmp);
  	ret = (text *) palloc(len + VARHDRSZ);
! 	VARATT_SIZEP(ret) = len + VARHDRSZ;
  	memcpy(VARDATA(ret), tmp, len);
  	PG_RETURN_TEXT_P(ret);
  }
--- 694,700 ----
  	/* Return string as a text datum */
  	len = strlen(tmp);
  	ret = (text *) palloc(len + VARHDRSZ);
! 	SET_VARLENA_LEN(ret, len + VARHDRSZ);
  	memcpy(VARDATA(ret), tmp, len);
  	PG_RETURN_TEXT_P(ret);
  }
***************
*** 717,723 ****
  	/* Return string as a text datum */
  	len = strlen(tmp);
  	ret = (text *) palloc(len + VARHDRSZ);
! 	VARATT_SIZEP(ret) = len + VARHDRSZ;
  	memcpy(VARDATA(ret), tmp, len);
  	PG_RETURN_TEXT_P(ret);
  }
--- 719,725 ----
  	/* Return string as a text datum */
  	len = strlen(tmp);
  	ret = (text *) palloc(len + VARHDRSZ);
! 	SET_VARLENA_LEN(ret, len + VARHDRSZ);
  	memcpy(VARDATA(ret), tmp, len);
  	PG_RETURN_TEXT_P(ret);
  }
***************
*** 793,801 ****
  
  	ip_family(dst) = ip_family(ip);
  	ip_bits(dst) = ip_bits(ip);
! 	VARATT_SIZEP(dst) = VARHDRSZ +
! 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 		ip_addrsize(dst);
  
  	PG_RETURN_INET_P(dst);
  }
--- 795,804 ----
  
  	ip_family(dst) = ip_family(ip);
  	ip_bits(dst) = ip_bits(ip);
! 	SET_VARLENA_LEN(dst,
! 					VARHDRSZ +
! 					((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 					ip_addrsize(dst));
  
  	PG_RETURN_INET_P(dst);
  }
***************
*** 838,846 ****
  
  	ip_family(dst) = ip_family(ip);
  	ip_bits(dst) = ip_bits(ip);
! 	VARATT_SIZEP(dst) = VARHDRSZ +
! 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 		ip_addrsize(dst);
  
  	PG_RETURN_INET_P(dst);
  }
--- 841,850 ----
  
  	ip_family(dst) = ip_family(ip);
  	ip_bits(dst) = ip_bits(ip);
! 	SET_VARLENA_LEN(dst,
! 					VARHDRSZ +
! 					((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 					ip_addrsize(dst));
  
  	PG_RETURN_INET_P(dst);
  }
***************
*** 881,889 ****
  
  	ip_family(dst) = ip_family(ip);
  	ip_bits(dst) = ip_maxbits(ip);
! 	VARATT_SIZEP(dst) = VARHDRSZ +
! 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 		ip_addrsize(dst);
  
  	PG_RETURN_INET_P(dst);
  }
--- 885,894 ----
  
  	ip_family(dst) = ip_family(ip);
  	ip_bits(dst) = ip_maxbits(ip);
! 	SET_VARLENA_LEN(dst,
! 					VARHDRSZ +
! 					((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 					ip_addrsize(dst));
  
  	PG_RETURN_INET_P(dst);
  }
***************
*** 930,938 ****
  
  	ip_family(dst) = ip_family(ip);
  	ip_bits(dst) = ip_maxbits(ip);
! 	VARATT_SIZEP(dst) = VARHDRSZ +
! 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 		ip_addrsize(dst);
  
  	PG_RETURN_INET_P(dst);
  }
--- 935,944 ----
  
  	ip_family(dst) = ip_family(ip);
  	ip_bits(dst) = ip_maxbits(ip);
! 	SET_VARLENA_LEN(dst,
! 					VARHDRSZ +
! 					((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 					ip_addrsize(dst));
  
  	PG_RETURN_INET_P(dst);
  }
***************
*** 1272,1280 ****
  	ip_bits(dst) = ip_bits(ip);
  
  	ip_family(dst) = ip_family(ip);
! 	VARATT_SIZEP(dst) = VARHDRSZ +
! 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 		ip_addrsize(dst);
  
  	PG_RETURN_INET_P(dst);
  }
--- 1278,1287 ----
  	ip_bits(dst) = ip_bits(ip);
  
  	ip_family(dst) = ip_family(ip);
! 	SET_VARLENA_LEN(dst,
! 					VARHDRSZ +
! 					((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 					ip_addrsize(dst));
  
  	PG_RETURN_INET_P(dst);
  }
***************
*** 1306,1315 ****
  	ip_bits(dst) = Max(ip_bits(ip), ip_bits(ip2));
  
  	ip_family(dst) = ip_family(ip);
! 	VARATT_SIZEP(dst) = VARHDRSZ +
! 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 		ip_addrsize(dst);
! 
  	PG_RETURN_INET_P(dst);
  }
  
--- 1313,1323 ----
  	ip_bits(dst) = Max(ip_bits(ip), ip_bits(ip2));
  
  	ip_family(dst) = ip_family(ip);
! 	SET_VARLENA_LEN(dst,
! 					VARHDRSZ +
! 					((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 					ip_addrsize(dst));
! 					
  	PG_RETURN_INET_P(dst);
  }
  
***************
*** 1340,1348 ****
  	ip_bits(dst) = Max(ip_bits(ip), ip_bits(ip2));
  
  	ip_family(dst) = ip_family(ip);
! 	VARATT_SIZEP(dst) = VARHDRSZ +
! 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 		ip_addrsize(dst);
  
  	PG_RETURN_INET_P(dst);
  }
--- 1348,1357 ----
  	ip_bits(dst) = Max(ip_bits(ip), ip_bits(ip2));
  
  	ip_family(dst) = ip_family(ip);
! 	SET_VARLENA_LEN(dst,
! 					VARHDRSZ +
! 					((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 					ip_addrsize(dst));
  
  	PG_RETURN_INET_P(dst);
  }
***************
*** 1394,1402 ****
  	ip_bits(dst) = ip_bits(ip);
  
  	ip_family(dst) = ip_family(ip);
! 	VARATT_SIZEP(dst) = VARHDRSZ +
! 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 		ip_addrsize(dst);
  
  	return dst;
  }
--- 1403,1412 ----
  	ip_bits(dst) = ip_bits(ip);
  
  	ip_family(dst) = ip_family(ip);
! 	SET_VARLENA_LEN(dst,
! 					VARHDRSZ +
! 					((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
! 					ip_addrsize(dst));
  
  	return dst;
  }
Index: src/backend/utils/adt/numeric.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/numeric.c,v
retrieving revision 1.99
diff -c -r1.99 numeric.c
*** src/backend/utils/adt/numeric.c	16 Jan 2007 21:41:13 -0000	1.99
--- src/backend/utils/adt/numeric.c	14 Feb 2007 12:27:44 -0000
***************
*** 2105,2111 ****
  
  	result = (text *) palloc(VARHDRSZ + len);
  
! 	VARATT_SIZEP(result) = len + VARHDRSZ;
  	memcpy(VARDATA(result), s, len);
  
  	pfree(s);
--- 2105,2111 ----
  
  	result = (text *) palloc(VARHDRSZ + len);
  
! 	SET_VARLENA_LEN(result, len + VARHDRSZ);
  	memcpy(VARDATA(result), s, len);
  
  	pfree(s);
Index: src/backend/utils/adt/oid.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/oid.c,v
retrieving revision 1.70
diff -c -r1.70 oid.c
*** src/backend/utils/adt/oid.c	5 Jan 2007 22:19:41 -0000	1.70
--- src/backend/utils/adt/oid.c	14 Feb 2007 12:36:14 -0000
***************
*** 434,440 ****
  
  	result = (text *) palloc(len);
  
! 	VARATT_SIZEP(result) = len;
  	memcpy(VARDATA(result), str, (len - VARHDRSZ));
  	pfree(str);
  
--- 434,440 ----
  
  	result = (text *) palloc(len);
  
! 	SET_VARLENA_LEN(result, len);
  	memcpy(VARDATA(result), str, (len - VARHDRSZ));
  	pfree(str);
  
Index: src/backend/utils/adt/oracle_compat.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/oracle_compat.c,v
retrieving revision 1.69
diff -c -r1.69 oracle_compat.c
*** src/backend/utils/adt/oracle_compat.c	8 Feb 2007 18:19:33 -0000	1.69
--- src/backend/utils/adt/oracle_compat.c	14 Feb 2007 12:38:30 -0000
***************
*** 144,150 ****
  
  	Assert(nbytes <= (size_t) (ncodes * MB_CUR_MAX));
  
! 	VARATT_SIZEP(result) = nbytes + VARHDRSZ;
  
  	return result;
  }
--- 144,150 ----
  
  	Assert(nbytes <= (size_t) (ncodes * MB_CUR_MAX));
  
! 	SET_VARLENA_LEN(result, nbytes + VARHDRSZ);
  
  	return result;
  }
***************
*** 229,235 ****
  				 errmsg("UTF-16 to UTF-8 translation failed: %lu",
  						GetLastError())));
  
! 	VARATT_SIZEP(result) = nbytes + VARHDRSZ - 1;		/* -1 to ignore null */
  
  	return result;
  }
--- 229,235 ----
  				 errmsg("UTF-16 to UTF-8 translation failed: %lu",
  						GetLastError())));
  
! 	SET_VARLENA_LEN(result, nbytes + VARHDRSZ - 1); /* -1 to ignore nul */
  
  	return result;
  }
***************
*** 278,284 ****
  	
  	in_text = palloc(nbytes + VARHDRSZ);
  	memcpy(VARDATA(in_text), str, nbytes);
! 	VARATT_SIZEP(in_text) = nbytes + VARHDRSZ;
  
  	workspace = texttowcs(in_text);
  
--- 278,284 ----
  	
  	in_text = palloc(nbytes + VARHDRSZ);
  	memcpy(VARDATA(in_text), str, nbytes);
! 	SET_VARLENA_LEN(in_text, nbytes + VARHDRSZ);
  
  	workspace = texttowcs(in_text);
  
***************
*** 312,318 ****
  	
  	in_text = palloc(nbytes + VARHDRSZ);
  	memcpy(VARDATA(in_text), str, nbytes);
! 	VARATT_SIZEP(in_text) = nbytes + VARHDRSZ;
  
  	workspace = texttowcs(in_text);
  
--- 312,318 ----
  	
  	in_text = palloc(nbytes + VARHDRSZ);
  	memcpy(VARDATA(in_text), str, nbytes);
! 	SET_VARLENA_LEN(in_text, nbytes + VARHDRSZ);
  
  	workspace = texttowcs(in_text);
  
***************
*** 639,645 ****
  		ptr1 += mlen;
  	}
  
! 	VARATT_SIZEP(ret) = ptr_ret - (char *) ret;
  
  	PG_RETURN_TEXT_P(ret);
  }
--- 639,645 ----
  		ptr1 += mlen;
  	}
  
! 	SET_VARLENA_LEN(ret, ptr_ret - (char *) ret);
  
  	PG_RETURN_TEXT_P(ret);
  }
***************
*** 735,741 ****
  			ptr2 = VARDATA(string2);
  	}
  
! 	VARATT_SIZEP(ret) = ptr_ret - (char *) ret;
  
  	PG_RETURN_TEXT_P(ret);
  }
--- 735,741 ----
  			ptr2 = VARDATA(string2);
  	}
  
! 	SET_VARLENA_LEN(ret, ptr_ret - (char *) ret);
  
  	PG_RETURN_TEXT_P(ret);
  }
***************
*** 944,950 ****
  
  	/* Return selected portion of string */
  	result = (text *) palloc(VARHDRSZ + stringlen);
! 	VARATT_SIZEP(result) = VARHDRSZ + stringlen;
  	memcpy(VARDATA(result), string, stringlen);
  
  	return result;
--- 944,950 ----
  
  	/* Return selected portion of string */
  	result = (text *) palloc(VARHDRSZ + stringlen);
! 	SET_VARLENA_LEN(result, VARHDRSZ + stringlen);
  	memcpy(VARDATA(result), string, stringlen);
  
  	return result;
***************
*** 1017,1023 ****
  	}
  
  	ret = (bytea *) palloc(VARHDRSZ + m);
! 	VARATT_SIZEP(ret) = VARHDRSZ + m;
  	memcpy(VARDATA(ret), ptr, m);
  
  	PG_RETURN_BYTEA_P(ret);
--- 1017,1023 ----
  	}
  
  	ret = (bytea *) palloc(VARHDRSZ + m);
! 	SET_VARLENA_LEN(ret, VARHDRSZ + m);
  	memcpy(VARDATA(ret), ptr, m);
  
  	PG_RETURN_BYTEA_P(ret);
***************
*** 1223,1229 ****
  		m -= source_len;
  	}
  
! 	VARATT_SIZEP(result) = retlen + VARHDRSZ;
  
  	/*
  	 * There may be some wasted space in the result if deletions occurred, but
--- 1223,1229 ----
  		m -= source_len;
  	}
  
! 	SET_VARLENA_LEN(result, retlen + VARHDRSZ);
  
  	/*
  	 * There may be some wasted space in the result if deletions occurred, but
***************
*** 1281,1287 ****
  	text	   *result;
  
  	result = (text *) palloc(VARHDRSZ + 1);
! 	VARATT_SIZEP(result) = VARHDRSZ + 1;
  	*VARDATA(result) = (char) cvalue;
  
  	PG_RETURN_TEXT_P(result);
--- 1281,1287 ----
  	text	   *result;
  
  	result = (text *) palloc(VARHDRSZ + 1);
! 	SET_VARLENA_LEN(result, VARHDRSZ + 1);
  	*VARDATA(result) = (char) cvalue;
  
  	PG_RETURN_TEXT_P(result);
***************
*** 1332,1338 ****
  
  	result = (text *) palloc(tlen);
  
! 	VARATT_SIZEP(result) = tlen;
  	cp = VARDATA(result);
  	for (i = 0; i < count; i++)
  	{
--- 1332,1338 ----
  
  	result = (text *) palloc(tlen);
  
! 	SET_VARLENA_LEN(result, tlen);
  	cp = VARDATA(result);
  	for (i = 0; i < count; i++)
  	{
Index: src/backend/utils/adt/pgstatfuncs.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/pgstatfuncs.c,v
retrieving revision 1.38
diff -c -r1.38 pgstatfuncs.c
*** src/backend/utils/adt/pgstatfuncs.c	7 Feb 2007 23:11:29 -0000	1.38
--- src/backend/utils/adt/pgstatfuncs.c	14 Feb 2007 12:38:42 -0000
***************
*** 398,404 ****
  
  	len = strlen(activity);
  	result = palloc(VARHDRSZ + len);
! 	VARATT_SIZEP(result) = VARHDRSZ + len;
  	memcpy(VARDATA(result), activity, len);
  
  	PG_RETURN_TEXT_P(result);
--- 398,404 ----
  
  	len = strlen(activity);
  	result = palloc(VARHDRSZ + len);
! 	SET_VARLENA_LEN(result, VARHDRSZ + len);
  	memcpy(VARDATA(result), activity, len);
  
  	PG_RETURN_TEXT_P(result);
Index: src/backend/utils/adt/quote.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/quote.c,v
retrieving revision 1.21
diff -c -r1.21 quote.c
*** src/backend/utils/adt/quote.c	5 Jan 2007 22:19:41 -0000	1.21
--- src/backend/utils/adt/quote.c	14 Feb 2007 12:38:46 -0000
***************
*** 39,45 ****
  
  	len = strlen(qstr);
  	result = (text *) palloc(len + VARHDRSZ);
! 	VARATT_SIZEP(result) = len + VARHDRSZ;
  	memcpy(VARDATA(result), qstr, len);
  
  	PG_RETURN_TEXT_P(result);
--- 39,45 ----
  
  	len = strlen(qstr);
  	result = (text *) palloc(len + VARHDRSZ);
! 	SET_VARLENA_LEN(result, len + VARHDRSZ);
  	memcpy(VARDATA(result), qstr, len);
  
  	PG_RETURN_TEXT_P(result);
***************
*** 92,98 ****
  	}
  	*cp2++ = '\'';
  
! 	VARATT_SIZEP(result) = cp2 - ((char *) result);
  
  	PG_RETURN_TEXT_P(result);
  }
--- 92,98 ----
  	}
  	*cp2++ = '\'';
  
! 	SET_VARLENA_LEN(result, cp2 - ((char *) result));
  
  	PG_RETURN_TEXT_P(result);
  }
Index: src/backend/utils/adt/regexp.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/regexp.c,v
retrieving revision 1.68
diff -c -r1.68 regexp.c
*** src/backend/utils/adt/regexp.c	5 Jan 2007 22:19:41 -0000	1.68
--- src/backend/utils/adt/regexp.c	14 Feb 2007 12:37:18 -0000
***************
*** 620,626 ****
  	*r++ = ')';
  	*r++ = '$';
  
! 	VARATT_SIZEP(result) = r - ((char *) result);
  
  	PG_RETURN_TEXT_P(result);
  }
--- 620,626 ----
  	*r++ = ')';
  	*r++ = '$';
  
! 	SET_VARLENA_LEN(result, r - ((char *) result));
  
  	PG_RETURN_TEXT_P(result);
  }
Index: src/backend/utils/adt/ruleutils.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/ruleutils.c,v
retrieving revision 1.249
diff -c -r1.249 ruleutils.c
*** src/backend/utils/adt/ruleutils.c	14 Feb 2007 01:58:57 -0000	1.249
--- src/backend/utils/adt/ruleutils.c	14 Feb 2007 12:37:27 -0000
***************
*** 5279,5285 ****
  
  	tlen = slen + VARHDRSZ;
  	result = (text *) palloc(tlen);
! 	VARATT_SIZEP(result) = tlen;
  	memcpy(VARDATA(result), str, slen);
  
  	pfree(str);
--- 5279,5285 ----
  
  	tlen = slen + VARHDRSZ;
  	result = (text *) palloc(tlen);
! 	SET_VARLENA_LEN(result, tlen);
  	memcpy(VARDATA(result), str, slen);
  
  	pfree(str);
Index: src/backend/utils/adt/selfuncs.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/selfuncs.c,v
retrieving revision 1.225
diff -c -r1.225 selfuncs.c
*** src/backend/utils/adt/selfuncs.c	31 Jan 2007 16:54:51 -0000	1.225
--- src/backend/utils/adt/selfuncs.c	14 Feb 2007 12:37:43 -0000
***************
*** 4731,4737 ****
  	Datum		conval;
  
  	memcpy(VARDATA(bstr), str, str_len);
! 	VARATT_SIZEP(bstr) = VARHDRSZ + str_len;
  	conval = PointerGetDatum(bstr);
  
  	return makeConst(BYTEAOID, -1, conval, false, false);
--- 4731,4737 ----
  	Datum		conval;
  
  	memcpy(VARDATA(bstr), str, str_len);
! 	SET_VARLENA_LEN(bstr, VARHDRSZ + str_len);
  	conval = PointerGetDatum(bstr);
  
  	return makeConst(BYTEAOID, -1, conval, false, false);
Index: src/backend/utils/adt/timestamp.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/timestamp.c,v
retrieving revision 1.171
diff -c -r1.171 timestamp.c
*** src/backend/utils/adt/timestamp.c	5 Jan 2007 22:19:42 -0000	1.171
--- src/backend/utils/adt/timestamp.c	14 Feb 2007 12:38:57 -0000
***************
*** 3199,3205 ****
  
  	result = palloc(len);
  
! 	VARATT_SIZEP(result) = len;
  	memmove(VARDATA(result), str, len - VARHDRSZ);
  
  	pfree(str);
--- 3199,3205 ----
  
  	result = palloc(len);
  
! 	SET_VARLENA_LEN(result, len);
  	memmove(VARDATA(result), str, len - VARHDRSZ);
  
  	pfree(str);
***************
*** 3260,3266 ****
  
  	result = palloc(len);
  
! 	VARATT_SIZEP(result) = len;
  	memmove(VARDATA(result), str, len - VARHDRSZ);
  
  	pfree(str);
--- 3260,3266 ----
  
  	result = palloc(len);
  
! 	SET_VARLENA_LEN(result, len);
  	memmove(VARDATA(result), str, len - VARHDRSZ);
  
  	pfree(str);
***************
*** 3320,3326 ****
  
  	result = palloc(len);
  
! 	VARATT_SIZEP(result) = len;
  	memmove(VARDATA(result), str, len - VARHDRSZ);
  
  	pfree(str);
--- 3320,3326 ----
  
  	result = palloc(len);
  
! 	SET_VARLENA_LEN(result, len);
  	memmove(VARDATA(result), str, len - VARHDRSZ);
  
  	pfree(str);
Index: src/backend/utils/adt/varbit.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/varbit.c,v
retrieving revision 1.52
diff -c -r1.52 varbit.c
*** src/backend/utils/adt/varbit.c	5 Jan 2007 22:19:42 -0000	1.52
--- src/backend/utils/adt/varbit.c	14 Feb 2007 12:39:41 -0000
***************
*** 160,166 ****
  	len = VARBITTOTALLEN(atttypmod);
  	/* set to 0 so that *r is always initialised and string is zero-padded */
  	result = (VarBit *) palloc0(len);
! 	VARATT_SIZEP(result) = len;
  	VARBITLEN(result) = atttypmod;
  
  	r = VARBITS(result);
--- 160,166 ----
  	len = VARBITTOTALLEN(atttypmod);
  	/* set to 0 so that *r is always initialised and string is zero-padded */
  	result = (VarBit *) palloc0(len);
! 	SET_VARLENA_LEN(result, len);
  	VARBITLEN(result) = atttypmod;
  
  	r = VARBITS(result);
***************
*** 299,305 ****
  
  	len = VARBITTOTALLEN(bitlen);
  	result = (VarBit *) palloc(len);
! 	VARATT_SIZEP(result) = len;
  	VARBITLEN(result) = bitlen;
  
  	pq_copymsgbytes(buf, (char *) VARBITS(result), VARBITBYTES(result));
--- 299,305 ----
  
  	len = VARBITTOTALLEN(bitlen);
  	result = (VarBit *) palloc(len);
! 	SET_VARLENA_LEN(result, len);
  	VARBITLEN(result) = bitlen;
  
  	pq_copymsgbytes(buf, (char *) VARBITS(result), VARBITBYTES(result));
***************
*** 356,362 ****
  	rlen = VARBITTOTALLEN(len);
  	/* set to 0 so that string is zero-padded */
  	result = (VarBit *) palloc0(rlen);
! 	VARATT_SIZEP(result) = rlen;
  	VARBITLEN(result) = len;
  
  	memcpy(VARBITS(result), VARBITS(arg),
--- 356,362 ----
  	rlen = VARBITTOTALLEN(len);
  	/* set to 0 so that string is zero-padded */
  	result = (VarBit *) palloc0(rlen);
! 	SET_VARLENA_LEN(result, rlen);
  	VARBITLEN(result) = len;
  
  	memcpy(VARBITS(result), VARBITS(arg),
***************
*** 458,464 ****
  	len = VARBITTOTALLEN(bitlen);
  	/* set to 0 so that *r is always initialised and string is zero-padded */
  	result = (VarBit *) palloc0(len);
! 	VARATT_SIZEP(result) = len;
  	VARBITLEN(result) = Min(bitlen, atttypmod);
  
  	r = VARBITS(result);
--- 458,464 ----
  	len = VARBITTOTALLEN(bitlen);
  	/* set to 0 so that *r is always initialised and string is zero-padded */
  	result = (VarBit *) palloc0(len);
! 	SET_VARLENA_LEN(result, len);
  	VARBITLEN(result) = Min(bitlen, atttypmod);
  
  	r = VARBITS(result);
***************
*** 595,601 ****
  
  	len = VARBITTOTALLEN(bitlen);
  	result = (VarBit *) palloc(len);
! 	VARATT_SIZEP(result) = len;
  	VARBITLEN(result) = bitlen;
  
  	pq_copymsgbytes(buf, (char *) VARBITS(result), VARBITBYTES(result));
--- 595,601 ----
  
  	len = VARBITTOTALLEN(bitlen);
  	result = (VarBit *) palloc(len);
! 	SET_VARLENA_LEN(result, len);
  	VARBITLEN(result) = bitlen;
  
  	pq_copymsgbytes(buf, (char *) VARBITS(result), VARBITBYTES(result));
***************
*** 656,662 ****
  
  	rlen = VARBITTOTALLEN(len);
  	result = (VarBit *) palloc(rlen);
! 	VARATT_SIZEP(result) = rlen;
  	VARBITLEN(result) = len;
  
  	memcpy(VARBITS(result), VARBITS(arg), VARBITBYTES(result));
--- 656,662 ----
  
  	rlen = VARBITTOTALLEN(len);
  	result = (VarBit *) palloc(rlen);
! 	SET_VARLENA_LEN(result, rlen);
  	VARBITLEN(result) = len;
  
  	memcpy(VARBITS(result), VARBITS(arg), VARBITBYTES(result));
***************
*** 884,890 ****
  	bytelen = VARBITTOTALLEN(bitlen1 + bitlen2);
  
  	result = (VarBit *) palloc(bytelen);
! 	VARATT_SIZEP(result) = bytelen;
  	VARBITLEN(result) = bitlen1 + bitlen2;
  
  	/* Copy the first bitstring in */
--- 884,890 ----
  	bytelen = VARBITTOTALLEN(bitlen1 + bitlen2);
  
  	result = (VarBit *) palloc(bytelen);
! 	SET_VARLENA_LEN(result, bytelen);
  	VARBITLEN(result) = bitlen1 + bitlen2;
  
  	/* Copy the first bitstring in */
***************
*** 951,957 ****
  		/* Need to return a zero-length bitstring */
  		len = VARBITTOTALLEN(0);
  		result = (VarBit *) palloc(len);
! 		VARATT_SIZEP(result) = len;
  		VARBITLEN(result) = 0;
  	}
  	else
--- 951,957 ----
  		/* Need to return a zero-length bitstring */
  		len = VARBITTOTALLEN(0);
  		result = (VarBit *) palloc(len);
! 		SET_VARLENA_LEN(result, len);
  		VARBITLEN(result) = 0;
  	}
  	else
***************
*** 963,969 ****
  		rbitlen = e1 - s1;
  		len = VARBITTOTALLEN(rbitlen);
  		result = (VarBit *) palloc(len);
! 		VARATT_SIZEP(result) = len;
  		VARBITLEN(result) = rbitlen;
  		len -= VARHDRSZ + VARBITHDRSZ;
  		/* Are we copying from a byte boundary? */
--- 963,969 ----
  		rbitlen = e1 - s1;
  		len = VARBITTOTALLEN(rbitlen);
  		result = (VarBit *) palloc(len);
! 		SET_VARLENA_LEN(result, len);
  		VARBITLEN(result) = rbitlen;
  		len -= VARHDRSZ + VARBITHDRSZ;
  		/* Are we copying from a byte boundary? */
***************
*** 1044,1050 ****
  
  	len = VARSIZE(arg1);
  	result = (VarBit *) palloc(len);
! 	VARATT_SIZEP(result) = len;
  	VARBITLEN(result) = bitlen1;
  
  	p1 = VARBITS(arg1);
--- 1044,1050 ----
  
  	len = VARSIZE(arg1);
  	result = (VarBit *) palloc(len);
! 	SET_VARLENA_LEN(result, len);
  	VARBITLEN(result) = bitlen1;
  
  	p1 = VARBITS(arg1);
***************
*** 1084,1090 ****
  				 errmsg("cannot OR bit strings of different sizes")));
  	len = VARSIZE(arg1);
  	result = (VarBit *) palloc(len);
! 	VARATT_SIZEP(result) = len;
  	VARBITLEN(result) = bitlen1;
  
  	p1 = VARBITS(arg1);
--- 1084,1090 ----
  				 errmsg("cannot OR bit strings of different sizes")));
  	len = VARSIZE(arg1);
  	result = (VarBit *) palloc(len);
! 	SET_VARLENA_LEN(result, len);
  	VARBITLEN(result) = bitlen1;
  
  	p1 = VARBITS(arg1);
***************
*** 1131,1137 ****
  
  	len = VARSIZE(arg1);
  	result = (VarBit *) palloc(len);
! 	VARATT_SIZEP(result) = len;
  	VARBITLEN(result) = bitlen1;
  
  	p1 = VARBITS(arg1);
--- 1131,1137 ----
  
  	len = VARSIZE(arg1);
  	result = (VarBit *) palloc(len);
! 	SET_VARLENA_LEN(result, len);
  	VARBITLEN(result) = bitlen1;
  
  	p1 = VARBITS(arg1);
***************
*** 1164,1170 ****
  	bits8		mask;
  
  	result = (VarBit *) palloc(VARSIZE(arg));
! 	VARATT_SIZEP(result) = VARSIZE(arg);
  	VARBITLEN(result) = VARBITLEN(arg);
  
  	p = VARBITS(arg);
--- 1164,1170 ----
  	bits8		mask;
  
  	result = (VarBit *) palloc(VARSIZE(arg));
! 	SET_VARLENA_LEN(result, VARSIZE(arg));
  	VARBITLEN(result) = VARBITLEN(arg);
  
  	p = VARBITS(arg);
***************
*** 1205,1211 ****
  											Int32GetDatum(-shft)));
  
  	result = (VarBit *) palloc(VARSIZE(arg));
! 	VARATT_SIZEP(result) = VARSIZE(arg);
  	VARBITLEN(result) = VARBITLEN(arg);
  	r = VARBITS(result);
  
--- 1205,1211 ----
  											Int32GetDatum(-shft)));
  
  	result = (VarBit *) palloc(VARSIZE(arg));
! 	SET_VARLENA_LEN(result, VARSIZE(arg));
  	VARBITLEN(result) = VARBITLEN(arg);
  	r = VARBITS(result);
  
***************
*** 1264,1270 ****
  											Int32GetDatum(-shft)));
  
  	result = (VarBit *) palloc(VARSIZE(arg));
! 	VARATT_SIZEP(result) = VARSIZE(arg);
  	VARBITLEN(result) = VARBITLEN(arg);
  	r = VARBITS(result);
  
--- 1264,1270 ----
  											Int32GetDatum(-shft)));
  
  	result = (VarBit *) palloc(VARSIZE(arg));
! 	SET_VARLENA_LEN(result, VARSIZE(arg));
  	VARBITLEN(result) = VARBITLEN(arg);
  	r = VARBITS(result);
  
***************
*** 1324,1330 ****
  
  	rlen = VARBITTOTALLEN(typmod);
  	result = (VarBit *) palloc(rlen);
! 	VARATT_SIZEP(result) = rlen;
  	VARBITLEN(result) = typmod;
  
  	r = VARBITS(result);
--- 1324,1330 ----
  
  	rlen = VARBITTOTALLEN(typmod);
  	result = (VarBit *) palloc(rlen);
! 	SET_VARLENA_LEN(result, rlen);
  	VARBITLEN(result) = typmod;
  
  	r = VARBITS(result);
***************
*** 1399,1405 ****
  
  	rlen = VARBITTOTALLEN(typmod);
  	result = (VarBit *) palloc(rlen);
! 	VARATT_SIZEP(result) = rlen;
  	VARBITLEN(result) = typmod;
  
  	r = VARBITS(result);
--- 1399,1405 ----
  
  	rlen = VARBITTOTALLEN(typmod);
  	result = (VarBit *) palloc(rlen);
! 	SET_VARLENA_LEN(result, rlen);
  	VARBITLEN(result) = typmod;
  
  	r = VARBITS(result);
Index: src/backend/utils/adt/varchar.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/varchar.c,v
retrieving revision 1.121
diff -c -r1.121 varchar.c
*** src/backend/utils/adt/varchar.c	5 Jan 2007 22:19:42 -0000	1.121
--- src/backend/utils/adt/varchar.c	14 Feb 2007 12:39:53 -0000
***************
*** 169,175 ****
  	}
  
  	result = (BpChar *) palloc(maxlen + VARHDRSZ);
! 	VARATT_SIZEP(result) = maxlen + VARHDRSZ;
  	r = VARDATA(result);
  	memcpy(r, s, len);
  
--- 169,175 ----
  	}
  
  	result = (BpChar *) palloc(maxlen + VARHDRSZ);
! 	SET_VARLENA_LEN(result, maxlen + VARHDRSZ);
  	r = VARDATA(result);
  	memcpy(r, s, len);
  
***************
*** 328,334 ****
  	s = VARDATA(source);
  
  	result = palloc(maxlen);
! 	VARATT_SIZEP(result) = maxlen;
  	r = VARDATA(result);
  
  	memcpy(r, s, len - VARHDRSZ);
--- 328,334 ----
  	s = VARDATA(source);
  
  	result = palloc(maxlen);
! 	SET_VARLENA_LEN(result, maxlen);
  	r = VARDATA(result);
  
  	memcpy(r, s, len - VARHDRSZ);
***************
*** 352,358 ****
  
  	result = (BpChar *) palloc(VARHDRSZ + 1);
  
! 	VARATT_SIZEP(result) = VARHDRSZ + 1;
  	*(VARDATA(result)) = c;
  
  	PG_RETURN_BPCHAR_P(result);
--- 352,358 ----
  
  	result = (BpChar *) palloc(VARHDRSZ + 1);
  
! 	SET_VARLENA_LEN(result, VARHDRSZ + 1);
  	*(VARDATA(result)) = c;
  
  	PG_RETURN_BPCHAR_P(result);
***************
*** 409,415 ****
  	len = strlen(NameStr(*s));
  	result = (BpChar *) palloc(VARHDRSZ + len);
  	memcpy(VARDATA(result), NameStr(*s), len);
! 	VARATT_SIZEP(result) = len + VARHDRSZ;
  
  	PG_RETURN_BPCHAR_P(result);
  }
--- 409,415 ----
  	len = strlen(NameStr(*s));
  	result = (BpChar *) palloc(VARHDRSZ + len);
  	memcpy(VARDATA(result), NameStr(*s), len);
! 	SET_VARLENA_LEN(result, len + VARHDRSZ);
  
  	PG_RETURN_BPCHAR_P(result);
  }
***************
*** 477,483 ****
  	}
  
  	result = (VarChar *) palloc(len + VARHDRSZ);
! 	VARATT_SIZEP(result) = len + VARHDRSZ;
  	memcpy(VARDATA(result), s, len);
  
  	return result;
--- 477,483 ----
  	}
  
  	result = (VarChar *) palloc(len + VARHDRSZ);
! 	SET_VARLENA_LEN(result, len + VARHDRSZ);
  	memcpy(VARDATA(result), s, len);
  
  	return result;
***************
*** 601,607 ****
  
  	len = maxmblen + VARHDRSZ;
  	result = palloc(len);
! 	VARATT_SIZEP(result) = len;
  	memcpy(VARDATA(result), VARDATA(source), len - VARHDRSZ);
  
  	PG_RETURN_VARCHAR_P(result);
--- 601,607 ----
  
  	len = maxmblen + VARHDRSZ;
  	result = palloc(len);
! 	SET_VARLENA_LEN(result, len);
  	memcpy(VARDATA(result), VARDATA(source), len - VARHDRSZ);
  
  	PG_RETURN_VARCHAR_P(result);
Index: src/backend/utils/adt/varlena.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/varlena.c,v
retrieving revision 1.154
diff -c -r1.154 varlena.c
*** src/backend/utils/adt/varlena.c	5 Jan 2007 22:19:42 -0000	1.154
--- src/backend/utils/adt/varlena.c	14 Feb 2007 12:40:29 -0000
***************
*** 124,130 ****
  
  	byte += VARHDRSZ;
  	result = (bytea *) palloc(byte);
! 	VARATT_SIZEP(result) = byte;	/* set varlena length */
  
  	tp = inputText;
  	rp = VARDATA(result);
--- 124,130 ----
  
  	byte += VARHDRSZ;
  	result = (bytea *) palloc(byte);
! 	SET_VARLENA_LEN(result, byte);
  
  	tp = inputText;
  	rp = VARDATA(result);
***************
*** 233,239 ****
  
  	nbytes = buf->len - buf->cursor;
  	result = (bytea *) palloc(nbytes + VARHDRSZ);
! 	VARATT_SIZEP(result) = nbytes + VARHDRSZ;
  	pq_copymsgbytes(buf, VARDATA(result), nbytes);
  	PG_RETURN_BYTEA_P(result);
  }
--- 233,239 ----
  
  	nbytes = buf->len - buf->cursor;
  	result = (bytea *) palloc(nbytes + VARHDRSZ);
! 	SET_VARLENA_LEN(result, nbytes + VARHDRSZ);
  	pq_copymsgbytes(buf, VARDATA(result), nbytes);
  	PG_RETURN_BYTEA_P(result);
  }
***************
*** 264,270 ****
  
  	len = strlen(inputText);
  	result = (text *) palloc(len + VARHDRSZ);
! 	VARATT_SIZEP(result) = len + VARHDRSZ;
  
  	memcpy(VARDATA(result), inputText, len);
  
--- 264,270 ----
  
  	len = strlen(inputText);
  	result = (text *) palloc(len + VARHDRSZ);
! 	SET_VARLENA_LEN(result, len + VARHDRSZ);
  
  	memcpy(VARDATA(result), inputText, len);
  
***************
*** 303,309 ****
  	str = pq_getmsgtext(buf, buf->len - buf->cursor, &nbytes);
  
  	result = (text *) palloc(nbytes + VARHDRSZ);
! 	VARATT_SIZEP(result) = nbytes + VARHDRSZ;
  	memcpy(VARDATA(result), str, nbytes);
  	pfree(str);
  	PG_RETURN_TEXT_P(result);
--- 303,309 ----
  	str = pq_getmsgtext(buf, buf->len - buf->cursor, &nbytes);
  
  	result = (text *) palloc(nbytes + VARHDRSZ);
! 	SET_VARLENA_LEN(result, nbytes + VARHDRSZ);
  	memcpy(VARDATA(result), str, nbytes);
  	pfree(str);
  	PG_RETURN_TEXT_P(result);
***************
*** 466,472 ****
  	result = (text *) palloc(len);
  
  	/* Set size of result string... */
! 	VARATT_SIZEP(result) = len;
  
  	/* Fill data field of result string... */
  	ptr = VARDATA(result);
--- 466,472 ----
  	result = (text *) palloc(len);
  
  	/* Set size of result string... */
! 	SET_VARLENA_LEN(result, len);
  
  	/* Fill data field of result string... */
  	ptr = VARDATA(result);
***************
*** 737,743 ****
  			p += pg_mblen(p);
  
  		ret = (text *) palloc(VARHDRSZ + (p - s));
! 		VARATT_SIZEP(ret) = VARHDRSZ + (p - s);
  		memcpy(VARDATA(ret), s, (p - s));
  
  		if (slice != (text *) DatumGetPointer(str))
--- 737,743 ----
  			p += pg_mblen(p);
  
  		ret = (text *) palloc(VARHDRSZ + (p - s));
! 		SET_VARLENA_LEN(ret, VARHDRSZ + (p - s));
  		memcpy(VARDATA(ret), s, (p - s));
  
  		if (slice != (text *) DatumGetPointer(str))
***************
*** 1409,1415 ****
  	result = (bytea *) palloc(len);
  
  	/* Set size of result string... */
! 	VARATT_SIZEP(result) = len;
  
  	/* Fill data field of result string... */
  	ptr = VARDATA(result);
--- 1409,1415 ----
  	result = (bytea *) palloc(len);
  
  	/* Set size of result string... */
! 	SET_VARLENA_LEN(result, len);
  
  	/* Fill data field of result string... */
  	ptr = VARDATA(result);
***************
*** 1761,1767 ****
  #endif
  
  	result = palloc(VARHDRSZ + len);
! 	VARATT_SIZEP(result) = VARHDRSZ + len;
  	memcpy(VARDATA(result), NameStr(*s), len);
  
  	PG_RETURN_TEXT_P(result);
--- 1761,1767 ----
  #endif
  
  	result = palloc(VARHDRSZ + len);
! 	SET_VARLENA_LEN(result, VARHDRSZ + len);
  	memcpy(VARDATA(result), NameStr(*s), len);
  
  	PG_RETURN_TEXT_P(result);
***************
*** 2593,2599 ****
  
  		/* must build a temp text datum to pass to accumArrayResult */
  		result_text = (text *) palloc(VARHDRSZ + chunk_len);
! 		VARATT_SIZEP(result_text) = VARHDRSZ + chunk_len;
  		memcpy(VARDATA(result_text), start_ptr, chunk_len);
  
  		/* stash away this field */
--- 2593,2599 ----
  
  		/* must build a temp text datum to pass to accumArrayResult */
  		result_text = (text *) palloc(VARHDRSZ + chunk_len);
! 		SET_VARLENA_LEN(result_text, VARHDRSZ + chunk_len);
  		memcpy(VARDATA(result_text), start_ptr, chunk_len);
  
  		/* stash away this field */
Index: src/backend/utils/adt/version.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/version.c,v
retrieving revision 1.14
diff -c -r1.14 version.c
*** src/backend/utils/adt/version.c	20 Jan 2007 01:08:42 -0000	1.14
--- src/backend/utils/adt/version.c	14 Feb 2007 12:40:32 -0000
***************
*** 23,29 ****
  	int			n = strlen(PG_VERSION_STR);
  	text	   *ret = (text *) palloc(n + VARHDRSZ);
  
! 	VARATT_SIZEP(ret) = n + VARHDRSZ;
  	memcpy(VARDATA(ret), PG_VERSION_STR, n);
  
  	PG_RETURN_TEXT_P(ret);
--- 23,29 ----
  	int			n = strlen(PG_VERSION_STR);
  	text	   *ret = (text *) palloc(n + VARHDRSZ);
  
! 	SET_VARLENA_LEN(ret, n + VARHDRSZ);
  	memcpy(VARDATA(ret), PG_VERSION_STR, n);
  
  	PG_RETURN_TEXT_P(ret);
Index: src/backend/utils/adt/xml.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/adt/xml.c,v
retrieving revision 1.28
diff -c -r1.28 xml.c
*** src/backend/utils/adt/xml.c	13 Feb 2007 15:56:12 -0000	1.28
--- src/backend/utils/adt/xml.c	14 Feb 2007 12:40:46 -0000
***************
*** 105,111 ****
  
  	len = strlen(s);
  	vardata = palloc(len + VARHDRSZ);
! 	VARATT_SIZEP(vardata) = len + VARHDRSZ;
  	memcpy(VARDATA(vardata), s, len);
  
  	/*
--- 105,111 ----
  
  	len = strlen(s);
  	vardata = palloc(len + VARHDRSZ);
! 	SET_VARLENA_LEN(vardata, len + VARHDRSZ);
  	memcpy(VARDATA(vardata), s, len);
  
  	/*
***************
*** 202,208 ****
  	str = pq_getmsgtext(buf, buf->len - buf->cursor, &nbytes);
  
  	result = palloc(nbytes + VARHDRSZ);
! 	VARATT_SIZEP(result) = nbytes + VARHDRSZ;
  	memcpy(VARDATA(result), str, nbytes);
  
  	parse_xml_decl((xmlChar *) str, NULL, NULL, &encoding, NULL);
--- 202,208 ----
  	str = pq_getmsgtext(buf, buf->len - buf->cursor, &nbytes);
  
  	result = palloc(nbytes + VARHDRSZ);
! 	SET_VARLENA_LEN(result, nbytes + VARHDRSZ);
  	memcpy(VARDATA(result), str, nbytes);
  
  	parse_xml_decl((xmlChar *) str, NULL, NULL, &encoding, NULL);
***************
*** 228,234 ****
  		nbytes = strlen(newstr);
  
  		result = palloc(nbytes + VARHDRSZ);
! 		VARATT_SIZEP(result) = nbytes + VARHDRSZ;
  		memcpy(VARDATA(result), newstr, nbytes);
  	}
  
--- 228,234 ----
  		nbytes = strlen(newstr);
  
  		result = palloc(nbytes + VARHDRSZ);
! 		SET_VARLENA_LEN(result, nbytes + VARHDRSZ);
  		memcpy(VARDATA(result), newstr, nbytes);
  	}
  
***************
*** 269,275 ****
  
  	len = buf->len + VARHDRSZ;
  	result = palloc(len);
! 	VARATT_SIZEP(result) = len;
  	memcpy(VARDATA(result), buf->data, buf->len);
  
  	return result;
--- 269,275 ----
  
  	len = buf->len + VARHDRSZ;
  	result = palloc(len);
! 	SET_VARLENA_LEN(result, len);
  	memcpy(VARDATA(result), buf->data, buf->len);
  
  	return result;
***************
*** 285,291 ****
  
  	len = strlen(string) + VARHDRSZ;
  	result = palloc(len);
! 	VARATT_SIZEP(result) = len;
  	memcpy(VARDATA(result), string, len - VARHDRSZ);
  
  	return result;
--- 285,291 ----
  
  	len = strlen(string) + VARHDRSZ;
  	result = palloc(len);
! 	SET_VARLENA_LEN(result, len);
  	memcpy(VARDATA(result), string, len - VARHDRSZ);
  
  	return result;
***************
*** 301,307 ****
  
  	len = xmlBufferLength(buf) + VARHDRSZ;
  	result = palloc(len);
! 	VARATT_SIZEP(result) = len;
  	memcpy(VARDATA(result), xmlBufferContent(buf), len - VARHDRSZ);
  
  	return result;
--- 301,307 ----
  
  	len = xmlBufferLength(buf) + VARHDRSZ;
  	result = palloc(len);
! 	SET_VARLENA_LEN(result, len);
  	memcpy(VARDATA(result), xmlBufferContent(buf), len - VARHDRSZ);
  
  	return result;
Index: src/backend/utils/mb/mbutils.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/backend/utils/mb/mbutils.c,v
retrieving revision 1.61
diff -c -r1.61 mbutils.c
*** src/backend/utils/mb/mbutils.c	24 Dec 2006 00:57:48 -0000	1.61
--- src/backend/utils/mb/mbutils.c	14 Feb 2007 12:40:48 -0000
***************
*** 339,345 ****
  	 */
  	len = strlen((char *) result) + VARHDRSZ;
  	retval = palloc(len);
! 	VARATT_SIZEP(retval) = len;
  	memcpy(VARDATA(retval), result, len - VARHDRSZ);
  
  	if (result != str)
--- 339,345 ----
  	 */
  	len = strlen((char *) result) + VARHDRSZ;
  	retval = palloc(len);
! 	SET_VARLENA_LEN(retval, len);
  	memcpy(VARDATA(retval), result, len - VARHDRSZ);
  
  	if (result != str)
Index: src/include/postgres.h
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/include/postgres.h,v
retrieving revision 1.76
diff -c -r1.76 postgres.h
*** src/include/postgres.h	5 Jan 2007 22:19:50 -0000	1.76
--- src/include/postgres.h	14 Feb 2007 12:34:32 -0000
***************
*** 88,95 ****
  #define VARATT_MASK_FLAGS		0xc0000000
  #define VARATT_MASK_SIZE		0x3fffffff
  
! #define VARATT_SIZEP(_PTR)	(((varattrib *)(_PTR))->va_header)
! #define VARATT_SIZE(PTR)	(VARATT_SIZEP(PTR) & VARATT_MASK_SIZE)
  #define VARATT_DATA(PTR)	(((varattrib *)(PTR))->va_content.va_data)
  #define VARATT_CDATA(PTR)	(((varattrib *)(PTR))->va_content.va_compressed.va_data)
  
--- 88,100 ----
  #define VARATT_MASK_FLAGS		0xc0000000
  #define VARATT_MASK_SIZE		0x3fffffff
  
! #define SET_VARLENA_LEN(PTR,LEN) (AssertMacro((LEN) <= VARATT_MASK_SIZE), \
! 								  _VARATT_SIZEP(PTR) = (LEN))
! #define SET_VARLENA_COMPRESSED(PTR) (_VARATT_SIZEP(PTR) |= VARATT_FLAG_COMPRESSED)
! #define SET_VARLENA_EXTERNAL(PTR)   (_VARATT_SIZEP(PTR) |= VARATT_FLAG_EXTERNAL)
! 
! #define _VARATT_SIZEP(_PTR)	(((varattrib *)(_PTR))->va_header)
! #define VARATT_SIZE(PTR)	(_VARATT_SIZEP(PTR) & VARATT_MASK_SIZE)
  #define VARATT_DATA(PTR)	(((varattrib *)(PTR))->va_content.va_data)
  #define VARATT_CDATA(PTR)	(((varattrib *)(PTR))->va_content.va_compressed.va_data)
  
***************
*** 97,107 ****
  #define VARDATA(__PTR)		VARATT_DATA(__PTR)
  
  #define VARATT_IS_EXTENDED(PTR)		\
! 				((VARATT_SIZEP(PTR) & VARATT_MASK_FLAGS) != 0)
  #define VARATT_IS_EXTERNAL(PTR)		\
! 				((VARATT_SIZEP(PTR) & VARATT_FLAG_EXTERNAL) != 0)
  #define VARATT_IS_COMPRESSED(PTR)	\
! 				((VARATT_SIZEP(PTR) & VARATT_FLAG_COMPRESSED) != 0)
  
  
  /* ----------------------------------------------------------------
--- 102,112 ----
  #define VARDATA(__PTR)		VARATT_DATA(__PTR)
  
  #define VARATT_IS_EXTENDED(PTR)		\
! 				((_VARATT_SIZEP(PTR) & VARATT_MASK_FLAGS) != 0)
  #define VARATT_IS_EXTERNAL(PTR)		\
! 				((_VARATT_SIZEP(PTR) & VARATT_FLAG_EXTERNAL) != 0)
  #define VARATT_IS_COMPRESSED(PTR)	\
! 				((_VARATT_SIZEP(PTR) & VARATT_FLAG_COMPRESSED) != 0)
  
  
  /* ----------------------------------------------------------------
Index: src/tutorial/funcs.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/tutorial/funcs.c,v
retrieving revision 1.16
diff -c -r1.16 funcs.c
*** src/tutorial/funcs.c	27 Sep 2006 16:19:42 -0000	1.16
--- src/tutorial/funcs.c	14 Feb 2007 12:41:08 -0000
***************
*** 71,77 ****
  	 */
  	text	   *new_t = (text *) palloc(VARSIZE(t));
  
! 	VARATT_SIZEP(new_t) = VARSIZE(t);
  
  	/*
  	 * VARDATA is a pointer to the data region of the struct.
--- 71,77 ----
  	 */
  	text	   *new_t = (text *) palloc(VARSIZE(t));
  
! 	SET_VARLENA_LEN(new_t, VARSIZE(t));
  
  	/*
  	 * VARDATA is a pointer to the data region of the struct.
***************
*** 90,96 ****
  	int32		new_text_size = arg1_size + arg2_size + VARHDRSZ;
  	text	   *new_text = (text *) palloc(new_text_size);
  
! 	VARATT_SIZEP(new_text) = new_text_size;
  	memcpy(VARDATA(new_text), VARDATA(arg1), arg1_size);
  	memcpy(VARDATA(new_text) + arg1_size, VARDATA(arg2), arg2_size);
  	return new_text;
--- 90,96 ----
  	int32		new_text_size = arg1_size + arg2_size + VARHDRSZ;
  	text	   *new_text = (text *) palloc(new_text_size);
  
! 	SET_VARLENA_LEN(new_text, new_text_size);
  	memcpy(VARDATA(new_text), VARDATA(arg1), arg1_size);
  	memcpy(VARDATA(new_text) + arg1_size, VARDATA(arg2), arg2_size);
  	return new_text;
Index: src/tutorial/funcs_new.c
===================================================================
RCS file: /home/stark/src/REPOSITORY/pgsql/src/tutorial/funcs_new.c,v
retrieving revision 1.12
diff -c -r1.12 funcs_new.c
*** src/tutorial/funcs_new.c	27 Sep 2006 16:19:42 -0000	1.12
--- src/tutorial/funcs_new.c	14 Feb 2007 12:41:13 -0000
***************
*** 83,89 ****
  	 */
  	text	   *new_t = (text *) palloc(VARSIZE(t));
  
! 	VARATT_SIZEP(new_t) = VARSIZE(t);
  
  	/*
  	 * VARDATA is a pointer to the data region of the struct.
--- 83,89 ----
  	 */
  	text	   *new_t = (text *) palloc(VARSIZE(t));
  
! 	SET_VARLENA_LEN(new_t, VARSIZE(t));
  
  	/*
  	 * VARDATA is a pointer to the data region of the struct.
***************
*** 106,112 ****
  	int32		new_text_size = arg1_size + arg2_size + VARHDRSZ;
  	text	   *new_text = (text *) palloc(new_text_size);
  
! 	VARATT_SIZEP(new_text) = new_text_size;
  	memcpy(VARDATA(new_text), VARDATA(arg1), arg1_size);
  	memcpy(VARDATA(new_text) + arg1_size, VARDATA(arg2), arg2_size);
  	PG_RETURN_TEXT_P(new_text);
--- 106,112 ----
  	int32		new_text_size = arg1_size + arg2_size + VARHDRSZ;
  	text	   *new_text = (text *) palloc(new_text_size);
  
! 	SET_VARLENA_LEN(new_text, new_text_size);
  	memcpy(VARDATA(new_text), VARDATA(arg1), arg1_size);
  	memcpy(VARDATA(new_text) + arg1_size, VARDATA(arg2), arg2_size);
  	PG_RETURN_TEXT_P(new_text);
