diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2007-09-06 01:20:02 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2007-09-06 01:20:02 +0000 |
commit | 0be72e3a5ebec97a00c70cc2ecd1e286a09fc50f (patch) | |
tree | b90754cbdf4efd6d1bf2700fbd6908b2619d148e /libgfortran | |
parent | 221818503d867c0f7cd84ed989a60fc830e40707 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | libgfortran/io/write.c | 20 |
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; } |