summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-30 01:58:59 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-30 01:58:59 +0000
commita65261c2c19993f1fb519deef16eff11f790c27a (patch)
tree4959be02bc5165479933d1c39e048616c503340d /win32
parentcc3ec30ac91b420277fdb06e0656eb3599961434 (diff)
win32.c: w32_getenv
* win32/win32.c (w32_getenv): extract codepage aware code from rb_w32_ugetenv() and rb_w32_getenv(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41704 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'win32')
-rw-r--r--win32/win32.c38
1 files changed, 12 insertions, 26 deletions
diff --git a/win32/win32.c b/win32/win32.c
index 6a69a97092..12b0678841 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -50,6 +50,7 @@
#define isdirsep(x) ((x) == '/' || (x) == '\\')
static int w32_stati64(const char *path, struct stati64 *st, UINT cp);
+static char *w32_getenv(const char *name, UINT cp);
#undef stat
#undef fclose
@@ -4448,8 +4449,8 @@ wait(int *status)
}
/* License: Ruby's */
-char *
-rb_w32_ugetenv(const char *name)
+static char *
+w32_getenv(const char *name, UINT cp)
{
WCHAR *wenvarea, *wenv;
int len = strlen(name);
@@ -4473,7 +4474,7 @@ rb_w32_ugetenv(const char *name)
}
for (wenv = wenvarea, wlen = 1; *wenv; wenv += lstrlenW(wenv) + 1)
wlen += lstrlenW(wenv) + 1;
- uenvarea = wstr_to_mbstr(CP_UTF8, wenvarea, wlen, NULL);
+ uenvarea = wstr_to_mbstr(cp, wenvarea, wlen, NULL);
FreeEnvironmentStringsW(wenvarea);
if (!uenvarea)
return NULL;
@@ -4487,31 +4488,16 @@ rb_w32_ugetenv(const char *name)
/* License: Ruby's */
char *
-rb_w32_getenv(const char *name)
+rb_w32_ugetenv(const char *name)
{
- int len = strlen(name);
- char *env;
-
- if (len == 0) return NULL;
- if (uenvarea) {
- free(uenvarea);
- uenvarea = NULL;
- }
- if (envarea) {
- FreeEnvironmentStrings(envarea);
- envarea = NULL;
- }
- envarea = GetEnvironmentStrings();
- if (!envarea) {
- map_errno(GetLastError());
- return NULL;
- }
-
- for (env = envarea; *env; env += strlen(env) + 1)
- if (strncasecmp(env, name, len) == 0 && *(env + len) == '=')
- return env + len + 1;
+ return w32_getenv(name, CP_UTF8);
+}
- return NULL;
+/* License: Ruby's */
+char *
+rb_w32_getenv(const char *name)
+{
+ return w32_getenv(name, CP_ACP);
}
/* License: Artistic or GPL */