Index: native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc |
diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc |
index 5be9d25b669b2ab009fe4aa2a25e4452475cfe5e..9fd8c952e6e778afe5107f676ce5ee8370270694 100644 |
--- a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc |
+++ b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc |
@@ -532,15 +532,16 @@ int _real_fstat(int fd, struct stat* buf) { |
return 0; |
} |
-int _real_getdents(int fd, void* buf, size_t count, size_t* nread) { |
+int _real_getdents(int fd, struct dirent* buf, size_t count, size_t* nread) { |
// "buf" contains dirent(s); "nacl_buf" contains nacl_abi_dirent(s). |
// See WRAP(getdents) above. |
+ |
char* nacl_buf = (char*)alloca(count); |
size_t offset = 0; |
size_t nacl_offset = 0; |
size_t nacl_nread; |
CHECK_REAL(getdents); |
- int err = REAL(getdents)(fd, (dirent*)nacl_buf, count, &nacl_nread); |
+ int err = REAL(getdents)(fd, (struct dirent*)nacl_buf, count, &nacl_nread); |
if (err) |
return err; |
@@ -550,12 +551,12 @@ int _real_getdents(int fd, void* buf, size_t count, size_t* nread) { |
d->d_ino = nacl_d->nacl_abi_d_ino; |
d->d_off = nacl_d->nacl_abi_d_off; |
d->d_reclen = nacl_d->nacl_abi_d_reclen + d_name_shift; |
- size_t d_name_len = |
+ size_t name_len = |
nacl_d->nacl_abi_d_reclen - offsetof(nacl_abi_dirent, nacl_abi_d_name); |
- memcpy(d->d_name, nacl_d->nacl_abi_d_name, d_name_len); |
+ memcpy(d->d_name, nacl_d->nacl_abi_d_name, name_len); |
offset += d->d_reclen; |
- offset += nacl_d->nacl_abi_d_reclen; |
+ nacl_offset += nacl_d->nacl_abi_d_reclen; |
} |
*nread = offset; |