+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Windows platforms. */
+
+/* Get _get_osfhandle. */
+# include <io.h>
+
+/* Get GetFileType. */
+# include <windows.h>
+
+int
+isapipe (int fd)
+{
+ HANDLE h = (HANDLE) _get_osfhandle (fd);
+
+ if (h == INVALID_HANDLE_VALUE)
+ {
+ errno = EBADF;
+ return -1;
+ }
+
+ return (GetFileType (h) == FILE_TYPE_PIPE);
+}
+
+#else
+/* Unix platforms. */
+
+# include <stdbool.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <unistd.h>