Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/environ.cc')
-rw-r--r--winsup/cygwin/environ.cc14
1 files changed, 7 insertions, 7 deletions
diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc
index a53b5f085..f56d19517 100644
--- a/winsup/cygwin/environ.cc
+++ b/winsup/cygwin/environ.cc
@@ -780,11 +780,15 @@ ucenv (char *p, const char *eq)
/* Set options from the registry. */
static bool __stdcall
-regopt (const WCHAR *name, char *buf)
+regopt (PCWSTR name, char *buf)
{
bool parsed_something = false;
UNICODE_STRING lname;
size_t len = (wcslen(name) + 1) * sizeof (WCHAR);
+ WCHAR lbuf[1024]; /* Use reasonable size to lower stack pressure.
+ get_string alloca's this additionally and 1024
+ is more than enough for CYGWIN env var values. */
+
RtlInitEmptyUnicodeString(&lname, (PWCHAR) alloca (len), len);
wcscpy(lname.Buffer, name);
RtlDowncaseUnicodeString(&lname, &lname, FALSE);
@@ -792,13 +796,9 @@ regopt (const WCHAR *name, char *buf)
for (int i = 0; i < 2; i++)
{
reg_key r (i, KEY_READ, _WIDE (CYGWIN_INFO_PROGRAM_OPTIONS_NAME), NULL);
-
- if (NT_SUCCESS (r.get_string (lname.Buffer, (PWCHAR) buf,
- NT_MAX_PATH, L"")))
+ if (NT_SUCCESS (r.get_string (lname.Buffer, lbuf, 1024, L"")))
{
- char *newp;
- sys_wcstombs_alloc(&newp, HEAP_NOTHEAP, (PWCHAR) buf);
- strcpy(buf, newp);
+ sys_wcstombs (buf, NT_MAX_PATH, lbuf);
parse_options (buf);
parsed_something = true;
break;