src/windows/native/java/io/WinNTFileSystem_md.c

Print this page




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