417 return enable;
418 }
419 pathbuf = fileToNTPath(env, file, ids.path);
420 if (pathbuf == NULL)
421 return JNI_FALSE;
422 a = GetFileAttributesW(pathbuf);
423
424 /* if reparse point, get final target */
425 if ((a != INVALID_FILE_ATTRIBUTES) &&
426 ((a & FILE_ATTRIBUTE_REPARSE_POINT) != 0))
427 {
428 WCHAR *fp = getFinalPath(pathbuf);
429 if (fp == NULL) {
430 a = INVALID_FILE_ATTRIBUTES;
431 } else {
432 free(pathbuf);
433 pathbuf = fp;
434 a = GetFileAttributesW(pathbuf);
435 }
436 }
437 if (a != INVALID_FILE_ATTRIBUTES) {
438 if (enable)
439 a = a & ~FILE_ATTRIBUTE_READONLY;
440 else
441 a = a | FILE_ATTRIBUTE_READONLY;
442 if (SetFileAttributesW(pathbuf, a))
443 rv = JNI_TRUE;
444 }
445 free(pathbuf);
446 return rv;
447 }
448
449 JNIEXPORT jlong JNICALL
450 Java_java_io_WinNTFileSystem_getLastModifiedTime(JNIEnv *env, jobject this,
451 jobject file)
452 {
453 jlong rv = 0;
454 LARGE_INTEGER modTime;
455 FILETIME t;
456 HANDLE h;
457 WCHAR *pathbuf = fileToNTPath(env, file, ids.path);
779 DWORD a;
780 WCHAR *pathbuf = fileToNTPath(env, file, ids.path);
781 if (pathbuf == NULL)
782 return JNI_FALSE;
783 a = GetFileAttributesW(pathbuf);
784
785 /* if reparse point, get final target */
786 if ((a != INVALID_FILE_ATTRIBUTES) &&
787 ((a & FILE_ATTRIBUTE_REPARSE_POINT) != 0))
788 {
789 WCHAR *fp = getFinalPath(pathbuf);
790 if (fp == NULL) {
791 a = INVALID_FILE_ATTRIBUTES;
792 } else {
793 free(pathbuf);
794 pathbuf = fp;
795 a = GetFileAttributesW(pathbuf);
796 }
797 }
798
799 if (a != INVALID_FILE_ATTRIBUTES) {
800 if (SetFileAttributesW(pathbuf, a | FILE_ATTRIBUTE_READONLY))
801 rv = JNI_TRUE;
802 }
803 free(pathbuf);
804 return rv;
805 }
806
807 /* -- Filesystem interface -- */
808
809
810 JNIEXPORT jobject JNICALL
811 Java_java_io_WinNTFileSystem_getDriveDirectory(JNIEnv *env, jobject this,
812 jint drive)
813 {
814 jstring ret = NULL;
815 jchar *p = _wgetdcwd(drive, NULL, MAX_PATH);
816 jchar *pf = p;
817 if (p == NULL) return NULL;
818 if (iswalpha(*p) && (p[1] == L':')) p += 2;
819 ret = (*env)->NewString(env, p, wcslen(p));
|
417 return enable;
418 }
419 pathbuf = fileToNTPath(env, file, ids.path);
420 if (pathbuf == NULL)
421 return JNI_FALSE;
422 a = GetFileAttributesW(pathbuf);
423
424 /* if reparse point, get final target */
425 if ((a != INVALID_FILE_ATTRIBUTES) &&
426 ((a & FILE_ATTRIBUTE_REPARSE_POINT) != 0))
427 {
428 WCHAR *fp = getFinalPath(pathbuf);
429 if (fp == NULL) {
430 a = INVALID_FILE_ATTRIBUTES;
431 } else {
432 free(pathbuf);
433 pathbuf = fp;
434 a = GetFileAttributesW(pathbuf);
435 }
436 }
437 if ((a != INVALID_FILE_ATTRIBUTES) &&
438 ((a & FILE_ATTRIBUTE_DIRECTORY) == 0))
439 {
440 if (enable)
441 a = a & ~FILE_ATTRIBUTE_READONLY;
442 else
443 a = a | FILE_ATTRIBUTE_READONLY;
444 if (SetFileAttributesW(pathbuf, a))
445 rv = JNI_TRUE;
446 }
447 free(pathbuf);
448 return rv;
449 }
450
451 JNIEXPORT jlong JNICALL
452 Java_java_io_WinNTFileSystem_getLastModifiedTime(JNIEnv *env, jobject this,
453 jobject file)
454 {
455 jlong rv = 0;
456 LARGE_INTEGER modTime;
457 FILETIME t;
458 HANDLE h;
459 WCHAR *pathbuf = fileToNTPath(env, file, ids.path);
781 DWORD a;
782 WCHAR *pathbuf = fileToNTPath(env, file, ids.path);
783 if (pathbuf == NULL)
784 return JNI_FALSE;
785 a = GetFileAttributesW(pathbuf);
786
787 /* if reparse point, get final target */
788 if ((a != INVALID_FILE_ATTRIBUTES) &&
789 ((a & FILE_ATTRIBUTE_REPARSE_POINT) != 0))
790 {
791 WCHAR *fp = getFinalPath(pathbuf);
792 if (fp == NULL) {
793 a = INVALID_FILE_ATTRIBUTES;
794 } else {
795 free(pathbuf);
796 pathbuf = fp;
797 a = GetFileAttributesW(pathbuf);
798 }
799 }
800
801 if ((a != INVALID_FILE_ATTRIBUTES) &&
802 ((a & FILE_ATTRIBUTE_DIRECTORY) == 0)) {
803 if (SetFileAttributesW(pathbuf, a | FILE_ATTRIBUTE_READONLY))
804 rv = JNI_TRUE;
805 }
806 free(pathbuf);
807 return rv;
808 }
809
810 /* -- Filesystem interface -- */
811
812
813 JNIEXPORT jobject JNICALL
814 Java_java_io_WinNTFileSystem_getDriveDirectory(JNIEnv *env, jobject this,
815 jint drive)
816 {
817 jstring ret = NULL;
818 jchar *p = _wgetdcwd(drive, NULL, MAX_PATH);
819 jchar *pf = p;
820 if (p == NULL) return NULL;
821 if (iswalpha(*p) && (p[1] == L':')) p += 2;
822 ret = (*env)->NewString(env, p, wcslen(p));
|