From 01bf209a3d8e89143739a0a9c5b4c523fb28e383 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Sun, 4 Sep 2011 17:16:07 -0700 Subject: [PATCH] Upgrade libuv to b6ede6c Fixes require('fs').readdirSync on unix. --- deps/uv/src/unix/fs.c | 13 ++++++++++++- deps/uv/test/test-fs.c | 6 +++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c index 5bc1ca9897..aeeb2a83a1 100644 --- a/deps/uv/src/unix/fs.c +++ b/deps/uv/src/unix/fs.c @@ -303,15 +303,26 @@ int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, return -1; } + /* req->result stores number of entries */ + req->result = 0; + while ((entry = readdir(dir))) { d_namlen = strlen(entry->d_name); + + /* Skip . and .. */ + if ((d_namlen == 1 && entry->d_name[0] == '.') || + (d_namlen == 2 && entry->d_name[0] == '.' && + entry->d_name[1] == '.')) { + continue; + } + req->ptr = realloc(req->ptr, size + d_namlen + 1); /* TODO check ENOMEM */ - /* TODO skip . and .. */ memcpy((char*)req->ptr + size, entry->d_name, d_namlen); size += d_namlen; ((char*)req->ptr)[size] = '\0'; size++; + req->result++; } r = closedir(dir); diff --git a/deps/uv/test/test-fs.c b/deps/uv/test/test-fs.c index 1f14abffbb..f9c65787ed 100644 --- a/deps/uv/test/test-fs.c +++ b/deps/uv/test/test-fs.c @@ -540,6 +540,10 @@ TEST_IMPL(fs_async_dir) { uv_run(loop); ASSERT(readdir_cb_count == 1); + /* sync uv_fs_readdir */ + r = uv_fs_readdir(loop, &readdir_req, "test_dir", 0, NULL); + readdir_cb(&readdir_req); + r = uv_fs_stat(loop, &stat_req, "test_dir", stat_cb); ASSERT(r == 0); uv_run(loop); @@ -1050,4 +1054,4 @@ TEST_IMPL(fs_symlink) { unlink("test_file_symlink2_symlink"); return 0; -} \ No newline at end of file +}