From 2af955dbf4efd3d0937376170f7fe446c5387679 Mon Sep 17 00:00:00 2001 From: Jeroen Janssen Date: Tue, 30 Aug 2011 12:09:06 +0200 Subject: [PATCH] Fix posix dirent usage Fixes #161 --- src/unix/fs.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/unix/fs.c b/src/unix/fs.c index b6fb16f7..4d26935a 100644 --- a/src/unix/fs.c +++ b/src/unix/fs.c @@ -304,6 +304,7 @@ int uv_fs_readdir(uv_fs_t* req, const char* path, int flags, uv_fs_cb cb) { int r; struct dirent* entry; size_t size = 0; + size_t d_namlen = 0; uv_fs_req_init(req, UV_FS_READDIR, cb); @@ -325,11 +326,12 @@ int uv_fs_readdir(uv_fs_t* req, const char* path, int flags, uv_fs_cb cb) { } while ((entry = readdir(dir))) { - req->ptr = realloc(req->ptr, size + entry->d_namlen + 1); + d_namlen = strlen(entry->d_name); + req->ptr = realloc(req->ptr, size + d_namlen + 1); /* TODO check ENOMEM */ /* TODO skip . and .. */ - memcpy((char*)req->ptr + size, entry->d_name, entry->d_namlen); - size += entry->d_namlen; + memcpy((char*)req->ptr + size, entry->d_name, d_namlen); + size += d_namlen; ((char*)req->ptr)[size] = '\0'; size++; }