diff --git a/contrib/btree_gist/btree_bit.c b/contrib/btree_gist/btree_bit.c
index d8e401acfcf6f7ed4775bee94b9396c303469f1d..534c9af8131126f0765a1b0f728ed6b78b799ec1 100644
--- a/contrib/btree_gist/btree_bit.c
+++ b/contrib/btree_gist/btree_bit.c
@@ -70,7 +70,7 @@ gbt_bit_xfrm(bytea *leaf)
 	int			s = INTALIGN(VARBITBYTES(leaf) + VARHDRSZ);
 
 	out = palloc(s);
-	VARATT_SIZEP(out) = s;
+	SET_VARSIZE(out, s);
 	memcpy((void *) VARDATA(out), (void *) VARBITS(leaf), VARBITBYTES(leaf));
 	return out;
 }
diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c
index ae44e754913a080f1e0b3dd148e80044610b0d83..1ad5c0d99bb32605dae31ba8d41843454519eec1 100644
--- a/contrib/btree_gist/btree_utils_var.c
+++ b/contrib/btree_gist/btree_utils_var.c
@@ -51,42 +51,34 @@ gbt_var_key_readable(const GBT_VARKEY * k)
 GBT_VARKEY *
 gbt_var_key_copy(const GBT_VARKEY_R * u, bool force_node)
 {
-
 	GBT_VARKEY *r = NULL;
 
 	if (u->lower == u->upper && !force_node)
 	{							/* leaf key mode */
-
 		r = (GBT_VARKEY *) palloc(VARSIZE(u->lower) + VARHDRSZ);
-		memcpy((void *) VARDATA(r), (void *) u->lower, VARSIZE(u->lower));
-		r->vl_len = VARSIZE(u->lower) + VARHDRSZ;
-
+		memcpy(VARDATA(r), u->lower, VARSIZE(u->lower));
+		SET_VARSIZE(r, VARSIZE(u->lower) + VARHDRSZ);
 	}
 	else
 	{							/* node key mode  */
-
 		r = (GBT_VARKEY *) palloc(INTALIGN(VARSIZE(u->lower)) + VARSIZE(u->upper) + VARHDRSZ);
-		memcpy((void *) VARDATA(r), (void *) u->lower, VARSIZE(u->lower));
-		memcpy((void *) &(((char *) r)[VARHDRSZ + INTALIGN(VARSIZE(u->lower))]), (void *) u->upper, VARSIZE(u->upper));
-		r->vl_len = INTALIGN(VARSIZE(u->lower)) + VARSIZE(u->upper) + VARHDRSZ;
-
+		memcpy(VARDATA(r), u->lower, VARSIZE(u->lower));
+		memcpy(VARDATA(r) + INTALIGN(VARSIZE(u->lower)), u->upper, VARSIZE(u->upper));
+		SET_VARSIZE(r, INTALIGN(VARSIZE(u->lower)) + VARSIZE(u->upper) + VARHDRSZ);
 	}
 	return r;
-
 }
 
 
 static GBT_VARKEY *
 gbt_var_leaf2node(GBT_VARKEY * leaf, const gbtree_vinfo * tinfo)
 {
-
 	GBT_VARKEY *out = leaf;
 
 	if (tinfo->f_l2n)
 		out = (*tinfo->f_l2n) (leaf);
 
 	return out;
-
 }
 
 
@@ -212,19 +204,22 @@ gbt_var_node_truncate(const GBT_VARKEY * node, int32 cpf_length, const gbtree_vi
 	GBT_VARKEY_R r = gbt_var_key_readable(node);
 	int32		len1 = VARSIZE(r.lower) - VARHDRSZ;
 	int32		len2 = VARSIZE(r.upper) - VARHDRSZ;
-	int32		si = 0;
+	int32		si;
+	char	   *out2;
 
 	len1 = Min(len1, (cpf_length + 1));
 	len2 = Min(len2, (cpf_length + 1));
 
-	si = 2 * VARHDRSZ + INTALIGN(VARHDRSZ + len1) + len2;
+	si = 2 * VARHDRSZ + INTALIGN(len1 + VARHDRSZ) + len2;
 	out = (GBT_VARKEY *) palloc(si);
-	out->vl_len = si;
-	memcpy((void *) &(((char *) out)[VARHDRSZ]), (void *) r.lower, len1 + VARHDRSZ);
-	memcpy((void *) &(((char *) out)[VARHDRSZ + INTALIGN(VARHDRSZ + len1)]), (void *) r.upper, len2 + VARHDRSZ);
+	SET_VARSIZE(out, si);
+
+	memcpy(VARDATA(out), r.lower, len1 + VARHDRSZ);
+	SET_VARSIZE(VARDATA(out), len1 + VARHDRSZ);
 
-	*((int32 *) &(((char *) out)[VARHDRSZ])) = len1 + VARHDRSZ;
-	*((int32 *) &(((char *) out)[VARHDRSZ + INTALIGN(VARHDRSZ + len1)])) = len2 + VARHDRSZ;
+	out2 = VARDATA(out) + INTALIGN(len1 + VARHDRSZ);
+	memcpy(out2, r.upper, len2 + VARHDRSZ);
+	SET_VARSIZE(out2, len2 + VARHDRSZ);
 
 	return out;
 }
diff --git a/contrib/chkpass/chkpass.c b/contrib/chkpass/chkpass.c
index 642212de5137a901ab0e019208ce387bb8e2ef2f..18cac99ca6bf1c57bff0327d581dd2ff14d9c674 100644
--- a/contrib/chkpass/chkpass.c
+++ b/contrib/chkpass/chkpass.c
@@ -4,7 +4,7 @@
  * darcy@druid.net
  * http://www.druid.net/darcy/
  *
- * $PostgreSQL: pgsql/contrib/chkpass/chkpass.c,v 1.18 2007/02/07 00:52:35 petere Exp $
+ * $PostgreSQL: pgsql/contrib/chkpass/chkpass.c,v 1.19 2007/02/27 23:48:05 tgl Exp $
  * best viewed with tabs set to 4
  */
 
@@ -125,10 +125,12 @@ chkpass_rout(PG_FUNCTION_ARGS)
 {
 	chkpass    *password = (chkpass *) PG_GETARG_POINTER(0);
 	text	   *result;
+	int			slen;
 
-	result = (text *) palloc(VARHDRSZ + 16);
-	result->vl_len = VARHDRSZ + strlen(password->password);
-	memcpy(result->vl_dat, password->password, strlen(password->password));
+	slen = strlen(password->password);
+	result = (text *) palloc(VARHDRSZ + slen);
+	SET_VARSIZE(result, VARHDRSZ + slen);
+	memcpy(VARDATA(result), password->password, slen);
 
 	PG_RETURN_TEXT_P(result);
 }
@@ -145,11 +147,11 @@ chkpass_eq(PG_FUNCTION_ARGS)
 	chkpass    *a1 = (chkpass *) PG_GETARG_POINTER(0);
 	text	   *a2 = (text *) PG_GETARG_TEXT_P(1);
 	char		str[10];
-	int			sz = 8;
+	int			sz;
 
-	if (a2->vl_len < 12)
-		sz = a2->vl_len - 4;
-	strlcpy(str, a2->vl_dat, sz + 1);
+	sz = Min(VARSIZE(a2) - VARHDRSZ, 8);
+	memcpy(str, VARDATA(a2), sz);
+	str[sz] = '\0';
 	PG_RETURN_BOOL(strcmp(a1->password, crypt(str, a1->password)) == 0);
 }
 
@@ -160,10 +162,10 @@ chkpass_ne(PG_FUNCTION_ARGS)
 	chkpass    *a1 = (chkpass *) PG_GETARG_POINTER(0);
 	text	   *a2 = (text *) PG_GETARG_TEXT_P(1);
 	char		str[10];
-	int			sz = 8;
+	int			sz;
 
-	if (a2->vl_len < 12)
-		sz = a2->vl_len - 4;
-	strlcpy(str, a2->vl_dat, sz + 1);
+	sz = Min(VARSIZE(a2) - VARHDRSZ, 8);
+	memcpy(str, VARDATA(a2), sz);
+	str[sz] = '\0';
 	PG_RETURN_BOOL(strcmp(a1->password, crypt(str, a1->password)) != 0);
 }
diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c
index 9d3b46648efa99443874e4ace81cd749ab568372..7406807044b8a85065d879138fbd2fb393e22e86 100644
--- a/contrib/cube/cube.c
+++ b/contrib/cube/cube.c
@@ -1,5 +1,5 @@
 /******************************************************************************
-  $PostgreSQL: pgsql/contrib/cube/cube.c,v 1.30 2006/10/04 00:29:44 momjian Exp $
+  $PostgreSQL: pgsql/contrib/cube/cube.c,v 1.31 2007/02/27 23:48:05 tgl Exp $
 
   This file contains routines that can be bound to a Postgres backend and
   called by the backend in the process of processing queries.  The calling
@@ -223,9 +223,8 @@ cube_a_f8_f8(PG_FUNCTION_ARGS)
 	dll = ARRPTR(ll);
 
 	size = offsetof(NDBOX, x[0]) + sizeof(double) * 2 * dim;
-	result = (NDBOX *) palloc(size);
-	memset(result, 0, size);
-	result->size = size;
+	result = (NDBOX *) palloc0(size);
+	SET_VARSIZE(result, size);
 	result->dim = dim;
 
 	for (i = 0; i < dim; i++)
@@ -264,9 +263,8 @@ cube_a_f8(PG_FUNCTION_ARGS)
 	dur = ARRPTR(ur);
 
 	size = offsetof(NDBOX, x[0]) + sizeof(double) * 2 * dim;
-	result = (NDBOX *) palloc(size);
-	memset(result, 0, size);
-	result->size = size;
+	result = (NDBOX *) palloc0(size);
+	SET_VARSIZE(result, size);
 	result->dim = dim;
 
 	for (i = 0; i < dim; i++)
@@ -303,9 +301,8 @@ cube_subset(PG_FUNCTION_ARGS)
 
 	dim = ARRNELEMS(idx);
 	size = offsetof(NDBOX, x[0]) + sizeof(double) * 2 * dim;
-	result = (NDBOX *) palloc(size);
-	memset(result, 0, size);
-	result->size = size;
+	result = (NDBOX *) palloc0(size);
+	SET_VARSIZE(result, size);
 	result->dim = dim;
 
 	for (i = 0; i < dim; i++)
@@ -432,7 +429,7 @@ g_cube_union(PG_FUNCTION_ARGS)
 	/*
 	 * sizep = sizeof(NDBOX); -- NDBOX has variable size
 	 */
-	*sizep = tmp->size;
+	*sizep = VARSIZE(tmp);
 
 	for (i = 1; i < entryvec->n; i++)
 	{
@@ -744,7 +741,7 @@ g_cube_binary_union(NDBOX * r1, NDBOX * r2, int *sizep)
 	NDBOX	   *retval;
 
 	retval = cube_union_v0(r1, r2);
-	*sizep = retval->size;
+	*sizep = VARSIZE(retval);
 
 	return (retval);
 }
@@ -759,16 +756,14 @@ cube_union_v0(NDBOX * a, NDBOX * b)
 
 	if (a->dim >= b->dim)
 	{
-		result = palloc(a->size);
-		memset(result, 0, a->size);
-		result->size = a->size;
+		result = palloc0(VARSIZE(a));
+		SET_VARSIZE(result, VARSIZE(a));
 		result->dim = a->dim;
 	}
 	else
 	{
-		result = palloc(b->size);
-		memset(result, 0, b->size);
-		result->size = b->size;
+		result = palloc0(VARSIZE(b));
+		SET_VARSIZE(result, VARSIZE(b));
 		result->dim = b->dim;
 	}
 
@@ -834,16 +829,14 @@ cube_inter(PG_FUNCTION_ARGS)
 
 	if (a->dim >= b->dim)
 	{
-		result = palloc(a->size);
-		memset(result, 0, a->size);
-		result->size = a->size;
+		result = palloc0(VARSIZE(a));
+		SET_VARSIZE(result, VARSIZE(a));
 		result->dim = a->dim;
 	}
 	else
 	{
-		result = palloc(b->size);
-		memset(result, 0, b->size);
-		result->size = b->size;
+		result = palloc0(VARSIZE(b));
+		SET_VARSIZE(result, VARSIZE(b));
 		result->dim = b->dim;
 	}
 
@@ -1371,9 +1364,8 @@ cube_enlarge(PG_FUNCTION_ARGS)
 	if (a->dim > dim)
 		dim = a->dim;
 	size = offsetof(NDBOX, x[0]) + sizeof(double) * dim * 2;
-	result = (NDBOX *) palloc(size);
-	memset(result, 0, size);
-	result->size = size;
+	result = (NDBOX *) palloc0(size);
+	SET_VARSIZE(result, size);
 	result->dim = dim;
 	for (i = 0, j = dim, k = a->dim; i < a->dim; i++, j++, k++)
 	{
@@ -1411,9 +1403,8 @@ cube_f8(PG_FUNCTION_ARGS)
 	int			size;
 
 	size = offsetof(NDBOX, x[0]) + sizeof(double) * 2;
-	result = (NDBOX *) palloc(size);
-	memset(result, 0, size);
-	result->size = size;
+	result = (NDBOX *) palloc0(size);
+	SET_VARSIZE(result, size);
 	result->dim = 1;
 	result->x[0] = PG_GETARG_FLOAT8(0);
 	result->x[1] = result->x[0];
@@ -1429,9 +1420,8 @@ cube_f8_f8(PG_FUNCTION_ARGS)
 	int			size;
 
 	size = offsetof(NDBOX, x[0]) + sizeof(double) * 2;
-	result = (NDBOX *) palloc(size);
-	memset(result, 0, size);
-	result->size = size;
+	result = (NDBOX *) palloc0(size);
+	SET_VARSIZE(result, size);
 	result->dim = 1;
 	result->x[0] = PG_GETARG_FLOAT8(0);
 	result->x[1] = PG_GETARG_FLOAT8(1);
@@ -1454,9 +1444,8 @@ cube_c_f8(PG_FUNCTION_ARGS)
 	x = PG_GETARG_FLOAT8(1);
 
 	size = offsetof(NDBOX, x[0]) + sizeof(double) * (c->dim + 1) *2;
-	result = (NDBOX *) palloc(size);
-	memset(result, 0, size);
-	result->size = size;
+	result = (NDBOX *) palloc0(size);
+	SET_VARSIZE(result, size);
 	result->dim = c->dim + 1;
 	for (i = 0; i < c->dim; i++)
 	{
@@ -1485,9 +1474,8 @@ cube_c_f8_f8(PG_FUNCTION_ARGS)
 	x2 = PG_GETARG_FLOAT8(2);
 
 	size = offsetof(NDBOX, x[0]) + sizeof(double) * (c->dim + 1) *2;
-	result = (NDBOX *) palloc(size);
-	memset(result, 0, size);
-	result->size = size;
+	result = (NDBOX *) palloc0(size);
+	SET_VARSIZE(result, size);
 	result->dim = c->dim + 1;
 	for (i = 0; i < c->dim; i++)
 	{
diff --git a/contrib/cube/cubedata.h b/contrib/cube/cubedata.h
index f4f2238aac74fa2b9ceaefc4212378d05f0ad500..9eaf97be3b47b9b3b379fe5f261a049c07a13d41 100644
--- a/contrib/cube/cubedata.h
+++ b/contrib/cube/cubedata.h
@@ -1,9 +1,10 @@
-/* $PostgreSQL: pgsql/contrib/cube/cubedata.h,v 1.7 2006/03/11 04:38:28 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/cube/cubedata.h,v 1.8 2007/02/27 23:48:05 tgl Exp $ */
 
 #define CUBE_MAX_DIM (100)
+
 typedef struct NDBOX
 {
-	unsigned int size;			/* required to be a Postgres varlena type */
+	int32		vl_len_;		/* varlena header (do not touch directly!) */
 	unsigned int dim;
 	double		x[1];
 }	NDBOX;
diff --git a/contrib/cube/cubeparse.y b/contrib/cube/cubeparse.y
index 1211f131eed6c09bc9e6d7a8d565bd9765c5e81d..e867dc8731a8389779c1025a9ddcb867a85a3867 100644
--- a/contrib/cube/cubeparse.y
+++ b/contrib/cube/cubeparse.y
@@ -2,7 +2,7 @@
 /* NdBox = [(lowerleft),(upperright)] */
 /* [(xLL(1)...xLL(N)),(xUR(1)...xUR(n))] */
 
-/* $PostgreSQL: pgsql/contrib/cube/cubeparse.y,v 1.16 2006/03/11 04:38:28 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/cube/cubeparse.y,v 1.17 2007/02/27 23:48:05 tgl Exp $ */
 
 #define YYPARSE_PARAM result  /* need this to pass a pointer (void *) to yyparse */
 #define YYSTYPE char *
@@ -165,9 +165,8 @@ write_box(unsigned int dim, char *str1, char *str2)
   int i; 
   int size = offsetof(NDBOX, x[0]) + sizeof(double) * dim * 2;
 	    
-  bp = palloc(size);
-  memset(bp, 0, size);
-  bp->size = size;
+  bp = palloc0(size);
+  SET_VARSIZE(bp, size);
   bp->dim = dim;
 	    
   s = str1;
@@ -198,9 +197,8 @@ write_point_as_box(char *str, int dim)
   
   size = offsetof(NDBOX, x[0]) + sizeof(double) * dim * 2;
 
-  bp = palloc(size);
-  memset(bp, 0, size);
-  bp->size = size;
+  bp = palloc0(size);
+  SET_VARSIZE(bp, size);
   bp->dim = dim;
   
   i = 0;
diff --git a/contrib/fuzzystrmatch/dmetaphone.c b/contrib/fuzzystrmatch/dmetaphone.c
index d9140518dbccbb4e382996060820e08ea90dc620..acd9d0c62925307e0547a899684b2eb4940cac88 100644
--- a/contrib/fuzzystrmatch/dmetaphone.c
+++ b/contrib/fuzzystrmatch/dmetaphone.c
@@ -1,7 +1,7 @@
 /*
  * This is a port of the Double Metaphone algorithm for use in PostgreSQL.
  *
- * $PostgreSQL: pgsql/contrib/fuzzystrmatch/dmetaphone.c,v 1.10 2006/09/22 21:39:56 tgl Exp $
+ * $PostgreSQL: pgsql/contrib/fuzzystrmatch/dmetaphone.c,v 1.11 2007/02/27 23:48:05 tgl Exp $
  *
  * Double Metaphone computes 2 "sounds like" strings - a primary and an
  * alternate. In most cases they are the same, but for foreign names
@@ -165,10 +165,9 @@ dmetaphone(PG_FUNCTION_ARGS)
 		code = "";
 	rsize = VARHDRSZ + strlen(code);
 	result = (text *) palloc(rsize);
-	memset(result, 0, rsize);
 	rptr = VARDATA(result);
-	memcpy(rptr, code, strlen(code));
-	VARATT_SIZEP(result) = rsize;
+	memcpy(rptr, code, rsize - VARHDRSZ);
+	SET_VARSIZE(result, rsize);
 	PG_RETURN_TEXT_P(result);
 }
 
@@ -206,10 +205,9 @@ dmetaphone_alt(PG_FUNCTION_ARGS)
 		code = "";
 	rsize = VARHDRSZ + strlen(code);
 	result = (text *) palloc(rsize);
-	memset(result, 0, rsize);
 	rptr = VARDATA(result);
-	memcpy(rptr, code, strlen(code));
-	VARATT_SIZEP(result) = rsize;
+	memcpy(rptr, code, rsize - VARHDRSZ);
+	SET_VARSIZE(result, rsize);
 	PG_RETURN_TEXT_P(result);
 }
 
diff --git a/contrib/hstore/hstore_op.c b/contrib/hstore/hstore_op.c
index 915436c3d1a1e2331058aa228ab45306966f93c8..f16a58988e1e3a1b90402f8ea4731bd8ed04fb33 100644
--- a/contrib/hstore/hstore_op.c
+++ b/contrib/hstore/hstore_op.c
@@ -54,7 +54,7 @@ fetchval(PG_FUNCTION_ARGS)
 
 	out = palloc(VARHDRSZ + entry->vallen);
 	memcpy(VARDATA(out), STRPTR(hs) + entry->pos + entry->keylen, entry->vallen);
-	VARATT_SIZEP(out) = VARHDRSZ + entry->vallen;
+	SET_VARSIZE(out, VARHDRSZ + entry->vallen);
 
 	PG_FREE_IF_COPY(hs, 0);
 	PG_FREE_IF_COPY(key, 1);
@@ -310,7 +310,7 @@ akeys(PG_FUNCTION_ARGS)
 	{
 		text	   *item = (text *) palloc(VARHDRSZ + ptr->keylen);
 
-		VARATT_SIZEP(item) = VARHDRSZ + ptr->keylen;
+		SET_VARSIZE(item, VARHDRSZ + ptr->keylen);
 		memcpy(VARDATA(item), base + ptr->pos, ptr->keylen);
 		d[ptr - ARRPTR(hs)] = PointerGetDatum(item);
 		ptr++;
@@ -355,7 +355,7 @@ avals(PG_FUNCTION_ARGS)
 		int			vallen = (ptr->valisnull) ? 0 : ptr->vallen;
 		text	   *item = (text *) palloc(VARHDRSZ + vallen);
 
-		VARATT_SIZEP(item) = VARHDRSZ + vallen;
+		SET_VARSIZE(item, VARHDRSZ + vallen);
 		memcpy(VARDATA(item), base + ptr->pos + ptr->keylen, vallen);
 		d[ptr - ARRPTR(hs)] = PointerGetDatum(item);
 		ptr++;
@@ -431,7 +431,7 @@ skeys(PG_FUNCTION_ARGS)
 		HEntry	   *ptr = &(ARRPTR(st->hs)[st->i]);
 		text	   *item = (text *) palloc(VARHDRSZ + ptr->keylen);
 
-		VARATT_SIZEP(item) = VARHDRSZ + ptr->keylen;
+		SET_VARSIZE(item, VARHDRSZ + ptr->keylen);
 		memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos, ptr->keylen);
 		st->i++;
 
@@ -483,7 +483,7 @@ svals(PG_FUNCTION_ARGS)
 			int			vallen = ptr->vallen;
 			text	   *item = (text *) palloc(VARHDRSZ + vallen);
 
-			VARATT_SIZEP(item) = VARHDRSZ + vallen;
+			SET_VARSIZE(item, VARHDRSZ + vallen);
 			memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos + ptr->keylen, vallen);
 			st->i++;
 
@@ -593,7 +593,7 @@ each(PG_FUNCTION_ARGS)
 		HeapTuple	tuple;
 
 		item = (text *) palloc(VARHDRSZ + ptr->keylen);
-		VARATT_SIZEP(item) = VARHDRSZ + ptr->keylen;
+		SET_VARSIZE(item, VARHDRSZ + ptr->keylen);
 		memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos, ptr->keylen);
 		dvalues[0] = PointerGetDatum(item);
 
@@ -607,7 +607,7 @@ each(PG_FUNCTION_ARGS)
 			int			vallen = ptr->vallen;
 
 			item = (text *) palloc(VARHDRSZ + vallen);
-			VARATT_SIZEP(item) = VARHDRSZ + vallen;
+			SET_VARSIZE(item, VARHDRSZ + vallen);
 			memcpy(VARDATA(item), STRPTR(st->hs) + ptr->pos + ptr->keylen, vallen);
 			dvalues[1] = PointerGetDatum(item);
 		}
diff --git a/contrib/intagg/int_aggregate.c b/contrib/intagg/int_aggregate.c
index 6567f7f02694fcb3afb257c64ccbb7df4f497017..8edae1febedd36c1fe221eeac44019d4bf6967fa 100644
--- a/contrib/intagg/int_aggregate.c
+++ b/contrib/intagg/int_aggregate.c
@@ -5,7 +5,7 @@
  * DMN Digital Music Network.
  * www.dmn.com
  *
- * $PostgreSQL: pgsql/contrib/intagg/int_aggregate.c,v 1.25 2006/07/11 17:04:12 momjian Exp $
+ * $PostgreSQL: pgsql/contrib/intagg/int_aggregate.c,v 1.26 2007/02/27 23:48:06 tgl Exp $
  *
  * Copyright (C) Digital Music Network
  * December 20, 2001
@@ -88,7 +88,7 @@ GetPGArray(PGARRAY * p, AggState *aggstate, bool fAdd)
 		int			cb = PGARRAY_SIZE(START_NUM);
 
 		p = (PGARRAY *) MemoryContextAlloc(aggstate->aggcontext, cb);
-		p->a.size = cb;
+		SET_VARSIZE(p, cb);
 		p->a.ndim = 1;
 		p->a.dataoffset = 0;	/* we don't support nulls, for now */
 		p->a.elemtype = INT4OID;
@@ -105,8 +105,8 @@ GetPGArray(PGARRAY * p, AggState *aggstate, bool fAdd)
 			int			cbNew = PGARRAY_SIZE(n);
 
 			pn = (PGARRAY *) MemoryContextAlloc(aggstate->aggcontext, cbNew);
-			memcpy(pn, p, p->a.size);
-			pn->a.size = cbNew;
+			memcpy(pn, p, VARSIZE(p));
+			SET_VARSIZE(pn, cbNew);
 			pn->lower = n;
 			/* do not pfree(p), because nodeAgg.c will */
 			p = pn;
@@ -132,7 +132,7 @@ ShrinkPGArray(PGARRAY * p)
 	memcpy(pnew, p, cb);
 
 	/* fix up the fields in the new array to match normal conventions */
-	pnew->a.size = cb;
+	SET_VARSIZE(pnew, cb);
 	pnew->lower = 1;
 
 	/* do not pfree(p), because nodeAgg.c will */
diff --git a/contrib/intarray/_int_bool.c b/contrib/intarray/_int_bool.c
index 23ee8f1dada416d790e82cb15b53e40f6f12d30f..b6a5d1b1e8984d82b37f1665b64cbed765747948 100644
--- a/contrib/intarray/_int_bool.c
+++ b/contrib/intarray/_int_bool.c
@@ -766,7 +766,7 @@ querytree(PG_FUNCTION_ARGS)
 	if (len == 0)
 	{
 		res = (text *) palloc(1 + VARHDRSZ);
-		VARATT_SIZEP(res) = 1 + VARHDRSZ;
+		SET_VARSIZE(res, 1 + VARHDRSZ);
 		*((char *) VARDATA(res)) = 'T';
 	}
 	else
@@ -778,7 +778,7 @@ querytree(PG_FUNCTION_ARGS)
 		infix(&nrm, true);
 
 		res = (text *) palloc(nrm.cur - nrm.buf + VARHDRSZ);
-		VARATT_SIZEP(res) = nrm.cur - nrm.buf + VARHDRSZ;
+		SET_VARSIZE(res, nrm.cur - nrm.buf + VARHDRSZ);
 		memcpy(VARDATA(res), nrm.buf, nrm.cur - nrm.buf);
 	}
 	pfree(q);
diff --git a/contrib/intarray/_int_tool.c b/contrib/intarray/_int_tool.c
index 2ad0ef0cc04ebf3da23cc8feb297390a2c137b19..fead4ff30dcea82195823fa2c7ded8ed5521a64f 100644
--- a/contrib/intarray/_int_tool.c
+++ b/contrib/intarray/_int_tool.c
@@ -226,7 +226,7 @@ new_intArrayType(int num)
 
 	r = (ArrayType *) palloc0(nbytes);
 
-	ARR_SIZE(r) = nbytes;
+	SET_VARSIZE(r, nbytes);
 	ARR_NDIM(r) = NDIM;
 	r->dataoffset = 0;			/* marker for no null bitmap */
 	ARR_ELEMTYPE(r) = INT4OID;
@@ -246,7 +246,7 @@ resize_intArrayType(ArrayType *a, int num)
 
 	a = (ArrayType *) repalloc(a, nbytes);
 
-	a->size = nbytes;
+	SET_VARSIZE(a, nbytes);
 	*((int *) ARR_DIMS(a)) = num;
 	return a;
 }
diff --git a/contrib/ltree/ltree_op.c b/contrib/ltree/ltree_op.c
index 9b8a360ca897e2d56490009f5d6de860fd381727..5f80394a713c566fe63bc8053cfcc38a11966251 100644
--- a/contrib/ltree/ltree_op.c
+++ b/contrib/ltree/ltree_op.c
@@ -1,7 +1,7 @@
 /*
  * op function for ltree
  * Teodor Sigaev <teodor@stack.net>
- * $PostgreSQL: pgsql/contrib/ltree/ltree_op.c,v 1.14 2006/10/04 00:29:45 momjian Exp $
+ * $PostgreSQL: pgsql/contrib/ltree/ltree_op.c,v 1.15 2007/02/27 23:48:06 tgl Exp $
  */
 
 #include "ltree.h"
@@ -557,7 +557,7 @@ ltree2text(PG_FUNCTION_ARGS)
 		curlevel = LEVEL_NEXT(curlevel);
 	}
 
-	VARATT_SIZEP(out) = VARHDRSZ + (ptr - VARDATA(out));
+	SET_VARSIZE(out, ptr - ((char *) out));
 	PG_FREE_IF_COPY(in, 0);
 
 	PG_RETURN_POINTER(out);
diff --git a/contrib/pg_trgm/trgm_op.c b/contrib/pg_trgm/trgm_op.c
index f31b9bf572aa767ccc58c0e28c6980d1a9eb994d..e247756a39996c136fa9a1ac3628909d5a7e35a2 100644
--- a/contrib/pg_trgm/trgm_op.c
+++ b/contrib/pg_trgm/trgm_op.c
@@ -203,7 +203,7 @@ show_trgm(PG_FUNCTION_ARGS)
 	{
 		text	   *item = (text *) palloc(VARHDRSZ + 3);
 
-		VARATT_SIZEP(item) = VARHDRSZ + 3;
+		SET_VARSIZE(item, VARHDRSZ + 3);
 		CPTRGM(VARDATA(item), ptr);
 		d[ptr - GETARR(trg)] = PointerGetDatum(item);
 		ptr++;
diff --git a/contrib/pgcrypto/pgcrypto.c b/contrib/pgcrypto/pgcrypto.c
index 054ba4404bb4121d39326d1bc30b7d807376d0a8..6e2963ff2477b6d6f49e2407f2a67747488721f7 100644
--- a/contrib/pgcrypto/pgcrypto.c
+++ b/contrib/pgcrypto/pgcrypto.c
@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgcrypto.c,v 1.25 2006/11/10 06:28:29 neilc Exp $
+ * $PostgreSQL: pgsql/contrib/pgcrypto/pgcrypto.c,v 1.26 2007/02/27 23:48:06 tgl Exp $
  */
 
 #include "postgres.h"
@@ -68,7 +68,7 @@ pg_digest(PG_FUNCTION_ARGS)
 	hlen = px_md_result_size(md);
 
 	res = (text *) palloc(hlen + VARHDRSZ);
-	VARATT_SIZEP(res) = hlen + VARHDRSZ;
+	SET_VARSIZE(res, hlen + VARHDRSZ);
 
 	arg = PG_GETARG_BYTEA_P(0);
 	len = VARSIZE(arg) - VARHDRSZ;
@@ -106,7 +106,7 @@ pg_hmac(PG_FUNCTION_ARGS)
 	hlen = px_hmac_result_size(h);
 
 	res = (text *) palloc(hlen + VARHDRSZ);
-	VARATT_SIZEP(res) = hlen + VARHDRSZ;
+	SET_VARSIZE(res, hlen + VARHDRSZ);
 
 	arg = PG_GETARG_BYTEA_P(0);
 	key = PG_GETARG_BYTEA_P(1);
@@ -150,7 +150,7 @@ pg_gen_salt(PG_FUNCTION_ARGS)
 				 errmsg("gen_salt: %s", px_strerror(len))));
 
 	res = (text *) palloc(len + VARHDRSZ);
-	VARATT_SIZEP(res) = len + VARHDRSZ;
+	SET_VARSIZE(res, len + VARHDRSZ);
 	memcpy(VARDATA(res), buf, len);
 
 	PG_FREE_IF_COPY(arg0, 0);
@@ -184,7 +184,7 @@ pg_gen_salt_rounds(PG_FUNCTION_ARGS)
 				 errmsg("gen_salt: %s", px_strerror(len))));
 
 	res = (text *) palloc(len + VARHDRSZ);
-	VARATT_SIZEP(res) = len + VARHDRSZ;
+	SET_VARSIZE(res, len + VARHDRSZ);
 	memcpy(VARDATA(res), buf, len);
 
 	PG_FREE_IF_COPY(arg0, 0);
@@ -238,7 +238,7 @@ pg_crypt(PG_FUNCTION_ARGS)
 	clen = strlen(cres);
 
 	res = (text *) palloc(clen + VARHDRSZ);
-	VARATT_SIZEP(res) = clen + VARHDRSZ;
+	SET_VARSIZE(res, clen + VARHDRSZ);
 	memcpy(VARDATA(res), cres, clen);
 	pfree(resbuf);
 
@@ -293,7 +293,7 @@ pg_encrypt(PG_FUNCTION_ARGS)
 				 errmsg("encrypt error: %s", px_strerror(err))));
 	}
 
-	VARATT_SIZEP(res) = VARHDRSZ + rlen;
+	SET_VARSIZE(res, VARHDRSZ + rlen);
 	PG_RETURN_BYTEA_P(res);
 }
 
@@ -336,7 +336,7 @@ pg_decrypt(PG_FUNCTION_ARGS)
 				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
 				 errmsg("decrypt error: %s", px_strerror(err))));
 
-	VARATT_SIZEP(res) = VARHDRSZ + rlen;
+	SET_VARSIZE(res, VARHDRSZ + rlen);
 
 	PG_FREE_IF_COPY(data, 0);
 	PG_FREE_IF_COPY(key, 1);
@@ -389,7 +389,7 @@ pg_encrypt_iv(PG_FUNCTION_ARGS)
 				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
 				 errmsg("encrypt_iv error: %s", px_strerror(err))));
 
-	VARATT_SIZEP(res) = VARHDRSZ + rlen;
+	SET_VARSIZE(res, VARHDRSZ + rlen);
 
 	PG_FREE_IF_COPY(data, 0);
 	PG_FREE_IF_COPY(key, 1);
@@ -443,7 +443,7 @@ pg_decrypt_iv(PG_FUNCTION_ARGS)
 				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
 				 errmsg("decrypt_iv error: %s", px_strerror(err))));
 
-	VARATT_SIZEP(res) = VARHDRSZ + rlen;
+	SET_VARSIZE(res, VARHDRSZ + rlen);
 
 	PG_FREE_IF_COPY(data, 0);
 	PG_FREE_IF_COPY(key, 1);
@@ -469,7 +469,7 @@ pg_random_bytes(PG_FUNCTION_ARGS)
 				 errmsg("Length not in range")));
 
 	res = palloc(VARHDRSZ + len);
-	VARATT_SIZEP(res) = VARHDRSZ + len;
+	SET_VARSIZE(res, VARHDRSZ + len);
 
 	/* generate result */
 	err = px_get_random_bytes((uint8 *) VARDATA(res), len);
diff --git a/contrib/pgcrypto/pgp-pgsql.c b/contrib/pgcrypto/pgp-pgsql.c
index 3483274e501a229084995d2004366d270e22a002..9f38c621c932b7c8eaf605cde586dbe67aa2c595 100644
--- a/contrib/pgcrypto/pgp-pgsql.c
+++ b/contrib/pgcrypto/pgp-pgsql.c
@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-pgsql.c,v 1.8 2006/11/10 06:28:29 neilc Exp $
+ * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-pgsql.c,v 1.9 2007/02/27 23:48:06 tgl Exp $
  */
 
 #include "postgres.h"
@@ -152,7 +152,7 @@ convert_charset(text *src, int cset_from, int cset_to)
 	dst_len = strlen((char *) dst);
 	res = palloc(dst_len + VARHDRSZ);
 	memcpy(VARDATA(res), dst, dst_len);
-	VARATT_SIZEP(res) = VARHDRSZ + dst_len;
+	SET_VARSIZE(res, dst_len + VARHDRSZ);
 	pfree(dst);
 	return res;
 }
@@ -514,7 +514,7 @@ encrypt_internal(int is_pubenc, int is_text,
 	/* res_len includes VARHDRSZ */
 	res_len = mbuf_steal_data(dst, &restmp);
 	res = (bytea *) restmp;
-	VARATT_SIZEP(res) = res_len;
+	SET_VARSIZE(res, res_len);
 
 	if (tmp_data)
 		clear_and_pfree(tmp_data);
@@ -615,7 +615,7 @@ out:
 
 	/* res_len includes VARHDRSZ */
 	res = (bytea *) restmp;
-	VARATT_SIZEP(res) = res_len;
+	SET_VARSIZE(res, res_len);
 
 	if (need_text && got_unicode)
 	{
@@ -858,7 +858,7 @@ pg_armor(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
 				 errmsg("Overflow - encode estimate too small")));
-	VARATT_SIZEP(res) = VARHDRSZ + res_len;
+	SET_VARSIZE(res, VARHDRSZ + res_len);
 
 	PG_FREE_IF_COPY(data, 0);
 	PG_RETURN_TEXT_P(res);
@@ -889,7 +889,7 @@ pg_dearmor(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
 				 errmsg("Overflow - decode estimate too small")));
-	VARATT_SIZEP(res) = VARHDRSZ + res_len;
+	SET_VARSIZE(res, VARHDRSZ + res_len);
 
 	PG_FREE_IF_COPY(data, 0);
 	PG_RETURN_TEXT_P(res);
@@ -917,7 +917,7 @@ pgp_key_id_w(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
 				 errmsg("%s", px_strerror(res_len))));
-	VARATT_SIZEP(res) = VARHDRSZ + res_len;
+	SET_VARSIZE(res, VARHDRSZ + res_len);
 
 	PG_FREE_IF_COPY(data, 0);
 	PG_RETURN_TEXT_P(res);
diff --git a/contrib/sslinfo/sslinfo.c b/contrib/sslinfo/sslinfo.c
index 16eea5eae3330d76a932d183dceb588cc625e789..7236203d7d81894595216d71af167e19e981ea93 100644
--- a/contrib/sslinfo/sslinfo.c
+++ b/contrib/sslinfo/sslinfo.c
@@ -4,7 +4,7 @@
  * Written by Victor B. Wagner <vitus@cryptocom.ru>, Cryptocom LTD
  * This file is distributed under BSD-style license.
  *
- * $PostgreSQL: pgsql/contrib/sslinfo/sslinfo.c,v 1.5 2006/10/04 00:29:46 momjian Exp $
+ * $PostgreSQL: pgsql/contrib/sslinfo/sslinfo.c,v 1.6 2007/02/27 23:48:06 tgl Exp $
  */
 
 #include "postgres.h"
@@ -136,11 +136,12 @@ ASN1_STRING_to_text(ASN1_STRING *str)
 	outlen = strlen(dp);
 	result = palloc(VARHDRSZ + outlen);
 	memcpy(VARDATA(result), dp, outlen);
+	SET_VARSIZE(result, VARHDRSZ + outlen);
+
 	if (dp != sp)
 		pfree(dp);
-
 	BIO_free(membuf);
-	VARATT_SIZEP(result) = outlen + VARHDRSZ;
+
 	PG_RETURN_TEXT_P(result);
 }
 
@@ -312,9 +313,11 @@ X509_NAME_to_text(X509_NAME *name)
 											PG_UTF8,
 											GetDatabaseEncoding());
 	BIO_free(membuf);
+
 	outlen = strlen(dp);
 	result = palloc(VARHDRSZ + outlen);
 	memcpy(VARDATA(result), dp, outlen);
+	SET_VARSIZE(result, VARHDRSZ + outlen);
 
 	/*
 	 * pg_do_encoding_conversion has annoying habit of returning source
@@ -322,7 +325,7 @@ X509_NAME_to_text(X509_NAME *name)
 	 */
 	if (dp != sp)
 		pfree(dp);
-	VARATT_SIZEP(result) = outlen + VARHDRSZ;
+
 	PG_RETURN_TEXT_P(result);
 }
 
diff --git a/contrib/tsearch2/common.c b/contrib/tsearch2/common.c
index 3ff3fad1bf2514bfd0b98f2d76a438c24ec9870c..983399a438cdbc176e93a7f0e09eebcfe09b6fe1 100644
--- a/contrib/tsearch2/common.c
+++ b/contrib/tsearch2/common.c
@@ -36,7 +36,7 @@ charl2text(char *in, int len)
 	text	   *out = (text *) palloc(len + VARHDRSZ);
 
 	memcpy(VARDATA(out), in, len);
-	VARATT_SIZEP(out) = len + VARHDRSZ;
+	SET_VARSIZE(out, len + VARHDRSZ);
 	return out;
 }
 
diff --git a/contrib/tsearch2/ginidx.c b/contrib/tsearch2/ginidx.c
index 01766923c1ce74ec42538d5af904a14580ac0181..d77ee9bb9f73b2e719b2def23abea90690f38698 100644
--- a/contrib/tsearch2/ginidx.c
+++ b/contrib/tsearch2/ginidx.c
@@ -37,7 +37,7 @@ gin_extract_tsvector(PG_FUNCTION_ARGS)
 		{
 			text	   *txt = (text *) palloc(VARHDRSZ + we->len);
 
-			VARATT_SIZEP(txt) = VARHDRSZ + we->len;
+			SET_VARSIZE(txt, VARHDRSZ + we->len);
 			memcpy(VARDATA(txt), STRPTR(vector) + we->pos, we->len);
 
 			entries[i] = PointerGetDatum(txt);
@@ -89,7 +89,7 @@ gin_extract_tsquery(PG_FUNCTION_ARGS)
 
 				txt = (text *) palloc(VARHDRSZ + item[i].length);
 
-				VARATT_SIZEP(txt) = VARHDRSZ + item[i].length;
+				SET_VARSIZE(txt, VARHDRSZ + item[i].length);
 				memcpy(VARDATA(txt), GETOPERAND(query) + item[i].distance, item[i].length);
 
 				entries[j++] = PointerGetDatum(txt);
diff --git a/contrib/tsearch2/query.c b/contrib/tsearch2/query.c
index ea8790df25b5ec85d74dcd210799e73959fb255d..eb2d30e15921f5d11a225be5181dc69635d779da 100644
--- a/contrib/tsearch2/query.c
+++ b/contrib/tsearch2/query.c
@@ -907,7 +907,7 @@ tsquerytree(PG_FUNCTION_ARGS)
 	if (query->size == 0)
 	{
 		res = (text *) palloc(VARHDRSZ);
-		VARATT_SIZEP(res) = VARHDRSZ;
+		SET_VARSIZE(res, VARHDRSZ);
 		PG_RETURN_POINTER(res);
 	}
 
@@ -916,7 +916,7 @@ tsquerytree(PG_FUNCTION_ARGS)
 	if (!q)
 	{
 		res = (text *) palloc(1 + VARHDRSZ);
-		VARATT_SIZEP(res) = 1 + VARHDRSZ;
+		SET_VARSIZE(res, 1 + VARHDRSZ);
 		*((char *) VARDATA(res)) = 'T';
 	}
 	else
@@ -929,7 +929,7 @@ tsquerytree(PG_FUNCTION_ARGS)
 		infix(&nrm, true);
 
 		res = (text *) palloc(nrm.cur - nrm.buf + VARHDRSZ);
-		VARATT_SIZEP(res) = nrm.cur - nrm.buf + VARHDRSZ;
+		SET_VARSIZE(res, nrm.cur - nrm.buf + VARHDRSZ);
 		memcpy(VARDATA(res), nrm.buf, nrm.cur - nrm.buf);
 		pfree(q);
 	}
diff --git a/contrib/tsearch2/rank.c b/contrib/tsearch2/rank.c
index 36fc2594009795b798b5aef671c8afa75fd7cdbd..b6960c3bf3e232844ea973e82f7363be86d0e3b2 100644
--- a/contrib/tsearch2/rank.c
+++ b/contrib/tsearch2/rank.c
@@ -839,7 +839,7 @@ get_covers(PG_FUNCTION_ARGS)
 	if (!doc)
 	{
 		out = palloc(VARHDRSZ);
-		VARATT_SIZEP(out) = VARHDRSZ;
+		SET_VARSIZE(out, VARHDRSZ);
 		PG_FREE_IF_COPY(txt, 0);
 		PG_FREE_IF_COPY(query, 1);
 		PG_RETURN_POINTER(out);
@@ -910,7 +910,7 @@ get_covers(PG_FUNCTION_ARGS)
 		dwptr++;
 	}
 
-	VARATT_SIZEP(out) = cptr - ((char *) out);
+	SET_VARSIZE(out, cptr - ((char *) out));
 
 	pfree(dw);
 	for (i = 0; i < rlen; i++)
diff --git a/contrib/tsearch2/ts_cfg.c b/contrib/tsearch2/ts_cfg.c
index 0526ce9879c29a9cce355dc4627f47cc9b55e2e9..d62d49a249919374e7b9e28c76ef398b55833fac 100644
--- a/contrib/tsearch2/ts_cfg.c
+++ b/contrib/tsearch2/ts_cfg.c
@@ -555,7 +555,7 @@ genhl(HLPRSTEXT * prs)
 		wrd++;
 	}
 
-	VARATT_SIZEP(out) = ptr - ((char *) out);
+	SET_VARSIZE(out, ptr - ((char *) out));
 	return out;
 }
 
diff --git a/contrib/tsearch2/ts_stat.c b/contrib/tsearch2/ts_stat.c
index 17d1ccb050558cb7a50e5517f06214b9ceab8ffb..d728dd5796053e63d91f9213ade406fe8e5cd2f4 100644
--- a/contrib/tsearch2/ts_stat.c
+++ b/contrib/tsearch2/ts_stat.c
@@ -17,7 +17,7 @@ tsstat_in(PG_FUNCTION_ARGS)
 {
 	tsstat	   *stat = palloc(STATHDRSIZE);
 
-	stat->len = STATHDRSIZE;
+	SET_VARSIZE(stat, STATHDRSIZE);
 	stat->size = 0;
 	stat->weight = 0;
 	PG_RETURN_POINTER(stat);
@@ -100,7 +100,7 @@ formstat(tsstat * stat, tsvector * txt, WordEntry ** entry, uint32 len)
 	slen += STATSTRSIZE(stat);
 	totallen = CALCSTATSIZE(nentry, slen);
 	newstat = palloc(totallen);
-	newstat->len = totallen;
+	SET_VARSIZE(newstat, totallen);
 	newstat->weight = stat->weight;
 	newstat->size = nentry;
 
@@ -200,7 +200,7 @@ ts_accum(PG_FUNCTION_ARGS)
 	if (stat == NULL || PG_ARGISNULL(0))
 	{							/* Init in first */
 		stat = palloc(STATHDRSIZE);
-		stat->len = STATHDRSIZE;
+		SET_VARSIZE(stat, STATHDRSIZE);
 		stat->size = 0;
 		stat->weight = 0;
 	}
@@ -341,8 +341,8 @@ ts_setup_firstcall(FunctionCallInfo fcinfo, FuncCallContext *funcctx,
 	oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 	st = palloc(sizeof(StatStorage));
 	st->cur = 0;
-	st->stat = palloc(stat->len);
-	memcpy(st->stat, stat, stat->len);
+	st->stat = palloc(VARSIZE(stat));
+	memcpy(st->stat, stat, VARSIZE(stat));
 	funcctx->user_fctx = (void *) st;
 	if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
 		elog(ERROR, "return type must be a row type");
@@ -466,7 +466,7 @@ ts_stat_sql(text *txt, text *ws)
 		elog(ERROR, "column isn't of tsvector type");
 
 	stat = palloc(STATHDRSIZE);
-	stat->len = STATHDRSIZE;
+	SET_VARSIZE(stat, STATHDRSIZE);
 	stat->size = 0;
 	stat->weight = 0;
 
diff --git a/contrib/tsearch2/ts_stat.h b/contrib/tsearch2/ts_stat.h
index 358b68c808de010be3b819205e80141ea1e6fe57..e1ba14b99bcb5feb2c20ad140f0f47de3fd152d9 100644
--- a/contrib/tsearch2/ts_stat.h
+++ b/contrib/tsearch2/ts_stat.h
@@ -19,7 +19,7 @@ typedef struct
 
 typedef struct
 {
-	int4		len;
+	int32		vl_len_;		/* varlena header (do not touch directly!) */
 	int4		size;
 	int4		weight;
 	char		data[1];
@@ -29,6 +29,6 @@ typedef struct
 #define CALCSTATSIZE(x, lenstr) ( (x) * sizeof(StatEntry) + STATHDRSIZE + (lenstr) )
 #define STATPTR(x)	( (StatEntry*) ( (char*)(x) + STATHDRSIZE ) )
 #define STATSTRPTR(x)	( (char*)(x) + STATHDRSIZE + ( sizeof(StatEntry) * ((tsvector*)(x))->size ) )
-#define STATSTRSIZE(x)	( ((tsvector*)(x))->len - STATHDRSIZE - ( sizeof(StatEntry) * ((tsvector*)(x))->size ) )
+#define STATSTRSIZE(x)	( VARSIZE((tsvector*)(x)) - STATHDRSIZE - ( sizeof(StatEntry) * ((tsvector*)(x))->size ) )
 
 #endif
diff --git a/contrib/tsearch2/tsvector.c b/contrib/tsearch2/tsvector.c
index f4e83ec14962dc04c8e99fcfd4475e194248b5d8..dfbdacd345b5b9a008cf437c30693afd908d9ed7 100644
--- a/contrib/tsearch2/tsvector.c
+++ b/contrib/tsearch2/tsvector.c
@@ -476,9 +476,8 @@ tsvector_in(PG_FUNCTION_ARGS)
 	else
 		buflen = 0;
 	totallen = CALCDATASIZE(len, buflen);
-	in = (tsvector *) palloc(totallen);
-	memset(in, 0, totallen);
-	in->len = totallen;
+	in = (tsvector *) palloc0(totallen);
+	SET_VARSIZE(in, totallen);
 	in->size = len;
 	cur = STRPTR(in);
 	inarr = ARRPTR(in);
@@ -699,9 +698,8 @@ makevalue(PRSTEXT * prs)
 	}
 
 	totallen = CALCDATASIZE(prs->curwords, lenstr);
-	in = (tsvector *) palloc(totallen);
-	memset(in, 0, totallen);
-	in->len = totallen;
+	in = (tsvector *) palloc0(totallen);
+	SET_VARSIZE(in, totallen);
 	in->size = prs->curwords;
 
 	ptr = ARRPTR(in);
@@ -746,7 +744,7 @@ to_tsvector(PG_FUNCTION_ARGS)
 {
 	text	   *in = PG_GETARG_TEXT_P(1);
 	PRSTEXT		prs;
-	tsvector   *out = NULL;
+	tsvector   *out;
 	TSCfgInfo  *cfg;
 
 	SET_FUNCOID();
@@ -766,7 +764,7 @@ to_tsvector(PG_FUNCTION_ARGS)
 	{
 		pfree(prs.words);
 		out = palloc(CALCDATASIZE(0, 0));
-		out->len = CALCDATASIZE(0, 0);
+		SET_VARSIZE(out, CALCDATASIZE(0, 0));
 		out->size = 0;
 	}
 	PG_RETURN_POINTER(out);
@@ -957,7 +955,7 @@ tsearch2(PG_FUNCTION_ARGS)
 	{
 		tsvector   *out = palloc(CALCDATASIZE(0, 0));
 
-		out->len = CALCDATASIZE(0, 0);
+		SET_VARSIZE(out, CALCDATASIZE(0, 0));
 		out->size = 0;
 		datum = PointerGetDatum(out);
 		pfree(prs.words);
@@ -975,9 +973,9 @@ tsearch2(PG_FUNCTION_ARGS)
 static int
 silly_cmp_tsvector(const tsvector * a, const tsvector * b)
 {
-	if (a->len < b->len)
+	if (VARSIZE(a) < VARSIZE(b))
 		return -1;
-	else if (a->len > b->len)
+	else if (VARSIZE(a) > VARSIZE(b))
 		return 1;
 	else if (a->size < b->size)
 		return -1;
diff --git a/contrib/tsearch2/tsvector.h b/contrib/tsearch2/tsvector.h
index 48bae42de0de7d87007fa593caa8565783225821..e006a1dcbdfdc5b44dc5405e8a9967cc22e77815 100644
--- a/contrib/tsearch2/tsvector.h
+++ b/contrib/tsearch2/tsvector.h
@@ -49,7 +49,7 @@ typedef uint16 WordEntryPos;
 
 /*
  * Structure of tsvector datatype:
- * 1) int4	len - varlena's length
+ * 1) standard varlena header
  * 2) int4		size - number of lexemes or WordEntry array, which is the same
  * 3) Array of WordEntry - sorted array, comparison based on word's length
  *						and strncmp(). WordEntry->pos points number of
@@ -63,12 +63,12 @@ typedef uint16 WordEntryPos;
 
 typedef struct
 {
-	int4		len;
+	int32		vl_len_;		/* varlena header (do not touch directly!) */
 	int4		size;
 	char		data[1];
 }	tsvector;
 
-#define DATAHDRSIZE (sizeof(int4) * 2)
+#define DATAHDRSIZE (VARHDRSZ + sizeof(int4))
 #define CALCDATASIZE(x, lenstr) ( (x) * sizeof(WordEntry) + DATAHDRSIZE + (lenstr) )
 #define ARRPTR(x)	( (WordEntry*) ( (char*)(x) + DATAHDRSIZE ) )
 #define STRPTR(x)	( (char*)(x) + DATAHDRSIZE + ( sizeof(WordEntry) * ((tsvector*)(x))->size ) )
diff --git a/contrib/tsearch2/tsvector_op.c b/contrib/tsearch2/tsvector_op.c
index 7d4113edff3eb1849fd9740f8c7611bfeb0d6f96..e8d8e16db4166b9476a897c9d703d6ece0d29977 100644
--- a/contrib/tsearch2/tsvector_op.c
+++ b/contrib/tsearch2/tsvector_op.c
@@ -44,9 +44,8 @@ strip(PG_FUNCTION_ARGS)
 		len += SHORTALIGN(arrin[i].len);
 
 	len = CALCDATASIZE(in->size, len);
-	out = (tsvector *) palloc(len);
-	memset(out, 0, len);
-	out->len = len;
+	out = (tsvector *) palloc0(len);
+	SET_VARSIZE(out, len);
 	out->size = in->size;
 	arrout = ARRPTR(out);
 	cur = STRPTR(out);
@@ -98,8 +97,8 @@ setweight(PG_FUNCTION_ARGS)
 			elog(ERROR, "unrecognized weight");
 	}
 
-	out = (tsvector *) palloc(in->len);
-	memcpy(out, in, in->len);
+	out = (tsvector *) palloc(VARSIZE(in));
+	memcpy(out, in, VARSIZE(in));
 	entry = ARRPTR(out);
 	i = out->size;
 	while (i--)
@@ -203,9 +202,8 @@ concat(PG_FUNCTION_ARGS)
 	data2 = STRPTR(in2);
 	i1 = in1->size;
 	i2 = in2->size;
-	out = (tsvector *) palloc(in1->len + in2->len);
-	memset(out, 0, in1->len + in2->len);
-	out->len = in1->len + in2->len;
+	out = (tsvector *) palloc0(VARSIZE(in1) + VARSIZE(in2));
+	SET_VARSIZE(out, VARSIZE(in1) + VARSIZE(in2));
 	out->size = in1->size + in2->size;
 	data = cur = STRPTR(out);
 	ptr = ARRPTR(out);
@@ -322,7 +320,7 @@ concat(PG_FUNCTION_ARGS)
 	}
 
 	out->size = ptr - ARRPTR(out);
-	out->len = CALCDATASIZE(out->size, cur - data);
+	SET_VARSIZE(out, CALCDATASIZE(out->size, cur - data));
 	if (data != STRPTR(out))
 		memmove(STRPTR(out), data, cur - data);
 
diff --git a/contrib/xml2/xpath.c b/contrib/xml2/xpath.c
index 11349eff0b01efaab496c25c345c20943f7b9b1a..c5c9bd2f78567c2f4a47746fdeec57f5ed650ed3 100644
--- a/contrib/xml2/xpath.c
+++ b/contrib/xml2/xpath.c
@@ -212,7 +212,7 @@ xml_encode_special_chars(PG_FUNCTION_ARGS)
 	ressize = strlen(tt);
 	tout = (text *) palloc(ressize + VARHDRSZ);
 	memcpy(VARDATA(tout), tt, ressize);
-	VARATT_SIZEP(tout) = ressize + VARHDRSZ;
+	SET_VARSIZE(tout, ressize + VARHDRSZ);
 
 	xmlFree(tt);
 
@@ -612,7 +612,7 @@ pgxml_result_to_text(xmlXPathObjectPtr res,
 	ressize = strlen(xpresstr);
 	xpres = (text *) palloc(ressize + VARHDRSZ);
 	memcpy(VARDATA(xpres), xpresstr, ressize);
-	VARATT_SIZEP(xpres) = ressize + VARHDRSZ;
+	SET_VARSIZE(xpres, ressize + VARHDRSZ);
 
 	/* Free various storage */
 	xmlCleanupParser();
diff --git a/contrib/xml2/xslt_proc.c b/contrib/xml2/xslt_proc.c
index 433030ead96f5002fb3f7dcfa8ae79867d429a84..3e6de5a97dfdddf80243effe4239f78ebdf292af 100644
--- a/contrib/xml2/xslt_proc.c
+++ b/contrib/xml2/xslt_proc.c
@@ -129,7 +129,7 @@ xslt_process(PG_FUNCTION_ARGS)
 
 	tres = palloc(reslen + VARHDRSZ);
 	memcpy(VARDATA(tres), resstr, reslen);
-	VARATT_SIZEP(tres) = reslen + VARHDRSZ;
+	SET_VARSIZE(tres, reslen + VARHDRSZ);
 
 	PG_RETURN_TEXT_P(tres);
 }
diff --git a/doc/src/sgml/xfunc.sgml b/doc/src/sgml/xfunc.sgml
index ce60bb2a81bf38c01388e923cc01d94dcc14f037..65d636b5e4c695fcbbd113829f3b1f59992e1246 100644
--- a/doc/src/sgml/xfunc.sgml
+++ b/doc/src/sgml/xfunc.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/xfunc.sgml,v 1.125 2007/02/01 19:10:24 momjian Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/xfunc.sgml,v 1.126 2007/02/27 23:48:06 tgl Exp $ -->
 
  <sect1 id="xfunc">
   <title>User-Defined Functions</title>
@@ -1645,7 +1645,7 @@ copytext(text *t)
      * VARSIZE is the total size of the struct in bytes.
      */
     text *new_t = (text *) palloc(VARSIZE(t));
-    VARATT_SIZEP(new_t) = VARSIZE(t);
+    SET_VARSIZE(new_t, VARSIZE(t));
     /*
      * VARDATA is a pointer to the data region of the struct.
      */
@@ -1661,7 +1661,7 @@ concat_text(text *arg1, text *arg2)
     int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
     text *new_text = (text *) palloc(new_text_size);
 
-    VARATT_SIZEP(new_text) = new_text_size;
+    SET_VARSIZE(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,7 +1831,7 @@ copytext(PG_FUNCTION_ARGS)
      * VARSIZE is the total size of the struct in bytes.
      */
     text     *new_t = (text *) palloc(VARSIZE(t));
-    VARATT_SIZEP(new_t) = VARSIZE(t);
+    SET_VARSIZE(new_t, VARSIZE(t));
     /*
      * VARDATA is a pointer to the data region of the struct.
      */
@@ -1851,7 +1851,7 @@ concat_text(PG_FUNCTION_ARGS)
     int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
     text *new_text = (text *) palloc(new_text_size);
 
-    VARATT_SIZEP(new_text) = new_text_size;
+    SET_VARSIZE(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);
diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c
index 470f48777de3ee733dfb2ff0d1c4b507ae515137..0c83262c3b8f4321dba82d2f1202ffe889840c2a 100644
--- a/src/backend/access/common/heaptuple.c
+++ b/src/backend/access/common/heaptuple.c
@@ -16,7 +16,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/access/common/heaptuple.c,v 1.115 2007/02/09 03:35:33 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/access/common/heaptuple.c,v 1.116 2007/02/27 23:48:06 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -162,7 +162,7 @@ heap_fill_tuple(TupleDesc tupleDesc,
 				*infomask |= HEAP_HASEXTERNAL;
 			if (VARATT_IS_COMPRESSED(values[i]))
 				*infomask |= HEAP_HASCOMPRESSED;
-			data_length = VARATT_SIZE(DatumGetPointer(values[i]));
+			data_length = VARSIZE(DatumGetPointer(values[i]));
 			memcpy(data, DatumGetPointer(values[i]), data_length);
 		}
 		else if (att[i]->attlen == -2)
@@ -261,7 +261,7 @@ DataFill(char *data,
 				*infomask |= HEAP_HASEXTERNAL;
 			if (VARATT_IS_COMPRESSED(values[i]))
 				*infomask |= HEAP_HASCOMPRESSED;
-			data_length = VARATT_SIZE(DatumGetPointer(values[i]));
+			data_length = VARSIZE(DatumGetPointer(values[i]));
 			memcpy(data, DatumGetPointer(values[i]), data_length);
 		}
 		else if (att[i]->attlen == -2)
diff --git a/src/backend/access/common/indextuple.c b/src/backend/access/common/indextuple.c
index f2a14240ecbfee0e58370fce35adfecd9a8d405e..c83e34834ca80f113c62625f99524e95b1735f1f 100644
--- a/src/backend/access/common/indextuple.c
+++ b/src/backend/access/common/indextuple.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/access/common/indextuple.c,v 1.80 2007/01/05 22:19:21 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/access/common/indextuple.c,v 1.81 2007/02/27 23:48:06 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -84,7 +84,7 @@ index_form_tuple(TupleDesc tupleDescriptor,
 		 * If value is above size target, and is of a compressible datatype,
 		 * try to compress it in-line.
 		 */
-		if (VARATT_SIZE(untoasted_values[i]) > TOAST_INDEX_TARGET &&
+		if (VARSIZE(untoasted_values[i]) > TOAST_INDEX_TARGET &&
 			!VARATT_IS_EXTENDED(untoasted_values[i]) &&
 			(att->attstorage == 'x' || att->attstorage == 'm'))
 		{
diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c
index 98cbce6761b3a8193427c369788849d5900e649b..4adf4666e776a0035661a7a0d19618e4f06fd4b4 100644
--- a/src/backend/access/common/reloptions.c
+++ b/src/backend/access/common/reloptions.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/access/common/reloptions.c,v 1.3 2007/01/05 22:19:21 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/access/common/reloptions.c,v 1.4 2007/02/27 23:48:06 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -72,8 +72,8 @@ transformRelOptions(Datum oldOptions, List *defList,
 		for (i = 0; i < noldoptions; i++)
 		{
 			text	   *oldoption = DatumGetTextP(oldoptions[i]);
-			char	   *text_str = (char *) VARATT_DATA(oldoption);
-			int			text_len = VARATT_SIZE(oldoption) - VARHDRSZ;
+			char	   *text_str = VARDATA(oldoption);
+			int			text_len = VARSIZE(oldoption) - VARHDRSZ;
 
 			/* Search for a match in defList */
 			foreach(cell, defList)
@@ -131,8 +131,8 @@ transformRelOptions(Datum oldOptions, List *defList,
 			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);
+			SET_VARSIZE(t, len);
+			sprintf(VARDATA(t), "%s=%s", def->defname, value);
 
 			astate = accumArrayResult(astate, PointerGetDatum(t),
 									  false, TEXTOID,
@@ -188,8 +188,8 @@ parseRelOptions(Datum options, int numkeywords, const char *const * keywords,
 	for (i = 0; i < noptions; i++)
 	{
 		text	   *optiontext = DatumGetTextP(optiondatums[i]);
-		char	   *text_str = (char *) VARATT_DATA(optiontext);
-		int			text_len = VARATT_SIZE(optiontext) - VARHDRSZ;
+		char	   *text_str = VARDATA(optiontext);
+		int			text_len = VARSIZE(optiontext) - VARHDRSZ;
 		int			j;
 
 		/* Search for a match in keywords */
@@ -267,7 +267,7 @@ default_reloptions(Datum reloptions, bool validate,
 	}
 
 	result = (StdRdOptions *) palloc(sizeof(StdRdOptions));
-	VARATT_SIZEP(result) = sizeof(StdRdOptions);
+	SET_VARSIZE(result, sizeof(StdRdOptions));
 
 	result->fillfactor = fillfactor;
 
diff --git a/src/backend/access/heap/tuptoaster.c b/src/backend/access/heap/tuptoaster.c
index 6fde18104a3be81c350deecbe7386f104a62cb86..b1eb8aea4d362e0d308477a90bb864290d76dbf1 100644
--- a/src/backend/access/heap/tuptoaster.c
+++ b/src/backend/access/heap/tuptoaster.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/access/heap/tuptoaster.c,v 1.70 2007/02/04 20:00:37 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/access/heap/tuptoaster.c,v 1.71 2007/02/27 23:48:07 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -104,8 +104,8 @@ heap_tuple_untoast_attr(varattrib *attr)
 
 			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));
+			SET_VARSIZE(result, PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
+			pglz_decompress(tmp, VARDATA(result));
 			pfree(tmp);
 		}
 		else
@@ -124,8 +124,8 @@ heap_tuple_untoast_attr(varattrib *attr)
 		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));
+		SET_VARSIZE(result, PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
+		pglz_decompress(tmp, VARDATA(result));
 	}
 	else
 
@@ -162,8 +162,8 @@ heap_tuple_untoast_attr_slice(varattrib *attr, int32 sliceoffset, int32 slicelen
 			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));
+		SET_VARSIZE(preslice, PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
+		pglz_decompress(tmp, VARDATA(preslice));
 
 		if (tmp != (PGLZ_Header *) attr)
 			pfree(tmp);
@@ -193,7 +193,7 @@ heap_tuple_untoast_attr_slice(varattrib *attr, int32 sliceoffset, int32 slicelen
 		slicelength = attrsize - sliceoffset;
 
 	result = (varattrib *) palloc(slicelength + VARHDRSZ);
-	VARATT_SIZEP(result) = slicelength + VARHDRSZ;
+	SET_VARSIZE(result, slicelength + VARHDRSZ);
 
 	memcpy(VARDATA(result), VARDATA(preslice) + sliceoffset, slicelength);
 
@@ -435,7 +435,7 @@ toast_insert_or_update(Relation rel, HeapTuple newtup, HeapTuple oldtup, bool us
 					 * tuple.
 					 */
 					toast_action[i] = 'p';
-					toast_sizes[i] = VARATT_SIZE(toast_values[i]);
+					toast_sizes[i] = VARSIZE(toast_values[i]);
 					continue;
 				}
 			}
@@ -486,7 +486,7 @@ toast_insert_or_update(Relation rel, HeapTuple newtup, HeapTuple oldtup, bool us
 			/*
 			 * Remember the size of this attribute
 			 */
-			toast_sizes[i] = VARATT_SIZE(new_value);
+			toast_sizes[i] = VARSIZE(new_value);
 		}
 		else
 		{
@@ -564,7 +564,7 @@ toast_insert_or_update(Relation rel, HeapTuple newtup, HeapTuple oldtup, bool us
 				pfree(DatumGetPointer(old_value));
 			toast_values[i] = new_value;
 			toast_free[i] = true;
-			toast_sizes[i] = VARATT_SIZE(toast_values[i]);
+			toast_sizes[i] = VARSIZE(toast_values[i]);
 			need_change = true;
 			need_free = true;
 		}
@@ -623,7 +623,7 @@ toast_insert_or_update(Relation rel, HeapTuple newtup, HeapTuple oldtup, bool us
 			pfree(DatumGetPointer(old_value));
 
 		toast_free[i] = true;
-		toast_sizes[i] = VARATT_SIZE(toast_values[i]);
+		toast_sizes[i] = VARSIZE(toast_values[i]);
 
 		need_change = true;
 		need_free = true;
@@ -676,7 +676,7 @@ toast_insert_or_update(Relation rel, HeapTuple newtup, HeapTuple oldtup, bool us
 				pfree(DatumGetPointer(old_value));
 			toast_values[i] = new_value;
 			toast_free[i] = true;
-			toast_sizes[i] = VARATT_SIZE(toast_values[i]);
+			toast_sizes[i] = VARSIZE(toast_values[i]);
 			need_change = true;
 			need_free = true;
 		}
@@ -734,7 +734,7 @@ toast_insert_or_update(Relation rel, HeapTuple newtup, HeapTuple oldtup, bool us
 			pfree(DatumGetPointer(old_value));
 
 		toast_free[i] = true;
-		toast_sizes[i] = VARATT_SIZE(toast_values[i]);
+		toast_sizes[i] = VARSIZE(toast_values[i]);
 
 		need_change = true;
 		need_free = true;
@@ -949,15 +949,15 @@ Datum
 toast_compress_datum(Datum value)
 {
 	varattrib  *tmp;
-	int32		valsize = VARATT_SIZE(value) - VARHDRSZ;
+	int32		valsize = VARSIZE(value) - VARHDRSZ;
 
 	tmp = (varattrib *) palloc(PGLZ_MAX_OUTPUT(valsize));
-	if (pglz_compress(VARATT_DATA(value), valsize,
+	if (pglz_compress(VARDATA(value), valsize,
 					  (PGLZ_Header *) tmp, PGLZ_strategy_default) &&
-		VARATT_SIZE(tmp) < VARATT_SIZE(value))
+		VARSIZE(tmp) < VARSIZE(value))
 	{
 		/* successful compression */
-		VARATT_SIZEP(tmp) |= VARATT_FLAG_COMPRESSED;
+		VARATT_SIZEP_DEPRECATED(tmp) |= VARATT_FLAG_COMPRESSED;
 		return PointerGetDatum(tmp);
 	}
 	else
@@ -1010,18 +1010,19 @@ toast_save_datum(Relation rel, Datum value, bool use_wal)
 	 */
 	result = (varattrib *) palloc(sizeof(varattrib));
 
-	result->va_header = sizeof(varattrib) | VARATT_FLAG_EXTERNAL;
+	SET_VARSIZE(result, sizeof(varattrib));
+	VARATT_SIZEP_DEPRECATED(result) |= VARATT_FLAG_EXTERNAL;
 	if (VARATT_IS_COMPRESSED(value))
 	{
-		result->va_header |= VARATT_FLAG_COMPRESSED;
+		VARATT_SIZEP_DEPRECATED(result) |= VARATT_FLAG_COMPRESSED;
 		result->va_content.va_external.va_rawsize =
 			((varattrib *) value)->va_content.va_compressed.va_rawsize;
 	}
 	else
-		result->va_content.va_external.va_rawsize = VARATT_SIZE(value);
+		result->va_content.va_external.va_rawsize = VARSIZE(value);
 
 	result->va_content.va_external.va_extsize =
-		VARATT_SIZE(value) - VARHDRSZ;
+		VARSIZE(value) - VARHDRSZ;
 	result->va_content.va_external.va_valueid =
 		GetNewOidWithIndex(toastrel, toastidx);
 	result->va_content.va_external.va_toastrelid =
@@ -1039,8 +1040,8 @@ toast_save_datum(Relation rel, Datum value, bool use_wal)
 	/*
 	 * Get the data to process
 	 */
-	data_p = VARATT_DATA(value);
-	data_todo = VARATT_SIZE(value) - VARHDRSZ;
+	data_p = VARDATA(value);
+	data_todo = VARSIZE(value) - VARHDRSZ;
 
 	/*
 	 * Split up the item into chunks
@@ -1056,8 +1057,8 @@ toast_save_datum(Relation rel, Datum value, bool use_wal)
 		 * 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);
+		SET_VARSIZE(&chunk_data, chunk_size + VARHDRSZ);
+		memcpy(VARDATA(&chunk_data), data_p, chunk_size);
 		toasttup = heap_form_tuple(toasttupDesc, t_values, t_isnull);
 		if (!HeapTupleIsValid(toasttup))
 			elog(ERROR, "failed to build TOAST tuple");
@@ -1184,9 +1185,9 @@ toast_fetch_datum(varattrib *attr)
 	numchunks = ((ressize - 1) / TOAST_MAX_CHUNK_SIZE) + 1;
 
 	result = (varattrib *) palloc(ressize + VARHDRSZ);
-	VARATT_SIZEP(result) = ressize + VARHDRSZ;
+	SET_VARSIZE(result, ressize + VARHDRSZ);
 	if (VARATT_IS_COMPRESSED(attr))
-		VARATT_SIZEP(result) |= VARATT_FLAG_COMPRESSED;
+		VARATT_SIZEP_DEPRECATED(result) |= VARATT_FLAG_COMPRESSED;
 
 	/*
 	 * Open the toast relation and its index
@@ -1224,7 +1225,7 @@ toast_fetch_datum(varattrib *attr)
 		Assert(!isnull);
 		chunk = DatumGetPointer(fastgetattr(ttup, 3, toasttupDesc, &isnull));
 		Assert(!isnull);
-		chunksize = VARATT_SIZE(chunk) - VARHDRSZ;
+		chunksize = VARSIZE(chunk) - VARHDRSZ;
 
 		/*
 		 * Some checks on the data we've found
@@ -1255,8 +1256,8 @@ toast_fetch_datum(varattrib *attr)
 		/*
 		 * Copy the data into proper place in our result
 		 */
-		memcpy(((char *) VARATT_DATA(result)) + residx * TOAST_MAX_CHUNK_SIZE,
-			   VARATT_DATA(chunk),
+		memcpy(VARDATA(result) + residx * TOAST_MAX_CHUNK_SIZE,
+			   VARDATA(chunk),
 			   chunksize);
 
 		nextidx++;
@@ -1326,10 +1327,10 @@ toast_fetch_datum_slice(varattrib *attr, int32 sliceoffset, int32 length)
 		length = attrsize - sliceoffset;
 
 	result = (varattrib *) palloc(length + VARHDRSZ);
-	VARATT_SIZEP(result) = length + VARHDRSZ;
+	SET_VARSIZE(result, length + VARHDRSZ);
 
 	if (VARATT_IS_COMPRESSED(attr))
-		VARATT_SIZEP(result) |= VARATT_FLAG_COMPRESSED;
+		VARATT_SIZEP_DEPRECATED(result) |= VARATT_FLAG_COMPRESSED;
 
 	if (length == 0)
 		return result;			/* Can save a lot of work at this point! */
@@ -1399,7 +1400,7 @@ toast_fetch_datum_slice(varattrib *attr, int32 sliceoffset, int32 length)
 		Assert(!isnull);
 		chunk = DatumGetPointer(fastgetattr(ttup, 3, toasttupDesc, &isnull));
 		Assert(!isnull);
-		chunksize = VARATT_SIZE(chunk) - VARHDRSZ;
+		chunksize = VARSIZE(chunk) - VARHDRSZ;
 
 		/*
 		 * Some checks on the data we've found
@@ -1433,9 +1434,9 @@ toast_fetch_datum_slice(varattrib *attr, int32 sliceoffset, int32 length)
 		if (residx == endchunk)
 			chcpyend = endoffset;
 
-		memcpy(((char *) VARATT_DATA(result)) +
+		memcpy(VARDATA(result) +
 			   (residx * TOAST_MAX_CHUNK_SIZE - sliceoffset) + chcpystrt,
-			   VARATT_DATA(chunk) + chcpystrt,
+			   VARDATA(chunk) + chcpystrt,
 			   (chcpyend - chcpystrt) + 1);
 
 		nextidx++;
diff --git a/src/backend/catalog/pg_conversion.c b/src/backend/catalog/pg_conversion.c
index 63779452850f7a37f732e6c190f2b8745adff737..262d9f41fb70d7e1696c61a668bb260a96706e1e 100644
--- a/src/backend/catalog/pg_conversion.c
+++ b/src/backend/catalog/pg_conversion.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/catalog/pg_conversion.c,v 1.35 2007/02/14 01:58:56 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/catalog/pg_conversion.c,v 1.36 2007/02/27 23:48:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -338,7 +338,7 @@ pg_convert_using(PG_FUNCTION_ARGS)
 	 */
 	len = strlen(result) + VARHDRSZ;
 	retval = palloc(len);
-	VARATT_SIZEP(retval) = len;
+	SET_VARSIZE(retval, len);
 	memcpy(VARDATA(retval), result, len - VARHDRSZ);
 
 	pfree(result);
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c
index 234441c0f6c80cce5e2fccf430062b9647197d58..784bbac231f127272171a762f36330f7a2229a57 100644
--- a/src/backend/executor/execQual.c
+++ b/src/backend/executor/execQual.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/executor/execQual.c,v 1.214 2007/02/27 01:11:25 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/executor/execQual.c,v 1.215 2007/02/27 23:48:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2533,7 +2533,7 @@ ExecEvalArray(ArrayExprState *astate, ExprContext *econtext,
 		}
 
 		result = (ArrayType *) palloc(nbytes);
-		result->size = nbytes;
+		SET_VARSIZE(result, nbytes);
 		result->ndim = ndims;
 		result->dataoffset = dataoffset;
 		result->elemtype = element_type;
@@ -2967,7 +2967,7 @@ ExecEvalXml(XmlExprState *xmlExpr, ExprContext *econtext,
 		int		len = buf.len + VARHDRSZ;
 
 		result = palloc(len);
-		VARATT_SIZEP(result) = len;
+		SET_VARSIZE(result, len);
 		memcpy(VARDATA(result), buf.data, buf.len);
 	}
 
diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c
index 1b43c42c96e95c519878e85189e77aa05d0f0527..80eddc2821b9a3991d3cca78dd179ff67b89f043 100644
--- a/src/backend/libpq/be-fsstubs.c
+++ b/src/backend/libpq/be-fsstubs.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/libpq/be-fsstubs.c,v 1.84 2007/01/05 22:19:29 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/libpq/be-fsstubs.c,v 1.85 2007/02/27 23:48:07 tgl Exp $
  *
  * NOTES
  *	  This should be moved to a more appropriate place.  It is here
@@ -304,7 +304,7 @@ loread(PG_FUNCTION_ARGS)
 
 	retval = (bytea *) palloc(VARHDRSZ + len);
 	totalread = lo_read(fd, VARDATA(retval), len);
-	VARATT_SIZEP(retval) = totalread + VARHDRSZ;
+	SET_VARSIZE(retval, totalread + VARHDRSZ);
 
 	PG_RETURN_BYTEA_P(retval);
 }
diff --git a/src/backend/libpq/pqformat.c b/src/backend/libpq/pqformat.c
index 6ecf0413d76e93073ddb86fda94a5292ca2c99b0..c81dfa5b227d09155dd79b09b6dd58912c7d5659 100644
--- a/src/backend/libpq/pqformat.c
+++ b/src/backend/libpq/pqformat.c
@@ -24,7 +24,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *	$PostgreSQL: pgsql/src/backend/libpq/pqformat.c,v 1.43 2007/01/05 22:19:29 momjian Exp $
+ *	$PostgreSQL: pgsql/src/backend/libpq/pqformat.c,v 1.44 2007/02/27 23:48:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -386,7 +386,7 @@ pq_endtypsend(StringInfo buf)
 
 	/* Insert correct length into bytea length word */
 	Assert(buf->len >= VARHDRSZ);
-	VARATT_SIZEP(result) = buf->len;
+	SET_VARSIZE(result, buf->len);
 
 	return result;
 }
diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c
index b787c6a3caf4e1aa5af8518e0c7781573f11de5d..9e033c436c9c39e275cd4fc54c17d2ea82ec2db6 100644
--- a/src/backend/storage/large_object/inv_api.c
+++ b/src/backend/storage/large_object/inv_api.c
@@ -17,7 +17,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/storage/large_object/inv_api.c,v 1.121 2007/01/05 22:19:38 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/storage/large_object/inv_api.c,v 1.122 2007/02/27 23:48:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -507,7 +507,7 @@ inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes)
 		bytea		hdr;
 		char		data[LOBLKSIZE];
 	}			workbuf;
-	char	   *workb = VARATT_DATA(&workbuf.hdr);
+	char	   *workb = VARDATA(&workbuf.hdr);
 	HeapTuple	newtup;
 	Datum		values[Natts_pg_largeobject];
 	char		nulls[Natts_pg_largeobject];
@@ -607,7 +607,7 @@ inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes)
 			off += n;
 			/* compute valid length of new page */
 			len = (len >= off) ? len : off;
-			VARATT_SIZEP(&workbuf.hdr) = len + VARHDRSZ;
+			SET_VARSIZE(&workbuf.hdr, len + VARHDRSZ);
 
 			/*
 			 * Form and insert updated tuple
@@ -651,7 +651,7 @@ inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes)
 			obj_desc->offset += n;
 			/* compute valid length of new page */
 			len = off + n;
-			VARATT_SIZEP(&workbuf.hdr) = len + VARHDRSZ;
+			SET_VARSIZE(&workbuf.hdr, len + VARHDRSZ);
 
 			/*
 			 * Form and insert updated tuple
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c
index c9f9a07f230a1942fee2d79512ba23ec0ee3748c..0865c7f0d602996e94f8dad7435fe71798695f79 100644
--- a/src/backend/utils/adt/acl.c
+++ b/src/backend/utils/adt/acl.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.137 2007/01/05 22:19:39 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.138 2007/02/27 23:48:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -353,7 +353,7 @@ allocacl(int n)
 		elog(ERROR, "invalid size: %d", n);
 	size = ACL_N_SIZE(n);
 	new_acl = (Acl *) palloc0(size);
-	new_acl->size = size;
+	SET_VARSIZE(new_acl, size);
 	new_acl->ndim = 1;
 	new_acl->dataoffset = 0;	/* we never put in any nulls */
 	new_acl->elemtype = ACLITEMOID;
@@ -716,8 +716,9 @@ aclupdate(const Acl *old_acl, const AclItem *mod_aip,
 		memmove(new_aip + dst,
 				new_aip + dst + 1,
 				(num - dst - 1) * sizeof(AclItem));
+		/* Adjust array size to be 'num - 1' items */
 		ARR_DIMS(new_acl)[0] = num - 1;
-		ARR_SIZE(new_acl) -= sizeof(AclItem);
+		SET_VARSIZE(new_acl, ACL_N_SIZE(num - 1));
 	}
 
 	/*
@@ -830,7 +831,7 @@ aclnewowner(const Acl *old_acl, Oid oldOwnerId, Oid newOwnerId)
 		}
 		/* Adjust array size to be 'dst' items */
 		ARR_DIMS(new_acl)[0] = dst;
-		ARR_SIZE(new_acl) = ACL_N_SIZE(dst);
+		SET_VARSIZE(new_acl, ACL_N_SIZE(dst));
 	}
 
 	return new_acl;
diff --git a/src/backend/utils/adt/array_userfuncs.c b/src/backend/utils/adt/array_userfuncs.c
index 1dad5210156baed0d5649b51fd6b4854cd91a79d..0745f1e1d2a38a157086e3227e0071256e2f8fab 100644
--- a/src/backend/utils/adt/array_userfuncs.c
+++ b/src/backend/utils/adt/array_userfuncs.c
@@ -6,7 +6,7 @@
  * Copyright (c) 2003-2007, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/array_userfuncs.c,v 1.21 2007/01/05 22:19:39 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/array_userfuncs.c,v 1.22 2007/02/27 23:48:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -376,7 +376,7 @@ array_cat(PG_FUNCTION_ARGS)
 		nbytes = ndatabytes + ARR_OVERHEAD_NONULLS(ndims);
 	}
 	result = (ArrayType *) palloc(nbytes);
-	result->size = nbytes;
+	SET_VARSIZE(result, nbytes);
 	result->ndim = ndims;
 	result->dataoffset = dataoffset;
 	result->elemtype = element_type;
diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
index 525d94e1ecd8d5afb15ac429ebef234d6cdd3b1a..43acdffcaf0b8b8cd829450891e5a194e6e80765 100644
--- a/src/backend/utils/adt/arrayfuncs.c
+++ b/src/backend/utils/adt/arrayfuncs.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.136 2007/01/05 22:19:39 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.137 2007/02/27 23:48:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -324,7 +324,7 @@ array_in(PG_FUNCTION_ARGS)
 		nbytes += ARR_OVERHEAD_NONULLS(ndim);
 	}
 	retval = (ArrayType *) palloc(nbytes);
-	retval->size = nbytes;
+	SET_VARSIZE(retval, nbytes);
 	retval->ndim = ndim;
 	retval->dataoffset = dataoffset;
 	retval->elemtype = element_type;
@@ -1279,7 +1279,7 @@ array_recv(PG_FUNCTION_ARGS)
 		nbytes += ARR_OVERHEAD_NONULLS(ndim);
 	}
 	retval = (ArrayType *) palloc(nbytes);
-	retval->size = nbytes;
+	SET_VARSIZE(retval, nbytes);
 	retval->ndim = ndim;
 	retval->dataoffset = dataoffset;
 	retval->elemtype = element_type;
@@ -1573,7 +1573,7 @@ array_dims(PG_FUNCTION_ARGS)
 		sprintf(p, "[%d:%d]", lb[i], dimv[i] + lb[i] - 1);
 		p += strlen(p);
 	}
-	VARATT_SIZEP(result) = strlen(VARDATA(result)) + VARHDRSZ;
+	SET_VARSIZE(result, strlen(VARDATA(result)) + VARHDRSZ);
 
 	PG_RETURN_TEXT_P(result);
 }
@@ -1879,7 +1879,7 @@ array_get_slice(ArrayType *array,
 	}
 
 	newarray = (ArrayType *) palloc(bytes);
-	newarray->size = bytes;
+	SET_VARSIZE(newarray, bytes);
 	newarray->ndim = ndim;
 	newarray->dataoffset = dataoffset;
 	newarray->elemtype = elemtype;
@@ -2132,7 +2132,7 @@ array_set(ArrayType *array,
 	 * OK, create the new array and fill in header/dimensions
 	 */
 	newarray = (ArrayType *) palloc(newsize);
-	newarray->size = newsize;
+	SET_VARSIZE(newarray, newsize);
 	newarray->ndim = ndim;
 	newarray->dataoffset = newhasnulls ? overheadlen : 0;
 	newarray->elemtype = ARR_ELEMTYPE(array);
@@ -2458,7 +2458,7 @@ array_set_slice(ArrayType *array,
 	newsize = overheadlen + olddatasize - olditemsize + newitemsize;
 
 	newarray = (ArrayType *) palloc(newsize);
-	newarray->size = newsize;
+	SET_VARSIZE(newarray, newsize);
 	newarray->ndim = ndim;
 	newarray->dataoffset = newhasnulls ? overheadlen : 0;
 	newarray->elemtype = ARR_ELEMTYPE(array);
@@ -2717,7 +2717,7 @@ array_map(FunctionCallInfo fcinfo, Oid inpType, Oid retType,
 		nbytes += ARR_OVERHEAD_NONULLS(ndim);
 	}
 	result = (ArrayType *) palloc(nbytes);
-	result->size = nbytes;
+	SET_VARSIZE(result, nbytes);
 	result->ndim = ndim;
 	result->dataoffset = dataoffset;
 	result->elemtype = retType;
@@ -2853,7 +2853,7 @@ construct_md_array(Datum *elems,
 		nbytes += ARR_OVERHEAD_NONULLS(ndims);
 	}
 	result = (ArrayType *) palloc(nbytes);
-	result->size = nbytes;
+	SET_VARSIZE(result, nbytes);
 	result->ndim = ndims;
 	result->dataoffset = dataoffset;
 	result->elemtype = elmtype;
@@ -2877,7 +2877,7 @@ construct_empty_array(Oid elmtype)
 	ArrayType  *result;
 
 	result = (ArrayType *) palloc(sizeof(ArrayType));
-	result->size = sizeof(ArrayType);
+	SET_VARSIZE(result, sizeof(ArrayType));
 	result->ndim = 0;
 	result->dataoffset = 0;
 	result->elemtype = elmtype;
diff --git a/src/backend/utils/adt/cash.c b/src/backend/utils/adt/cash.c
index d04f3d38c22922c7ff0cef6d83d01c32c06a4afe..06dc4fec8c0b731f13c34d7e6d1819d4edd95200 100644
--- a/src/backend/utils/adt/cash.c
+++ b/src/backend/utils/adt/cash.c
@@ -13,7 +13,7 @@
  * this version handles 64 bit numbers and so can hold values up to
  * $92,233,720,368,547,758.07.
  *
- * $PostgreSQL: pgsql/src/backend/utils/adt/cash.c,v 1.69 2007/01/03 01:19:50 darcy Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/cash.c,v 1.70 2007/02/27 23:48:07 tgl Exp $
  */
 
 #include "postgres.h"
@@ -860,7 +860,7 @@ cash_words(PG_FUNCTION_ARGS)
 
 	/* make a text type for output */
 	result = (text *) palloc(strlen(buf) + VARHDRSZ);
-	VARATT_SIZEP(result) = strlen(buf) + VARHDRSZ;
+	SET_VARSIZE(result, strlen(buf) + VARHDRSZ);
 	memcpy(VARDATA(result), buf, strlen(buf));
 
 	PG_RETURN_TEXT_P(result);
diff --git a/src/backend/utils/adt/char.c b/src/backend/utils/adt/char.c
index 2ed8172c4eea9817f9f490bb62b3cfb28679d5ad..489c4673a4e05c7ec1bd282b9603bdffbee21bc9 100644
--- a/src/backend/utils/adt/char.c
+++ b/src/backend/utils/adt/char.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/char.c,v 1.46 2007/01/05 22:19:40 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/char.c,v 1.47 2007/02/27 23:48:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -203,11 +203,11 @@ char_text(PG_FUNCTION_ARGS)
 	 */
 	if (arg1 != '\0')
 	{
-		VARATT_SIZEP(result) = VARHDRSZ + 1;
+		SET_VARSIZE(result, VARHDRSZ + 1);
 		*(VARDATA(result)) = arg1;
 	}
 	else
-		VARATT_SIZEP(result) = VARHDRSZ;
+		SET_VARSIZE(result, VARHDRSZ);
 
 	PG_RETURN_TEXT_P(result);
 }
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index c3a6415634bf7e68f17619cb70755bfeade2ca98..bdda749bed0d64cf26ee6066b486903e56cb7f13 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.128 2007/02/16 03:39:44 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.129 2007/02/27 23:48:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -891,8 +891,8 @@ date_text(PG_FUNCTION_ARGS)
 
 	result = palloc(len);
 
-	VARATT_SIZEP(result) = len;
-	memmove(VARDATA(result), str, (len - VARHDRSZ));
+	SET_VARSIZE(result, len);
+	memcpy(VARDATA(result), str, (len - VARHDRSZ));
 
 	pfree(str);
 
@@ -1634,8 +1634,8 @@ time_text(PG_FUNCTION_ARGS)
 
 	result = palloc(len);
 
-	VARATT_SIZEP(result) = len;
-	memmove(VARDATA(result), str, (len - VARHDRSZ));
+	SET_VARSIZE(result, len);
+	memcpy(VARDATA(result), str, (len - VARHDRSZ));
 
 	pfree(str);
 
@@ -2420,8 +2420,8 @@ timetz_text(PG_FUNCTION_ARGS)
 
 	result = palloc(len);
 
-	VARATT_SIZEP(result) = len;
-	memmove(VARDATA(result), str, (len - VARHDRSZ));
+	SET_VARSIZE(result, len);
+	memcpy(VARDATA(result), str, (len - VARHDRSZ));
 
 	pfree(str);
 
diff --git a/src/backend/utils/adt/datum.c b/src/backend/utils/adt/datum.c
index 40963bc2b9973234792080035dcfde4296263014..21e7cc55412fb4ca64890fc1b1f2f8bc77752fc3 100644
--- a/src/backend/utils/adt/datum.c
+++ b/src/backend/utils/adt/datum.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/datum.c,v 1.33 2007/01/05 22:19:40 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/datum.c,v 1.34 2007/02/27 23:48:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -79,7 +79,7 @@ datumGetSize(Datum value, bool typByVal, int typLen)
 						(errcode(ERRCODE_DATA_EXCEPTION),
 						 errmsg("invalid Datum pointer")));
 
-			size = (Size) VARATT_SIZE(s);
+			size = (Size) VARSIZE(s);
 		}
 		else if (typLen == -2)
 		{
diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c
index dcb84a7d249c1e3de0762b7cea3f15052d1d4374..6df746c38eb0000f28ed5321568bdc4cb9917e03 100644
--- a/src/backend/utils/adt/dbsize.c
+++ b/src/backend/utils/adt/dbsize.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2002-2007, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.10 2007/01/05 22:19:40 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.11 2007/02/27 23:48:07 tgl Exp $
  *
  */
 
@@ -396,7 +396,7 @@ pg_size_pretty(PG_FUNCTION_ARGS)
 		}
 	}
 
-	VARATT_SIZEP(result) = strlen(VARDATA(result)) + VARHDRSZ;
+	SET_VARSIZE(result, strlen(VARDATA(result)) + VARHDRSZ);
 
 	PG_RETURN_TEXT_P(result);
 }
diff --git a/src/backend/utils/adt/encode.c b/src/backend/utils/adt/encode.c
index c092e7ec3a36b1d90b4d239451abb76257b1ab28..3d753e9a6cfb811df828a66c2e3ce3bf8c89c5e1 100644
--- a/src/backend/utils/adt/encode.c
+++ b/src/backend/utils/adt/encode.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/encode.c,v 1.18 2007/01/05 22:19:40 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/encode.c,v 1.19 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -63,7 +63,7 @@ binary_encode(PG_FUNCTION_ARGS)
 	if (res > resultlen)
 		elog(FATAL, "overflow - encode estimate too small");
 
-	VARATT_SIZEP(result) = VARHDRSZ + res;
+	SET_VARSIZE(result, VARHDRSZ + res);
 
 	PG_RETURN_TEXT_P(result);
 }
@@ -99,7 +99,7 @@ binary_decode(PG_FUNCTION_ARGS)
 	if (res > resultlen)
 		elog(FATAL, "overflow - decode estimate too small");
 
-	VARATT_SIZEP(result) = VARHDRSZ + res;
+	SET_VARSIZE(result, VARHDRSZ + res);
 
 	PG_RETURN_BYTEA_P(result);
 }
diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c
index a123d106fac5109f38387386b653fb961d614241..f2c229375649ac80cb363cc5547c52be6eca214d 100644
--- a/src/backend/utils/adt/float.c
+++ b/src/backend/utils/adt/float.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/float.c,v 1.148 2007/01/20 21:47:10 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/float.c,v 1.149 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1214,7 +1214,7 @@ float8_text(PG_FUNCTION_ARGS)
 
 	result = (text *) palloc(len);
 
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	memcpy(VARDATA(result), str, (len - VARHDRSZ));
 
 	pfree(str);
@@ -1265,7 +1265,7 @@ float4_text(PG_FUNCTION_ARGS)
 
 	result = (text *) palloc(len);
 
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	memcpy(VARDATA(result), str, (len - VARHDRSZ));
 
 	pfree(str);
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
index 344bf7db087febe576211eab439855dd80979cb6..6095a1f4fdc0091557c45a1974f1c181f111c61f 100644
--- a/src/backend/utils/adt/formatting.c
+++ b/src/backend/utils/adt/formatting.c
@@ -1,7 +1,7 @@
 /* -----------------------------------------------------------------------
  * formatting.c
  *
- * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.128 2007/02/17 03:11:32 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.129 2007/02/27 23:48:08 tgl Exp $
  *
  *
  *	 Portions Copyright (c) 1999-2007, PostgreSQL Global Development Group
@@ -2991,7 +2991,7 @@ datetime_to_char_body(TmToChar *tmtc, text *fmt, bool is_interval)
 	reslen = strlen(result);
 	res = (text *) palloc(reslen + VARHDRSZ);
 	memcpy(VARDATA(res), result, reslen);
-	VARATT_SIZEP(res) = reslen + VARHDRSZ;
+	SET_VARSIZE(res, reslen + VARHDRSZ);
 
 	pfree(result);
 	return res;
@@ -4829,10 +4829,10 @@ do { \
 	}								\
 									\
 	result_tmp	= result;					\
-	result		= (text *) palloc( len + 1 + VARHDRSZ);		\
+	result		= (text *) palloc(len + VARHDRSZ);		\
 									\
-	strcpy( VARDATA(result), VARDATA(result_tmp));			\
-	VARATT_SIZEP(result) = len + VARHDRSZ;				\
+	memcpy(VARDATA(result), VARDATA(result_tmp), len);	\
+	SET_VARSIZE(result, len + VARHDRSZ);				\
 	pfree(result_tmp);						\
 } while(0)
 
diff --git a/src/backend/utils/adt/genfile.c b/src/backend/utils/adt/genfile.c
index af277875c5632b296b442bc4211b0690159691ca..e95c04876ca2015adb5fcabfff7f0c641ec1099c 100644
--- a/src/backend/utils/adt/genfile.c
+++ b/src/backend/utils/adt/genfile.c
@@ -9,7 +9,7 @@
  * Author: Andreas Pflug <pgadmin@pse-consulting.de>
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/genfile.c,v 1.15 2007/02/01 19:10:28 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/genfile.c,v 1.16 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -135,7 +135,7 @@ pg_read_file(PG_FUNCTION_ARGS)
 				(errcode_for_file_access(),
 				 errmsg("could not read file \"%s\": %m", filename)));
 
-	VARATT_SIZEP(buf) = nbytes + VARHDRSZ;
+	SET_VARSIZE(buf, nbytes + VARHDRSZ);
 
 	FreeFile(file);
 	pfree(filename);
@@ -261,7 +261,7 @@ pg_ls_dir(PG_FUNCTION_ARGS)
 			continue;
 
 		result = palloc(len + VARHDRSZ);
-		VARATT_SIZEP(result) = len + VARHDRSZ;
+		SET_VARSIZE(result, len + VARHDRSZ);
 		memcpy(VARDATA(result), de->d_name, len);
 
 		SRF_RETURN_NEXT(funcctx, PointerGetDatum(result));
diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c
index 61217fc94c1a204ddfe4a5088cc57f1d384ab259..3360c07afc162bb9af6fbe80c138ec808a15c1e3 100644
--- a/src/backend/utils/adt/geo_ops.c
+++ b/src/backend/utils/adt/geo_ops.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/geo_ops.c,v 1.94 2007/01/05 22:19:40 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/geo_ops.c,v 1.95 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1415,7 +1415,7 @@ path_in(PG_FUNCTION_ARGS)
 	size = offsetof(PATH, p[0]) +sizeof(path->p[0]) * npts;
 	path = (PATH *) palloc(size);
 
-	path->size = size;
+	SET_VARSIZE(path, size);
 	path->npts = npts;
 
 	if ((!path_decode(TRUE, npts, s, &isopen, &s, &(path->p[0])))
@@ -1464,7 +1464,7 @@ path_recv(PG_FUNCTION_ARGS)
 	size = offsetof(PATH, p[0]) +sizeof(path->p[0]) * npts;
 	path = (PATH *) palloc(size);
 
-	path->size = size;
+	SET_VARSIZE(path, size);
 	path->npts = npts;
 	path->closed = (closed ? 1 : 0);
 
@@ -3440,7 +3440,7 @@ poly_in(PG_FUNCTION_ARGS)
 	size = offsetof(POLYGON, p[0]) +sizeof(poly->p[0]) * npts;
 	poly = (POLYGON *) palloc0(size);	/* zero any holes */
 
-	poly->size = size;
+	SET_VARSIZE(poly, size);
 	poly->npts = npts;
 
 	if ((!path_decode(FALSE, npts, str, &isopen, &s, &(poly->p[0])))
@@ -3492,7 +3492,7 @@ poly_recv(PG_FUNCTION_ARGS)
 	size = offsetof(POLYGON, p[0]) +sizeof(poly->p[0]) * npts;
 	poly = (POLYGON *) palloc0(size);	/* zero any holes */
 
-	poly->size = size;
+	SET_VARSIZE(poly, size);
 	poly->npts = npts;
 
 	for (i = 0; i < npts; i++)
@@ -4079,7 +4079,7 @@ path_add(PG_FUNCTION_ARGS)
 
 	result = (PATH *) palloc(size);
 
-	result->size = size;
+	SET_VARSIZE(result, size);
 	result->npts = (p1->npts + p2->npts);
 	result->closed = p1->closed;
 
@@ -4207,7 +4207,7 @@ path_poly(PG_FUNCTION_ARGS)
 	size = offsetof(POLYGON, p[0]) +sizeof(poly->p[0]) * path->npts;
 	poly = (POLYGON *) palloc(size);
 
-	poly->size = size;
+	SET_VARSIZE(poly, size);
 	poly->npts = path->npts;
 
 	for (i = 0; i < path->npts; i++)
@@ -4282,7 +4282,7 @@ box_poly(PG_FUNCTION_ARGS)
 	size = offsetof(POLYGON, p[0]) +sizeof(poly->p[0]) * 4;
 	poly = (POLYGON *) palloc(size);
 
-	poly->size = size;
+	SET_VARSIZE(poly, size);
 	poly->npts = 4;
 
 	poly->p[0].x = box->low.x;
@@ -4312,7 +4312,7 @@ poly_path(PG_FUNCTION_ARGS)
 	size = offsetof(PATH, p[0]) +sizeof(path->p[0]) * poly->npts;
 	path = (PATH *) palloc(size);
 
-	path->size = size;
+	SET_VARSIZE(path, size);
 	path->npts = poly->npts;
 	path->closed = TRUE;
 
@@ -4995,7 +4995,7 @@ circle_poly(PG_FUNCTION_ARGS)
 				 errmsg("too many points requested")));
 
 	poly = (POLYGON *) palloc0(size);	/* zero any holes */
-	poly->size = size;
+	SET_VARSIZE(poly, size);
 	poly->npts = npts;
 
 	anglestep = (2.0 * M_PI) / npts;
diff --git a/src/backend/utils/adt/int.c b/src/backend/utils/adt/int.c
index fce3bb89fbab0e28e630011789b548c813fc8690..d6d590220776f77b2e18b28ea1544a756972e33b 100644
--- a/src/backend/utils/adt/int.c
+++ b/src/backend/utils/adt/int.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/int.c,v 1.78 2007/02/01 19:10:28 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/int.c,v 1.79 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -124,7 +124,7 @@ buildint2vector(const int2 *int2s, int n)
 	 * Attach standard array header.  For historical reasons, we set the index
 	 * lower bound to 0 not 1.
 	 */
-	result->size = Int2VectorSize(n);
+	SET_VARSIZE(result, Int2VectorSize(n));
 	result->ndim = 1;
 	result->dataoffset = 0;		/* never any nulls */
 	result->elemtype = INT2OID;
@@ -162,7 +162,7 @@ int2vectorin(PG_FUNCTION_ARGS)
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("int2vector has too many elements")));
 
-	result->size = Int2VectorSize(n);
+	SET_VARSIZE(result, Int2VectorSize(n));
 	result->ndim = 1;
 	result->dataoffset = 0;		/* never any nulls */
 	result->elemtype = INT2OID;
@@ -350,7 +350,7 @@ int2_text(PG_FUNCTION_ARGS)
 	text	   *result = (text *) palloc(7 + VARHDRSZ); /* sign,5 digits, '\0' */
 
 	pg_itoa(arg1, VARDATA(result));
-	VARATT_SIZEP(result) = strlen(VARDATA(result)) + VARHDRSZ;
+	SET_VARSIZE(result, strlen(VARDATA(result)) + VARHDRSZ);
 	PG_RETURN_TEXT_P(result);
 }
 
@@ -381,7 +381,7 @@ int4_text(PG_FUNCTION_ARGS)
 	text	   *result = (text *) palloc(12 + VARHDRSZ);		/* sign,10 digits,'\0' */
 
 	pg_ltoa(arg1, VARDATA(result));
-	VARATT_SIZEP(result) = strlen(VARDATA(result)) + VARHDRSZ;
+	SET_VARSIZE(result, strlen(VARDATA(result)) + VARHDRSZ);
 	PG_RETURN_TEXT_P(result);
 }
 
diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c
index 7f0d1df93ccfe525304ff15ed659565b9e99d264..25672b680fc88bd4ea50b9ecf0faddda1f5c04a5 100644
--- a/src/backend/utils/adt/int8.c
+++ b/src/backend/utils/adt/int8.c
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/int8.c,v 1.64 2007/02/01 19:10:28 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/int8.c,v 1.65 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1171,7 +1171,7 @@ int8_text(PG_FUNCTION_ARGS)
 
 	result = (text *) palloc(VARHDRSZ + len);
 
-	VARATT_SIZEP(result) = len + VARHDRSZ;
+	SET_VARSIZE(result, VARHDRSZ + len);
 	memcpy(VARDATA(result), s, len);
 
 	pfree(s);
diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c
index 3455432220f439950a585013d26af93dcc14dbcc..46f223b38ffd1519b941ddd4d1254d5a6532eab4 100644
--- a/src/backend/utils/adt/like.c
+++ b/src/backend/utils/adt/like.c
@@ -11,7 +11,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	$PostgreSQL: pgsql/src/backend/utils/adt/like.c,v 1.67 2007/01/05 22:19:41 momjian Exp $
+ *	$PostgreSQL: pgsql/src/backend/utils/adt/like.c,v 1.68 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -532,7 +532,7 @@ like_escape_bytea(PG_FUNCTION_ARGS)
 		}
 	}
 
-	VARATT_SIZEP(result) = r - ((char *) result);
+	SET_VARSIZE(result, r - ((char *) result));
 
 	PG_RETURN_BYTEA_P(result);
 }
diff --git a/src/backend/utils/adt/like_match.c b/src/backend/utils/adt/like_match.c
index 69f73c1dc367f7d3526c58fc3ad9d3b59393073b..22e2705fb368f7f51cb0b81806d5d53f67c9488b 100644
--- a/src/backend/utils/adt/like_match.c
+++ b/src/backend/utils/adt/like_match.c
@@ -19,7 +19,7 @@
  * Copyright (c) 1996-2007, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *	$PostgreSQL: pgsql/src/backend/utils/adt/like_match.c,v 1.14 2007/01/05 22:19:41 momjian Exp $
+ *	$PostgreSQL: pgsql/src/backend/utils/adt/like_match.c,v 1.15 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -332,7 +332,7 @@ do_like_escape(text *pat, text *esc)
 		}
 	}
 
-	VARATT_SIZEP(result) = r - ((char *) result);
+	SET_VARSIZE(result, r - ((char *) result));
 
 	return result;
 }
diff --git a/src/backend/utils/adt/mac.c b/src/backend/utils/adt/mac.c
index 0c9bff2b8fe0c3ce6f9a409a9dd86fe87c3b50c8..fa13abe4618d8596e36bb4982ce36fe5e0b2626f 100644
--- a/src/backend/utils/adt/mac.c
+++ b/src/backend/utils/adt/mac.c
@@ -1,7 +1,7 @@
 /*
  *	PostgreSQL type definitions for MAC addresses.
  *
- *	$PostgreSQL: pgsql/src/backend/utils/adt/mac.c,v 1.36 2006/01/11 08:43:12 neilc Exp $
+ *	$PostgreSQL: pgsql/src/backend/utils/adt/mac.c,v 1.37 2007/02/27 23:48:08 tgl Exp $
  */
 
 #include "postgres.h"
@@ -163,8 +163,8 @@ macaddr_text(PG_FUNCTION_ARGS)
 
 	result = palloc(len);
 
-	VARATT_SIZEP(result) = len;
-	memmove(VARDATA(result), str, (len - VARHDRSZ));
+	SET_VARSIZE(result, len);
+	memcpy(VARDATA(result), str, (len - VARHDRSZ));
 
 	pfree(str);
 
diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c
index dfab102fa76a7f9dcc65fcb08ff1769981be96fa..3ec098a39f3ddd855a42aea78678e9ce8a857e32 100644
--- a/src/backend/utils/adt/nabstime.c
+++ b/src/backend/utils/adt/nabstime.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.149 2007/01/05 22:19:41 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.150 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1596,7 +1596,7 @@ timeofday(PG_FUNCTION_ARGS)
 
 	len = VARHDRSZ + strlen(buf);
 	result = (text *) palloc(len);
-	VARATT_SIZEP(result) = len;
-	memcpy(VARDATA(result), buf, strlen(buf));
+	SET_VARSIZE(result, len);
+	memcpy(VARDATA(result), buf, len - VARHDRSZ);
 	PG_RETURN_TEXT_P(result);
 }
diff --git a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c
index 29ba260b45a724784ea42b17ee37ca530d9c5cdd..88fa427450f2da6282093406505b9252472d2011 100644
--- a/src/backend/utils/adt/network.c
+++ b/src/backend/utils/adt/network.c
@@ -1,7 +1,7 @@
 /*
  *	PostgreSQL type definitions for the INET and CIDR types.
  *
- *	$PostgreSQL: pgsql/src/backend/utils/adt/network.c,v 1.67 2007/01/02 22:21:08 momjian Exp $
+ *	$PostgreSQL: pgsql/src/backend/utils/adt/network.c,v 1.68 2007/02/27 23:48:08 tgl Exp $
  *
  *	Jon Postel RIP 16 Oct 1998
  */
@@ -105,9 +105,9 @@ network_in(char *src, bool is_cidr)
 					 errdetail("Value has bits set to right of mask.")));
 	}
 
-	VARATT_SIZEP(dst) = VARHDRSZ +
+	SET_VARSIZE(dst, VARHDRSZ +
 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
-		ip_addrsize(dst);
+		ip_addrsize(dst));
 	ip_bits(dst) = bits;
 
 	return dst;
@@ -220,9 +220,9 @@ network_recv(StringInfo buf, bool is_cidr)
 		/* translator: %s is inet or cidr */
 				 errmsg("invalid length in external \"%s\" value",
 						is_cidr ? "cidr" : "inet")));
-	VARATT_SIZEP(addr) = VARHDRSZ +
+	SET_VARSIZE(addr, VARHDRSZ +
 		((char *) ip_addr(addr) - (char *) VARDATA(addr)) +
-		ip_addrsize(addr);
+		ip_addrsize(addr));
 
 	addrptr = (char *) ip_addr(addr);
 	for (i = 0; i < nb; i++)
@@ -638,7 +638,7 @@ network_host(PG_FUNCTION_ARGS)
 	/* Return string as a text datum */
 	len = strlen(tmp);
 	ret = (text *) palloc(len + VARHDRSZ);
-	VARATT_SIZEP(ret) = len + VARHDRSZ;
+	SET_VARSIZE(ret, len + VARHDRSZ);
 	memcpy(VARDATA(ret), tmp, len);
 	PG_RETURN_TEXT_P(ret);
 }
@@ -667,7 +667,7 @@ network_show(PG_FUNCTION_ARGS)
 	/* Return string as a text datum */
 	len = strlen(tmp);
 	ret = (text *) palloc(len + VARHDRSZ);
-	VARATT_SIZEP(ret) = len + VARHDRSZ;
+	SET_VARSIZE(ret, len + VARHDRSZ);
 	memcpy(VARDATA(ret), tmp, len);
 	PG_RETURN_TEXT_P(ret);
 }
@@ -692,7 +692,7 @@ inet_abbrev(PG_FUNCTION_ARGS)
 	/* Return string as a text datum */
 	len = strlen(tmp);
 	ret = (text *) palloc(len + VARHDRSZ);
-	VARATT_SIZEP(ret) = len + VARHDRSZ;
+	SET_VARSIZE(ret, len + VARHDRSZ);
 	memcpy(VARDATA(ret), tmp, len);
 	PG_RETURN_TEXT_P(ret);
 }
@@ -717,7 +717,7 @@ cidr_abbrev(PG_FUNCTION_ARGS)
 	/* Return string as a text datum */
 	len = strlen(tmp);
 	ret = (text *) palloc(len + VARHDRSZ);
-	VARATT_SIZEP(ret) = len + VARHDRSZ;
+	SET_VARSIZE(ret, len + VARHDRSZ);
 	memcpy(VARDATA(ret), tmp, len);
 	PG_RETURN_TEXT_P(ret);
 }
@@ -793,9 +793,9 @@ network_broadcast(PG_FUNCTION_ARGS)
 
 	ip_family(dst) = ip_family(ip);
 	ip_bits(dst) = ip_bits(ip);
-	VARATT_SIZEP(dst) = VARHDRSZ +
+	SET_VARSIZE(dst, VARHDRSZ +
 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
-		ip_addrsize(dst);
+		ip_addrsize(dst));
 
 	PG_RETURN_INET_P(dst);
 }
@@ -838,9 +838,9 @@ network_network(PG_FUNCTION_ARGS)
 
 	ip_family(dst) = ip_family(ip);
 	ip_bits(dst) = ip_bits(ip);
-	VARATT_SIZEP(dst) = VARHDRSZ +
+	SET_VARSIZE(dst, VARHDRSZ +
 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
-		ip_addrsize(dst);
+		ip_addrsize(dst));
 
 	PG_RETURN_INET_P(dst);
 }
@@ -881,9 +881,9 @@ network_netmask(PG_FUNCTION_ARGS)
 
 	ip_family(dst) = ip_family(ip);
 	ip_bits(dst) = ip_maxbits(ip);
-	VARATT_SIZEP(dst) = VARHDRSZ +
+	SET_VARSIZE(dst, VARHDRSZ +
 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
-		ip_addrsize(dst);
+		ip_addrsize(dst));
 
 	PG_RETURN_INET_P(dst);
 }
@@ -930,9 +930,9 @@ network_hostmask(PG_FUNCTION_ARGS)
 
 	ip_family(dst) = ip_family(ip);
 	ip_bits(dst) = ip_maxbits(ip);
-	VARATT_SIZEP(dst) = VARHDRSZ +
+	SET_VARSIZE(dst, VARHDRSZ +
 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
-		ip_addrsize(dst);
+		ip_addrsize(dst));
 
 	PG_RETURN_INET_P(dst);
 }
@@ -1272,9 +1272,9 @@ inetnot(PG_FUNCTION_ARGS)
 	ip_bits(dst) = ip_bits(ip);
 
 	ip_family(dst) = ip_family(ip);
-	VARATT_SIZEP(dst) = VARHDRSZ +
+	SET_VARSIZE(dst, VARHDRSZ +
 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
-		ip_addrsize(dst);
+		ip_addrsize(dst));
 
 	PG_RETURN_INET_P(dst);
 }
@@ -1306,9 +1306,9 @@ inetand(PG_FUNCTION_ARGS)
 	ip_bits(dst) = Max(ip_bits(ip), ip_bits(ip2));
 
 	ip_family(dst) = ip_family(ip);
-	VARATT_SIZEP(dst) = VARHDRSZ +
+	SET_VARSIZE(dst, VARHDRSZ +
 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
-		ip_addrsize(dst);
+		ip_addrsize(dst));
 
 	PG_RETURN_INET_P(dst);
 }
@@ -1340,9 +1340,9 @@ inetor(PG_FUNCTION_ARGS)
 	ip_bits(dst) = Max(ip_bits(ip), ip_bits(ip2));
 
 	ip_family(dst) = ip_family(ip);
-	VARATT_SIZEP(dst) = VARHDRSZ +
+	SET_VARSIZE(dst, VARHDRSZ +
 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
-		ip_addrsize(dst);
+		ip_addrsize(dst));
 
 	PG_RETURN_INET_P(dst);
 }
@@ -1394,9 +1394,9 @@ internal_inetpl(inet *ip, int64 addend)
 	ip_bits(dst) = ip_bits(ip);
 
 	ip_family(dst) = ip_family(ip);
-	VARATT_SIZEP(dst) = VARHDRSZ +
+	SET_VARSIZE(dst, VARHDRSZ +
 		((char *) ip_addr(dst) - (char *) VARDATA(dst)) +
-		ip_addrsize(dst);
+		ip_addrsize(dst));
 
 	return dst;
 }
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 19fc4d45055e36c507a21bf4e4cf17db6151957a..f173f30211c7a62d414e2d4f18bc2165223d7e44 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -14,7 +14,7 @@
  * Copyright (c) 1998-2007, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/numeric.c,v 1.100 2007/02/17 00:55:57 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/numeric.c,v 1.101 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -230,7 +230,7 @@ static void dump_var(const char *str, NumericVar *var);
 
 #define NUMERIC_DIGITS(num) ((NumericDigit *)(num)->n_data)
 #define NUMERIC_NDIGITS(num) \
-	(((num)->varlen - NUMERIC_HDRSZ) / sizeof(NumericDigit))
+	((VARSIZE(num) - NUMERIC_HDRSZ) / sizeof(NumericDigit))
 
 static void alloc_var(NumericVar *var, int ndigits);
 static void free_var(NumericVar *var);
@@ -494,8 +494,8 @@ numeric(PG_FUNCTION_ARGS)
 	 */
 	if (typmod < (int32) (VARHDRSZ))
 	{
-		new = (Numeric) palloc(num->varlen);
-		memcpy(new, num, num->varlen);
+		new = (Numeric) palloc(VARSIZE(num));
+		memcpy(new, num, VARSIZE(num));
 		PG_RETURN_NUMERIC(new);
 	}
 
@@ -515,8 +515,8 @@ numeric(PG_FUNCTION_ARGS)
 	ddigits = (num->n_weight + 1) * DEC_DIGITS;
 	if (ddigits <= maxdigits && scale >= NUMERIC_DSCALE(num))
 	{
-		new = (Numeric) palloc(num->varlen);
-		memcpy(new, num, num->varlen);
+		new = (Numeric) palloc(VARSIZE(num));
+		memcpy(new, num, VARSIZE(num));
 		new->n_sign_dscale = NUMERIC_SIGN(new) |
 			((uint16) scale & NUMERIC_DSCALE_MASK);
 		PG_RETURN_NUMERIC(new);
@@ -621,8 +621,8 @@ numeric_abs(PG_FUNCTION_ARGS)
 	/*
 	 * Do it the easy way directly on the packed format
 	 */
-	res = (Numeric) palloc(num->varlen);
-	memcpy(res, num, num->varlen);
+	res = (Numeric) palloc(VARSIZE(num));
+	memcpy(res, num, VARSIZE(num));
 
 	res->n_sign_dscale = NUMERIC_POS | NUMERIC_DSCALE(num);
 
@@ -645,15 +645,15 @@ numeric_uminus(PG_FUNCTION_ARGS)
 	/*
 	 * Do it the easy way directly on the packed format
 	 */
-	res = (Numeric) palloc(num->varlen);
-	memcpy(res, num, num->varlen);
+	res = (Numeric) palloc(VARSIZE(num));
+	memcpy(res, num, VARSIZE(num));
 
 	/*
 	 * The packed format is known to be totally zero digit trimmed always. So
 	 * we can identify a ZERO by the fact that there are no digits at all.	Do
 	 * nothing to a zero.
 	 */
-	if (num->varlen != NUMERIC_HDRSZ)
+	if (VARSIZE(num) != NUMERIC_HDRSZ)
 	{
 		/* Else, flip the sign */
 		if (NUMERIC_SIGN(num) == NUMERIC_POS)
@@ -672,8 +672,8 @@ numeric_uplus(PG_FUNCTION_ARGS)
 	Numeric		num = PG_GETARG_NUMERIC(0);
 	Numeric		res;
 
-	res = (Numeric) palloc(num->varlen);
-	memcpy(res, num, num->varlen);
+	res = (Numeric) palloc(VARSIZE(num));
+	memcpy(res, num, VARSIZE(num));
 
 	PG_RETURN_NUMERIC(res);
 }
@@ -703,7 +703,7 @@ numeric_sign(PG_FUNCTION_ARGS)
 	 * The packed format is known to be totally zero digit trimmed always. So
 	 * we can identify a ZERO by the fact that there are no digits at all.
 	 */
-	if (num->varlen == NUMERIC_HDRSZ)
+	if (VARSIZE(num) == NUMERIC_HDRSZ)
 		set_var_from_var(&const_zero, &result);
 	else
 	{
@@ -2105,7 +2105,7 @@ numeric_text(PG_FUNCTION_ARGS)
 
 	result = (text *) palloc(VARHDRSZ + len);
 
-	VARATT_SIZEP(result) = len + VARHDRSZ;
+	SET_VARSIZE(result, VARHDRSZ + len);
 	memcpy(VARDATA(result), s, len);
 
 	pfree(s);
@@ -2301,7 +2301,7 @@ numeric_avg(PG_FUNCTION_ARGS)
 
 	/* SQL92 defines AVG of no values to be NULL */
 	/* N is zero iff no digits (cf. numeric_uminus) */
-	if (N->varlen == NUMERIC_HDRSZ)
+	if (VARSIZE(N) == NUMERIC_HDRSZ)
 		PG_RETURN_NULL();
 
 	PG_RETURN_DATUM(DirectFunctionCall2(numeric_div,
@@ -3232,7 +3232,7 @@ make_result(NumericVar *var)
 	{
 		result = (Numeric) palloc(NUMERIC_HDRSZ);
 
-		result->varlen = NUMERIC_HDRSZ;
+		SET_VARSIZE(result, NUMERIC_HDRSZ);
 		result->n_weight = 0;
 		result->n_sign_dscale = NUMERIC_NAN;
 
@@ -3263,7 +3263,7 @@ make_result(NumericVar *var)
 	/* Build the result */
 	len = NUMERIC_HDRSZ + n * sizeof(NumericDigit);
 	result = (Numeric) palloc(len);
-	result->varlen = len;
+	SET_VARSIZE(result, len);
 	result->n_weight = weight;
 	result->n_sign_dscale = sign | (var->dscale & NUMERIC_DSCALE_MASK);
 
diff --git a/src/backend/utils/adt/oid.c b/src/backend/utils/adt/oid.c
index 42a44eed758448a05233b99e08942ec6e5dc1386..8a9f971a227fbcb59c236599ba98c26f62783d1e 100644
--- a/src/backend/utils/adt/oid.c
+++ b/src/backend/utils/adt/oid.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/oid.c,v 1.70 2007/01/05 22:19:41 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/oid.c,v 1.71 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -174,7 +174,7 @@ buildoidvector(const Oid *oids, int n)
 	 * Attach standard array header.  For historical reasons, we set the index
 	 * lower bound to 0 not 1.
 	 */
-	result->size = OidVectorSize(n);
+	SET_VARSIZE(result, OidVectorSize(n));
 	result->ndim = 1;
 	result->dataoffset = 0;		/* never any nulls */
 	result->elemtype = OIDOID;
@@ -211,7 +211,7 @@ oidvectorin(PG_FUNCTION_ARGS)
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("oidvector has too many elements")));
 
-	result->size = OidVectorSize(n);
+	SET_VARSIZE(result, OidVectorSize(n));
 	result->ndim = 1;
 	result->dataoffset = 0;		/* never any nulls */
 	result->elemtype = OIDOID;
@@ -434,7 +434,7 @@ oid_text(PG_FUNCTION_ARGS)
 
 	result = (text *) palloc(len);
 
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	memcpy(VARDATA(result), str, (len - VARHDRSZ));
 	pfree(str);
 
diff --git a/src/backend/utils/adt/oracle_compat.c b/src/backend/utils/adt/oracle_compat.c
index 6da6b30cca3b862a7821ddc40f8698a215c28a87..9fcd5ae747aaf63964bf5eaaf1bbffe7d59a4397 100644
--- a/src/backend/utils/adt/oracle_compat.c
+++ b/src/backend/utils/adt/oracle_compat.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	$PostgreSQL: pgsql/src/backend/utils/adt/oracle_compat.c,v 1.69 2007/02/08 18:19:33 momjian Exp $
+ *	$PostgreSQL: pgsql/src/backend/utils/adt/oracle_compat.c,v 1.70 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -144,7 +144,7 @@ wcstotext(const wchar_t *str, int ncodes)
 
 	Assert(nbytes <= (size_t) (ncodes * MB_CUR_MAX));
 
-	VARATT_SIZEP(result) = nbytes + VARHDRSZ;
+	SET_VARSIZE(result, nbytes + VARHDRSZ);
 
 	return result;
 }
@@ -229,7 +229,7 @@ win32_utf8_wcstotext(const wchar_t *str)
 				 errmsg("UTF-16 to UTF-8 translation failed: %lu",
 						GetLastError())));
 
-	VARATT_SIZEP(result) = nbytes + VARHDRSZ - 1;		/* -1 to ignore null */
+	SET_VARSIZE(result, nbytes + VARHDRSZ - 1);		/* -1 to ignore null */
 
 	return result;
 }
@@ -278,7 +278,7 @@ wstring_upper(char *str)
 	
 	in_text = palloc(nbytes + VARHDRSZ);
 	memcpy(VARDATA(in_text), str, nbytes);
-	VARATT_SIZEP(in_text) = nbytes + VARHDRSZ;
+	SET_VARSIZE(in_text, nbytes + VARHDRSZ);
 
 	workspace = texttowcs(in_text);
 
@@ -312,7 +312,7 @@ wstring_lower(char *str)
 	
 	in_text = palloc(nbytes + VARHDRSZ);
 	memcpy(VARDATA(in_text), str, nbytes);
-	VARATT_SIZEP(in_text) = nbytes + VARHDRSZ;
+	SET_VARSIZE(in_text, nbytes + VARHDRSZ);
 
 	workspace = texttowcs(in_text);
 
@@ -639,7 +639,7 @@ lpad(PG_FUNCTION_ARGS)
 		ptr1 += mlen;
 	}
 
-	VARATT_SIZEP(ret) = ptr_ret - (char *) ret;
+	SET_VARSIZE(ret, ptr_ret - (char *) ret);
 
 	PG_RETURN_TEXT_P(ret);
 }
@@ -735,7 +735,7 @@ rpad(PG_FUNCTION_ARGS)
 			ptr2 = VARDATA(string2);
 	}
 
-	VARATT_SIZEP(ret) = ptr_ret - (char *) ret;
+	SET_VARSIZE(ret, ptr_ret - (char *) ret);
 
 	PG_RETURN_TEXT_P(ret);
 }
@@ -944,7 +944,7 @@ dotrim(const char *string, int stringlen,
 
 	/* Return selected portion of string */
 	result = (text *) palloc(VARHDRSZ + stringlen);
-	VARATT_SIZEP(result) = VARHDRSZ + stringlen;
+	SET_VARSIZE(result, VARHDRSZ + stringlen);
 	memcpy(VARDATA(result), string, stringlen);
 
 	return result;
@@ -1017,7 +1017,7 @@ byteatrim(PG_FUNCTION_ARGS)
 	}
 
 	ret = (bytea *) palloc(VARHDRSZ + m);
-	VARATT_SIZEP(ret) = VARHDRSZ + m;
+	SET_VARSIZE(ret, VARHDRSZ + m);
 	memcpy(VARDATA(ret), ptr, m);
 
 	PG_RETURN_BYTEA_P(ret);
@@ -1223,7 +1223,7 @@ translate(PG_FUNCTION_ARGS)
 		m -= source_len;
 	}
 
-	VARATT_SIZEP(result) = retlen + VARHDRSZ;
+	SET_VARSIZE(result, retlen + VARHDRSZ);
 
 	/*
 	 * There may be some wasted space in the result if deletions occurred, but
@@ -1275,13 +1275,13 @@ ascii(PG_FUNCTION_ARGS)
  ********************************************************************/
 
 Datum
-chr			(PG_FUNCTION_ARGS)
+chr(PG_FUNCTION_ARGS)
 {
 	int32		cvalue = PG_GETARG_INT32(0);
 	text	   *result;
 
 	result = (text *) palloc(VARHDRSZ + 1);
-	VARATT_SIZEP(result) = VARHDRSZ + 1;
+	SET_VARSIZE(result, VARHDRSZ + 1);
 	*VARDATA(result) = (char) cvalue;
 
 	PG_RETURN_TEXT_P(result);
@@ -1332,7 +1332,7 @@ repeat(PG_FUNCTION_ARGS)
 
 	result = (text *) palloc(tlen);
 
-	VARATT_SIZEP(result) = tlen;
+	SET_VARSIZE(result, tlen);
 	cp = VARDATA(result);
 	for (i = 0; i < count; i++)
 	{
diff --git a/src/backend/utils/adt/pg_lzcompress.c b/src/backend/utils/adt/pg_lzcompress.c
index 918f7bad7ffb06235ef6374dd3c5a382b1314472..c756e5707a5ae20368dffe7a179274ecebb03a24 100644
--- a/src/backend/utils/adt/pg_lzcompress.c
+++ b/src/backend/utils/adt/pg_lzcompress.c
@@ -45,7 +45,7 @@
  *			PGLZ_Header is defined as
  *
  *				typedef struct PGLZ_Header {
- *					int32		varsize;
+ *					int32		vl_len_;
  *					int32		rawsize;
  *				}
  *
@@ -54,7 +54,7 @@
  *			The data representation is easiest explained by describing
  *			the process of decompression.
  *
- *			If varsize == rawsize + sizeof(PGLZ_Header), then the data
+ *			If VARSIZE(x) == rawsize + sizeof(PGLZ_Header), then the data
  *			is stored uncompressed as plain bytes. Thus, the decompressor
  *			simply copies rawsize bytes from the location after the
  *			header to the destination.
@@ -166,7 +166,7 @@
  *
  * Copyright (c) 1999-2007, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/backend/utils/adt/pg_lzcompress.c,v 1.24 2007/01/20 01:08:42 neilc Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/pg_lzcompress.c,v 1.25 2007/02/27 23:48:08 tgl Exp $
  * ----------
  */
 #include "postgres.h"
@@ -618,7 +618,7 @@ pglz_compress(const char *source, int32 slen, PGLZ_Header *dest,
 	/*
 	 * Success - need only fill in the actual length of the compressed datum.
 	 */
-	dest->varsize = result_size + sizeof(PGLZ_Header);
+	SET_VARSIZE(dest, result_size + sizeof(PGLZ_Header));
 
 	return true;
 }
@@ -643,7 +643,7 @@ pglz_decompress(const PGLZ_Header *source, char *dest)
 	int32		destsize;
 
 	dp = ((const unsigned char *) source) + sizeof(PGLZ_Header);
-	dend = ((const unsigned char *) source) + VARATT_SIZE(source);
+	dend = ((const unsigned char *) source) + VARSIZE(source);
 	bp = (unsigned char *) dest;
 
 	while (dp < dend)
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index d011fff76f8495064ce0f37f2ded9d6b5ddb4c4f..50624d6e7281fbba45c43b75bb6f97d4461ebfcc 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/pgstatfuncs.c,v 1.38 2007/02/07 23:11:29 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/pgstatfuncs.c,v 1.39 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -398,7 +398,7 @@ pg_stat_get_backend_activity(PG_FUNCTION_ARGS)
 
 	len = strlen(activity);
 	result = palloc(VARHDRSZ + len);
-	VARATT_SIZEP(result) = VARHDRSZ + len;
+	SET_VARSIZE(result, VARHDRSZ + len);
 	memcpy(VARDATA(result), activity, len);
 
 	PG_RETURN_TEXT_P(result);
diff --git a/src/backend/utils/adt/quote.c b/src/backend/utils/adt/quote.c
index 3cc7f03007adfaed761a2e515e4466d3d2f5621e..31fbf57aaf8a6a77e8a2455d08db699d98a0fd47 100644
--- a/src/backend/utils/adt/quote.c
+++ b/src/backend/utils/adt/quote.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/quote.c,v 1.21 2007/01/05 22:19:41 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/quote.c,v 1.22 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -39,7 +39,7 @@ quote_ident(PG_FUNCTION_ARGS)
 
 	len = strlen(qstr);
 	result = (text *) palloc(len + VARHDRSZ);
-	VARATT_SIZEP(result) = len + VARHDRSZ;
+	SET_VARSIZE(result, len + VARHDRSZ);
 	memcpy(VARDATA(result), qstr, len);
 
 	PG_RETURN_TEXT_P(result);
@@ -92,7 +92,7 @@ quote_literal(PG_FUNCTION_ARGS)
 	}
 	*cp2++ = '\'';
 
-	VARATT_SIZEP(result) = cp2 - ((char *) result);
+	SET_VARSIZE(result, cp2 - ((char *) result));
 
 	PG_RETURN_TEXT_P(result);
 }
diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c
index 48a70820a30c4d0010276c971e6a3a2edcecf745..6a7a5fcc13be2d29721e7720e10ded16a4eeaa26 100644
--- a/src/backend/utils/adt/regexp.c
+++ b/src/backend/utils/adt/regexp.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/regexp.c,v 1.68 2007/01/05 22:19:41 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/regexp.c,v 1.69 2007/02/27 23:48:08 tgl Exp $
  *
  *		Alistair Crooks added the code for the regex caching
  *		agc - cached the regular expressions used - there's a good chance
@@ -620,7 +620,7 @@ similar_escape(PG_FUNCTION_ARGS)
 	*r++ = ')';
 	*r++ = '$';
 
-	VARATT_SIZEP(result) = r - ((char *) result);
+	SET_VARSIZE(result, r - ((char *) result));
 
 	PG_RETURN_TEXT_P(result);
 }
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 765b3c65c3060f03ed93b04dc7b2a20741f2c1a7..f17061738a4a8d3ac9a1d1e517025d7d4c3338bf 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.251 2007/02/23 21:59:44 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.252 2007/02/27 23:48:08 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -5298,7 +5298,7 @@ string_to_text(char *str)
 
 	tlen = slen + VARHDRSZ;
 	result = (text *) palloc(tlen);
-	VARATT_SIZEP(result) = tlen;
+	SET_VARSIZE(result, tlen);
 	memcpy(VARDATA(result), str, slen);
 
 	pfree(str);
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index f25a8d8f70de62575cec804b5bedd90b5efdbb6b..1588ac405a2fa6e0cf846aec5c908347c82a9be6 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.227 2007/02/22 22:00:25 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.228 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -4731,7 +4731,7 @@ string_to_bytea_const(const char *str, size_t str_len)
 	Datum		conval;
 
 	memcpy(VARDATA(bstr), str, str_len);
-	VARATT_SIZEP(bstr) = VARHDRSZ + str_len;
+	SET_VARSIZE(bstr, VARHDRSZ + str_len);
 	conval = PointerGetDatum(bstr);
 
 	return makeConst(BYTEAOID, -1, conval, false, false);
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index a842c1b02cf2a7f57621ccc6cf846b764fd58044..e9d1efe3ed1c2b39b44c96ad8051b360fbde14d6 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.173 2007/02/19 17:41:39 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.174 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -3199,8 +3199,8 @@ timestamp_text(PG_FUNCTION_ARGS)
 
 	result = palloc(len);
 
-	VARATT_SIZEP(result) = len;
-	memmove(VARDATA(result), str, len - VARHDRSZ);
+	SET_VARSIZE(result, len);
+	memcpy(VARDATA(result), str, len - VARHDRSZ);
 
 	pfree(str);
 
@@ -3260,8 +3260,8 @@ timestamptz_text(PG_FUNCTION_ARGS)
 
 	result = palloc(len);
 
-	VARATT_SIZEP(result) = len;
-	memmove(VARDATA(result), str, len - VARHDRSZ);
+	SET_VARSIZE(result, len);
+	memcpy(VARDATA(result), str, len - VARHDRSZ);
 
 	pfree(str);
 
@@ -3320,8 +3320,8 @@ interval_text(PG_FUNCTION_ARGS)
 
 	result = palloc(len);
 
-	VARATT_SIZEP(result) = len;
-	memmove(VARDATA(result), str, len - VARHDRSZ);
+	SET_VARSIZE(result, len);
+	memcpy(VARDATA(result), str, len - VARHDRSZ);
 
 	pfree(str);
 
diff --git a/src/backend/utils/adt/varbit.c b/src/backend/utils/adt/varbit.c
index 5b5c4aa5a57a2d02174a6d982a14156e13241d4c..a9eef1e0e7d078c61a8f44f46ad60fef85a86739 100644
--- a/src/backend/utils/adt/varbit.c
+++ b/src/backend/utils/adt/varbit.c
@@ -9,7 +9,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/varbit.c,v 1.52 2007/01/05 22:19:42 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/varbit.c,v 1.53 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -160,7 +160,7 @@ bit_in(PG_FUNCTION_ARGS)
 	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;
+	SET_VARSIZE(result, len);
 	VARBITLEN(result) = atttypmod;
 
 	r = VARBITS(result);
@@ -299,7 +299,7 @@ bit_recv(PG_FUNCTION_ARGS)
 
 	len = VARBITTOTALLEN(bitlen);
 	result = (VarBit *) palloc(len);
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	VARBITLEN(result) = bitlen;
 
 	pq_copymsgbytes(buf, (char *) VARBITS(result), VARBITBYTES(result));
@@ -356,7 +356,7 @@ bit(PG_FUNCTION_ARGS)
 	rlen = VARBITTOTALLEN(len);
 	/* set to 0 so that string is zero-padded */
 	result = (VarBit *) palloc0(rlen);
-	VARATT_SIZEP(result) = rlen;
+	SET_VARSIZE(result, rlen);
 	VARBITLEN(result) = len;
 
 	memcpy(VARBITS(result), VARBITS(arg),
@@ -458,7 +458,7 @@ varbit_in(PG_FUNCTION_ARGS)
 	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;
+	SET_VARSIZE(result, len);
 	VARBITLEN(result) = Min(bitlen, atttypmod);
 
 	r = VARBITS(result);
@@ -595,7 +595,7 @@ varbit_recv(PG_FUNCTION_ARGS)
 
 	len = VARBITTOTALLEN(bitlen);
 	result = (VarBit *) palloc(len);
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	VARBITLEN(result) = bitlen;
 
 	pq_copymsgbytes(buf, (char *) VARBITS(result), VARBITBYTES(result));
@@ -656,7 +656,7 @@ varbit(PG_FUNCTION_ARGS)
 
 	rlen = VARBITTOTALLEN(len);
 	result = (VarBit *) palloc(rlen);
-	VARATT_SIZEP(result) = rlen;
+	SET_VARSIZE(result, rlen);
 	VARBITLEN(result) = len;
 
 	memcpy(VARBITS(result), VARBITS(arg), VARBITBYTES(result));
@@ -884,7 +884,7 @@ bitcat(PG_FUNCTION_ARGS)
 	bytelen = VARBITTOTALLEN(bitlen1 + bitlen2);
 
 	result = (VarBit *) palloc(bytelen);
-	VARATT_SIZEP(result) = bytelen;
+	SET_VARSIZE(result, bytelen);
 	VARBITLEN(result) = bitlen1 + bitlen2;
 
 	/* Copy the first bitstring in */
@@ -951,7 +951,7 @@ bitsubstr(PG_FUNCTION_ARGS)
 		/* Need to return a zero-length bitstring */
 		len = VARBITTOTALLEN(0);
 		result = (VarBit *) palloc(len);
-		VARATT_SIZEP(result) = len;
+		SET_VARSIZE(result, len);
 		VARBITLEN(result) = 0;
 	}
 	else
@@ -963,7 +963,7 @@ bitsubstr(PG_FUNCTION_ARGS)
 		rbitlen = e1 - s1;
 		len = VARBITTOTALLEN(rbitlen);
 		result = (VarBit *) palloc(len);
-		VARATT_SIZEP(result) = len;
+		SET_VARSIZE(result, len);
 		VARBITLEN(result) = rbitlen;
 		len -= VARHDRSZ + VARBITHDRSZ;
 		/* Are we copying from a byte boundary? */
@@ -1044,7 +1044,7 @@ bitand(PG_FUNCTION_ARGS)
 
 	len = VARSIZE(arg1);
 	result = (VarBit *) palloc(len);
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	VARBITLEN(result) = bitlen1;
 
 	p1 = VARBITS(arg1);
@@ -1084,7 +1084,7 @@ bitor(PG_FUNCTION_ARGS)
 				 errmsg("cannot OR bit strings of different sizes")));
 	len = VARSIZE(arg1);
 	result = (VarBit *) palloc(len);
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	VARBITLEN(result) = bitlen1;
 
 	p1 = VARBITS(arg1);
@@ -1131,7 +1131,7 @@ bitxor(PG_FUNCTION_ARGS)
 
 	len = VARSIZE(arg1);
 	result = (VarBit *) palloc(len);
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	VARBITLEN(result) = bitlen1;
 
 	p1 = VARBITS(arg1);
@@ -1164,7 +1164,7 @@ bitnot(PG_FUNCTION_ARGS)
 	bits8		mask;
 
 	result = (VarBit *) palloc(VARSIZE(arg));
-	VARATT_SIZEP(result) = VARSIZE(arg);
+	SET_VARSIZE(result, VARSIZE(arg));
 	VARBITLEN(result) = VARBITLEN(arg);
 
 	p = VARBITS(arg);
@@ -1205,7 +1205,7 @@ bitshiftleft(PG_FUNCTION_ARGS)
 											Int32GetDatum(-shft)));
 
 	result = (VarBit *) palloc(VARSIZE(arg));
-	VARATT_SIZEP(result) = VARSIZE(arg);
+	SET_VARSIZE(result, VARSIZE(arg));
 	VARBITLEN(result) = VARBITLEN(arg);
 	r = VARBITS(result);
 
@@ -1264,7 +1264,7 @@ bitshiftright(PG_FUNCTION_ARGS)
 											Int32GetDatum(-shft)));
 
 	result = (VarBit *) palloc(VARSIZE(arg));
-	VARATT_SIZEP(result) = VARSIZE(arg);
+	SET_VARSIZE(result, VARSIZE(arg));
 	VARBITLEN(result) = VARBITLEN(arg);
 	r = VARBITS(result);
 
@@ -1324,7 +1324,7 @@ bitfromint4(PG_FUNCTION_ARGS)
 
 	rlen = VARBITTOTALLEN(typmod);
 	result = (VarBit *) palloc(rlen);
-	VARATT_SIZEP(result) = rlen;
+	SET_VARSIZE(result, rlen);
 	VARBITLEN(result) = typmod;
 
 	r = VARBITS(result);
@@ -1399,7 +1399,7 @@ bitfromint8(PG_FUNCTION_ARGS)
 
 	rlen = VARBITTOTALLEN(typmod);
 	result = (VarBit *) palloc(rlen);
-	VARATT_SIZEP(result) = rlen;
+	SET_VARSIZE(result, rlen);
 	VARBITLEN(result) = typmod;
 
 	r = VARBITS(result);
diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c
index 8bc6ed5e6a1f7ab52f45ee80be21ecdb1e3cc70e..371a8a605d677cf5d363e0141217fafd6afc20bc 100644
--- a/src/backend/utils/adt/varchar.c
+++ b/src/backend/utils/adt/varchar.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/varchar.c,v 1.121 2007/01/05 22:19:42 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/varchar.c,v 1.122 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -169,7 +169,7 @@ bpchar_input(const char *s, size_t len, int32 atttypmod)
 	}
 
 	result = (BpChar *) palloc(maxlen + VARHDRSZ);
-	VARATT_SIZEP(result) = maxlen + VARHDRSZ;
+	SET_VARSIZE(result, maxlen + VARHDRSZ);
 	r = VARDATA(result);
 	memcpy(r, s, len);
 
@@ -328,7 +328,7 @@ bpchar(PG_FUNCTION_ARGS)
 	s = VARDATA(source);
 
 	result = palloc(maxlen);
-	VARATT_SIZEP(result) = maxlen;
+	SET_VARSIZE(result, maxlen);
 	r = VARDATA(result);
 
 	memcpy(r, s, len - VARHDRSZ);
@@ -352,7 +352,7 @@ char_bpchar(PG_FUNCTION_ARGS)
 
 	result = (BpChar *) palloc(VARHDRSZ + 1);
 
-	VARATT_SIZEP(result) = VARHDRSZ + 1;
+	SET_VARSIZE(result, VARHDRSZ + 1);
 	*(VARDATA(result)) = c;
 
 	PG_RETURN_BPCHAR_P(result);
@@ -409,7 +409,7 @@ name_bpchar(PG_FUNCTION_ARGS)
 	len = strlen(NameStr(*s));
 	result = (BpChar *) palloc(VARHDRSZ + len);
 	memcpy(VARDATA(result), NameStr(*s), len);
-	VARATT_SIZEP(result) = len + VARHDRSZ;
+	SET_VARSIZE(result, VARHDRSZ + len);
 
 	PG_RETURN_BPCHAR_P(result);
 }
@@ -477,7 +477,7 @@ varchar_input(const char *s, size_t len, int32 atttypmod)
 	}
 
 	result = (VarChar *) palloc(len + VARHDRSZ);
-	VARATT_SIZEP(result) = len + VARHDRSZ;
+	SET_VARSIZE(result, len + VARHDRSZ);
 	memcpy(VARDATA(result), s, len);
 
 	return result;
@@ -601,7 +601,7 @@ varchar(PG_FUNCTION_ARGS)
 
 	len = maxmblen + VARHDRSZ;
 	result = palloc(len);
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	memcpy(VARDATA(result), VARDATA(source), len - VARHDRSZ);
 
 	PG_RETURN_VARCHAR_P(result);
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index 1992db9bdfa9947253483da9c77a1b26422cdf94..51130efd79b2bc9a935a75d901ba06fe3a7a25d1 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/varlena.c,v 1.154 2007/01/05 22:19:42 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/varlena.c,v 1.155 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -124,7 +124,7 @@ byteain(PG_FUNCTION_ARGS)
 
 	byte += VARHDRSZ;
 	result = (bytea *) palloc(byte);
-	VARATT_SIZEP(result) = byte;	/* set varlena length */
+	SET_VARSIZE(result, byte);
 
 	tp = inputText;
 	rp = VARDATA(result);
@@ -233,7 +233,7 @@ bytearecv(PG_FUNCTION_ARGS)
 
 	nbytes = buf->len - buf->cursor;
 	result = (bytea *) palloc(nbytes + VARHDRSZ);
-	VARATT_SIZEP(result) = nbytes + VARHDRSZ;
+	SET_VARSIZE(result, nbytes + VARHDRSZ);
 	pq_copymsgbytes(buf, VARDATA(result), nbytes);
 	PG_RETURN_BYTEA_P(result);
 }
@@ -264,7 +264,7 @@ textin(PG_FUNCTION_ARGS)
 
 	len = strlen(inputText);
 	result = (text *) palloc(len + VARHDRSZ);
-	VARATT_SIZEP(result) = len + VARHDRSZ;
+	SET_VARSIZE(result, len + VARHDRSZ);
 
 	memcpy(VARDATA(result), inputText, len);
 
@@ -303,7 +303,7 @@ textrecv(PG_FUNCTION_ARGS)
 	str = pq_getmsgtext(buf, buf->len - buf->cursor, &nbytes);
 
 	result = (text *) palloc(nbytes + VARHDRSZ);
-	VARATT_SIZEP(result) = nbytes + VARHDRSZ;
+	SET_VARSIZE(result, nbytes + VARHDRSZ);
 	memcpy(VARDATA(result), str, nbytes);
 	pfree(str);
 	PG_RETURN_TEXT_P(result);
@@ -466,7 +466,7 @@ textcat(PG_FUNCTION_ARGS)
 	result = (text *) palloc(len);
 
 	/* Set size of result string... */
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 
 	/* Fill data field of result string... */
 	ptr = VARDATA(result);
@@ -737,7 +737,7 @@ text_substring(Datum str, int32 start, int32 length, bool length_not_specified)
 			p += pg_mblen(p);
 
 		ret = (text *) palloc(VARHDRSZ + (p - s));
-		VARATT_SIZEP(ret) = VARHDRSZ + (p - s);
+		SET_VARSIZE(ret, VARHDRSZ + (p - s));
 		memcpy(VARDATA(ret), s, (p - s));
 
 		if (slice != (text *) DatumGetPointer(str))
@@ -1409,7 +1409,7 @@ byteacat(PG_FUNCTION_ARGS)
 	result = (bytea *) palloc(len);
 
 	/* Set size of result string... */
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 
 	/* Fill data field of result string... */
 	ptr = VARDATA(result);
@@ -1761,7 +1761,7 @@ name_text(PG_FUNCTION_ARGS)
 #endif
 
 	result = palloc(VARHDRSZ + len);
-	VARATT_SIZEP(result) = VARHDRSZ + len;
+	SET_VARSIZE(result, VARHDRSZ + len);
 	memcpy(VARDATA(result), NameStr(*s), len);
 
 	PG_RETURN_TEXT_P(result);
@@ -2593,7 +2593,7 @@ text_to_array(PG_FUNCTION_ARGS)
 
 		/* must build a temp text datum to pass to accumArrayResult */
 		result_text = (text *) palloc(VARHDRSZ + chunk_len);
-		VARATT_SIZEP(result_text) = VARHDRSZ + chunk_len;
+		SET_VARSIZE(result_text, VARHDRSZ + chunk_len);
 		memcpy(VARDATA(result_text), start_ptr, chunk_len);
 
 		/* stash away this field */
diff --git a/src/backend/utils/adt/version.c b/src/backend/utils/adt/version.c
index 19d75db513ea0998dcd5ac5cf950ac4970e1f6d6..7afbcd43581633dc910374361b52ca4a53ba0052 100644
--- a/src/backend/utils/adt/version.c
+++ b/src/backend/utils/adt/version.c
@@ -7,7 +7,7 @@
  *
  * IDENTIFICATION
  *
- * $PostgreSQL: pgsql/src/backend/utils/adt/version.c,v 1.14 2007/01/20 01:08:42 neilc Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/version.c,v 1.15 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -23,7 +23,7 @@ pgsql_version(PG_FUNCTION_ARGS)
 	int			n = strlen(PG_VERSION_STR);
 	text	   *ret = (text *) palloc(n + VARHDRSZ);
 
-	VARATT_SIZEP(ret) = n + VARHDRSZ;
+	SET_VARSIZE(ret, n + VARHDRSZ);
 	memcpy(VARDATA(ret), PG_VERSION_STR, n);
 
 	PG_RETURN_TEXT_P(ret);
diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c
index f814d7f543e327a7ed30d1da1a189c1451371604..c12522cfe4537d7ce73b197408e883a69b427c3b 100644
--- a/src/backend/utils/adt/xml.c
+++ b/src/backend/utils/adt/xml.c
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.31 2007/02/16 18:37:43 petere Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.32 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -128,7 +128,7 @@ xml_in(PG_FUNCTION_ARGS)
 
 	len = strlen(s);
 	vardata = palloc(len + VARHDRSZ);
-	VARATT_SIZEP(vardata) = len + VARHDRSZ;
+	SET_VARSIZE(vardata, len + VARHDRSZ);
 	memcpy(VARDATA(vardata), s, len);
 
 	/*
@@ -225,7 +225,7 @@ xml_recv(PG_FUNCTION_ARGS)
 	str = pq_getmsgtext(buf, buf->len - buf->cursor, &nbytes);
 
 	result = palloc(nbytes + VARHDRSZ);
-	VARATT_SIZEP(result) = nbytes + VARHDRSZ;
+	SET_VARSIZE(result, nbytes + VARHDRSZ);
 	memcpy(VARDATA(result), str, nbytes);
 
 	parse_xml_decl((xmlChar *) str, NULL, NULL, &encoding, NULL);
@@ -251,7 +251,7 @@ xml_recv(PG_FUNCTION_ARGS)
 		nbytes = strlen(newstr);
 
 		result = palloc(nbytes + VARHDRSZ);
-		VARATT_SIZEP(result) = nbytes + VARHDRSZ;
+		SET_VARSIZE(result, nbytes + VARHDRSZ);
 		memcpy(VARDATA(result), newstr, nbytes);
 	}
 
@@ -293,7 +293,7 @@ stringinfo_to_xmltype(StringInfo buf)
 
 	len = buf->len + VARHDRSZ;
 	result = palloc(len);
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	memcpy(VARDATA(result), buf->data, buf->len);
 
 	return result;
@@ -308,7 +308,7 @@ cstring_to_xmltype(const char *string)
 
 	len = strlen(string) + VARHDRSZ;
 	result = palloc(len);
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	memcpy(VARDATA(result), string, len - VARHDRSZ);
 
 	return result;
@@ -324,7 +324,7 @@ xmlBuffer_to_xmltype(xmlBufferPtr buf)
 
 	len = xmlBufferLength(buf) + VARHDRSZ;
 	result = palloc(len);
-	VARATT_SIZEP(result) = len;
+	SET_VARSIZE(result, len);
 	memcpy(VARDATA(result), xmlBufferContent(buf), len - VARHDRSZ);
 
 	return result;
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index da1f9fd924052e2694977dd90e9c8b23483e4433..ae41b169c3defee1db52cf70ac00eacdfef3ddf6 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.255 2007/01/25 02:17:26 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.256 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -3244,7 +3244,7 @@ load_relcache_init_file(void)
 			rel->rd_options = palloc(len);
 			if ((nread = fread(rel->rd_options, 1, len, fp)) != len)
 				goto read_failed;
-			if (len != VARATT_SIZE(rel->rd_options))
+			if (len != VARSIZE(rel->rd_options))
 				goto read_failed;		/* sanity check */
 		}
 		else
@@ -3540,7 +3540,7 @@ write_relcache_init_file(void)
 
 		/* next, do the access method specific field */
 		write_item(rel->rd_options,
-				   (rel->rd_options ? VARATT_SIZE(rel->rd_options) : 0),
+				   (rel->rd_options ? VARSIZE(rel->rd_options) : 0),
 				   fp);
 
 		/* If it's an index, there's more to do */
diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c
index f462ba44b959d2028e80284eb93639686fb9a720..cee6807d66c004b5097c03934f0bedb352c15834 100644
--- a/src/backend/utils/mb/mbutils.c
+++ b/src/backend/utils/mb/mbutils.c
@@ -4,7 +4,7 @@
  * (currently mule internal code (mic) is used)
  * Tatsuo Ishii
  *
- * $PostgreSQL: pgsql/src/backend/utils/mb/mbutils.c,v 1.61 2006/12/24 00:57:48 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/mb/mbutils.c,v 1.62 2007/02/27 23:48:09 tgl Exp $
  */
 #include "postgres.h"
 
@@ -339,7 +339,7 @@ pg_convert2(PG_FUNCTION_ARGS)
 	 */
 	len = strlen((char *) result) + VARHDRSZ;
 	retval = palloc(len);
-	VARATT_SIZEP(retval) = len;
+	SET_VARSIZE(retval, len);
 	memcpy(VARDATA(retval), result, len - VARHDRSZ);
 
 	if (result != str)
diff --git a/src/include/access/htup.h b/src/include/access/htup.h
index 31de835d2900aa9523d5b8e229f218e2e132acf6..c37501d9109f0b59a89c13748dc8ee6d66cf0ff0 100644
--- a/src/include/access/htup.h
+++ b/src/include/access/htup.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/access/htup.h,v 1.91 2007/02/09 03:35:34 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/access/htup.h,v 1.92 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -115,7 +115,7 @@ typedef struct HeapTupleFields
 
 typedef struct DatumTupleFields
 {
-	int32		datum_len;		/* required to be a varlena type */
+	int32		datum_len_;		/* varlena header (do not touch directly!) */
 
 	int32		datum_typmod;	/* -1, or identifier of a record type */
 
@@ -260,14 +260,10 @@ do { \
 } while (0)
 
 #define HeapTupleHeaderGetDatumLength(tup) \
-( \
-	(tup)->t_choice.t_datum.datum_len \
-)
+	VARSIZE(tup)
 
 #define HeapTupleHeaderSetDatumLength(tup, len) \
-( \
-	(tup)->t_choice.t_datum.datum_len = (len) \
-)
+	SET_VARSIZE(tup, len)
 
 #define HeapTupleHeaderGetTypeId(tup) \
 ( \
diff --git a/src/include/access/tupmacs.h b/src/include/access/tupmacs.h
index 0b65cbd2bc60d01dc0ad14411bcfcf95cc2148d2..80c2d436f047ce5f5935c957627a5f0a005c68fa 100644
--- a/src/include/access/tupmacs.h
+++ b/src/include/access/tupmacs.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/access/tupmacs.h,v 1.31 2007/01/05 22:19:51 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/access/tupmacs.h,v 1.32 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -118,7 +118,7 @@
 	) \
 	: (((attlen) == -1) ? \
 	( \
-		(cur_offset) + VARATT_SIZE(DatumGetPointer(attval)) \
+		(cur_offset) + VARSIZE(DatumGetPointer(attval)) \
 	) \
 	: \
 	( \
diff --git a/src/include/c.h b/src/include/c.h
index 0774ec7cc1e636ad7706d8763de802e905102c4f..73b72a816adba16532c55eea268feb2e6ad5769c 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -12,7 +12,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/c.h,v 1.218 2007/02/05 04:22:18 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/c.h,v 1.219 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -399,13 +399,16 @@ typedef struct
  * NOTE: for TOASTable types, this is an oversimplification, since the value
  * may be compressed or moved out-of-line.	However datatype-specific routines
  * are mostly content to deal with de-TOASTed values only, and of course
- * client-side routines should never see a TOASTed value.  See postgres.h for
- * details of the TOASTed form.
+ * client-side routines should never see a TOASTed value.  But even in a
+ * de-TOASTed value, beware of touching vl_len_ directly, as its representation
+ * is no longer convenient.  It's recommended that code always use the VARDATA,
+ * VARSIZE, and SET_VARSIZE macros instead of relying on direct mentions of
+ * the struct fields.  See postgres.h for details of the TOASTed form.
  * ----------------
  */
 struct varlena
 {
-	int32		vl_len;
+	int32		vl_len_;		/* Do not touch this field directly! */
 	char		vl_dat[1];
 };
 
@@ -433,7 +436,7 @@ typedef struct varlena VarChar; /* var-length char, ie SQL varchar(n) */
  */
 typedef struct
 {
-	int32		size;			/* these fields must match ArrayType! */
+	int32		vl_len_;		/* these fields must match ArrayType! */
 	int			ndim;			/* always 1 for int2vector */
 	int32		dataoffset;		/* always 0 for int2vector */
 	Oid			elemtype;
@@ -444,7 +447,7 @@ typedef struct
 
 typedef struct
 {
-	int32		size;			/* these fields must match ArrayType! */
+	int32		vl_len_;		/* these fields must match ArrayType! */
 	int			ndim;			/* always 1 for oidvector */
 	int32		dataoffset;		/* always 0 for oidvector */
 	Oid			elemtype;
diff --git a/src/include/postgres.h b/src/include/postgres.h
index 03ffd89f5d734420d511bc87f238ec2f9f562435..c06333573e2eeb17c8d1fcb3f8fe40e9edd0a4ff 100644
--- a/src/include/postgres.h
+++ b/src/include/postgres.h
@@ -10,7 +10,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1995, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/postgres.h,v 1.76 2007/01/05 22:19:50 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/postgres.h,v 1.77 2007/02/27 23:48:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -56,12 +56,13 @@
 
 /* ----------------
  * struct varattrib is the header of a varlena object that may have been
- * TOASTed.
+ * TOASTed.  Generally, only the code closely associated with TOAST logic
+ * should mess directly with struct varattrib or use the VARATT_FOO macros.
  * ----------------
  */
 typedef struct varattrib
 {
-	int32		va_header;		/* External/compressed storage */
+	int32		va_header_;		/* External/compressed storage */
 	/* flags and item size */
 	union
 	{
@@ -88,20 +89,21 @@ typedef struct varattrib
 #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)
-
-#define VARSIZE(__PTR)		VARATT_SIZE(__PTR)
-#define VARDATA(__PTR)		VARATT_DATA(__PTR)
+#define VARATT_SIZEP_DEPRECATED(PTR)	(((varattrib *) (PTR))->va_header_)
 
 #define VARATT_IS_EXTENDED(PTR)		\
-				((VARATT_SIZEP(PTR) & VARATT_MASK_FLAGS) != 0)
+				((VARATT_SIZEP_DEPRECATED(PTR) & VARATT_MASK_FLAGS) != 0)
 #define VARATT_IS_EXTERNAL(PTR)		\
-				((VARATT_SIZEP(PTR) & VARATT_FLAG_EXTERNAL) != 0)
+				((VARATT_SIZEP_DEPRECATED(PTR) & VARATT_FLAG_EXTERNAL) != 0)
 #define VARATT_IS_COMPRESSED(PTR)	\
-				((VARATT_SIZEP(PTR) & VARATT_FLAG_COMPRESSED) != 0)
+				((VARATT_SIZEP_DEPRECATED(PTR) & VARATT_FLAG_COMPRESSED) != 0)
+
+/* These macros are the ones for non-TOAST code to use */
+
+#define VARSIZE(PTR)	(VARATT_SIZEP_DEPRECATED(PTR) & VARATT_MASK_SIZE)
+#define VARDATA(PTR)	(((varattrib *) (PTR))->va_content.va_data)
+
+#define SET_VARSIZE(PTR,SIZE)	(VARATT_SIZEP_DEPRECATED(PTR) = (SIZE))
 
 
 /* ----------------------------------------------------------------
diff --git a/src/include/utils/array.h b/src/include/utils/array.h
index 77d5e04c89514b5282c55dc2a5eac160dadc2239..9176a8b288d6c6c493d59ecddc5ae73dc16155ef 100644
--- a/src/include/utils/array.h
+++ b/src/include/utils/array.h
@@ -4,7 +4,7 @@
  *	  Declarations for Postgres arrays.
  *
  * A standard varlena array has the following internal structure:
- *	  <size>		- total number of bytes (also, TOAST info flags)
+ *	  <vl_len_>		- standard varlena header word
  *	  <ndim>		- number of dimensions of the array
  *	  <dataoffset>	- offset to stored data, or 0 if no nulls bitmap
  *	  <elemtype>	- element type OID
@@ -49,7 +49,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/array.h,v 1.62 2007/01/05 22:19:58 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/utils/array.h,v 1.63 2007/02/27 23:48:10 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -61,18 +61,22 @@
 /*
  * Arrays are varlena objects, so must meet the varlena convention that
  * the first int32 of the object contains the total object size in bytes.
+ * Be sure to use VARSIZE() and SET_VARSIZE() to access it, though!
  *
  * CAUTION: if you change the header for ordinary arrays you will also
  * need to change the headers for oidvector and int2vector!
  */
 typedef struct
 {
-	int32		size;			/* total array size (varlena requirement) */
+	int32		vl_len_;		/* varlena header (do not touch directly!) */
 	int			ndim;			/* # of dimensions */
 	int32		dataoffset;		/* offset to data, or 0 if no bitmap */
 	Oid			elemtype;		/* element type OID */
 } ArrayType;
 
+/*
+ * working state for accumArrayResult() and friends
+ */
 typedef struct ArrayBuildState
 {
 	MemoryContext mcontext;		/* where all the temp stuff is kept */
@@ -132,7 +136,7 @@ typedef struct ArrayMapState
  *
  * Unlike C, the default lower bound is 1.
  */
-#define ARR_SIZE(a)				((a)->size)
+#define ARR_SIZE(a)				VARSIZE(a)
 #define ARR_NDIM(a)				((a)->ndim)
 #define ARR_HASNULL(a)			((a)->dataoffset != 0)
 #define ARR_ELEMTYPE(a)			((a)->elemtype)
diff --git a/src/include/utils/geo_decls.h b/src/include/utils/geo_decls.h
index 49e7aead3c85cc6eaa5e287420fe90ee07b6c142..09aefb752b8151d80050d91ded44c776cf2a6a12 100644
--- a/src/include/utils/geo_decls.h
+++ b/src/include/utils/geo_decls.h
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/geo_decls.h,v 1.52 2007/01/05 22:19:59 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/utils/geo_decls.h,v 1.53 2007/02/27 23:48:10 tgl Exp $
  *
  * NOTE
  *	  These routines do *not* use the float types from adt/.
@@ -78,7 +78,7 @@ typedef struct
  *-------------------------------------------------------------------*/
 typedef struct
 {
-	int32		size;			/* XXX varlena */
+	int32		vl_len_;		/* varlena header (do not touch directly!) */
 	int32		npts;
 	int32		closed;			/* is this a closed polygon? */
 	int32		dummy;			/* padding to make it double align */
@@ -121,7 +121,7 @@ typedef struct
  *-------------------------------------------------------------------*/
 typedef struct
 {
-	int32		size;			/* XXX varlena */
+	int32		vl_len_;		/* varlena header (do not touch directly!) */
 	int32		npts;
 	BOX			boundbox;
 	Point		p[1];			/* variable length array of POINTs */
diff --git a/src/include/utils/numeric.h b/src/include/utils/numeric.h
index c4d9d69debefe367c45fdd82c7c5ff20c2884d0f..cffba1e164197e57308d1267309f1b398a1c4cfb 100644
--- a/src/include/utils/numeric.h
+++ b/src/include/utils/numeric.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1998-2007, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/include/utils/numeric.h,v 1.23 2007/01/05 22:19:59 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/utils/numeric.h,v 1.24 2007/02/27 23:48:10 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -62,7 +62,7 @@
  */
 typedef struct NumericData
 {
-	int32		varlen;			/* Variable size (std varlena header) */
+	int32		vl_len_;		/* varlena header (do not touch directly!) */
 	int16		n_weight;		/* Weight of 1st digit	*/
 	uint16		n_sign_dscale;	/* Sign + display scale */
 	char		n_data[1];		/* Digits (really array of NumericDigit) */
@@ -70,7 +70,7 @@ typedef struct NumericData
 
 typedef NumericData *Numeric;
 
-#define NUMERIC_HDRSZ	(sizeof(int32) + sizeof(int16) + sizeof(uint16))
+#define NUMERIC_HDRSZ	(VARHDRSZ + sizeof(int16) + sizeof(uint16))
 
 
 /*
diff --git a/src/include/utils/pg_lzcompress.h b/src/include/utils/pg_lzcompress.h
index e6609dc8db3458f333ded17da85ca837196a0506..bed75d9af17e8b5d949ead8f73f80f2e697a37c7 100644
--- a/src/include/utils/pg_lzcompress.h
+++ b/src/include/utils/pg_lzcompress.h
@@ -3,7 +3,7 @@
  *
  *	Definitions for the builtin LZ compressor
  *
- * $PostgreSQL: pgsql/src/include/utils/pg_lzcompress.h,v 1.13 2006/10/05 23:33:33 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/utils/pg_lzcompress.h,v 1.14 2007/02/27 23:48:10 tgl Exp $
  * ----------
  */
 
@@ -15,13 +15,11 @@
  * PGLZ_Header -
  *
  *		The information at the top of the compressed data.
- *		The varsize must be kept the same data type as the value
- *		in front of all variable size data types in PostgreSQL.
  * ----------
  */
 typedef struct PGLZ_Header
 {
-	int32		varsize;
+	int32		vl_len_;		/* varlena header (do not touch directly!) */
 	int32		rawsize;
 } PGLZ_Header;
 
diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h
index 3ac44b11cdc07006b88014225efdf0f8a4430732..4065eced8211d896e1d7836d9253fbffc0689846 100644
--- a/src/include/utils/rel.h
+++ b/src/include/utils/rel.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/rel.h,v 1.97 2007/02/14 01:58:58 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/utils/rel.h,v 1.98 2007/02/27 23:48:10 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -222,7 +222,7 @@ typedef Relation *RelationPtr;
  */
 typedef struct StdRdOptions
 {
-	int32		vl_len;			/* required to be a bytea */
+	int32		vl_len_;		/* varlena header (do not touch directly!) */
 	int			fillfactor;		/* page fill factor in percent (0..100) */
 } StdRdOptions;
 
diff --git a/src/include/utils/varbit.h b/src/include/utils/varbit.h
index 6909da77374af94fb8783ac96244406421bbc67b..6c9504d6a08c9e6f21a6c9a24fb38a383a3802cb 100644
--- a/src/include/utils/varbit.h
+++ b/src/include/utils/varbit.h
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/varbit.h,v 1.25 2007/01/05 22:20:00 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/utils/varbit.h,v 1.26 2007/02/27 23:48:10 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -22,8 +22,7 @@
  */
 typedef struct
 {
-	int32		vl_len;			/* standard varlena header (total size in
-								 * bytes) */
+	int32		vl_len_;		/* varlena header (do not touch directly!) */
 	int32		bit_len;		/* number of valid bits */
 	bits8		bit_dat[1];		/* bit string, most sig. byte first */
 } VarBit;
diff --git a/src/tutorial/funcs.c b/src/tutorial/funcs.c
index 18f8467dddb61812ae80a8c88649af81c6e181bd..f9f28a5c5eb7d43ce29d9357cf61a8594e27ad2d 100644
--- a/src/tutorial/funcs.c
+++ b/src/tutorial/funcs.c
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/tutorial/funcs.c,v 1.16 2006/09/27 16:19:42 tgl Exp $ */
+/* $PostgreSQL: pgsql/src/tutorial/funcs.c,v 1.17 2007/02/27 23:48:10 tgl Exp $ */
 
 /******************************************************************************
   These are user-defined functions that can be bound to a Postgres backend
@@ -71,7 +71,7 @@ copytext(text *t)
 	 */
 	text	   *new_t = (text *) palloc(VARSIZE(t));
 
-	VARATT_SIZEP(new_t) = VARSIZE(t);
+	SET_VARSIZE(new_t, VARSIZE(t));
 
 	/*
 	 * VARDATA is a pointer to the data region of the struct.
@@ -90,7 +90,7 @@ concat_text(text *arg1, text *arg2)
 	int32		new_text_size = arg1_size + arg2_size + VARHDRSZ;
 	text	   *new_text = (text *) palloc(new_text_size);
 
-	VARATT_SIZEP(new_text) = new_text_size;
+	SET_VARSIZE(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;
diff --git a/src/tutorial/funcs_new.c b/src/tutorial/funcs_new.c
index 88fff266c4ebc1e5c488388c2df21a75367de073..9811f5421b5a14a709728223007e26a38adb1a66 100644
--- a/src/tutorial/funcs_new.c
+++ b/src/tutorial/funcs_new.c
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/tutorial/funcs_new.c,v 1.12 2006/09/27 16:19:42 tgl Exp $ */
+/* $PostgreSQL: pgsql/src/tutorial/funcs_new.c,v 1.13 2007/02/27 23:48:10 tgl Exp $ */
 
 /******************************************************************************
   These are user-defined functions that can be bound to a Postgres backend
@@ -83,7 +83,7 @@ copytext(PG_FUNCTION_ARGS)
 	 */
 	text	   *new_t = (text *) palloc(VARSIZE(t));
 
-	VARATT_SIZEP(new_t) = VARSIZE(t);
+	SET_VARSIZE(new_t, VARSIZE(t));
 
 	/*
 	 * VARDATA is a pointer to the data region of the struct.
@@ -106,7 +106,7 @@ concat_text(PG_FUNCTION_ARGS)
 	int32		new_text_size = arg1_size + arg2_size + VARHDRSZ;
 	text	   *new_text = (text *) palloc(new_text_size);
 
-	VARATT_SIZEP(new_text) = new_text_size;
+	SET_VARSIZE(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);