+2005-03-25 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ PR libfortran/19678
+ PR libfortran/19679
+ * gfortran.dg/dos_eol.f: New test.
+
2005-03-25 Zdenek Dvorak <dvorakz@suse.cz>
PR rtl-optimization/20249
--- /dev/null
+! PR libfortran/19678 and PR libfortran/19679
+! { dg-do run }
+ integer i, j
+
+ open (10,status='scratch')
+ write (10,'(2A)') '1', achar(13)
+ rewind (10)
+ read (10,*) i
+ if (i .ne. 1) call abort
+ close (10)
+
+ open (10,status='scratch')
+ write (10,'(2A)') ' 1', achar(13)
+ write (10,'(2A)') ' 2', achar(13)
+ rewind (10)
+ read (10,'(I4)') i
+ read (10,'(I5)') j
+ if ((i .ne. 1) .or. (j .ne. 2)) call abort
+ end
2005-03-25 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+ PR libfortran/19678
+ * list_read.c (next_char, eat_separator, finish_separator, read_real)
+ (namelist_read): Add support for '\r' as well as '\n' as EOL
+ character.
+
+ PR libfortran/19679
+ * list_read.c (read_sf): Add a '\r' in a test to support DOS
+ line-endings when line length is exceeded.
+
+2005-03-25 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
PR libfortran/15332
* io/format.c (parse_format_list): format node for colon edit
descriptor needs a repeat counter set to 1.
#define CASE_DIGITS case '0': case '1': case '2': case '3': case '4': \
case '5': case '6': case '7': case '8': case '9'
-#define CASE_SEPARATORS case ' ': case ',': case '/': case '\n': case '\t'
+#define CASE_SEPARATORS case ' ': case ',': case '/': case '\n': case '\t': \
+ case '\r'
/* This macro assumes that we're operating on a variable. */
#define is_separator(c) (c == '/' || c == ',' || c == '\n' || c == ' ' \
- || c == '\t')
+ || c == '\t' || c == '\r')
/* Maximum repeat count. Less than ten times the maximum signed int32. */
c = *p;
done:
- at_eol = (c == '\n');
+ at_eol = (c == '\n' || c == '\r');
return c;
}
break;
case '\n':
+ case '\r':
break;
case '!':
break;
case '\n':
+ case '\r':
goto restart;
case '!':
goto got_repeat;
CASE_SEPARATORS:
+ if (c != '\n' && c != ',' && c != '\r')
+ unget_char (c);
goto done;
default:
return;
case ' ':
case '\n':
+ case '\r':
case '\t':
break;
case ',':
return NULL;
}
- if (readlen < 1 || *q == '\n')
+ if (readlen < 1 || *q == '\n' || *q == '\r')
{
/* ??? What is this for? */
if (current_unit->unit_number == options.stdin_unit)