From 09ecdc85044c736c25ac58c0f37b3fb5394c2733 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Tue, 23 Oct 2007 16:26:28 +0000 Subject: * 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. --- winsup/cygwin/cygheap.h | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'winsup/cygwin/cygheap.h') diff --git a/winsup/cygwin/cygheap.h b/winsup/cygwin/cygheap.h index 212578612..bf93e4633 100644 --- a/winsup/cygwin/cygheap.h +++ b/winsup/cygwin/cygheap.h @@ -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 -- cgit v1.2.3