Chromium Code Reviews| 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 8e45a35ce29e83c8eea62fc91b3c81e274d7bdf3..2a305827b6c0d4bd54d61dbafec2db9e8810539c 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; |
|
binji
2015/09/08 19:18:57
ooh, nasty.
|
| } |
| *nread = offset; |