On Wed, 29 Jan 2020 16:34:28 +0100 Corinna Vinschen wrote: > On Jan 29 16:32, Corinna Vinschen wrote: > > On Jan 29 22:46, Takashi Yano wrote: > > > --- m4/fseeko.m4.orig 2020-01-29 21:39:37.280507900 +0900 > > > +++ m4/fseeko.m4 2020-01-29 21:36:29.263747100 +0900 > > > @@ -30,16 +30,19 @@ > > > HAVE_FSEEKO=0 > > > else > > > if test $WINDOWS_64_BIT_OFF_T = 1; then > > This makes me a bit suspicious... it looks like a check only > required for native builds, not for Cygwin.
I think REPLACE_FSEEKO is set to 1 not here, > > > m4_ifdef([gl_FUNC_FFLUSH_STDIN], [ > > > gl_FUNC_FFLUSH_STDIN > > > case "$gl_cv_func_fflush_stdin" in > > > *yes) ;; > > > - *) REPLACE_FSEEKO=1 ;; > > > + dnl *) REPLACE_FSEEKO=1 ;; > > > + *) REPLACE_FSEEKO=0 ;; > > > esac but here. gl_cv_func_fflush_stdin is set here in configure by: if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_fflush_stdin=yes else gl_cv_func_fflush_stdin=no fi and the test code for this decision is as attached. conftest.c returns 0 in cygwin 3.0.7, while cygwin with commit 59362c80e3a returns 5. I am not sure why segfault occurs if fseeko is replaced. Probably due to a bug in octave or cygwin. -- Takashi Yano <takashi.y...@nifty.ne.jp>
#include <stdio.h> # include <unistd.h> int main () { FILE *f = fopen ("conftest.txt", "r"); char buffer[10]; int fd; int c; if (f == NULL) return 1; fd = fileno (f); if (fd < 0 || fread (buffer, 1, 5, f) != 5) { fclose (f); return 2; } /* For deterministic results, ensure f read a bigger buffer. */ if (lseek (fd, 0, SEEK_CUR) == 5) { fclose (f); return 3; } /* POSIX requires fflush-fseek to set file offset of fd. This fails on BSD systems and on mingw. */ if (fflush (f) != 0 || fseek (f, 0, SEEK_CUR) != 0) { fclose (f); return 4; } if (lseek (fd, 0, SEEK_CUR) != 5) { fclose (f); return 5; } /* Verify behaviour of fflush after ungetc. See <http://www.opengroup.org/austin/aardvark/latest/xshbug3.txt> */ /* Verify behaviour of fflush after a backup ungetc. This fails on mingw. */ c = fgetc (f); ungetc (c, f); fflush (f); if (fgetc (f) != c) { fclose (f); return 6; } /* Verify behaviour of fflush after a non-backup ungetc. This fails on glibc 2.8 and on BSD systems. */ c = fgetc (f); ungetc ('@', f); fflush (f); if (fgetc (f) != c) { fclose (f); return 7; } fclose (f); return 0; ; return 0; }
hello world
-- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple