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