212 mode |= amode;
213 else
214 mode &= ~amode;
215 if (chmod(path, mode) >= 0) {
216 rv = JNI_TRUE;
217 }
218 }
219 } END_PLATFORM_STRING(env, path);
220 return rv;
221 }
222
223 JNIEXPORT jlong JNICALL
224 Java_java_io_UnixFileSystem_getLastModifiedTime(JNIEnv *env, jobject this,
225 jobject file)
226 {
227 jlong rv = 0;
228
229 WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
230 struct stat64 sb;
231 if (stat64(path, &sb) == 0) {
232 #ifndef MACOSX
233 rv = (jlong)sb.st_mtim.tv_sec * 1000;
234 rv += (jlong)sb.st_mtim.tv_nsec / 1000000;
235 #else
236 rv = (jlong)sb.st_mtimespec.tv_sec * 1000;
237 rv += (jlong)sb.st_mtimespec.tv_nsec / 1000000;
238 #endif
239 }
240 } END_PLATFORM_STRING(env, path);
241 return rv;
242 }
243
244
245 JNIEXPORT jlong JNICALL
246 Java_java_io_UnixFileSystem_getLength(JNIEnv *env, jobject this,
247 jobject file)
248 {
249 jlong rv = 0;
250
251 WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
252 struct stat64 sb;
253 if (stat64(path, &sb) == 0) {
254 rv = sb.st_size;
255 }
256 } END_PLATFORM_STRING(env, path);
257 return rv;
402 rv = JNI_TRUE;
403 }
404 } END_PLATFORM_STRING(env, toPath);
405 } END_PLATFORM_STRING(env, fromPath);
406 return rv;
407 }
408
409 JNIEXPORT jboolean JNICALL
410 Java_java_io_UnixFileSystem_setLastModifiedTime(JNIEnv *env, jobject this,
411 jobject file, jlong time)
412 {
413 jboolean rv = JNI_FALSE;
414
415 WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
416 struct stat64 sb;
417
418 if (stat64(path, &sb) == 0) {
419 struct timeval tv[2];
420
421 /* Preserve access time */
422 #ifndef MACOSX
423 tv[0].tv_sec = sb.st_atim.tv_sec;
424 tv[0].tv_usec = sb.st_atim.tv_nsec / 1000;
425 #else
426 tv[0].tv_sec = sb.st_atimespec.tv_sec;
427 tv[0].tv_usec = sb.st_atimespec.tv_nsec / 1000;
428 #endif
429
430 /* Change last-modified time */
431 tv[1].tv_sec = time / 1000;
432 tv[1].tv_usec = (time % 1000) * 1000;
433
434 if (utimes(path, tv) == 0)
435 rv = JNI_TRUE;
436 }
437 } END_PLATFORM_STRING(env, path);
438
439 return rv;
440 }
441
442
443 JNIEXPORT jboolean JNICALL
444 Java_java_io_UnixFileSystem_setReadOnly(JNIEnv *env, jobject this,
445 jobject file)
446 {
447 jboolean rv = JNI_FALSE;
448
449 WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
|
212 mode |= amode;
213 else
214 mode &= ~amode;
215 if (chmod(path, mode) >= 0) {
216 rv = JNI_TRUE;
217 }
218 }
219 } END_PLATFORM_STRING(env, path);
220 return rv;
221 }
222
223 JNIEXPORT jlong JNICALL
224 Java_java_io_UnixFileSystem_getLastModifiedTime(JNIEnv *env, jobject this,
225 jobject file)
226 {
227 jlong rv = 0;
228
229 WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
230 struct stat64 sb;
231 if (stat64(path, &sb) == 0) {
232 #ifdef _AIX
233 /* AIX 5.3 backward compatibility. */
234 rv = 1000 * (jlong)sb.st_mtime;
235 rv += (jlong)sb.st_mtime_n / 1000000;
236 #else
237 #ifdef MACOSX
238 rv = (jlong)sb.st_mtimespec.tv_sec * 1000;
239 rv += (jlong)sb.st_mtimespec.tv_nsec / 1000000;
240 #else
241 rv = (jlong)sb.st_mtim.tv_sec * 1000;
242 rv += (jlong)sb.st_mtim.tv_nsec / 1000000;
243 #endif
244 #endif
245 }
246 } END_PLATFORM_STRING(env, path);
247 return rv;
248 }
249
250
251 JNIEXPORT jlong JNICALL
252 Java_java_io_UnixFileSystem_getLength(JNIEnv *env, jobject this,
253 jobject file)
254 {
255 jlong rv = 0;
256
257 WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
258 struct stat64 sb;
259 if (stat64(path, &sb) == 0) {
260 rv = sb.st_size;
261 }
262 } END_PLATFORM_STRING(env, path);
263 return rv;
408 rv = JNI_TRUE;
409 }
410 } END_PLATFORM_STRING(env, toPath);
411 } END_PLATFORM_STRING(env, fromPath);
412 return rv;
413 }
414
415 JNIEXPORT jboolean JNICALL
416 Java_java_io_UnixFileSystem_setLastModifiedTime(JNIEnv *env, jobject this,
417 jobject file, jlong time)
418 {
419 jboolean rv = JNI_FALSE;
420
421 WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
422 struct stat64 sb;
423
424 if (stat64(path, &sb) == 0) {
425 struct timeval tv[2];
426
427 /* Preserve access time */
428 #ifdef _AIX
429 tv[0].tv_sec = sb.st_atime;
430 tv[0].tv_usec = sb.st_atime_n / 1000;
431 #else
432 #ifdef MACOSX
433 tv[0].tv_sec = sb.st_atimespec.tv_sec;
434 tv[0].tv_usec = sb.st_atimespec.tv_nsec / 1000;
435 #else
436 tv[0].tv_sec = sb.st_atim.tv_sec;
437 tv[0].tv_usec = sb.st_atim.tv_nsec / 1000;
438 #endif
439 #endif
440 /* Change last-modified time */
441 tv[1].tv_sec = time / 1000;
442 tv[1].tv_usec = (time % 1000) * 1000;
443
444 if (utimes(path, tv) == 0)
445 rv = JNI_TRUE;
446 }
447 } END_PLATFORM_STRING(env, path);
448
449 return rv;
450 }
451
452
453 JNIEXPORT jboolean JNICALL
454 Java_java_io_UnixFileSystem_setReadOnly(JNIEnv *env, jobject this,
455 jobject file)
456 {
457 jboolean rv = JNI_FALSE;
458
459 WITH_FIELD_PLATFORM_STRING(env, file, ids.path, path) {
|