aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io/transfer.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgfortran/io/transfer.c')
-rw-r--r--libgfortran/io/transfer.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 4c5e210..6382d0d 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -2008,7 +2008,10 @@ formatted_transfer_scalar_write (st_parameter_dt *dtp, bt type, void *p, int kin
goto need_data;
if (require_type (dtp, BT_REAL, type, f))
return;
- write_d (dtp, f, p, kind);
+ if (f->u.real.w == 0)
+ write_real_w0 (dtp, p, kind, FMT_D, f->u.real.d);
+ else
+ write_d (dtp, f, p, kind);
break;
case FMT_DT:
@@ -2071,7 +2074,10 @@ formatted_transfer_scalar_write (st_parameter_dt *dtp, bt type, void *p, int kin
goto need_data;
if (require_type (dtp, BT_REAL, type, f))
return;
- write_e (dtp, f, p, kind);
+ if (f->u.real.w == 0)
+ write_real_w0 (dtp, p, kind, FMT_E, f->u.real.d);
+ else
+ write_e (dtp, f, p, kind);
break;
case FMT_EN:
@@ -2079,7 +2085,10 @@ formatted_transfer_scalar_write (st_parameter_dt *dtp, bt type, void *p, int kin
goto need_data;
if (require_type (dtp, BT_REAL, type, f))
return;
- write_en (dtp, f, p, kind);
+ if (f->u.real.w == 0)
+ write_real_w0 (dtp, p, kind, FMT_EN, f->u.real.d);
+ else
+ write_en (dtp, f, p, kind);
break;
case FMT_ES:
@@ -2087,7 +2096,10 @@ formatted_transfer_scalar_write (st_parameter_dt *dtp, bt type, void *p, int kin
goto need_data;
if (require_type (dtp, BT_REAL, type, f))
return;
- write_es (dtp, f, p, kind);
+ if (f->u.real.w == 0)
+ write_real_w0 (dtp, p, kind, FMT_ES, f->u.real.d);
+ else
+ write_es (dtp, f, p, kind);
break;
case FMT_F:
@@ -2117,7 +2129,7 @@ formatted_transfer_scalar_write (st_parameter_dt *dtp, bt type, void *p, int kin
break;
case BT_REAL:
if (f->u.real.w == 0)
- write_real_g0 (dtp, p, kind, f->u.real.d);
+ write_real_w0 (dtp, p, kind, FMT_G, f->u.real.d);
else
write_d (dtp, f, p, kind);
break;