95 static jfieldID attrs_st_mtime_sec; |
95 static jfieldID attrs_st_mtime_sec; |
96 static jfieldID attrs_st_mtime_nsec; |
96 static jfieldID attrs_st_mtime_nsec; |
97 static jfieldID attrs_st_ctime_sec; |
97 static jfieldID attrs_st_ctime_sec; |
98 static jfieldID attrs_st_ctime_nsec; |
98 static jfieldID attrs_st_ctime_nsec; |
99 |
99 |
|
100 #ifdef _DARWIN_FEATURE_64_BIT_INODE |
|
101 static jfieldID attrs_st_birthtime_sec; |
|
102 #endif |
|
103 |
100 static jfieldID attrs_f_frsize; |
104 static jfieldID attrs_f_frsize; |
101 static jfieldID attrs_f_blocks; |
105 static jfieldID attrs_f_blocks; |
102 static jfieldID attrs_f_bfree; |
106 static jfieldID attrs_f_bfree; |
103 static jfieldID attrs_f_bavail; |
107 static jfieldID attrs_f_bavail; |
104 |
108 |
191 attrs_st_mtime_sec = (*env)->GetFieldID(env, clazz, "st_mtime_sec", "J"); |
195 attrs_st_mtime_sec = (*env)->GetFieldID(env, clazz, "st_mtime_sec", "J"); |
192 attrs_st_mtime_nsec = (*env)->GetFieldID(env, clazz, "st_mtime_nsec", "J"); |
196 attrs_st_mtime_nsec = (*env)->GetFieldID(env, clazz, "st_mtime_nsec", "J"); |
193 attrs_st_ctime_sec = (*env)->GetFieldID(env, clazz, "st_ctime_sec", "J"); |
197 attrs_st_ctime_sec = (*env)->GetFieldID(env, clazz, "st_ctime_sec", "J"); |
194 attrs_st_ctime_nsec = (*env)->GetFieldID(env, clazz, "st_ctime_nsec", "J"); |
198 attrs_st_ctime_nsec = (*env)->GetFieldID(env, clazz, "st_ctime_nsec", "J"); |
195 |
199 |
|
200 #ifdef _DARWIN_FEATURE_64_BIT_INODE |
|
201 attrs_st_birthtime_sec = (*env)->GetFieldID(env, clazz, "st_birthtime_sec", "J"); |
|
202 #endif |
|
203 |
196 clazz = (*env)->FindClass(env, "sun/nio/fs/UnixFileStoreAttributes"); |
204 clazz = (*env)->FindClass(env, "sun/nio/fs/UnixFileStoreAttributes"); |
197 if (clazz == NULL) { |
205 if (clazz == NULL) { |
198 return 0; |
206 return 0; |
199 } |
207 } |
200 attrs_f_frsize = (*env)->GetFieldID(env, clazz, "f_frsize", "J"); |
208 attrs_f_frsize = (*env)->GetFieldID(env, clazz, "f_frsize", "J"); |
231 /* fstatat64 missing from glibc */ |
239 /* fstatat64 missing from glibc */ |
232 if (my_fstatat64_func == NULL) |
240 if (my_fstatat64_func == NULL) |
233 my_fstatat64_func = (fstatat64_func*)&fstatat64_wrapper; |
241 my_fstatat64_func = (fstatat64_func*)&fstatat64_wrapper; |
234 #endif |
242 #endif |
235 |
243 |
|
244 /* supports futimes or futimesat */ |
|
245 |
|
246 #ifdef _ALLBSD_SOURCE |
|
247 capabilities |= sun_nio_fs_UnixNativeDispatcher_SUPPORTS_FUTIMES; |
|
248 #else |
|
249 if (my_futimesat_func != NULL) |
|
250 capabilities |= sun_nio_fs_UnixNativeDispatcher_SUPPORTS_FUTIMES; |
|
251 #endif |
|
252 |
|
253 /* supports openat, etc. */ |
|
254 |
236 if (my_openat64_func != NULL && my_fstatat64_func != NULL && |
255 if (my_openat64_func != NULL && my_fstatat64_func != NULL && |
237 my_unlinkat_func != NULL && my_renameat_func != NULL && |
256 my_unlinkat_func != NULL && my_renameat_func != NULL && |
238 my_futimesat_func != NULL && my_fdopendir_func != NULL) |
257 my_futimesat_func != NULL && my_fdopendir_func != NULL) |
239 { |
258 { |
240 flags |= sun_nio_fs_UnixNativeDispatcher_HAS_AT_SYSCALLS; |
259 capabilities |= sun_nio_fs_UnixNativeDispatcher_SUPPORTS_OPENAT; |
241 } |
260 } |
242 |
261 |
243 return flags; |
262 /* supports file birthtime */ |
|
263 |
|
264 #ifdef _DARWIN_FEATURE_64_BIT_INODE |
|
265 capabilities |= sun_nio_fs_UnixNativeDispatcher_SUPPORTS_BIRTHTIME; |
|
266 #endif |
|
267 |
|
268 return capabilities; |
244 } |
269 } |
245 |
270 |
246 JNIEXPORT jbyteArray JNICALL |
271 JNIEXPORT jbyteArray JNICALL |
247 Java_sun_nio_fs_UnixNativeDispatcher_getcwd(JNIEnv* env, jclass this) { |
272 Java_sun_nio_fs_UnixNativeDispatcher_getcwd(JNIEnv* env, jclass this) { |
248 jbyteArray result = NULL; |
273 jbyteArray result = NULL; |
402 (*env)->SetIntField(env, attrs, attrs_st_gid, (jint)buf->st_gid); |
427 (*env)->SetIntField(env, attrs, attrs_st_gid, (jint)buf->st_gid); |
403 (*env)->SetLongField(env, attrs, attrs_st_size, (jlong)buf->st_size); |
428 (*env)->SetLongField(env, attrs, attrs_st_size, (jlong)buf->st_size); |
404 (*env)->SetLongField(env, attrs, attrs_st_atime_sec, (jlong)buf->st_atime); |
429 (*env)->SetLongField(env, attrs, attrs_st_atime_sec, (jlong)buf->st_atime); |
405 (*env)->SetLongField(env, attrs, attrs_st_mtime_sec, (jlong)buf->st_mtime); |
430 (*env)->SetLongField(env, attrs, attrs_st_mtime_sec, (jlong)buf->st_mtime); |
406 (*env)->SetLongField(env, attrs, attrs_st_ctime_sec, (jlong)buf->st_ctime); |
431 (*env)->SetLongField(env, attrs, attrs_st_ctime_sec, (jlong)buf->st_ctime); |
|
432 |
|
433 #ifdef _DARWIN_FEATURE_64_BIT_INODE |
|
434 (*env)->SetLongField(env, attrs, attrs_st_birthtime_sec, (jlong)buf->st_birthtime); |
|
435 #endif |
407 |
436 |
408 #if (_POSIX_C_SOURCE >= 200809L) || defined(__solaris__) |
437 #if (_POSIX_C_SOURCE >= 200809L) || defined(__solaris__) |
409 (*env)->SetLongField(env, attrs, attrs_st_atime_nsec, (jlong)buf->st_atim.tv_nsec); |
438 (*env)->SetLongField(env, attrs, attrs_st_atime_nsec, (jlong)buf->st_atim.tv_nsec); |
410 (*env)->SetLongField(env, attrs, attrs_st_mtime_nsec, (jlong)buf->st_mtim.tv_nsec); |
439 (*env)->SetLongField(env, attrs, attrs_st_mtime_nsec, (jlong)buf->st_mtim.tv_nsec); |
411 (*env)->SetLongField(env, attrs, attrs_st_ctime_nsec, (jlong)buf->st_ctim.tv_nsec); |
440 (*env)->SetLongField(env, attrs, attrs_st_ctime_nsec, (jlong)buf->st_ctim.tv_nsec); |