]> sourceware.org Git - newlib-cygwin.git/commitdiff
* fhandler_dev.cc (fhandler_dev::readdir): Fix formatting. Simplify
authorCorinna Vinschen <corinna@vinschen.de>
Sun, 1 Apr 2012 10:38:07 +0000 (10:38 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Sun, 1 Apr 2012 10:38:07 +0000 (10:38 +0000)
code.  Use device::type() to fetch dirent compatible device type.
Add comment.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_dev.cc

index 0b3a3b8292baab8919180cec151f2f0ef2cde4c1..e2a63c1ed7dc44b7c158b09a25aa6a183a13023c 100644 (file)
@@ -1,3 +1,9 @@
+2012-04-01  Corinna Vinschen  <corinna@vinschen.de>
+
+       * fhandler_dev.cc (fhandler_dev::readdir): Fix formatting.  Simplify
+       code.  Use device::type() to fetch dirent compatible device type.
+       Add comment.
+
 2012-03-31  Christopher Faylor  <me.cygwin2012@cgf.cx>
 
        * devices.h (device::exists_func): Redefine field.
index d4a3e0c866de9c9fb1316681578799b9e2abf107..938e27db3b00aeb1ff48004fd8db97b838737081 100644 (file)
@@ -94,6 +94,7 @@ int
 fhandler_dev::readdir (DIR *dir, dirent *de)
 {
   int ret;
+  const device *curdev;
   device dev;
 
   if (!devidx)
@@ -104,62 +105,39 @@ fhandler_dev::readdir (DIR *dir, dirent *de)
             /dev already, for instance by using the old script from Igor
             Peshansky. */
          dev.name = de->d_name;
-         if (!bsearch (&dev, dev_storage_scan_start, dev_storage_size, sizeof dev,
-                       device_cmp))
+         if (!bsearch (&dev, dev_storage_scan_start, dev_storage_size,
+                       sizeof dev, device_cmp))
            break;
        }
-      if (ret == ENMFILE)
-       devidx = dev_storage_scan_start;
-      else
+      if (ret != ENMFILE)
        goto out;
+      devidx = dev_storage_scan_start;
     }
 
   /* Now start processing our internal dev table. */
   ret = ENMFILE;
-  while (devidx < dev_storage_end)
+  while ((curdev = devidx++) < dev_storage_end)
     {
-      const device& thisdev = *devidx++;
       /* If exists returns < 0 it means that the device can be used by a
         program but its use is deprecated and, so, it is not returned
         by readdir(().  */
-      if (thisdev.exists () <= 0)
+      if (curdev->exists () <= 0)
        continue;
       ++dir->__d_position;
-      strcpy (de->d_name, thisdev.name + dev_prefix_len);
-      de->d_ino = hash_path_name (0, thisdev.native);
-      switch (thisdev.get_major ())
+      strcpy (de->d_name, curdev->name + dev_prefix_len);
+      if (curdev->get_major () == DEV_TTY_MAJOR
+         && (curdev->is_device (FH_CONIN)
+             || curdev->is_device (FH_CONOUT)
+             || curdev->is_device (FH_CONSOLE)))
        {
-       case DEV_FLOPPY_MAJOR:
-       case DEV_TAPE_MAJOR:
-       case DEV_CDROM_MAJOR:
-       case DEV_SD_MAJOR:
-       case DEV_SD1_MAJOR:
-       case DEV_SD2_MAJOR:
-       case DEV_SD3_MAJOR:
-       case DEV_SD4_MAJOR:
-       case DEV_SD5_MAJOR:
-       case DEV_SD6_MAJOR:
-       case DEV_SD7_MAJOR:
-         de->d_type = DT_BLK;
-         break;
-       case DEV_TTY_MAJOR:
-         {
-           int devn = *const_cast<device *> (&thisdev);
-           switch (devn)
-             {
-             case FH_CONIN:
-             case FH_CONOUT:
-             case FH_CONSOLE:
-               dev.parse (myself->ctty);
-               de->d_ino = hash_path_name (0, dev.native);
-               break;
-             }
-         }
-         /*FALLTHRU*/
-       default:
-         de->d_type = DT_CHR;
-         break;
+         /* Make sure conin, conout, and console have the same inode number
+            as the current consX. */
+         dev.parse (myself->ctty);
+         de->d_ino = hash_path_name (0, dev.native);
        }
+      else
+       de->d_ino = hash_path_name (0, curdev->native);
+      de->d_type = curdev->type ();
       ret = 0;
       break;
     }
This page took 0.035602 seconds and 5 git commands to generate.