* path.cc (cwd_win32): Eliminate.
(cwd_posix): Eliminate. (cwd_hash): Eliminate. (cwdstuff::init): Rename from cwd_init. (cwdstuff::fixup_after_exec): Rename from cwd_fixup_after_exec. (cwdstuff::get): Rename from get_cwd_inner. (normalize_posix_path): Eliminate cwd argument. Just calculate when necessary. (normalize_win32_path): Ditto. (mount_info::conv_to_win32_path): Eliminate cwd retrieval here. (mount_info::conv_to_posix_path): Ditto. (hash_path_name): Accomodate additional methods in cwdstuff. (get_cwd_win32): Eliminate. (getcwd): Use cwdstuff methods. Properly handle case where buf == NULL and len < 0. (cwdstuff::get_hash): New method. (cwdstuff::get_initial): New method. (cwdstuff::set): New method. (cwdstuff::get): New method. (cwdstuff::copy): New method. * path.h: Move cwdstuff struct here. Add a bunch of stuff to cwdstuff. Make cygcwd an extern. * spawn.cc (spawn_guts): Use copy method to get copies of cwd info to pass to execed process. * dcrt0.cc (dll_crt0_1): Use cygcwd methods for cwd initialization.
This commit is contained in:
@ -110,11 +110,6 @@ int __stdcall check_null_empty_path (const char *name);
|
||||
|
||||
const char * __stdcall find_exec (const char *name, path_conv& buf, const char *winenv = "PATH=",
|
||||
int null_if_notfound = 0, const char **known_suffix = NULL);
|
||||
void __stdcall cwd_init ();
|
||||
char * __stdcall cwd_posix (char *);
|
||||
char * __stdcall cwd_win32 (char *);
|
||||
DWORD __stdcall cwd_hash ();
|
||||
void __stdcall cwd_fixup_after_exec (char *, char *, DWORD);
|
||||
|
||||
/* Common macros for checking for invalid path names */
|
||||
|
||||
@ -127,3 +122,24 @@ void __stdcall cwd_fixup_after_exec (char *, char *, DWORD);
|
||||
})
|
||||
|
||||
#define isdrive(s) (isalpha (*(s)) && (s)[1] == ':')
|
||||
|
||||
/* cwd cache stuff. */
|
||||
|
||||
class muto;
|
||||
|
||||
struct cwdstuff
|
||||
{
|
||||
char *posix;
|
||||
char *win32;
|
||||
DWORD hash;
|
||||
muto *lock;
|
||||
char *get (char *buf, int need_posix = 1, int with_chroot = 0, unsigned ulen = MAX_PATH);
|
||||
DWORD get_hash ();
|
||||
void init ();
|
||||
void fixup_after_exec (char *win32, char *posix, DWORD hash);
|
||||
bool get_initial ();
|
||||
void copy (char * &posix_cwd, char * &win32_cwd, DWORD hash_cwd);
|
||||
void set (char *win32_cwd);
|
||||
};
|
||||
|
||||
extern cwdstuff cygcwd;
|
||||
|
Reference in New Issue
Block a user