aboutsummaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2007-09-06 01:20:02 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2007-09-06 01:20:02 +0000
commit0be72e3a5ebec97a00c70cc2ecd1e286a09fc50f (patch)
treeb90754cbdf4efd6d1bf2700fbd6908b2619d148e /libgfortran
parent221818503d867c0f7cd84ed989a60fc830e40707 (diff)
downloadgcc-0be72e3a5ebec97a00c70cc2ecd1e286a09fc50f.zip
gcc-0be72e3a5ebec97a00c70cc2ecd1e286a09fc50f.tar.gz
gcc-0be72e3a5ebec97a00c70cc2ecd1e286a09fc50f.tar.bz2
re PR libfortran/33253 (namelist: reading back a string with apostrophe)
2007-09-05 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/33253 * io/write.c (nml_write_obj): Set the delimiter correctly before calling write_character. (namelist_write): Clean up the code a little and add comments to clarify what its doing. From-SVN: r128170
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog9
-rw-r--r--libgfortran/io/write.c20
2 files changed, 20 insertions, 9 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 0c1dcff..c1589e8 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,4 +1,11 @@
-2007-03-04 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+2007-09-05 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libfortran/33253
+ * io/write.c (nml_write_obj): Set the delimiter correctly before calling
+ write_character. (namelist_write): Clean up the code a little and add
+ comments to clarify what its doing.
+
+2007-09-04 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/33225
* io/write.c (stdbool.h): Add include. (sign_t): Move typedef to
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index 72f68b43..4792a22 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -868,6 +868,7 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset,
size_t base_name_len;
size_t base_var_name_len;
size_t tot_len;
+ unit_delim tmp_delim;
/* Write namelist variable names in upper case. If a derived type,
nothing is output. If a component, base and base_name are set. */
@@ -984,11 +985,13 @@ nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset,
break;
case GFC_DTYPE_CHARACTER:
- if (dtp->u.p.nml_delim)
- write_character (dtp, &dtp->u.p.nml_delim, 1);
+ tmp_delim = dtp->u.p.current_unit->flags.delim;
+ if (dtp->u.p.nml_delim == '"')
+ dtp->u.p.current_unit->flags.delim = DELIM_QUOTE;
+ if (dtp->u.p.nml_delim == '\'')
+ dtp->u.p.current_unit->flags.delim = DELIM_APOSTROPHE;
write_character (dtp, p, obj->string_length);
- if (dtp->u.p.nml_delim)
- write_character (dtp, &dtp->u.p.nml_delim, 1);
+ dtp->u.p.current_unit->flags.delim = tmp_delim;
break;
case GFC_DTYPE_REAL:
@@ -1130,7 +1133,6 @@ namelist_write (st_parameter_dt *dtp)
/* Set the delimiter for namelist output. */
tmp_delim = dtp->u.p.current_unit->flags.delim;
- dtp->u.p.current_unit->flags.delim = DELIM_NONE;
switch (tmp_delim)
{
case (DELIM_QUOTE):
@@ -1146,10 +1148,12 @@ namelist_write (st_parameter_dt *dtp)
break;
}
+ /* Temporarily disable namelist delimters. */
+ dtp->u.p.current_unit->flags.delim = DELIM_NONE;
+
write_character (dtp, "&", 1);
/* Write namelist name in upper case - f95 std. */
-
for (i = 0 ;i < dtp->namelist_name_len ;i++ )
{
c = toupper (dtp->namelist_name[i]);
@@ -1165,14 +1169,14 @@ namelist_write (st_parameter_dt *dtp)
t1 = nml_write_obj (dtp, t2, dummy_offset, dummy, dummy_name);
}
}
+
#ifdef HAVE_CRLF
write_character (dtp, " /\r\n", 5);
#else
write_character (dtp, " /\n", 4);
#endif
- /* Recover the original delimiter. */
-
+ /* Restore the original delimiter. */
dtp->u.p.current_unit->flags.delim = tmp_delim;
}