From 2a8b626d48e1e9f8cd08f5a00f3b96064f68bfb7 Mon Sep 17 00:00:00 2001 From: Michael Meskes Date: Mon, 6 Sep 2004 11:23:07 +0000 Subject: [PATCH] Fixed segfault in Informix mode. --- src/interfaces/ecpg/ChangeLog | 4 ++++ src/interfaces/ecpg/preproc/preproc.y | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index d1dae49a73..f9e3403b29 100644 --- a/src/interfaces/ecpg/ChangeLog +++ b/src/interfaces/ecpg/ChangeLog @@ -1854,6 +1854,10 @@ Tue Jul 20 09:15:21 CEST 2004 Mon Jul 26 09:04:53 CEST 2004 - SQL defines are only used in SQL space in Informix mode. + +Mon Sep 6 13:17:46 CEST 2004 + + - Fixed bug in Informix mode that caused a segfault. - 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/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y index 9dfaa5a6f7..296b75c0ef 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.295 2004/08/28 18:04:51 tgl Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.296 2004/09/06 11:23:07 meskes Exp $ */ /* Copyright comment */ %{ @@ -230,6 +230,11 @@ adjust_informix(struct arguments *list) 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++); } + else 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->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size), 0); + sprintf(temp, "%d, (", ecpg_informix_var++); + } else { ptr->variable = new_variable(cat_str(4, make_str("*("), mm_strdup(ECPGtype_name(ptr->variable->type->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size), 0); -- 2.11.0