mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
win32.c: rb_dir_getwd_ospath
* win32/win32.c (rb_dir_getwd_ospath): Windows implementation moved from dir.c. get rid of freeing malloced memory by xfree. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59061 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
5aff6f2948
commit
ff5e3b98a0
2 changed files with 32 additions and 8 deletions
7
dir.c
7
dir.c
|
@ -1081,6 +1081,7 @@ dir_s_chdir(int argc, VALUE *argv, VALUE obj)
|
||||||
return INT2FIX(0);
|
return INT2FIX(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
VALUE
|
VALUE
|
||||||
rb_dir_getwd_ospath(void)
|
rb_dir_getwd_ospath(void)
|
||||||
{
|
{
|
||||||
|
@ -1093,10 +1094,7 @@ rb_dir_getwd_ospath(void)
|
||||||
path_guard = Data_Wrap_Struct((VALUE)0, NULL, RUBY_DEFAULT_FREE, NULL);
|
path_guard = Data_Wrap_Struct((VALUE)0, NULL, RUBY_DEFAULT_FREE, NULL);
|
||||||
path = my_getcwd();
|
path = my_getcwd();
|
||||||
DATA_PTR(path_guard) = path;
|
DATA_PTR(path_guard) = path;
|
||||||
#ifdef _WIN32
|
#ifdef __APPLE__
|
||||||
cwd = rb_utf8_str_new_cstr(path);
|
|
||||||
OBJ_TAINT(cwd);
|
|
||||||
#elif defined __APPLE__
|
|
||||||
cwd = rb_str_normalize_ospath(path, strlen(path));
|
cwd = rb_str_normalize_ospath(path, strlen(path));
|
||||||
OBJ_TAINT(cwd);
|
OBJ_TAINT(cwd);
|
||||||
#else
|
#else
|
||||||
|
@ -1107,6 +1105,7 @@ rb_dir_getwd_ospath(void)
|
||||||
xfree(path);
|
xfree(path);
|
||||||
return cwd;
|
return cwd;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
rb_dir_getwd(void)
|
rb_dir_getwd(void)
|
||||||
|
|
|
@ -4656,7 +4656,7 @@ clock_getres(clockid_t clock_id, struct timespec *sp)
|
||||||
|
|
||||||
/* License: Ruby's */
|
/* License: Ruby's */
|
||||||
static char *
|
static char *
|
||||||
w32_getcwd(char *buffer, int size, UINT cp)
|
w32_getcwd(char *buffer, int size, UINT cp, void *alloc(int, void *), void *arg)
|
||||||
{
|
{
|
||||||
WCHAR *p;
|
WCHAR *p;
|
||||||
int wlen, len;
|
int wlen, len;
|
||||||
|
@ -4687,7 +4687,7 @@ w32_getcwd(char *buffer, int size, UINT cp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
buffer = malloc(len);
|
buffer = (*alloc)(len, arg);
|
||||||
if (!buffer) {
|
if (!buffer) {
|
||||||
errno = ENOMEM;
|
errno = ENOMEM;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -4698,18 +4698,43 @@ w32_getcwd(char *buffer, int size, UINT cp)
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* License: Ruby's */
|
||||||
|
static void *
|
||||||
|
getcwd_alloc(int size, void *dummy)
|
||||||
|
{
|
||||||
|
return malloc(size);
|
||||||
|
}
|
||||||
|
|
||||||
/* License: Ruby's */
|
/* License: Ruby's */
|
||||||
char *
|
char *
|
||||||
rb_w32_getcwd(char *buffer, int size)
|
rb_w32_getcwd(char *buffer, int size)
|
||||||
{
|
{
|
||||||
return w32_getcwd(buffer, size, filecp());
|
return w32_getcwd(buffer, size, filecp(), getcwd_alloc, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* License: Ruby's */
|
/* License: Ruby's */
|
||||||
char *
|
char *
|
||||||
rb_w32_ugetcwd(char *buffer, int size)
|
rb_w32_ugetcwd(char *buffer, int size)
|
||||||
{
|
{
|
||||||
return w32_getcwd(buffer, size, CP_UTF8);
|
return w32_getcwd(buffer, size, CP_UTF8, getcwd_alloc, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* License: Ruby's */
|
||||||
|
static void *
|
||||||
|
getcwd_value(int size, void *arg)
|
||||||
|
{
|
||||||
|
VALUE str = *(VALUE *)arg = rb_utf8_str_new(0, size - 1);
|
||||||
|
OBJ_TAINT(str);
|
||||||
|
return RSTRING_PTR(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* License: Ruby's */
|
||||||
|
VALUE
|
||||||
|
rb_dir_getwd_ospath(void)
|
||||||
|
{
|
||||||
|
VALUE cwd = Qnil;
|
||||||
|
w32_getcwd(NULL, 0, CP_UTF8, getcwd_value, &cwd);
|
||||||
|
return cwd;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* License: Artistic or GPL */
|
/* License: Artistic or GPL */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue