Merge branch 'js/mingw-use-utf8'
Windows update. * js/mingw-use-utf8: mingw: fix possible buffer overrun when calling `GetUserNameW()` mingw: use Unicode functions explicitly mingw: get pw_name in UTF-8 formatmaint
commit
0a2ff7c6b5
|
@ -1407,7 +1407,7 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
|
||||||
do_unset_environment_variables();
|
do_unset_environment_variables();
|
||||||
|
|
||||||
/* Determine whether or not we are associated to a console */
|
/* Determine whether or not we are associated to a console */
|
||||||
cons = CreateFile("CONOUT$", GENERIC_WRITE,
|
cons = CreateFileW(L"CONOUT$", GENERIC_WRITE,
|
||||||
FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
|
FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
|
||||||
FILE_ATTRIBUTE_NORMAL, NULL);
|
FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
if (cons == INVALID_HANDLE_VALUE) {
|
if (cons == INVALID_HANDLE_VALUE) {
|
||||||
|
@ -1949,13 +1949,19 @@ struct passwd *getpwuid(int uid)
|
||||||
static unsigned initialized;
|
static unsigned initialized;
|
||||||
static char user_name[100];
|
static char user_name[100];
|
||||||
static struct passwd *p;
|
static struct passwd *p;
|
||||||
|
wchar_t buf[100];
|
||||||
DWORD len;
|
DWORD len;
|
||||||
|
|
||||||
if (initialized)
|
if (initialized)
|
||||||
return p;
|
return p;
|
||||||
|
|
||||||
len = sizeof(user_name);
|
len = ARRAY_SIZE(buf);
|
||||||
if (!GetUserName(user_name, &len)) {
|
if (!GetUserNameW(buf, &len)) {
|
||||||
|
initialized = 1;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xwcstoutf(user_name, buf, sizeof(user_name)) < 0) {
|
||||||
initialized = 1;
|
initialized = 1;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,7 +150,7 @@ win32_compute_revents (HANDLE h, int *p_sought)
|
||||||
if (!once_only)
|
if (!once_only)
|
||||||
{
|
{
|
||||||
NtQueryInformationFile = (PNtQueryInformationFile)(void (*)(void))
|
NtQueryInformationFile = (PNtQueryInformationFile)(void (*)(void))
|
||||||
GetProcAddress (GetModuleHandle ("ntdll.dll"),
|
GetProcAddress (GetModuleHandleW (L"ntdll.dll"),
|
||||||
"NtQueryInformationFile");
|
"NtQueryInformationFile");
|
||||||
once_only = TRUE;
|
once_only = TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -608,7 +608,7 @@ int winansi_isatty(int fd)
|
||||||
void winansi_init(void)
|
void winansi_init(void)
|
||||||
{
|
{
|
||||||
int con1, con2;
|
int con1, con2;
|
||||||
char name[32];
|
wchar_t name[32];
|
||||||
|
|
||||||
/* check if either stdout or stderr is a console output screen buffer */
|
/* check if either stdout or stderr is a console output screen buffer */
|
||||||
con1 = is_console(1);
|
con1 = is_console(1);
|
||||||
|
@ -628,13 +628,15 @@ void winansi_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* create a named pipe to communicate with the console thread */
|
/* create a named pipe to communicate with the console thread */
|
||||||
xsnprintf(name, sizeof(name), "\\\\.\\pipe\\winansi%lu", GetCurrentProcessId());
|
if (swprintf(name, ARRAY_SIZE(name) - 1, L"\\\\.\\pipe\\winansi%lu",
|
||||||
hwrite = CreateNamedPipe(name, PIPE_ACCESS_OUTBOUND,
|
GetCurrentProcessId()) < 0)
|
||||||
|
die("Could not initialize winansi pipe name");
|
||||||
|
hwrite = CreateNamedPipeW(name, PIPE_ACCESS_OUTBOUND,
|
||||||
PIPE_TYPE_BYTE | PIPE_WAIT, 1, BUFFER_SIZE, 0, 0, NULL);
|
PIPE_TYPE_BYTE | PIPE_WAIT, 1, BUFFER_SIZE, 0, 0, NULL);
|
||||||
if (hwrite == INVALID_HANDLE_VALUE)
|
if (hwrite == INVALID_HANDLE_VALUE)
|
||||||
die_lasterr("CreateNamedPipe failed");
|
die_lasterr("CreateNamedPipe failed");
|
||||||
|
|
||||||
hread = CreateFile(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
|
hread = CreateFileW(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
|
||||||
if (hread == INVALID_HANDLE_VALUE)
|
if (hread == INVALID_HANDLE_VALUE)
|
||||||
die_lasterr("CreateFile for named pipe failed");
|
die_lasterr("CreateFile for named pipe failed");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue