* cygheap.h (cwdstuff): Convert to class. Make posix and dir private.
(cwdstuff::get_posix): New method. (cwdstuff::reset_posix): New method. * dcrt0.cc (dll_crt0_1): Call setlocale rather than _setlocale_r. * environ.cc (environ_init): Ditto. Prefer "C" locale over current codepage default locale. * path.cc (chdir): Use cwdstuff::get_posix method instead of accessing cwdstuff::posix directly. (cwdstuff::set): Defer creating posix path to first usage. (cwdstuff::get_posix): Create posix path if it's empty, and return it. (cwdstuff::get): Create posix path if it's empty. * strfuncs.cc (sys_cp_wcstombs): Use UTF-8 conversion in the "C" locale. (sys_cp_mbstowcs): Ditto. * syscalls.cc (gen_full_path_at): Fetch CWD posix path locked. (setlocale): Implement here. Reset CWD posix path.
This commit is contained in:
@ -225,13 +225,17 @@ public:
|
||||
|
||||
class muto;
|
||||
|
||||
struct cwdstuff
|
||||
class cwdstuff
|
||||
{
|
||||
private:
|
||||
char *posix;
|
||||
UNICODE_STRING win32;
|
||||
HANDLE dir;
|
||||
public:
|
||||
UNICODE_STRING win32;
|
||||
DWORD drive_length;
|
||||
static muto cwd_lock;
|
||||
char *get_posix ();
|
||||
void reset_posix () { if (posix) posix[0] = '\0'; }
|
||||
char *get (char *, int = 1, int = 0, unsigned = NT_MAX_PATH);
|
||||
HANDLE get_handle () { return dir; }
|
||||
DWORD get_drive (char * dst)
|
||||
|
Reference in New Issue
Block a user