ruby-changes:15008
From: nobu <ko1@a...>
Date: Fri, 12 Mar 2010 07:25:41 +0900 (JST)
Subject: [ruby-changes:15008] Ruby:r26883 (trunk): * win32/win32.c (init_env): get rid of alloca() for outer string.
nobu 2010-03-12 07:25:22 +0900 (Fri, 12 Mar 2010) New Revision: 26883 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26883 Log: * win32/win32.c (init_env): get rid of alloca() for outer string. Modified files: trunk/ChangeLog trunk/win32/win32.c Index: ChangeLog =================================================================== --- ChangeLog (revision 26882) +++ ChangeLog (revision 26883) @@ -1,3 +1,7 @@ +Fri Mar 12 07:25:16 2010 Nobuyoshi Nakada <nobu@r...> + + * win32/win32.c (init_env): get rid of alloca() for outer string. + Fri Mar 12 07:17:15 2010 Nobuyoshi Nakada <nobu@r...> * ext/racc/cparse/cparse.c: suppressed warnings for shortening on Index: win32/win32.c =================================================================== --- win32/win32.c (revision 26882) +++ win32/win32.c (revision 26883) @@ -434,11 +434,19 @@ init_env(void) { static const WCHAR TMPDIR[] = L"TMPDIR"; - WCHAR env[_MAX_PATH]; - WCHAR *buf; + struct {WCHAR name[6], eq, val[_MAX_PATH];} wk; DWORD len; BOOL f; +#define env wk.val +#define set_env_val(vname) do { \ + typedef char namesizecheck[numberof(wk.name) < numberof(vname) - 1 ? -1 : 1]; \ + WCHAR *const buf = wk.name + numberof(wk.name) - numberof(vname); \ + MEMCPY(buf, vname, WCHAR, numberof(vname) - 1); \ + _wputenv(buf); \ + } while (0) + wk.eq = L'='; + if (!GetEnvironmentVariableW(L"HOME", env, numberof(env))) { f = FALSE; if (GetEnvironmentVariableW(L"HOMEDRIVE", env, numberof(env))) @@ -459,9 +467,7 @@ } if (f) { regulate_path(env); - buf = ALLOCA_N(WCHAR, 5 + lstrlenW(env) + 1); - wsprintfW(buf, L"HOME=%s", env); - _wputenv(buf); + set_env_val(L"HOME"); } } @@ -471,9 +477,7 @@ NTLoginName = "<Unknown>"; return; } - buf = ALLOCA_N(WCHAR, 5 + lstrlenW(env) + 1); - wsprintfW(buf, L"USER=%s", env); - _wputenv(buf); + set_env_val(L"USER"); } NTLoginName = strdup(rb_w32_getenv("USER")); @@ -487,11 +491,12 @@ if (*(p - 1) != L'/') *p++ = L'/'; if (p - env + numberof(temp) < numberof(env)) { memcpy(p, temp, sizeof(temp)); - buf = ALLOCA_N(WCHAR, lstrlenW(TMPDIR) + 1 + lstrlenW(env) + 1); - wsprintfW(buf, L"%s=%s", TMPDIR, env); - _wputenv(buf); + set_env_val(TMPDIR); } } + +#undef env +#undef set_env_val } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/