summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-03-18 03:57:37 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-03-18 03:57:37 +0000
commit3c5452dba11cc909252eaa97c83f7a31c3a230a6 (patch)
tree6d0a443af69f74daaffb08d6ebca3017d4cc8e6f /win32
parent2171d75e9bd14409d62fcc5a8acdbb2ec1c23060 (diff)
revert r62797, r62784. [Bug #13863]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@62801 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'win32')
-rw-r--r--win32/dir.h1
-rw-r--r--win32/win32.c52
2 files changed, 17 insertions, 36 deletions
diff --git a/win32/dir.h b/win32/dir.h
index 29c4c1c6d5..b1f981f257 100644
--- a/win32/dir.h
+++ b/win32/dir.h
@@ -33,7 +33,6 @@ long rb_w32_telldir(DIR *);
void rb_w32_seekdir(DIR *, long);
void rb_w32_rewinddir(DIR *);
void rb_w32_closedir(DIR *);
-char *rb_w32_ugetcwd(char *, int);
#define opendir(s) rb_w32_opendir((s))
#define readdir(d) rb_w32_readdir((d), 0)
diff --git a/win32/win32.c b/win32/win32.c
index efbe70b481..62801dae71 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -4654,61 +4654,43 @@ clock_getres(clockid_t clock_id, struct timespec *sp)
}
/* License: Ruby's */
-static char *
-w32_getcwd(char *buffer, int size, UINT cp)
+char *
+rb_w32_getcwd(char *buffer, int size)
{
- WCHAR *p;
- int wlen, len;
+ char *p = buffer;
+ int len;
- len = GetCurrentDirectoryW(0, NULL);
+ len = GetCurrentDirectory(0, NULL);
if (!len) {
errno = map_errno(GetLastError());
return NULL;
}
- if (buffer && size < len) {
- errno = ERANGE;
- return NULL;
- }
-
- p = ALLOCA_N(WCHAR, len);
- if (!GetCurrentDirectoryW(len, p)) {
- errno = map_errno(GetLastError());
- return NULL;
- }
-
- wlen = translate_wchar(p, L'\\', L'/') - p + 1;
- len = WideCharToMultiByte(cp, 0, p, wlen, NULL, 0, NULL, NULL);
- if (buffer) {
+ if (p) {
if (size < len) {
errno = ERANGE;
return NULL;
}
}
else {
- buffer = malloc(len);
- if (!buffer) {
+ p = malloc(len);
+ size = len;
+ if (!p) {
errno = ENOMEM;
return NULL;
}
}
- WideCharToMultiByte(cp, 0, p, wlen, buffer, len, NULL, NULL);
- return buffer;
-}
+ if (!GetCurrentDirectory(size, p)) {
+ errno = map_errno(GetLastError());
+ if (!buffer)
+ free(p);
+ return NULL;
+ }
-/* License: Ruby's */
-char *
-rb_w32_getcwd(char *buffer, int size)
-{
- return w32_getcwd(buffer, size, filecp());
-}
+ translate_char(p, '\\', '/', filecp());
-/* License: Ruby's */
-char *
-rb_w32_ugetcwd(char *buffer, int size)
-{
- return w32_getcwd(buffer, size, CP_UTF8);
+ return p;
}
/* License: Artistic or GPL */