diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-04-30 17:56:23 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-04-30 17:56:23 +0000 |
commit | 6c28f99d8894b9f9a3c1394d120115f69012f2c3 (patch) | |
tree | 967e8f5c37611f009640580566540a001df60bf3 /dir.c | |
parent | bfeeb913fed701b552cb6c7331b33062b7922de3 (diff) | |
download | ruby-6c28f99d8894b9f9a3c1394d120115f69012f2c3.tar.gz |
* merge some patches from win32-uncode-test branch.
see #1685.
* file.c, include/ruby/intern.h (rb_str_encode_ospath): new function
to convert encoding for pathname.
* win32.c, include/ruby/win32.h (rb_w32_ulink, rb_w32_urename,
rb_w32_ustati64, rb_w32_uopen, rb_w32_uutime, rb_w32_uchdir,
rb_w32_umkdir, rb_w32_urmdir, rb_w32_uunlink): new functions to
accept UTF-8 path.
* win32/win32.c (rb_w32_opendir, link, rb_w32_stati64, rb_w32_utime,
rb_w32_unlink): use WCHAR path internally.
* file.c (rb_stat, eaccess, access_internal, rb_file_s_ftype,
chmod_internal, rb_file_chmod, rb_file_chown, utime_internal,
rb_file_s_link, unlink_internal, rb_file_s_rename): use UTF-8 version
functions on Win32.
* file.c (apply2files, rb_stat, rb_file_s_lstat, rb_file_symlink_p,
rb_file_readable_p, rb_file_writable_p, rb_file_executable_p,
check3rdbyte, rb_file_identical_p, rb_file_chmod, rb_file_chown,
rb_file_s_link, rb_file_s_symlink, rb_file_s_rename): call
rb_str_encode_ospath() before passing the path to system.
* io.c (rb_sysopen): ditto.
* dir.c (dir_chdir, dir_s_mkdir, dir_s_rmdir): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27570 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'dir.c')
-rw-r--r-- | dir.c | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -67,6 +67,16 @@ char *strchr(char*,char); #define lstat stat #endif +/* define system APIs */ +#ifdef _WIN32 +#undef chdir +#define chdir(p) rb_w32_uchdir(p) +#undef mkdir +#define mkdir(p, m) rb_w32_umkdir(p, m) +#undef rmdir +#define rmdir(p) rb_w32_urmdir(p) +#endif + #define FNM_NOESCAPE 0x01 #define FNM_PATHNAME 0x02 #define FNM_DOTMATCH 0x04 @@ -740,6 +750,7 @@ dir_close(VALUE dir) static void dir_chdir(VALUE path) { + path = rb_str_encode_ospath(path); if (chdir(RSTRING_PTR(path)) < 0) rb_sys_fail(RSTRING_PTR(path)); } @@ -911,6 +922,7 @@ dir_s_chroot(VALUE dir, VALUE path) { check_dirname(&path); + path = rb_str_encode_ospath(path); if (chroot(RSTRING_PTR(path)) == -1) rb_sys_fail(RSTRING_PTR(path)); @@ -947,6 +959,7 @@ dir_s_mkdir(int argc, VALUE *argv, VALUE obj) } check_dirname(&path); + path = rb_str_encode_ospath(path); if (mkdir(RSTRING_PTR(path), mode) == -1) rb_sys_fail(RSTRING_PTR(path)); @@ -966,6 +979,7 @@ static VALUE dir_s_rmdir(VALUE obj, VALUE dir) { check_dirname(&dir); + dir = rb_str_encode_ospath(dir); if (rmdir(RSTRING_PTR(dir)) < 0) rb_sys_fail(RSTRING_PTR(dir)); @@ -1617,6 +1631,12 @@ ruby_brace_glob(const char *str, int flags, ruby_glob_func *func, VALUE arg) rb_ascii8bit_encoding()); } +int +ruby_brace_glob_with_enc(const char *str, int flags, ruby_glob_func *func, VALUE arg, rb_encoding *enc) +{ + return ruby_brace_glob0(str, flags & ~GLOB_VERBOSE, func, arg, enc); +} + static int push_glob(VALUE ary, VALUE str, int flags) { |