3 # Copyright (C) 2000, 2001, 2004, 2005, 2006, 2007 Free Software
5 # This file is free software; the Free Software Foundation
6 # gives unlimited permission to copy and/or distribute it,
7 # with or without modifications, as long as this notice is preserved.
10 dnl Using code from emacs, based on suggestions from Paul Eggert
11 dnl and Ulrich Drepper.
13 dnl Find out how to determine the number of pending output bytes on a stream.
14 dnl glibc (2.1.93 and newer) and Solaris provide __fpending. On other systems,
15 dnl we have to grub around in the FILE struct.
17 AC_DEFUN([gl_FUNC_FPENDING],
19 AC_CHECK_HEADERS_ONCE(stdio_ext.h)
20 AC_CHECK_FUNCS_ONCE([__fpending])
24 # include <stdio_ext.h>
27 AC_CHECK_DECLS([__fpending], , , $fp_headers)
28 if test $ac_cv_func___fpending = no; then
30 [how to determine the number of pending output bytes on a stream],
31 ac_cv_sys_pending_output_n_bytes,
36 'fp->_IO_write_ptr - fp->_IO_write_base' \
38 '# traditional Unix' \
39 'fp->_ptr - fp->_base' \
42 'fp->_p - fp->_bf._base' \
45 '(fp->__ptr ? fp->__ptr - fp->__base : 0)' \
48 '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \
51 'fp->__bufp - fp->__buffer' \
53 '# old glibc iostream?' \
54 'fp->_pptr - fp->_pbase' \
57 '(*fp)->_ptr - (*fp)->_base' \
59 '# e.g., DGUX R4.11; the info is not available' \
63 # Skip each embedded comment.
64 case "$ac_expr" in '#'*) continue;; esac
69 [FILE *fp = stdin; (void) ($ac_expr);],
72 test "$fp_done" = yes && break
75 ac_cv_sys_pending_output_n_bytes=$ac_expr
78 AC_DEFINE_UNQUOTED(PENDING_OUTPUT_N_BYTES,
79 $ac_cv_sys_pending_output_n_bytes,
80 [the number of pending output bytes on stream `fp'])