From 6343c99a2e43a60ffde0f445c2656f5cef24db0e Mon Sep 17 00:00:00 2001 From: usa Date: Fri, 6 Feb 2009 08:23:00 +0000 Subject: * win32/{dir.h, win32.c} (rb_w32_readdir_with_enc): new function to read entry with specified enc. * win32/win32.c (readdir_internal): extract from rb_w32_opendir(). * win32/win32.c (opendir_internal): extract from rb_w32_readdir(). * dir.c (dir_read, dir_each): use new READDIR macro instead of readdir() to pass enc for special version of readdir, such as above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22087 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- dir.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'dir.c') diff --git a/dir.c b/dir.c index f938fae721..74f8a98a89 100644 --- a/dir.c +++ b/dir.c @@ -474,6 +474,11 @@ dir_path(VALUE dir) * d.read #=> ".." * d.read #=> "config.h" */ +#ifdef _WIN32 +# define READDIR(dir, enc) rb_w32_readdir_with_enc(dir, enc) +#else +# define READDIR(dir, enc) readdir(dir) +#endif static VALUE dir_read(VALUE dir) { @@ -482,7 +487,7 @@ dir_read(VALUE dir) GetDIR(dir, dirp); errno = 0; - dp = readdir(dirp->dir); + dp = READDIR(dirp->dir, dirp->enc); if (dp) { return rb_external_str_new_with_enc(dp->d_name, NAMLEN(dp), dirp->enc); } @@ -521,7 +526,7 @@ dir_each(VALUE dir) RETURN_ENUMERATOR(dir, 0, 0); GetDIR(dir, dirp); rewinddir(dirp->dir); - for (dp = readdir(dirp->dir); dp != NULL; dp = readdir(dirp->dir)) { + for (dp = READDIR(dirp->dir, dirp->enc); dp != NULL; dp = READDIR(dirp->dir, dirp->enc)) { rb_yield(rb_external_str_new_with_enc(dp->d_name, NAMLEN(dp), dirp->enc)); if (dirp->dir == NULL) dir_closed(); } -- cgit v1.2.3