* cygheap.h (struct cwdstuff): Drop hash member. Drop get_hash,

get_initial, and fixup_after_exec declarations.
	Convert win32 to UNICODE_STRING.
	(cwdstuff::get_drive): Convert win32 path in current codepage.
	(cwdstuff::set): Take native NT path.
	* ntdll.h (struct _TEB): Typedef.
	* path.cc (mount_info::conv_to_posix_path): Add variant taking
	wide char DOS paths.
	(symlink_info::posixify): Simplify concatenating cwd and relative path.
	(hash_path_name): Drop special relative path handling.
	(chdir): Drop special "drive only" handling.  Call cwdstuff::set with
	native path.
	(cwdstuff::get_hash): Remove.
	(windows_system_directory): Remove.
	(_upp): Remove.
	(get_user_proc_parms): Make inline.  Get PEB pointer by calling
	NtCurrentTeb.
	(cwdstuff::init): Simplify.
	(cwdstuff::set): Rework to handle incoming native NT path.  Workaround
	a Vista problem with CWD handle in the user process parameter block.
	(cwdstuff::get): Simplify locking.  Accommodate type change of win32.
	* shared_info.h (mount_info): Add declaration for new conv_to_posix_path
	method.
	* strfuncs.cc (sys_wcstombs): Return correct length of created
	multi-byte string.
This commit is contained in:
Corinna Vinschen
2007-10-23 16:26:28 +00:00
parent 5b9de9d956
commit 09ecdc8504
6 changed files with 247 additions and 188 deletions

View File

@@ -222,23 +222,19 @@ class muto;
struct cwdstuff
{
char *posix;
char *win32;
DWORD hash;
UNICODE_STRING win32;
DWORD drive_length;
static muto cwd_lock;
char *get (char *, int = 1, int = 0, unsigned = CYG_MAX_PATH);
DWORD get_hash ();
DWORD get_drive (char * dst)
{
get_initial ();
memcpy (dst, win32, drive_length);
cwd_lock.acquire ();
DWORD ret = sys_wcstombs (dst, PATH_MAX, win32.Buffer, drive_length);
cwd_lock.release ();
return drive_length;
return ret;
}
void init ();
void fixup_after_exec (char *, char *, DWORD);
bool get_initial ();
int set (const char *, const char *, bool);
int set (PUNICODE_STRING, const char *, bool);
};
#ifdef DEBUGGING