* dtable.cc (fh_alloc): Keep fh which was flagged as error if it is for an
on-disk device and we were stating it. * path.cc (path_conv::check): Set PATH_KEPT_HANDLE. * path.h (path_types): Add PATH_KEPT_HANDLE. (path_conv::kept_handle): Implement.
This commit is contained in:
parent
55dcba98db
commit
080f275bae
@ -1,3 +1,11 @@
|
|||||||
|
2012-04-19 Christopher Faylor <me.cygwin2012@cgf.cx>
|
||||||
|
|
||||||
|
* dtable.cc (fh_alloc): Keep fh which was flagged as error if it is for
|
||||||
|
an on-disk device and we were stating it.
|
||||||
|
* path.cc (path_conv::check): Set PATH_KEPT_HANDLE.
|
||||||
|
* path.h (path_types): Add PATH_KEPT_HANDLE.
|
||||||
|
(path_conv::kept_handle): Implement.
|
||||||
|
|
||||||
2012-04-18 Christopher Faylor <me.cygwin2012@cgf.cx>
|
2012-04-18 Christopher Faylor <me.cygwin2012@cgf.cx>
|
||||||
|
|
||||||
* fhandler.h (fhandler_base::nohandle): Revert to standard
|
* fhandler.h (fhandler_base::nohandle): Revert to standard
|
||||||
|
@ -607,8 +607,15 @@ fh_alloc (path_conv& pc)
|
|||||||
fh = cnew (fhandler_nodevice);
|
fh = cnew (fhandler_nodevice);
|
||||||
else if (fh->dev () == FH_ERROR)
|
else if (fh->dev () == FH_ERROR)
|
||||||
{
|
{
|
||||||
delete fh;
|
if (pc.kept_handle () && pc.dev.isfs ())
|
||||||
fh = NULL;
|
fh->dev () = pc.dev; /* Special case: This file actually exists on
|
||||||
|
disk and this is a stat() so just return the
|
||||||
|
info from pc. */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete fh;
|
||||||
|
fh = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return fh;
|
return fh;
|
||||||
}
|
}
|
||||||
|
@ -1152,6 +1152,9 @@ out:
|
|||||||
if (opt & PC_CTTY)
|
if (opt & PC_CTTY)
|
||||||
path_flags |= PATH_CTTY;
|
path_flags |= PATH_CTTY;
|
||||||
|
|
||||||
|
if (opt & PC_KEEP_HANDLE)
|
||||||
|
path_flags |= PATH_KEPT_HANDLE;
|
||||||
|
|
||||||
if ((opt & PC_POSIX))
|
if ((opt & PC_POSIX))
|
||||||
{
|
{
|
||||||
if (tail < path_end && tail > path_copy + 1)
|
if (tail < path_end && tail > path_copy + 1)
|
||||||
|
@ -77,6 +77,7 @@ enum path_types
|
|||||||
PATH_IHASH = MOUNT_IHASH,
|
PATH_IHASH = MOUNT_IHASH,
|
||||||
PATH_ALL_EXEC = (PATH_CYGWIN_EXEC | PATH_EXEC),
|
PATH_ALL_EXEC = (PATH_CYGWIN_EXEC | PATH_EXEC),
|
||||||
PATH_NO_ACCESS_CHECK = PC_NO_ACCESS_CHECK,
|
PATH_NO_ACCESS_CHECK = PC_NO_ACCESS_CHECK,
|
||||||
|
PATH_KEPT_HANDLE = 0x00200000,
|
||||||
PATH_CTTY = 0x00400000, /* could later be used as ctty */
|
PATH_CTTY = 0x00400000, /* could later be used as ctty */
|
||||||
PATH_OPEN = 0x00800000, /* use open semantics */
|
PATH_OPEN = 0x00800000, /* use open semantics */
|
||||||
PATH_LNK = 0x01000000,
|
PATH_LNK = 0x01000000,
|
||||||
@ -153,6 +154,7 @@ class path_conv
|
|||||||
bool has_acls () const {return !(path_flags & PATH_NOACL) && fs.has_acls (); }
|
bool has_acls () const {return !(path_flags & PATH_NOACL) && fs.has_acls (); }
|
||||||
bool hasgood_inode () const {return !(path_flags & PATH_IHASH); }
|
bool hasgood_inode () const {return !(path_flags & PATH_IHASH); }
|
||||||
bool isgood_inode (__ino64_t ino) const;
|
bool isgood_inode (__ino64_t ino) const;
|
||||||
|
bool kept_handle () const {return !!(path_flags & PATH_KEPT_HANDLE);}
|
||||||
int has_symlinks () const {return path_flags & PATH_HAS_SYMLINKS;}
|
int has_symlinks () const {return path_flags & PATH_HAS_SYMLINKS;}
|
||||||
int has_dos_filenames_only () const {return path_flags & PATH_DOS;}
|
int has_dos_filenames_only () const {return path_flags & PATH_DOS;}
|
||||||
int has_buggy_open () const {return fs.has_buggy_open ();}
|
int has_buggy_open () const {return fs.has_buggy_open ();}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user