Fixed segfault in Informix mode.
authorMichael Meskes
Mon, 6 Sep 2004 11:23:07 +0000 (11:23 +0000)
committerMichael Meskes
Mon, 6 Sep 2004 11:23:07 +0000 (11:23 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/preproc/preproc.y

index d1dae49a7337e2251bbdf67937a7fa1936749764..f9e3403b293b7a7f14215b1cca81959322479369 100644 (file)
@@ -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.
index 9dfaa5a6f798c4cbf953c38b360f3bbd27d61abe..296b75c0ef10996130da0bec5ec342cbdebdfdbd 100644 (file)
@@ -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);