view m4/fflush.m4 @ 9818:fc76a5b22f64

Disable the fflush-after-ungetc tests, since gnulib currently does not guarantee consistent results.
author Bruno Haible <bruno@clisp.org>
date Sat, 29 Mar 2008 12:59:48 +0100
parents dfee3b4fd46c
children 621cb9082339
line wrap: on
line source

# fflush.m4 serial 5

# Copyright (C) 2007-2008 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

dnl From Eric Blake

dnl Find out how to obey POSIX semantics of fflush(stdin) discarding
dnl unread input on seekable streams, rather than C99 undefined semantics.

AC_DEFUN([gl_FUNC_FFLUSH],
[
  AC_CACHE_CHECK([whether fflush works on input streams],
    [gl_cv_func_fflush_stdin],
    [echo hello world > conftest.txt
     AC_RUN_IFELSE([AC_LANG_PROGRAM(
       [[
#include <stdio.h>
#include <unistd.h>
       ]], [[FILE *f = fopen ("conftest.txt", "r");
	 char buffer[10];
	 int fd;
	 if (f == NULL)
	   return 1;
	 fd = fileno (f);
	 if (fd < 0 || fread (buffer, 1, 5, f) != 5)
	   return 2;
	 /* For deterministic results, ensure f read a bigger buffer.  */
	 if (lseek (fd, 0, SEEK_CUR) == 5)
	   return 3;
	 /* POSIX requires fflush-fseek to set file offset of fd.  */
	 if (fflush (f) != 0 || fseek (f, 0, SEEK_CUR) != 0)
	   return 4;
	 if (lseek (fd, 0, SEEK_CUR) != 5)
	   return 5;
	 /* TODO: Verify behaviour of fflush after ungetc, see
	    <http://lists.gnu.org/archive/html/bug-gnulib/2008-03/msg00131.html>.  */
	 return 0;
       ]])], [gl_cv_func_fflush_stdin=yes], [gl_cv_func_fflush_stdin=no],
     [dnl Pessimistically assume fflush is broken.  This is wrong for
      dnl at least glibc and cygwin; but lib/fflush.c takes this into account.
      gl_cv_func_fflush_stdin=no])
     rm conftest.txt
    ])
  if test $gl_cv_func_fflush_stdin = no; then
    gl_REPLACE_FFLUSH
  fi
])

AC_DEFUN([gl_REPLACE_FFLUSH],
[
  AC_LIBOBJ([fflush])
  AC_LIBOBJ([fseeko])
  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
  REPLACE_FFLUSH=1
  REPLACE_FSEEKO=1
])