* exceptions.cc (interruptible): Allocate slightly more space for directory
name check. Windows 95 seems to null-terminate the directory otherwise. (interrupt_on_return): Issue a fatal error if we can't find the caller's stack. * spawn.cc (find_exec): Accept a path_conv argument rather than a buffer so that the caller can find things out about a translated path. (perhaps_suffix): Ditto. (spawn_guts): Allocate path_conv stuff here so that we can find out stuff about the translated path (this is work in progress). * environ.cc (environ_init): Accept an as-yet unused argument indicating whether we were invoked from a cygwin parent or not. (winenv): Ditto. (posify): Accept an argument indicating whether the path has already been translated. * dlfcn.cc (check_access): Provide a path_conv buffer to find_exec. * exec.cc (sexecvpe): Ditto. * path.cc (path_conv::check): Rename from path_conv::path_conv. (mount_item::getmntent): Recognize "Cygwin executable" bit. (symlink_info::check): Remove debugging statements. * path.h (class path_conv): Add iscygexec method. Rewrite constructor to call "check" method to allow multiple operations on a path_conv variable. * pinfo.cc (pinfo_init): Pass argument to environ_init. * shared.h: Bump PROC_MAGIC. * winsup.h: Reflect above changes to function arguments. * include/sys/mount.h: Add MOUNT_CYGWIN_EXEC type.
This commit is contained in:
@ -31,6 +31,7 @@ enum
|
||||
PATH_SYMLINK = MOUNT_SYMLINK,
|
||||
PATH_BINARY = MOUNT_BINARY,
|
||||
PATH_EXEC = MOUNT_EXEC,
|
||||
PATH_CYGWIN_EXEC = MOUNT_CYGWIN_EXEC,
|
||||
PATH_SOCKET = 0x40000000,
|
||||
PATH_HASACLS = 0x80000000
|
||||
};
|
||||
@ -49,6 +50,7 @@ class path_conv
|
||||
int issymlink () {return path_flags & PATH_SYMLINK;}
|
||||
int issocket () {return path_flags & PATH_SOCKET;}
|
||||
int isexec () {return path_flags & PATH_EXEC;}
|
||||
int iscygexec () {return path_flags & PATH_CYGWIN_EXEC;}
|
||||
|
||||
void set_binary () {path_flags |= PATH_BINARY;}
|
||||
void set_symlink () {path_flags |= PATH_SYMLINK;}
|
||||
@ -63,8 +65,16 @@ class path_conv
|
||||
|
||||
DWORD fileattr;
|
||||
|
||||
path_conv (const char * const, symlink_follow follow_mode = SYMLINK_FOLLOW,
|
||||
int use_full_path = 0, const suffix_info *suffixes = NULL);
|
||||
void check (const char *src, symlink_follow follow_mode = SYMLINK_FOLLOW,
|
||||
int use_full_path = 0, const suffix_info *suffixes = NULL);
|
||||
path_conv (const char *src, symlink_follow follow_mode = SYMLINK_FOLLOW,
|
||||
int use_full_path = 0, const suffix_info *suffixes = NULL)
|
||||
{
|
||||
check (src, follow_mode, use_full_path, suffixes);
|
||||
}
|
||||
|
||||
path_conv (): path_flags (0), known_suffix (NULL), error (0), devn (0), unit (0), fileattr (0xffffffff) {path[0] = '\0';}
|
||||
|
||||
inline char *get_win32 () { return path; }
|
||||
operator char *() {return path; }
|
||||
BOOL is_device () {return devn != FH_BAD;}
|
||||
|
Reference in New Issue
Block a user