Print this page


Split Close
Expand all
Collapse all
          --- old/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
          +++ new/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c
↓ open down ↓ 597 lines elided ↑ open up ↑
 598  598      DIR* dirp = jlong_to_ptr(dir);
 599  599  
 600  600      RESTARTABLE(closedir(dirp), err);
 601  601      if (errno == -1) {
 602  602          throwUnixException(env, errno);
 603  603      }
 604  604  }
 605  605  
 606  606  JNIEXPORT jbyteArray JNICALL
 607  607  Java_sun_nio_fs_UnixNativeDispatcher_readdir(JNIEnv* env, jclass this, jlong value) {
 608      -    char entry[sizeof(struct dirent64) + PATH_MAX + 1];
 609      -    struct dirent64* ptr = (struct dirent64*)&entry;
 610  608      struct dirent64* result;
      609 +    struct {
      610 +        struct dirent64 buf;
      611 +        char name_extra[PATH_MAX + 1 - sizeof result->d_name];
      612 +    } entry;
      613 +    struct dirent64* ptr = &entry.buf;
 611  614      int res;
 612  615      DIR* dirp = jlong_to_ptr(value);
 613  616  
 614  617      /* EINTR not listed as a possible error */
 615  618      /* TDB: reentrant version probably not required here */
 616  619      res = readdir64_r(dirp, ptr, &result);
 617  620      if (res != 0) {
 618  621          throwUnixException(env, res);
 619  622          return NULL;
 620  623      } else {
↓ open down ↓ 522 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX