summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-06 08:23:00 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-06 08:23:00 +0000
commit6343c99a2e43a60ffde0f445c2656f5cef24db0e (patch)
tree3cdecdd505b348bc2b2824fdb7980f7055f06736 /dir.c
parent03c7332241e8f85b2a1d87dd88ed2946c9d32060 (diff)
* 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
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c9
1 files changed, 7 insertions, 2 deletions
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();
}