OSDN Git Service

* mount.cc (do_mount_from_fstab): Allow to change cygdrive prefix, too.
authorcorinna <corinna>
Mon, 11 Jan 2010 12:13:54 +0000 (12:13 +0000)
committercorinna <corinna>
Mon, 11 Jan 2010 12:13:54 +0000 (12:13 +0000)
winsup/utils/ChangeLog
winsup/utils/mount.cc

index a8438b5..ba588d5 100644 (file)
@@ -1,3 +1,7 @@
+2010-01-11  Corinna Vinschen  <corinna@vinschen.de>
+
+       * mount.cc (do_mount_from_fstab): Allow to change cygdrive prefix, too.
+
 2010-01-07  Corinna Vinschen  <corinna@vinschen.de>
 
        * cygpath.cc: Throughout, free obsolete path buffers.
index 47f14be..761488f 100644 (file)
@@ -1,7 +1,7 @@
 /* mount.cc
 
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005,
-   2008, 2009 Red Hat, Inc.
+   2008, 2009, 2010 Red Hat, Inc.
 
 This file is part of Cygwin.
 
@@ -150,22 +150,41 @@ do_mount_from_fstab (const char *where)
      is NULL, all entries match. */
   bool exists = false;
   for (mnt_t *m = mount_table; m - mount_table < max_mount_entry; ++m)
-    if (!(m->flags & MOUNT_CYGDRIVE) && (!where || !strcmp (where, m->posix)))
+    if (!where || !strcmp (where, m->posix))
       {
-       exists = true;
-       /* Compare with existing mount table.  If the entry doesn't exist,
-          mount it. */
-       FILE *mt = setmntent ("/-not-used-", "r");
-       struct mntent *p;
-
-       while ((p = getmntent (mt)) != NULL)
-         if (!strcmp (m->posix, p->mnt_dir))
-           break;
-       if (!p)
-         do_mount (m->native, m->posix, m->flags);
-       endmntent (mt);
-       if (where)
-         break;
+       if (m->flags & MOUNT_CYGDRIVE)
+         {
+           /* Get the cygdrive info */
+           char user[MAX_PATH];
+           char system[MAX_PATH];
+           char user_flags[MAX_PATH];
+           char system_flags[MAX_PATH];
+
+           exists = true;
+           cygwin_internal (CW_GET_CYGDRIVE_INFO, user, system, user_flags,
+                            system_flags);
+           if ((*user && strcmp (user, m->posix) != 0)
+               || (*system && strcmp (system, m->posix) != 0))
+             if (mount (NULL, m->posix, m->flags))
+               error (m->posix);
+         }
+       else
+         {
+           exists = true;
+           /* Compare with existing mount table.  If the entry doesn't exist,
+              mount it. */
+           FILE *mt = setmntent ("/-not-used-", "r");
+           struct mntent *p;
+
+           while ((p = getmntent (mt)) != NULL)
+             if (!strcmp (m->posix, p->mnt_dir))
+               break;
+           if (!p)
+             do_mount (m->native, m->posix, m->flags);
+           endmntent (mt);
+           if (where)
+             break;
+         }
       }
   if (!exists && where)
     fprintf (stderr,