src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c

Print this page




 162  * call fails
 163  */
 164 static void throwUnixException(JNIEnv* env, int errnum) {
 165     jobject x = JNU_NewObjectByName(env, "sun/nio/fs/UnixException",
 166         "(I)V", errnum);
 167     if (x != NULL) {
 168         (*env)->Throw(env, x);
 169     }
 170 }
 171 
 172 /**
 173  * Initialization
 174  */
 175 JNIEXPORT jint JNICALL
 176 Java_sun_nio_fs_UnixNativeDispatcher_init(JNIEnv* env, jclass this)
 177 {
 178     jint capabilities = 0;
 179     jclass clazz;
 180 
 181     clazz = (*env)->FindClass(env, "sun/nio/fs/UnixFileAttributes");
 182     if (clazz == NULL) {
 183         return 0;
 184     }
 185     attrs_st_mode = (*env)->GetFieldID(env, clazz, "st_mode", "I");

 186     attrs_st_ino = (*env)->GetFieldID(env, clazz, "st_ino", "J");

 187     attrs_st_dev = (*env)->GetFieldID(env, clazz, "st_dev", "J");

 188     attrs_st_rdev = (*env)->GetFieldID(env, clazz, "st_rdev", "J");

 189     attrs_st_nlink = (*env)->GetFieldID(env, clazz, "st_nlink", "I");

 190     attrs_st_uid = (*env)->GetFieldID(env, clazz, "st_uid", "I");

 191     attrs_st_gid = (*env)->GetFieldID(env, clazz, "st_gid", "I");

 192     attrs_st_size = (*env)->GetFieldID(env, clazz, "st_size", "J");

 193     attrs_st_atime_sec = (*env)->GetFieldID(env, clazz, "st_atime_sec", "J");

 194     attrs_st_atime_nsec = (*env)->GetFieldID(env, clazz, "st_atime_nsec", "J");

 195     attrs_st_mtime_sec = (*env)->GetFieldID(env, clazz, "st_mtime_sec", "J");

 196     attrs_st_mtime_nsec = (*env)->GetFieldID(env, clazz, "st_mtime_nsec", "J");

 197     attrs_st_ctime_sec = (*env)->GetFieldID(env, clazz, "st_ctime_sec", "J");

 198     attrs_st_ctime_nsec = (*env)->GetFieldID(env, clazz, "st_ctime_nsec", "J");

 199 
 200 #ifdef _DARWIN_FEATURE_64_BIT_INODE
 201     attrs_st_birthtime_sec = (*env)->GetFieldID(env, clazz, "st_birthtime_sec", "J");

 202 #endif
 203 
 204     clazz = (*env)->FindClass(env, "sun/nio/fs/UnixFileStoreAttributes");
 205     if (clazz == NULL) {
 206         return 0;
 207     }
 208     attrs_f_frsize = (*env)->GetFieldID(env, clazz, "f_frsize", "J");

 209     attrs_f_blocks = (*env)->GetFieldID(env, clazz, "f_blocks", "J");

 210     attrs_f_bfree = (*env)->GetFieldID(env, clazz, "f_bfree", "J");

 211     attrs_f_bavail = (*env)->GetFieldID(env, clazz, "f_bavail", "J");

 212 
 213     clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry");
 214     if (clazz == NULL) {
 215         return 0;
 216     }
 217     entry_name = (*env)->GetFieldID(env, clazz, "name", "[B");

 218     entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B");

 219     entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B");

 220     entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B");

 221     entry_dev = (*env)->GetFieldID(env, clazz, "dev", "J");

 222 
 223     /* system calls that might not be available at run time */
 224 
 225 #if (defined(__solaris__) && defined(_LP64)) || defined(_ALLBSD_SOURCE)
 226     /* Solaris 64-bit does not have openat64/fstatat64 */
 227     my_openat64_func = (openat64_func*)dlsym(RTLD_DEFAULT, "openat");
 228     my_fstatat64_func = (fstatat64_func*)dlsym(RTLD_DEFAULT, "fstatat");
 229 #else
 230     my_openat64_func = (openat64_func*) dlsym(RTLD_DEFAULT, "openat64");
 231     my_fstatat64_func = (fstatat64_func*) dlsym(RTLD_DEFAULT, "fstatat64");
 232 #endif
 233     my_unlinkat_func = (unlinkat_func*) dlsym(RTLD_DEFAULT, "unlinkat");
 234     my_renameat_func = (renameat_func*) dlsym(RTLD_DEFAULT, "renameat");
 235     my_futimesat_func = (futimesat_func*) dlsym(RTLD_DEFAULT, "futimesat");
 236     my_fdopendir_func = (fdopendir_func*) dlsym(RTLD_DEFAULT, "fdopendir");
 237 
 238 #if defined(FSTATAT64_SYSCALL_AVAILABLE)
 239     /* fstatat64 missing from glibc */
 240     if (my_fstatat64_func == NULL)
 241         my_fstatat64_func = (fstatat64_func*)&fstatat64_wrapper;




 162  * call fails
 163  */
 164 static void throwUnixException(JNIEnv* env, int errnum) {
 165     jobject x = JNU_NewObjectByName(env, "sun/nio/fs/UnixException",
 166         "(I)V", errnum);
 167     if (x != NULL) {
 168         (*env)->Throw(env, x);
 169     }
 170 }
 171 
 172 /**
 173  * Initialization
 174  */
 175 JNIEXPORT jint JNICALL
 176 Java_sun_nio_fs_UnixNativeDispatcher_init(JNIEnv* env, jclass this)
 177 {
 178     jint capabilities = 0;
 179     jclass clazz;
 180 
 181     clazz = (*env)->FindClass(env, "sun/nio/fs/UnixFileAttributes");
 182     CHECK_NULL_RETURN(clazz, 0);


 183     attrs_st_mode = (*env)->GetFieldID(env, clazz, "st_mode", "I");
 184     CHECK_NULL_RETURN(attrs_st_mode, 0);
 185     attrs_st_ino = (*env)->GetFieldID(env, clazz, "st_ino", "J");
 186     CHECK_NULL_RETURN(attrs_st_ino, 0);
 187     attrs_st_dev = (*env)->GetFieldID(env, clazz, "st_dev", "J");
 188     CHECK_NULL_RETURN(attrs_st_dev, 0);
 189     attrs_st_rdev = (*env)->GetFieldID(env, clazz, "st_rdev", "J");
 190     CHECK_NULL_RETURN(attrs_st_rdev, 0);
 191     attrs_st_nlink = (*env)->GetFieldID(env, clazz, "st_nlink", "I");
 192     CHECK_NULL_RETURN(attrs_st_nlink, 0);
 193     attrs_st_uid = (*env)->GetFieldID(env, clazz, "st_uid", "I");
 194     CHECK_NULL_RETURN(attrs_st_uid, 0);
 195     attrs_st_gid = (*env)->GetFieldID(env, clazz, "st_gid", "I");
 196     CHECK_NULL_RETURN(attrs_st_gid, 0);
 197     attrs_st_size = (*env)->GetFieldID(env, clazz, "st_size", "J");
 198     CHECK_NULL_RETURN(attrs_st_size, 0);
 199     attrs_st_atime_sec = (*env)->GetFieldID(env, clazz, "st_atime_sec", "J");
 200     CHECK_NULL_RETURN(attrs_st_atime_sec, 0);
 201     attrs_st_atime_nsec = (*env)->GetFieldID(env, clazz, "st_atime_nsec", "J");
 202     CHECK_NULL_RETURN(attrs_st_atime_nsec, 0);
 203     attrs_st_mtime_sec = (*env)->GetFieldID(env, clazz, "st_mtime_sec", "J");
 204     CHECK_NULL_RETURN(attrs_st_mtime_sec, 0);
 205     attrs_st_mtime_nsec = (*env)->GetFieldID(env, clazz, "st_mtime_nsec", "J");
 206     CHECK_NULL_RETURN(attrs_st_mtime_nsec, 0);
 207     attrs_st_ctime_sec = (*env)->GetFieldID(env, clazz, "st_ctime_sec", "J");
 208     CHECK_NULL_RETURN(attrs_st_ctime_sec, 0);
 209     attrs_st_ctime_nsec = (*env)->GetFieldID(env, clazz, "st_ctime_nsec", "J");
 210     CHECK_NULL_RETURN(attrs_st_ctime_nsec, 0);
 211 
 212 #ifdef _DARWIN_FEATURE_64_BIT_INODE
 213     attrs_st_birthtime_sec = (*env)->GetFieldID(env, clazz, "st_birthtime_sec", "J");
 214     CHECK_NULL_RETURN(attrs_st_birthtime_sec, 0);
 215 #endif
 216 
 217     clazz = (*env)->FindClass(env, "sun/nio/fs/UnixFileStoreAttributes");
 218     CHECK_NULL_RETURN(clazz, 0);


 219     attrs_f_frsize = (*env)->GetFieldID(env, clazz, "f_frsize", "J");
 220     CHECK_NULL_RETURN(attrs_f_frsize, 0);
 221     attrs_f_blocks = (*env)->GetFieldID(env, clazz, "f_blocks", "J");
 222     CHECK_NULL_RETURN(attrs_f_blocks, 0);
 223     attrs_f_bfree = (*env)->GetFieldID(env, clazz, "f_bfree", "J");
 224     CHECK_NULL_RETURN(attrs_f_bfree, 0);
 225     attrs_f_bavail = (*env)->GetFieldID(env, clazz, "f_bavail", "J");
 226     CHECK_NULL_RETURN(attrs_f_bavail, 0);
 227 
 228     clazz = (*env)->FindClass(env, "sun/nio/fs/UnixMountEntry");
 229     CHECK_NULL_RETURN(clazz, 0);


 230     entry_name = (*env)->GetFieldID(env, clazz, "name", "[B");
 231     CHECK_NULL_RETURN(entry_name, 0);
 232     entry_dir = (*env)->GetFieldID(env, clazz, "dir", "[B");
 233     CHECK_NULL_RETURN(entry_dir, 0);
 234     entry_fstype = (*env)->GetFieldID(env, clazz, "fstype", "[B");
 235     CHECK_NULL_RETURN(entry_fstype, 0);
 236     entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B");
 237     CHECK_NULL_RETURN(entry_options, 0);
 238     entry_dev = (*env)->GetFieldID(env, clazz, "dev", "J");
 239     CHECK_NULL_RETURN(entry_dev, 0);
 240 
 241     /* system calls that might not be available at run time */
 242 
 243 #if (defined(__solaris__) && defined(_LP64)) || defined(_ALLBSD_SOURCE)
 244     /* Solaris 64-bit does not have openat64/fstatat64 */
 245     my_openat64_func = (openat64_func*)dlsym(RTLD_DEFAULT, "openat");
 246     my_fstatat64_func = (fstatat64_func*)dlsym(RTLD_DEFAULT, "fstatat");
 247 #else
 248     my_openat64_func = (openat64_func*) dlsym(RTLD_DEFAULT, "openat64");
 249     my_fstatat64_func = (fstatat64_func*) dlsym(RTLD_DEFAULT, "fstatat64");
 250 #endif
 251     my_unlinkat_func = (unlinkat_func*) dlsym(RTLD_DEFAULT, "unlinkat");
 252     my_renameat_func = (renameat_func*) dlsym(RTLD_DEFAULT, "renameat");
 253     my_futimesat_func = (futimesat_func*) dlsym(RTLD_DEFAULT, "futimesat");
 254     my_fdopendir_func = (fdopendir_func*) dlsym(RTLD_DEFAULT, "fdopendir");
 255 
 256 #if defined(FSTATAT64_SYSCALL_AVAILABLE)
 257     /* fstatat64 missing from glibc */
 258     if (my_fstatat64_func == NULL)
 259         my_fstatat64_func = (fstatat64_func*)&fstatat64_wrapper;