diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 30012a061..c97cb6130 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,10 @@
+2005-08-24  Christopher Faylor  <cgf@timesys.com>
+
+	* path.cc (path_conv::check): Fill in fileattr for /dev, defaulting to
+	directory if /dev doesn't actually exist.
+	(win32_device_name): Don't consider FH_DEV to be a device since it's
+	really a directory which should go through mount processing.
+
 2005-08-24  Christopher Faylor  <cgf@timesys.com>
 
 	* cygheap.h (cygheap_types): Add HEAP_COMMUNE.
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 787251d72..7f169fdf4 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -641,9 +641,13 @@ path_conv::check (const char *src, unsigned opt,
 	    }
 	  else if (dev == FH_DEV)
 	    {
-	      fileattr = FILE_ATTRIBUTE_DIRECTORY;
 	      dev.devn = FH_FS;
-	      goto out;
+	      fileattr = GetFileAttributes (this->path);
+	      if (!component && fileattr == INVALID_FILE_ATTRIBUTES)
+		{
+		  fileattr = FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_READONLY;
+		  goto out;
+		}
 	    }
 	  else if (isvirtual_dev (dev.devn))
 	    {
@@ -1053,7 +1057,7 @@ static bool
 win32_device_name (const char *src_path, char *win32_path, device& dev)
 {
   dev.parse (src_path);
-  if (dev.devn == FH_FS)
+  if (dev == FH_FS || dev == FH_DEV)
     return false;
   strcpy (win32_path, dev.native);
   return true;