| 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;
|
|
|