From 491dc124bfd63652b9f0ae32d27804980c4b3705 Mon Sep 17 00:00:00 2001
From: Michael Meskes <meskes@postgresql.org>
Date: Mon, 10 May 2004 13:46:06 +0000
Subject: [PATCH] - Argh, just another bug in adjust_informix. - Added "extern
 C" flags for C++ compiler. Hopefully I got that one right.

---
 src/interfaces/ecpg/ChangeLog                   |  5 +++++
 src/interfaces/ecpg/include/ecpg_informix.h     | 11 ++++++++++-
 src/interfaces/ecpg/include/pgtypes_date.h      |  8 ++++++++
 src/interfaces/ecpg/include/pgtypes_interval.h  |  9 +++++++++
 src/interfaces/ecpg/include/pgtypes_numeric.h   |  9 +++++++++
 src/interfaces/ecpg/include/pgtypes_timestamp.h |  9 +++++++++
 src/interfaces/ecpg/preproc/preproc.y           |  4 ++--
 7 files changed, 52 insertions(+), 3 deletions(-)

diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 2a79f6048ac..7226149853b 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -1790,6 +1790,11 @@ Fri May  7 15:34:05 CEST 2004
 	- Added portability file to pgtypeslib.
 	- Fixed bug that reversed string length in typedefs.
 	- Added additional test case.
+	
+Mon May 10 15:38:58 CEST 2004
+
+	- Argh, just another bug in adjust_informix.
+	- Added "extern C" flags for C++ compiler.
 	- Set pgtypes library version to 1.2.
 	- Set ecpg version to 3.2.0.
 	- Set compat library version to 1.2.
diff --git a/src/interfaces/ecpg/include/ecpg_informix.h b/src/interfaces/ecpg/include/ecpg_informix.h
index ccf4dd1123f..2a17202010e 100644
--- a/src/interfaces/ecpg/include/ecpg_informix.h
+++ b/src/interfaces/ecpg/include/ecpg_informix.h
@@ -1,7 +1,7 @@
 /*
  * This file contains stuff needed to be as compatible to Informix as possible.
  *
- * $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpg_informix.h,v 1.14 2003/12/18 18:55:09 petere Exp $
+ * $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpg_informix.h,v 1.15 2004/05/10 13:46:06 meskes Exp $
  */
 #ifndef _ECPG_INFORMIX_H
 #define _ECPG_INFORMIX_H
@@ -29,6 +29,11 @@
 #define ECPG_INFORMIX_BAD_DATE		-1218
 #define ECPG_INFORMIX_EXTRA_CHARS	-1264
 
+#ifdef __cplusplus
+extern          "C"
+{
+#endif
+
 extern int	rdatestr(date, char *);
 extern void 	rtoday(date *);
 extern int	rjulmdy(date, short *);
@@ -78,4 +83,8 @@ extern int	dttofmtasc(timestamp *, char *, int, char *);
 extern int	intoasc(interval *, char *);
 extern int	dtcvfmtasc(char *, char *, timestamp *);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* ndef _ECPG_INFORMIX_H */
diff --git a/src/interfaces/ecpg/include/pgtypes_date.h b/src/interfaces/ecpg/include/pgtypes_date.h
index 863b2593d9e..0e30823d2f0 100644
--- a/src/interfaces/ecpg/include/pgtypes_date.h
+++ b/src/interfaces/ecpg/include/pgtypes_date.h
@@ -4,6 +4,10 @@
 #include <pgtypes_timestamp.h>
 
 typedef long date;
+#ifdef __cplusplus
+extern          "C"
+{
+#endif
 
 extern date PGTYPESdate_from_asc(char *, char **);
 extern char *PGTYPESdate_to_asc(date);
@@ -15,4 +19,8 @@ extern void PGTYPESdate_today(date *);
 extern int	PGTYPESdate_defmt_asc(date *, char *, char *);
 extern int	PGTYPESdate_fmt_asc(date, char *, char *);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif   /* PGTYPES_DATETIME */
diff --git a/src/interfaces/ecpg/include/pgtypes_interval.h b/src/interfaces/ecpg/include/pgtypes_interval.h
index 98b29bcd80f..c963b1b89e4 100644
--- a/src/interfaces/ecpg/include/pgtypes_interval.h
+++ b/src/interfaces/ecpg/include/pgtypes_interval.h
@@ -14,8 +14,17 @@ typedef struct
 								 * alignment */
 } interval;
 
+#ifdef __cplusplus
+extern          "C"
+{
+#endif
+
 extern interval *PGTYPESinterval_from_asc(char *, char **);
 extern char *PGTYPESinterval_to_asc(interval *);
 extern int	PGTYPESinterval_copy(interval *, interval *);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif   /* PGTYPES_INTERVAL */
diff --git a/src/interfaces/ecpg/include/pgtypes_numeric.h b/src/interfaces/ecpg/include/pgtypes_numeric.h
index db4d02c2009..951f7dfc0e6 100644
--- a/src/interfaces/ecpg/include/pgtypes_numeric.h
+++ b/src/interfaces/ecpg/include/pgtypes_numeric.h
@@ -37,6 +37,11 @@ typedef struct
 	NumericDigit digits[DECSIZE];		/* decimal digits */
 }	decimal;
 
+#ifdef __cplusplus
+extern          "C"
+{
+#endif
+	
 numeric    *PGTYPESnumeric_new(void);
 void		PGTYPESnumeric_free(numeric *);
 numeric    *PGTYPESnumeric_from_asc(char *, char **);
@@ -56,4 +61,8 @@ int			PGTYPESnumeric_to_long(numeric *, long *);
 int			PGTYPESnumeric_to_decimal(numeric *, decimal *);
 int			PGTYPESnumeric_from_decimal(decimal *, numeric *);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif   /* PGTYPES_NUMERIC */
diff --git a/src/interfaces/ecpg/include/pgtypes_timestamp.h b/src/interfaces/ecpg/include/pgtypes_timestamp.h
index f4a4b0ba3c3..3b93a43e5a6 100644
--- a/src/interfaces/ecpg/include/pgtypes_timestamp.h
+++ b/src/interfaces/ecpg/include/pgtypes_timestamp.h
@@ -12,6 +12,11 @@ typedef double timestamp;
 typedef double TimestampTz;
 #endif
 
+#ifdef __cplusplus
+extern          "C"
+{
+#endif
+
 extern timestamp PGTYPEStimestamp_from_asc(char *, char **);
 extern char *PGTYPEStimestamp_to_asc(timestamp);
 extern int	PGTYPEStimestamp_sub(timestamp *, timestamp *, interval *);
@@ -19,4 +24,8 @@ extern int	PGTYPEStimestamp_fmt_asc(timestamp *, char *, int, char *);
 extern void PGTYPEStimestamp_current(timestamp *);
 extern int	PGTYPEStimestamp_defmt_asc(char *, char *, timestamp *);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif   /* PGTYPES_TIMESTAMP */
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index b8642f2b919..572c0fca648 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.281 2004/05/07 13:42:49 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.282 2004/05/10 13:46:06 meskes Exp $ */
 
 /* Copyright comment */
 %{
@@ -209,7 +209,7 @@ adjust_informix(struct arguments *list)
 		original_var = ptr->variable->name;
 		sprintf(temp, "%d))", ecpg_informix_var);
 		
-		if (atoi(ptr->variable->type->size) > 1)
+		if ((ptr->variable->type->type != ECPGt_char && ptr->variable->type->type != ECPGt_unsigned_char) && atoi(ptr->variable->type->size) > 1)
 		{
 			ptr->variable = new_variable(cat_str(4, make_str("("), mm_strdup(ECPGtype_name(ptr->variable->type->u.element->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, make_str("1")), ptr->variable->type->size), 0);
 			sprintf(temp, "%d, (", ecpg_informix_var++);
-- 
GitLab