Index: /trunk/src/lib/nt/ntstat.c
===================================================================
--- /trunk/src/lib/nt/ntstat.c	(revision 2706)
+++ /trunk/src/lib/nt/ntstat.c	(revision 2707)
@@ -456,5 +456,60 @@
     HANDLE  hFile = (HANDLE)_get_osfhandle(fd);
     if (hFile != INVALID_HANDLE_VALUE)
-        rc = birdStatHandle(hFile, pStat, NULL);
+    {
+        DWORD fFileType;
+
+        SetLastError(NO_ERROR);
+        fFileType = GetFileType(hFile) & ~FILE_TYPE_REMOTE;
+        switch (fFileType)
+        {
+            case FILE_TYPE_DISK:
+                rc = birdStatHandle(hFile, pStat, NULL);
+                break;
+
+            case FILE_TYPE_CHAR:
+            case FILE_TYPE_PIPE:
+                if (fFileType == FILE_TYPE_PIPE)
+                    pStat->st_mode          = S_IFIFO | 0666;
+                else
+                    pStat->st_mode          = S_IFCHR | 0666;
+                pStat->st_padding0[0]       = 0;
+                pStat->st_padding0[1]       = 0;
+                pStat->st_size              = 0;
+                pStat->st_atim.tv_sec       = 0;
+                pStat->st_atim.tv_nsec      = 0;
+                pStat->st_mtim.tv_sec       = 0;
+                pStat->st_mtim.tv_nsec      = 0;
+                pStat->st_ctim.tv_sec       = 0;
+                pStat->st_ctim.tv_nsec      = 0;
+                pStat->st_birthtim.tv_sec   = 0;
+                pStat->st_birthtim.tv_nsec  = 0;
+                pStat->st_ino               = 0;
+                pStat->st_dev               = 0;
+                pStat->st_rdev              = 0;
+                pStat->st_uid               = 0;
+                pStat->st_gid               = 0;
+                pStat->st_padding1[0]       = 0;
+                pStat->st_padding1[1]       = 0;
+                pStat->st_padding1[2]       = 0;
+                pStat->st_blksize           = 512;
+                pStat->st_blocks            = 0;
+                if (fFileType == FILE_TYPE_PIPE)
+                {
+                    DWORD cbAvail;
+                    if (PeekNamedPipe(hFile, NULL, 0, NULL, &cbAvail, NULL))
+                        pStat->st_size = cbAvail;
+                }
+                rc = 0;
+                break;
+
+            case FILE_TYPE_UNKNOWN:
+            default:
+                if (GetLastError() == NO_ERROR)
+                    rc = birdSetErrnoToBadFileNo();
+                else
+                    rc = birdSetErrnoFromWin32(GetLastError());
+                break;
+        }
+    }
     else
         rc = -1;
Index: /trunk/src/lib/nt/ntstat.h
===================================================================
--- /trunk/src/lib/nt/ntstat.h	(revision 2706)
+++ /trunk/src/lib/nt/ntstat.h	(revision 2707)
@@ -94,4 +94,7 @@
 # define S_IFLNK        _S_IFLNK
 #endif
+#ifndef S_IFIFO
+# define S_IFIFO        _S_IFIFO
+#endif
 
 #ifndef S_ISLNK
@@ -105,19 +108,19 @@
 #endif
 
-#define	S_IRWXU        (_S_IREAD | _S_IWRITE | _S_IEXEC)
-#define	S_IXUSR        _S_IEXEC
-#define	S_IWUSR        _S_IWRITE
-#define	S_IRUSR        _S_IREAD
-#define S_IRWXG        0000070
-#define S_IRGRP	       0000040
-#define S_IWGRP	       0000020
-#define S_IXGRP        0000010
-#define S_IRWXO        0000007
-#define S_IROTH	       0000004
-#define S_IWOTH	       0000002
-#define S_IXOTH        0000001
-#define	S_ISUID        0004000
-#define	S_ISGID        0002000
-#define ALLPERMS       0000777
+#define	S_IRWXU         (_S_IREAD | _S_IWRITE | _S_IEXEC)
+#define	S_IXUSR         _S_IEXEC
+#define	S_IWUSR         _S_IWRITE
+#define	S_IRUSR         _S_IREAD
+#define S_IRWXG         0000070
+#define S_IRGRP	        0000040
+#define S_IWGRP	        0000020
+#define S_IXGRP         0000010
+#define S_IRWXO         0000007
+#define S_IROTH	        0000004
+#define S_IWOTH	        0000002
+#define S_IXOTH         0000001
+#define	S_ISUID         0004000
+#define	S_ISGID         0002000
+#define ALLPERMS        0000777
 
 #endif
