Commit | Line | Data |
---|---|---|
220a304a | 1 | # serial 21 |
7ccfb720 | 2 | |
ba318903 | 3 | # Copyright (C) 2000-2001, 2004-2014 Free Software Foundation, Inc. |
7ccfb720 PE |
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. | |
7 | ||
8 | dnl From Jim Meyering | |
9 | dnl Using code from emacs, based on suggestions from Paul Eggert | |
10 | dnl and Ulrich Drepper. | |
11 | ||
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. | |
15 | ||
16 | AC_DEFUN([gl_FUNC_FPENDING], | |
17 | [ | |
18 | AC_CHECK_HEADERS_ONCE([stdio_ext.h]) | |
220a304a PE |
19 | fp_headers=' |
20 | #include <stdio.h> | |
21 | #if HAVE_STDIO_EXT_H | |
22 | # include <stdio_ext.h> | |
23 | #endif | |
24 | ' | |
eaca0446 PE |
25 | AC_CACHE_CHECK([for __fpending], [gl_cv_func___fpending], |
26 | [ | |
27 | AC_LINK_IFELSE( | |
220a304a | 28 | [AC_LANG_PROGRAM([$fp_headers], |
eaca0446 PE |
29 | [[return ! __fpending (stdin);]])], |
30 | [gl_cv_func___fpending=yes], | |
31 | [gl_cv_func___fpending=no]) | |
32 | ]) | |
220a304a PE |
33 | if test $gl_cv_func___fpending = yes; then |
34 | AC_CHECK_DECLS([__fpending], [], [], [$fp_headers]) | |
35 | fi | |
7ccfb720 PE |
36 | ]) |
37 | ||
38 | AC_DEFUN([gl_PREREQ_FPENDING], | |
39 | [ | |
40 | AC_CACHE_CHECK( | |
41 | [how to determine the number of pending output bytes on a stream], | |
42 | ac_cv_sys_pending_output_n_bytes, | |
43 | [ | |
44 | for ac_expr in \ | |
45 | \ | |
46 | '# glibc2' \ | |
47 | 'fp->_IO_write_ptr - fp->_IO_write_base' \ | |
48 | \ | |
49 | '# traditional Unix' \ | |
50 | 'fp->_ptr - fp->_base' \ | |
51 | \ | |
52 | '# BSD' \ | |
53 | 'fp->_p - fp->_bf._base' \ | |
54 | \ | |
55 | '# SCO, Unixware' \ | |
56 | '(fp->__ptr ? fp->__ptr - fp->__base : 0)' \ | |
57 | \ | |
58 | '# QNX' \ | |
59 | '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \ | |
60 | \ | |
61 | '# old glibc?' \ | |
62 | 'fp->__bufp - fp->__buffer' \ | |
63 | \ | |
64 | '# old glibc iostream?' \ | |
65 | 'fp->_pptr - fp->_pbase' \ | |
66 | \ | |
67 | '# emx+gcc' \ | |
68 | 'fp->_ptr - fp->_buffer' \ | |
69 | \ | |
70 | '# Minix' \ | |
71 | 'fp->_ptr - fp->_buf' \ | |
72 | \ | |
73 | '# Plan9' \ | |
74 | 'fp->wp - fp->buf' \ | |
75 | \ | |
76 | '# VMS' \ | |
77 | '(*fp)->_ptr - (*fp)->_base' \ | |
78 | \ | |
79 | '# e.g., DGUX R4.11; the info is not available' \ | |
80 | 1 \ | |
81 | ; do | |
82 | ||
83 | # Skip each embedded comment. | |
84 | case "$ac_expr" in '#'*) continue;; esac | |
85 | ||
86 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], | |
87 | [[FILE *fp = stdin; (void) ($ac_expr);]])], | |
88 | [fp_done=yes] | |
89 | ) | |
90 | test "$fp_done" = yes && break | |
91 | done | |
92 | ||
93 | ac_cv_sys_pending_output_n_bytes=$ac_expr | |
94 | ] | |
95 | ) | |
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']) | |
99 | ]) |