3 # Copyright (C) 2000-2001, 2004-2016 Free Software Foundation, Inc.
4 # This file is free software; the Free Software Foundation
5 # gives unlimited permission to copy and/or distribute it,
6 # with or without modifications, as long as this notice is preserved.
9 dnl Using code from emacs, based on suggestions from Paul Eggert
10 dnl and Ulrich Drepper.
12 dnl Find out how to determine the number of pending output bytes on a stream.
13 dnl glibc (2.1.93 and newer) and Solaris provide __fpending. On other systems,
14 dnl we have to grub around in the FILE struct.
16 AC_DEFUN([gl_FUNC_FPENDING],
18 AC_CHECK_HEADERS_ONCE([stdio_ext.h])
22 # include <stdio_ext.h>
25 AC_CACHE_CHECK([for __fpending], [gl_cv_func___fpending],
28 [AC_LANG_PROGRAM([$fp_headers],
29 [[return ! __fpending (stdin);]])],
30 [gl_cv_func___fpending=yes],
31 [gl_cv_func___fpending=no])
33 if test $gl_cv_func___fpending = yes; then
34 AC_CHECK_DECLS([__fpending], [], [], [$fp_headers])
38 AC_DEFUN([gl_PREREQ_FPENDING],
41 [how to determine the number of pending output bytes on a stream],
42 ac_cv_sys_pending_output_n_bytes,
47 'fp->_IO_write_ptr - fp->_IO_write_base' \
49 '# traditional Unix' \
50 'fp->_ptr - fp->_base' \
53 'fp->_p - fp->_bf._base' \
56 '(fp->__ptr ? fp->__ptr - fp->__base : 0)' \
59 '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \
62 'fp->__bufp - fp->__buffer' \
64 '# old glibc iostream?' \
65 'fp->_pptr - fp->_pbase' \
68 'fp->_ptr - fp->_buffer' \
71 'fp->_ptr - fp->_buf' \
77 '(*fp)->_ptr - (*fp)->_base' \
79 '# e.g., DGUX R4.11; the info is not available' \
83 # Skip each embedded comment.
84 case "$ac_expr" in '#'*) continue;; esac
86 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]],
87 [[FILE *fp = stdin; (void) ($ac_expr);]])],
90 test "$fp_done" = yes && break
93 ac_cv_sys_pending_output_n_bytes=$ac_expr
96 AC_DEFINE_UNQUOTED([PENDING_OUTPUT_N_BYTES],
97 $ac_cv_sys_pending_output_n_bytes,
98 [the number of pending output bytes on stream 'fp'])