*** empty log message ***
[gnulib.git] / m4 / fpending.m4
index dab0803..a6e4338 100644 (file)
@@ -4,67 +4,72 @@ dnl From Jim Meyering
 dnl Using code from emacs, based on suggestions from Paul Eggert
 dnl and Ulrich Drepper.
 
 dnl Using code from emacs, based on suggestions from Paul Eggert
 dnl and Ulrich Drepper.
 
+dnl Find out how to determine the number of pending output bytes on a stream.
+dnl glibc (2.1.93 and newer) and Solaris provide __fpending.  On other systems,
+dnl we have to grub around in the FILE struct.
+
 AC_DEFUN(jm_FUNC_FPENDING,
 [
   AC_CHECK_HEADERS(stdio_ext.h)
 AC_DEFUN(jm_FUNC_FPENDING,
 [
   AC_CHECK_HEADERS(stdio_ext.h)
-  AC_FEPLACE_FUNCS([__fpending])
+  AC_REPLACE_FUNCS([__fpending])
+  fp_headers='
+#     if HAVE_STDIO_EXT_H
+#      include <stdio_ext.h>
+#     endif
+'
+  AC_CHECK_DECLS([__fpending], , , $fp_headers)
   if test $ac_cv_func___fpending = no; then
   if test $ac_cv_func___fpending = no; then
-    AC_REPLACE_FUNCS(__fpending)
     AC_CACHE_CHECK(
              [how to determine the number of pending output bytes on a stream],
                   ac_cv_sys_pending_output_n_bytes,
       [
         fp_save_DEFS=$DEFS
     AC_CACHE_CHECK(
              [how to determine the number of pending output bytes on a stream],
                   ac_cv_sys_pending_output_n_bytes,
       [
         fp_save_DEFS=$DEFS
-       for ac_expr in                                          \
+       for ac_expr in                                          \
                                                                \
                                                                \
-         '# glibc2'                                            \
-         'fp->_IO_write_ptr - fp->_IO_write_base'              \
+           '# glibc2'                                          \
+           'fp->_IO_write_ptr - fp->_IO_write_base'            \
                                                                \
                                                                \
-         '# traditional Unix'                                  \
-         'fp->_ptr - fp->_base'                                \
+           '# traditional Unix'                                \
+           'fp->_ptr - fp->_base'                              \
                                                                \
                                                                \
-         '# BSD'                                               \
-         'fp->_p - fp->_bf._base'                              \
+           '# BSD'                                             \
+           'fp->_p - fp->_bf._base'                            \
                                                                \
                                                                \
-         '# SCO, Unixware'                                     \
-         'fp->__ptr - fp->__base'                              \
+           '# SCO, Unixware'                                   \
+           'fp->__ptr - fp->__base'                            \
                                                                \
                                                                \
-         '# old glibc?'                                        \
-         'fp->__bufp - fp->__buffer'                           \
+           '# old glibc?'                                      \
+           'fp->__bufp - fp->__buffer'                         \
                                                                \
                                                                \
-         '# old glibc iostream?'                               \
-         'fp->_pptr - fp->_pbase'                              \
+           '# old glibc iostream?'                             \
+           'fp->_pptr - fp->_pbase'                            \
                                                                \
                                                                \
-         '# VMS'                                               \
-         '(*fp)->_ptr - (*fp)->_base'                          \
+           '# VMS'                                             \
+           '(*fp)->_ptr - (*fp)->_base'                        \
                                                                \
                                                                \
-         '# e.g., DGUX R4.11; the info is not available'       \
-         1                                                     \
-         ; do
-           # Skip each embedded comment.
-           case "$ac_expr" in '#'*) continue;; esac
-'
-
-           DEFS="$DEFS -DPENDING_OUTPUT_N_BYTES=$ac_expr"
-           AC_TRY_COMPILE(
-             [#include <stdio.h>
-             ],
-             [long unsigned int n = $ac_expr;],
-             fp_done=yes
-            )
-           DEFS=$fp_save_DEFS
-           test "$fp_done" = yes && break
-       done
-       AC_DEFINE_UNQUOTED(PENDING_OUTPUT_N_BYTES, $ac_expr,
-         [the number of pending output bytes on stream `fp'])
-      ])
-  fi
-
+           '# e.g., DGUX R4.11; the info is not available'     \
+           1                                                   \
+           ; do
 
 
+         # Skip each embedded comment.
+         case "$ac_expr" in '#'*) continue;; esac
 
 
+         DEFS="$DEFS -DPENDING_OUTPUT_N_BYTES=$ac_expr"
+         AC_TRY_COMPILE(
+           [#include <stdio.h>
+           ],
+           [FILE *fp = stdin; (void) ($ac_expr);],
+           fp_done=yes
+         )
+         DEFS=$fp_save_DEFS
+         test "$fp_done" = yes && break
+       done
 
 
-  if test $fu_cv_sys_struct_timespec = yes; then
-    AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMESPEC, 1,
-                      [Define if struct timespec is declared in <time.h>. ])
+       ac_cv_sys_pending_output_n_bytes=$ac_expr
+      ]
+    )
+    AC_DEFINE_UNQUOTED(PENDING_OUTPUT_N_BYTES,
+      $ac_cv_sys_pending_output_n_bytes,
+      [the number of pending output bytes on stream `fp'])
   fi
 ])
   fi
 ])