Mail Archives: cygwin-developers/2000/06/15/13:51:54
On Fri, Jun 16, 2000 at 02:32:29AM +0900, Kazuhiro Fujieda wrote:
>>>> On Thu, 15 Jun 2000 12:34:19 -0400
>>>> Chris Faylor <cgf AT cygnus DOT com> said:
>
>> Actually, UNIX can mount two devices, too. I just tried it, and a umount
>> removes the first in the mount list. Is it possible to adapt your patch
>> to do that?
>
>On SunOS 5.7, I couldn't mount a block special device on two
>different directories. Then I tried a network file system and
>found it succeeded. In this case, a umount removes the last in
>the list. Anyway, I tried to tailor my patch to your request.
Huh. I tried this on a Digital UNIX system with a network file system.
I guess there's no standard.
Thanks for making the change. I'll install this patch.
cgf
>ChangeLog:
>2000-06-15 Kazuhiro Fujieda <fujieda AT jaist DOT ac DOT jp>
> * path.cc (mount_info::add_item): Eliminate a trailing backslash
> included in a native path starting with '//[A-Za-z]/...'.
> * path.cc (mount_info::del_item): Accept a native path as its target.
>
>Index: path.cc
>===================================================================
>RCS file: /cvs/src/src/winsup/cygwin/path.cc,v
>retrieving revision 1.30
>diff -u -p -r1.30 path.cc
>--- path.cc 2000/06/13 16:48:37 1.30
>+++ path.cc 2000/06/15 17:03:16
>@@ -1614,10 +1614,8 @@ mount_info::add_item (const char *native
> if (slash_drive_prefix_p (native))
> slash_drive_to_win32_path (native, nativetmp, 0);
> else
>- {
>- backslashify (native, nativetmp, 0);
>- nofinalslash (nativetmp, nativetmp);
>- }
>+ backslashify (native, nativetmp, 0);
>+ nofinalslash (nativetmp, nativetmp);
>
> slashify (posix, posixtmp, 0);
> nofinalslash (posixtmp, posixtmp);
>@@ -1677,36 +1675,49 @@ int
> mount_info::del_item (const char *path, unsigned flags, int reg_p)
> {
> char pathtmp[MAX_PATH];
>+ int posix_path_p = FALSE;
>
> /* Something's wrong if path is NULL or empty. */
>- if (path == NULL || *path == 0)
>+ if (path == NULL || *path == 0 || !isabspath (path))
> {
> set_errno (EINVAL);
> return -1;
> }
>
>- slashify (path, pathtmp, 0);
>+ if (slash_drive_prefix_p (path))
>+ slash_drive_to_win32_path (path, pathtmp, 0);
>+ else if (slash_unc_prefix_p (path) || strpbrk (path, ":\\"))
>+ backslashify (path, pathtmp, 0);
>+ else
>+ {
>+ slashify (path, pathtmp, 0);
>+ posix_path_p = TRUE;
>+ }
> nofinalslash (pathtmp, pathtmp);
>-
>- debug_printf ("%s[%s]", path, pathtmp);
>
>- if (reg_p && del_reg_mount (pathtmp, flags)
>- && del_reg_mount (path, flags)) /* for old irregular entries */
>+ if (reg_p && posix_path_p &&
>+ del_reg_mount (pathtmp, flags) &&
>+ del_reg_mount (path, flags)) /* for old irregular entries */
> return -1;
>
> for (int i = 0; i < nmounts; i++)
> {
>- /* Delete if paths and mount locations match. */
>- if ((strcasematch (mount[i].posix_path, pathtmp)
>- || strcasematch (mount[i].native_path, pathtmp)) &&
>- (mount[i].flags & MOUNT_SYSTEM) == (flags & MOUNT_SYSTEM))
>+ int ent = native_sorted[i]; /* in the same order as getmntent() */
>+ if (((posix_path_p)
>+ ? strcasematch (mount[ent].posix_path, pathtmp)
>+ : strcasematch (mount[ent].native_path, pathtmp)) &&
>+ (mount[ent].flags & MOUNT_SYSTEM) == (flags & MOUNT_SYSTEM))
> {
>- nmounts--; /* One less mount table entry */
>+ if (!posix_path_p &&
>+ reg_p && del_reg_mount (mount[ent].posix_path, flags))
>+ return -1;
>+
>+ nmounts--; /* One less mount table entry */
> /* Fill in the hole if not at the end of the table */
>- if (i < nmounts)
>- memmove (mount + i, mount + i + 1,
>- sizeof (mount[i]) * (nmounts - i));
>- sort (); /* Resort the table */
>+ if (ent < nmounts)
>+ memmove (mount + ent, mount + ent + 1,
>+ sizeof (mount[ent]) * (nmounts - ent));
>+ sort (); /* Resort the table */
> return 0;
> }
> }
>
>____
> | AIST Kazuhiro Fujieda <fujieda AT jaist DOT ac DOT jp>
> | HOKURIKU School of Information Science
>o_/ 1990 Japan Advanced Institute of Science and Technology
--
cgf AT cygnus DOT com Cygnus Solutions, a Red Hat company
http://sourceware.cygnus.com/ http://www.redhat.com/
- Raw text -