mirror of git://gcc.gnu.org/git/gcc.git
re PR libfortran/23262 ([mingw32] rewind truncates file)
PR libfortran/23262 * acinclude.m4 (LIBGFOR_CHECK_CRLF): New check. * configure.ac: Use new check. * configure.in: Regenerate. * config.h.in: Regenerate. * configure: Regenerate. * io/transfer.c (next_record_w): Add case for CRLF as line terminator. * io/unix.c (tempfile, regular_file): Open files with O_BINARY on systems with CRLF. From-SVN: r104009
This commit is contained in:
parent
2a0abeaf55
commit
3c12752024
|
@ -1,3 +1,16 @@
|
||||||
|
2005-09-07 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||||
|
|
||||||
|
PR libfortran/23262
|
||||||
|
* acinclude.m4 (LIBGFOR_CHECK_CRLF): New check.
|
||||||
|
* configure.ac: Use new check.
|
||||||
|
* configure.in: Regenerate.
|
||||||
|
* config.h.in: Regenerate.
|
||||||
|
* configure: Regenerate.
|
||||||
|
* io/transfer.c (next_record_w): Add case for CRLF as line
|
||||||
|
terminator.
|
||||||
|
* io/unix.c (tempfile, regular_file): Open files with
|
||||||
|
O_BINARY on systems with CRLF.
|
||||||
|
|
||||||
2005-09-07 Steve Ellcey <sje@cup.hp.com>
|
2005-09-07 Steve Ellcey <sje@cup.hp.com>
|
||||||
|
|
||||||
PR libfortran/23419
|
PR libfortran/23419
|
||||||
|
|
|
@ -183,3 +183,50 @@ esac])])
|
||||||
if test x"$have_unlink_open_file" = xyes; then
|
if test x"$have_unlink_open_file" = xyes; then
|
||||||
AC_DEFINE(HAVE_UNLINK_OPEN_FILE, 1, [Define if target can unlink open files.])
|
AC_DEFINE(HAVE_UNLINK_OPEN_FILE, 1, [Define if target can unlink open files.])
|
||||||
fi])
|
fi])
|
||||||
|
|
||||||
|
dnl Check whether CRLF is the line terminator
|
||||||
|
AC_DEFUN([LIBGFOR_CHECK_CRLF], [
|
||||||
|
AC_CACHE_CHECK([whether the target has CRLF as line terminator],
|
||||||
|
have_crlf, [
|
||||||
|
AC_TRY_RUN([
|
||||||
|
/* This test program should exit with status 0 if system uses a CRLF as
|
||||||
|
line terminator, and status 1 otherwise.
|
||||||
|
Since it is used to check for mingw systems, and should return 0 in any
|
||||||
|
other case, in case of a failure we will not use CRLF. */
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
#ifndef O_BINARY
|
||||||
|
exit(1);
|
||||||
|
#else
|
||||||
|
int fd, bytes;
|
||||||
|
char buff[5];
|
||||||
|
|
||||||
|
fd = open ("foo", O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU);
|
||||||
|
if (fd < 0)
|
||||||
|
exit(1);
|
||||||
|
if (write (fd, "\n", 1) < 0)
|
||||||
|
perror ("write");
|
||||||
|
|
||||||
|
close (fd);
|
||||||
|
|
||||||
|
if ((fd = open ("foo", O_RDONLY | O_BINARY, S_IRWXU)) < 0)
|
||||||
|
exit(1);
|
||||||
|
bytes = read (fd, buff, 5);
|
||||||
|
if (bytes == 2 && buff[0] == '\r' && buff[1] == '\n')
|
||||||
|
exit(0);
|
||||||
|
else
|
||||||
|
exit(1);
|
||||||
|
#endif
|
||||||
|
}], have_crlf=yes, have_crlf=no, [
|
||||||
|
case "${target}" in
|
||||||
|
*mingw*) have_crlf=yes ;;
|
||||||
|
*) have_crlf=no;;
|
||||||
|
esac])])
|
||||||
|
if test x"$have_crlf" = xyes; then
|
||||||
|
AC_DEFINE(HAVE_CRLF, 1, [Define if CRLF is line terminator.])
|
||||||
|
fi])
|
||||||
|
|
|
@ -54,6 +54,9 @@
|
||||||
/* libm includes coshf */
|
/* libm includes coshf */
|
||||||
#undef HAVE_COSHF
|
#undef HAVE_COSHF
|
||||||
|
|
||||||
|
/* Define if CRLF is line terminator. */
|
||||||
|
#undef HAVE_CRLF
|
||||||
|
|
||||||
/* libm includes erf */
|
/* libm includes erf */
|
||||||
#undef HAVE_ERF
|
#undef HAVE_ERF
|
||||||
|
|
||||||
|
|
|
@ -12300,6 +12300,96 @@ _ACEOF
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check whether line terminator is LF or CRLF
|
||||||
|
|
||||||
|
echo "$as_me:$LINENO: checking whether the target has CRLF as line terminator" >&5
|
||||||
|
echo $ECHO_N "checking whether the target has CRLF as line terminator... $ECHO_C" >&6
|
||||||
|
if test "${have_crlf+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
|
||||||
|
if test "$cross_compiling" = yes; then
|
||||||
|
|
||||||
|
case "${target}" in
|
||||||
|
*mingw*) have_crlf=yes ;;
|
||||||
|
*) have_crlf=no;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
/* This test program should exit with status 0 if system uses a CRLF as
|
||||||
|
line terminator, and status 1 otherwise.
|
||||||
|
Since it is used to check for mingw systems, and should return 0 in any
|
||||||
|
other case, in case of a failure we will not use CRLF. */
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
#ifndef O_BINARY
|
||||||
|
exit(1);
|
||||||
|
#else
|
||||||
|
int fd, bytes;
|
||||||
|
char buff[5];
|
||||||
|
|
||||||
|
fd = open ("foo", O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU);
|
||||||
|
if (fd < 0)
|
||||||
|
exit(1);
|
||||||
|
if (write (fd, "\n", 1) < 0)
|
||||||
|
perror ("write");
|
||||||
|
|
||||||
|
close (fd);
|
||||||
|
|
||||||
|
if ((fd = open ("foo", O_RDONLY | O_BINARY, S_IRWXU)) < 0)
|
||||||
|
exit(1);
|
||||||
|
bytes = read (fd, buff, 5);
|
||||||
|
if (bytes == 2 && buff[0] == '\r' && buff[1] == '\n')
|
||||||
|
exit(0);
|
||||||
|
else
|
||||||
|
exit(1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest$ac_exeext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
|
(eval $ac_link) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
have_crlf=yes
|
||||||
|
else
|
||||||
|
echo "$as_me: program exited with status $ac_status" >&5
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
( exit $ac_status )
|
||||||
|
have_crlf=no
|
||||||
|
fi
|
||||||
|
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: $have_crlf" >&5
|
||||||
|
echo "${ECHO_T}$have_crlf" >&6
|
||||||
|
if test x"$have_crlf" = xyes; then
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define HAVE_CRLF 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
cat >confcache <<\_ACEOF
|
cat >confcache <<\_ACEOF
|
||||||
# This file is a shell script that caches the results of configure
|
# This file is a shell script that caches the results of configure
|
||||||
# tests run on this system so they can be shared between configure
|
# tests run on this system so they can be shared between configure
|
||||||
|
|
|
@ -261,6 +261,9 @@ LIBGFOR_CHECK_ATTRIBUTE_ALIAS
|
||||||
# Various other checks on target
|
# Various other checks on target
|
||||||
LIBGFOR_CHECK_UNLINK_OPEN_FILE
|
LIBGFOR_CHECK_UNLINK_OPEN_FILE
|
||||||
|
|
||||||
|
# Check whether line terminator is LF or CRLF
|
||||||
|
LIBGFOR_CHECK_CRLF
|
||||||
|
|
||||||
AC_CACHE_SAVE
|
AC_CACHE_SAVE
|
||||||
|
|
||||||
if test ${multilib} = yes; then
|
if test ${multilib} = yes; then
|
||||||
|
|
|
@ -1422,13 +1422,24 @@ next_record_w (void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FORMATTED_SEQUENTIAL:
|
case FORMATTED_SEQUENTIAL:
|
||||||
|
#ifdef HAVE_CRLF
|
||||||
|
length = 2;
|
||||||
|
#else
|
||||||
length = 1;
|
length = 1;
|
||||||
|
#endif
|
||||||
p = salloc_w (current_unit->s, &length);
|
p = salloc_w (current_unit->s, &length);
|
||||||
|
|
||||||
if (!is_internal_unit())
|
if (!is_internal_unit())
|
||||||
{
|
{
|
||||||
if (p)
|
if (p)
|
||||||
*p = '\n'; /* No CR for internal writes. */
|
{ /* No new line for internal writes. */
|
||||||
|
#ifdef HAVE_CRLF
|
||||||
|
p[0] = '\r';
|
||||||
|
p[1] = '\n';
|
||||||
|
#else
|
||||||
|
*p = '\n';
|
||||||
|
#endif
|
||||||
|
}
|
||||||
else
|
else
|
||||||
goto io_error;
|
goto io_error;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1000,7 +1000,12 @@ tempfile (void)
|
||||||
|
|
||||||
if (mktemp (template))
|
if (mktemp (template))
|
||||||
do
|
do
|
||||||
|
#ifdef HAVE_CRLF
|
||||||
|
fd = open (template, O_RDWR | O_CREAT | O_EXCL | O_BINARY,
|
||||||
|
S_IREAD | S_IWRITE);
|
||||||
|
#else
|
||||||
fd = open (template, O_RDWR | O_CREAT | O_EXCL, S_IREAD | S_IWRITE);
|
fd = open (template, O_RDWR | O_CREAT | O_EXCL, S_IREAD | S_IWRITE);
|
||||||
|
#endif
|
||||||
while (!(fd == -1 && errno == EEXIST) && mktemp (template));
|
while (!(fd == -1 && errno == EEXIST) && mktemp (template));
|
||||||
else
|
else
|
||||||
fd = -1;
|
fd = -1;
|
||||||
|
@ -1085,6 +1090,10 @@ regular_file (unit_flags *flags)
|
||||||
|
|
||||||
/* rwflag |= O_LARGEFILE; */
|
/* rwflag |= O_LARGEFILE; */
|
||||||
|
|
||||||
|
#ifdef HAVE_CRLF
|
||||||
|
crflag |= O_BINARY;
|
||||||
|
#endif
|
||||||
|
|
||||||
mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
|
mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
|
||||||
fd = open (path, rwflag | crflag, mode);
|
fd = open (path, rwflag | crflag, mode);
|
||||||
if (flags->action != ACTION_UNSPECIFIED)
|
if (flags->action != ACTION_UNSPECIFIED)
|
||||||
|
|
Loading…
Reference in New Issue