*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
* 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");
}
tp = inputText;
byte += VARHDRSZ;
- result = (text *) palloc(byte);
+ result = (bytea *) palloc(byte);
result->vl_len = byte; /* varlena? */
rp = result->vl_dat;
while (*tp != '\0')
* 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 */
* textout - converts internal representation to "..."
*/
char *
-
textout(text *vlena)
{
int len;
#endif
if (!PointerIsValid(t))
- elog(ERROR, "Null input to textlen");
+ return 0;
#ifdef MULTIBYTE
len = 0;
textoctetlen(text *t)
{
if (!PointerIsValid(t))
- elog(ERROR, "Null input to textoctetlen");
+ return 0;
return VARSIZE(t) - VARHDRSZ;
-
} /* textoctetlen() */
/*
}
/*-------------------------------------------------------------
- * 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;
}
/*-------------------------------------------------------------
*-------------------------------------------------------------
*/
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;
}
*-------------------------------------------------------------
*/
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;
*
*-------------------------------------------------------------
*/
-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;
}
*
*-------------------------------------------------------------
*/
-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);
/*
* 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
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 - ));
* 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.
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);