* path.h (pathconv_arg): Add PC_POSIX.
(path_conv): Add normalized_path field. * path.cc (path_conv::~path_conv): New destructor. (path_conv::check): Set normalized_path, where appropriate. * dtable.cc (build_fhandler_from_name): Use normalized path from path_conv. * syscalls.cc (chroot): Ditto. * cygheap.h: Remove path_prefix_p declaration. Christopher Faylor <cgf@redhat.com> (minor fixups) * Makefile.in: Add fhandler_proc.o, fhandler_registry.o, fhandler_process.o and fhandler_virtual.o. * dtable.cc (dtable::build_fhandler): Add entries for FH_PROC, FH_REGISTRY and FH_PROCESS. Set unix_name to the normalized posix path. * fhandler.h: Add constants for FH_PROC, FH_REGISTRY and FH_PROCESS. Add class declarations for fhandler_virtual, fhandler_proc, fhandler_registry and fhandler_virtual. Update fhandler_union accordingly. * fhandler_proc.cc: New file. Add implementation for fhandler_proc. * fhandler_virtual.cc: New file. Add implementation for fhandler_virtual. * fhandler_process.cc: New file. Add implementation for fhandler_process. * fhandler_registry.cc: New file. Add implementation for fhandler_registry. * path.cc: Add isproc and isvirtual_dev macros. * path.cc (path_conv::check): Add check for virtual devices. * path.cc (mount_info::conv_to_win32_path): Convert paths in /proc to empty Win32 paths. * path.cc (chdir): Replace check for FH_CYGDRIVE with more generic isvirtual_dev macro. Force setting of posix path for virtual fhandlers. * path.h: Add externally visible path_prefix_p and normalized_posix_path prototypes.
This commit is contained in:
@ -23,7 +23,8 @@ enum pathconv_arg
|
||||
PC_SYM_CONTENTS = 0x0008,
|
||||
PC_FULL = 0x0010,
|
||||
PC_NULLEMPTY = 0x0020,
|
||||
PC_CHECK_EA = 0x0040
|
||||
PC_CHECK_EA = 0x0040,
|
||||
PC_POSIX = 0x0080
|
||||
};
|
||||
|
||||
enum case_checking
|
||||
@ -75,6 +76,7 @@ class path_conv
|
||||
int unit;
|
||||
DWORD fileattr;
|
||||
BOOL case_clash;
|
||||
char *normalized_path;
|
||||
|
||||
int isdisk () const { return path_flags & PATH_ISDISK;}
|
||||
int isremote () const {return is_remote_drive;}
|
||||
@ -126,9 +128,11 @@ class path_conv
|
||||
|
||||
path_conv (): path_flags (0), known_suffix (NULL), error (0), devn (0), unit (0), fileattr (INVALID_FILE_ATTRIBUTES) {path[0] = '\0';}
|
||||
|
||||
~path_conv ();
|
||||
inline char *get_win32 () { return path; }
|
||||
operator char *() {return path; }
|
||||
operator DWORD &() {return fileattr; }
|
||||
operator char *() {return path;}
|
||||
operator const char *() {return path;}
|
||||
operator DWORD &() {return fileattr;}
|
||||
operator int &() {return (int) fileattr; }
|
||||
BOOL is_device () {return devn != FH_BAD && devn != FH_DISK;}
|
||||
DWORD get_devn () {return devn == FH_BAD ? (DWORD) FH_DISK : devn;}
|
||||
@ -178,3 +182,5 @@ has_exec_chars (const char *buf, int len)
|
||||
|
||||
int pathmatch (const char *path1, const char *path2) __attribute__ ((regparm (2)));
|
||||
int pathnmatch (const char *path1, const char *path2, int len) __attribute__ ((regparm (2)));
|
||||
|
||||
int path_prefix_p (const char *path1, const char *path2, int len1) __attribute__ ((regparm (3)));
|
||||
|
Reference in New Issue
Block a user