--- /dev/null
+size_t
+__fpending (FILE *fp)
+{
+#if FPENDING_GLIBC2
+ return fp->_IO_write_ptr - fp->_IO_write_base;
+#endif
+
+#if FPENDING__PTR
+ /* Traditional Unix */
+ return fp->_ptr - fp->_base;
+#endif
+
+#if FPENDING__P
+ /* BSD */
+ return fp->_p - fp->_bf._base;
+#endif
+
+#if FPENDING__P
+ /* SCO, Unixware */
+ return fp->__ptr - fp->__base;
+#endif
+
+#if FPENDING__BUFP
+ /* old glibc? */
+ return fp->__bufp - fp->__buffer;
+#endif
+
+#if FPENDING__PPTR
+ /* old glibc iostream? */
+ return fp->_pptr - fp->_pbase;
+#endif
+
+#if FPENDING__PTR_DEREF
+ /* VMS */
+ return (*fp)->_ptr - (*fp)->_base;
+#endif
+
+#if FPENDING_NOT_AVAILABLE
+ /* e.g., DGUX R4.11 */
+ return 1; /* i.e. the info is not available */
+#endif
+
+}