aboutsummaryrefslogtreecommitdiff
path: root/contrib/string
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/string')
-rw-r--r--contrib/string/Makefile8
-rw-r--r--contrib/string/string_io.c37
-rw-r--r--contrib/string/string_io.h19
3 files changed, 35 insertions, 29 deletions
diff --git a/contrib/string/Makefile b/contrib/string/Makefile
index b77ace937cf..dd8f0e6f2a6 100644
--- a/contrib/string/Makefile
+++ b/contrib/string/Makefile
@@ -11,10 +11,10 @@ SRCDIR = $(PGDIR)/src
include $(SRCDIR)/Makefile.global
-INCLUDE_OPT = -I ./ \
- -I $(SRCDIR)/ \
- -I $(SRCDIR)/include \
- -I $(SRCDIR)/port/$(PORTNAME)
+INCLUDE_OPT = -I./ \
+ -I$(SRCDIR)/ \
+ -I$(SRCDIR)/include \
+ -I$(SRCDIR)/port/$(PORTNAME)
CFLAGS += $(INCLUDE_OPT) $(CFLAGS_SL)
diff --git a/contrib/string/string_io.c b/contrib/string/string_io.c
index e1fc867497f..9407e6a21b3 100644
--- a/contrib/string/string_io.c
+++ b/contrib/string/string_io.c
@@ -50,8 +50,8 @@
* representation of data.
*/
-char *
-string_output(char *data, int size)
+unsigned char *
+string_output(unsigned char *data, int size)
{
register unsigned char c,
*p,
@@ -79,8 +79,6 @@ string_output(char *data, int size)
{
case '\\':
case '"':
- case '{':
- case '}':
case '\b':
case '\f':
case '\n':
@@ -89,6 +87,12 @@ string_output(char *data, int size)
case '\v':
len++;
break;
+ case '{':
+ /* Escape beginning of string, to distinguish from arrays */
+ if (p == data) {
+ len++;
+ }
+ break;
default:
if (NOTPRINTABLE(*p))
len += 3;
@@ -104,8 +108,6 @@ string_output(char *data, int size)
{
case '\\':
case '"':
- case '{':
- case '}':
*r++ = '\\';
*r++ = c;
break;
@@ -133,6 +135,13 @@ string_output(char *data, int size)
*r++ = '\\';
*r++ = 'v';
break;
+ case '{':
+ /* Escape beginning of string, to distinguish from arrays */
+ if (p == data) {
+ *r++ = '\\';
+ }
+ *r++ = c;
+ break;
default:
if (NOTPRINTABLE(c))
{
@@ -180,8 +189,8 @@ string_output(char *data, int size)
* a pointer to the new string or the header.
*/
-char *
-string_input(char *str, int size, int hdrsize, int *rtn_size)
+unsigned char *
+string_input(unsigned char *str, int size, int hdrsize, int *rtn_size)
{
register unsigned char *p,
*r;
@@ -285,7 +294,7 @@ string_input(char *str, int size, int hdrsize, int *rtn_size)
return ((char *) result);
}
-char *
+unsigned char *
c_charout(int32 c)
{
char str[2];
@@ -300,7 +309,7 @@ c_charout(int32 c)
* This can be used for SET, bytea, text and unknown data types
*/
-char *
+unsigned char *
c_textout(struct varlena * vlena)
{
int len = 0;
@@ -318,8 +327,8 @@ c_textout(struct varlena * vlena)
* This can be used for varchar and bpchar strings
*/
-char *
-c_varcharout(char *s)
+unsigned char *
+c_varcharout(unsigned char *s)
{
int len = 0;
@@ -333,7 +342,7 @@ c_varcharout(char *s)
#if 0
struct varlena *
-c_textin(char *str)
+c_textin(unsigned char *str)
{
struct varlena *result;
int len;
@@ -348,7 +357,7 @@ c_textin(char *str)
}
int32 *
-c_charin(char *str)
+c_charin(unsigned char *str)
{
return (string_input(str, 1, 0, NULL));
}
diff --git a/contrib/string/string_io.h b/contrib/string/string_io.h
index b1d2b7e2c28..e79d7fd28fe 100644
--- a/contrib/string/string_io.h
+++ b/contrib/string/string_io.h
@@ -1,19 +1,16 @@
#ifndef STRING_IO_H
#define STRING_IO_H
-char *string_output(char *data, int size);
-char *string_input(char *str, int size, int hdrsize, int *rtn_size);
-char *c_charout(int32 c);
-char *c_char2out(uint16 s);
-char *c_char4out(uint32 s);
-char *c_char8out(char *s);
-char *c_char16out(char *s);
-char *c_textout(struct varlena * vlena);
-char *c_varcharout(char *s);
+unsigned char* string_output(unsigned char *data, int size);
+unsigned char* string_input(unsigned char *str, int size, int hdrsize,
+ int *rtn_size);
+unsigned char* c_charout(int32 c);
+unsigned char* c_textout(struct varlena * vlena);
+unsigned char* c_varcharout(unsigned char *s);
#if 0
-struct varlena *c_textin(char *str);
-char *c_char16in(char *str);
+struct varlena* c_textin(unsigned char *str);
+int32* c_charin(unsigned char *str)
#endif
#endif