From eca02fee2c721ac8abbd983424a96c8ebba74473 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 24 Mar 2000 02:41:46 +0000
Subject: [PATCH] Rename bytea functions to not have upper-case letters in
 their names. Clean up grotty coding in them, too.  AFAICS from the CVS logs,
 these have been broken since Postgres95, so I'm not going to insist on an
 initdb to fix them now...

---
 src/backend/utils/adt/varlena.c | 115 +++++++++++++++++---------------
 src/include/catalog/pg_proc.h   |  12 ++--
 src/include/utils/builtins.h    |  16 ++---
 3 files changed, 77 insertions(+), 66 deletions(-)

diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index bdd486825d0..b333a0ed4e3 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.56 2000/01/26 05:57:15 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.57 2000/03/24 02:41:46 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -41,13 +41,13 @@ static int	text_cmp(text *arg1, text *arg2);
  *				The input is scaned twice.
  *				The error checking of input is minimal.
  */
-text *
+bytea *
 byteain(char *inputText)
 {
 	char	   *tp;
 	char	   *rp;
 	int			byte;
-	text	   *result;
+	bytea	   *result;
 
 	if (inputText == NULL)
 		elog(ERROR, "Bad input string for type bytea");
@@ -64,7 +64,7 @@ byteain(char *inputText)
 		}
 	tp = inputText;
 	byte += VARHDRSZ;
-	result = (text *) palloc(byte);
+	result = (bytea *) palloc(byte);
 	result->vl_len = byte;		/* varlena? */
 	rp = result->vl_dat;
 	while (*tp != '\0')
@@ -90,10 +90,9 @@ byteain(char *inputText)
  *		NULL vlena should be an error--returning string with NULL for now.
  */
 char *
-byteaout(text *vlena)
+byteaout(bytea *vlena)
 {
 	char	   *result;
-
 	char	   *vp;
 	char	   *rp;
 	int			val;			/* holds unprintable chars */
@@ -173,7 +172,6 @@ textin(char *inputText)
  *		textout			- converts internal representation to "..."
  */
 char *
-
 textout(text *vlena)
 {
 	int			len;
@@ -218,7 +216,7 @@ textlen(text *t)
 #endif
 
 	if (!PointerIsValid(t))
-		elog(ERROR, "Null input to textlen");
+		return 0;
 
 #ifdef MULTIBYTE
 	len = 0;
@@ -247,10 +245,9 @@ int32
 textoctetlen(text *t)
 {
 	if (!PointerIsValid(t))
-		elog(ERROR, "Null input to textoctetlen");
+		return 0;
 
 	return VARSIZE(t) - VARHDRSZ;
-
 }	/* textoctetlen() */
 
 /*
@@ -621,19 +618,18 @@ text_smaller(text *arg1, text *arg2)
 }
 
 /*-------------------------------------------------------------
- * byteaGetSize
+ * byteaoctetlen
  *
  * get the number of bytes contained in an instance of type 'bytea'
  *-------------------------------------------------------------
  */
 int32
-byteaGetSize(text *v)
+byteaoctetlen(bytea *v)
 {
-	int			len;
-
-	len = v->vl_len - sizeof(v->vl_len);
+	if (!PointerIsValid(v))
+		return 0;
 
-	return len;
+	return VARSIZE(v) - VARHDRSZ;
 }
 
 /*-------------------------------------------------------------
@@ -645,23 +641,22 @@ byteaGetSize(text *v)
  *-------------------------------------------------------------
  */
 int32
-byteaGetByte(text *v, int32 n)
+byteaGetByte(bytea *v, int32 n)
 {
 	int			len;
 	int			byte;
 
-	len = byteaGetSize(v);
+	if (!PointerIsValid(v))
+		return 0;
 
-	if (n >= len)
-	{
-		elog(ERROR, "byteaGetByte: index (=%d) out of range [0..%d]",
+	len = VARSIZE(v) - VARHDRSZ;
+
+	if (n < 0 || n >= len)
+		elog(ERROR, "byteaGetByte: index %d out of range [0..%d]",
 			 n, len - 1);
-	}
-#ifdef USE_LOCALE
-	byte = (unsigned char) (v->vl_dat[n]);
-#else
-	byte = v->vl_dat[n];
-#endif
+
+	byte = ((unsigned char *) VARDATA(v))[n];
+
 	return (int32) byte;
 }
 
@@ -675,16 +670,26 @@ byteaGetByte(text *v, int32 n)
  *-------------------------------------------------------------
  */
 int32
-byteaGetBit(text *v, int32 n)
+byteaGetBit(bytea *v, int32 n)
 {
 	int			byteNo,
 				bitNo;
+	int			len;
 	int			byte;
 
+	if (!PointerIsValid(v))
+		return 0;
+
+	len = VARSIZE(v) - VARHDRSZ;
+
+	if (n < 0 || n >= len*8)
+		elog(ERROR, "byteaGetBit: index %d out of range [0..%d]",
+			 n, len*8 - 1);
+
 	byteNo = n / 8;
 	bitNo = n % 8;
 
-	byte = byteaGetByte(v, byteNo);
+	byte = ((unsigned char *) VARDATA(v))[byteNo];
 
 	if (byte & (1 << bitNo))
 		return (int32) 1;
@@ -700,36 +705,31 @@ byteaGetBit(text *v, int32 n)
  *
  *-------------------------------------------------------------
  */
-text *
-byteaSetByte(text *v, int32 n, int32 newByte)
+bytea *
+byteaSetByte(bytea *v, int32 n, int32 newByte)
 {
 	int			len;
-	text	   *res;
+	bytea	   *res;
 
-	len = byteaGetSize(v);
+	if (!PointerIsValid(v))
+		return 0;
 
-	if (n >= len)
-	{
-		elog(ERROR,
-			 "byteaSetByte: index (=%d) out of range [0..%d]",
+	len = VARSIZE(v) - VARHDRSZ;
+
+	if (n < 0 || n >= len)
+		elog(ERROR, "byteaSetByte: index %d out of range [0..%d]",
 			 n, len - 1);
-	}
 
 	/*
 	 * Make a copy of the original varlena.
 	 */
-	res = (text *) palloc(VARSIZE(v));
-	if (res == NULL)
-	{
-		elog(ERROR, "byteaSetByte: Out of memory (%d bytes requested)",
-			 VARSIZE(v));
-	}
-	memmove((char *) res, (char *) v, VARSIZE(v));
+	res = (bytea *) palloc(VARSIZE(v));
+	memcpy((char *) res, (char *) v, VARSIZE(v));
 
 	/*
 	 * Now set the byte.
 	 */
-	res->vl_dat[n] = newByte;
+	((unsigned char *) VARDATA(res))[n] = newByte;
 
 	return res;
 }
@@ -742,26 +742,37 @@ byteaSetByte(text *v, int32 n, int32 newByte)
  *
  *-------------------------------------------------------------
  */
-text *
-byteaSetBit(text *v, int32 n, int32 newBit)
+bytea *
+byteaSetBit(bytea *v, int32 n, int32 newBit)
 {
-	text	   *res;
+	bytea	   *res;
+	int			len;
 	int			oldByte,
 				newByte;
 	int			byteNo,
 				bitNo;
 
+	if (!PointerIsValid(v))
+		return NULL;
+
+	len = VARSIZE(v) - VARHDRSZ;
+
+	if (n < 0 || n >= len*8)
+		elog(ERROR, "byteaSetBit: index %d out of range [0..%d]",
+			 n, len*8 - 1);
+
+	byteNo = n / 8;
+	bitNo = n % 8;
+
 	/*
 	 * sanity check!
 	 */
 	if (newBit != 0 && newBit != 1)
-		elog(ERROR, "byteaSetByte: new bit must be 0 or 1");
+		elog(ERROR, "byteaSetBit: new bit must be 0 or 1");
 
 	/*
 	 * get the byte where the bit we want is stored.
 	 */
-	byteNo = n / 8;
-	bitNo = n % 8;
 	oldByte = byteaGetByte(v, byteNo);
 
 	/*
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index b8befe68828..be1e38f5949 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.128 2000/03/19 01:12:18 tgl Exp $
+ * $Id: pg_proc.h,v 1.129 2000/03/24 02:41:44 tgl Exp $
  *
  * NOTES
  *	  The script catalog/genbki.sh reads this file and generates .bki
@@ -948,15 +948,15 @@ DESCR("equal");
 DATA(insert OID = 717 (  int4eqoid		   PGUID 11 f t t 2 f 16 "23 26" 100 0 0 100  int4eqoid - ));
 DESCR("equal");
 
-DATA(insert OID = 720 (  byteaGetSize	   PGUID 11 f t t 1 f 23 "17" 100 0 0 100  byteaGetSize - ));
+DATA(insert OID = 720 (  octet_length	   PGUID 11 f t t 1 f 23 "17" 100 0 0 100  byteaoctetlen - ));
 DESCR("");
-DATA(insert OID = 721 (  byteaGetByte	   PGUID 11 f t t 2 f 23 "17 23" 100 0 0 100  byteaGetByte - ));
+DATA(insert OID = 721 (  get_byte		   PGUID 11 f t t 2 f 23 "17 23" 100 0 0 100  byteaGetByte - ));
 DESCR("");
-DATA(insert OID = 722 (  byteaSetByte	   PGUID 11 f t t 3 f 17 "17 23 23" 100 0 0 100  byteaSetByte - ));
+DATA(insert OID = 722 (  set_byte		   PGUID 11 f t t 3 f 17 "17 23 23" 100 0 0 100  byteaSetByte - ));
 DESCR("");
-DATA(insert OID = 723 (  byteaGetBit	   PGUID 11 f t t 2 f 23 "17 23" 100 0 0 100  byteaGetBit - ));
+DATA(insert OID = 723 (  get_bit		   PGUID 11 f t t 2 f 23 "17 23" 100 0 0 100  byteaGetBit - ));
 DESCR("");
-DATA(insert OID = 724 (  byteaSetBit	   PGUID 11 f t t 3 f 17 "17 23 23" 100 0 0 100  byteaSetBit - ));
+DATA(insert OID = 724 (  set_bit		   PGUID 11 f t t 3 f 17 "17 23 23" 100 0 0 100  byteaSetBit - ));
 DESCR("");
 
 DATA(insert OID = 725 (  dist_pl		   PGUID 11 f t t 2 f 701 "600 628" 100 0 0 100  dist_pl - ));
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index 7e4ee5a560d..008d3a7f20f 100644
--- a/src/include/utils/builtins.h
+++ b/src/include/utils/builtins.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: builtins.h,v 1.106 2000/03/14 23:06:50 thomas Exp $
+ * $Id: builtins.h,v 1.107 2000/03/24 02:41:45 tgl Exp $
  *
  * NOTES
  *	  This should normally only be included by fmgr.h.
@@ -450,13 +450,13 @@ extern text *text_substr(text *string, int32 m, int32 n);
 extern text *name_text(NameData *s);
 extern NameData *text_name(text *s);
 
-extern struct varlena *byteain(char *inputText);
-extern char *byteaout(struct varlena * vlena);
-extern int32 byteaGetSize(struct varlena * v);
-extern int32 byteaGetByte(struct varlena * v, int32 n);
-extern int32 byteaGetBit(struct varlena * v, int32 n);
-extern struct varlena *byteaSetByte(struct varlena * v, int32 n, int32 newByte);
-extern struct varlena *byteaSetBit(struct varlena * v, int32 n, int32 newBit);
+extern bytea *byteain(char *inputText);
+extern char *byteaout(bytea *vlena);
+extern int32 byteaoctetlen(bytea *v);
+extern int32 byteaGetByte(bytea *v, int32 n);
+extern int32 byteaGetBit(bytea *v, int32 n);
+extern bytea *byteaSetByte(bytea *v, int32 n, int32 newByte);
+extern bytea *byteaSetBit(bytea *v, int32 n, int32 newBit);
 
 /* like.c */
 extern bool namelike(NameData *n, struct varlena * p);
-- 
GitLab