MCPcopy Create free account
hub / github.com/ReadyTalk/avian / Java_java_io_File_lastModified

Function Java_java_io_File_lastModified

classpath/java-io.cpp:562–621  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

560}
561
562extern "C" JNIEXPORT jlong JNICALL
563 Java_java_io_File_lastModified(JNIEnv* e, jclass, jstring path)
564{
565 string_t chars = getChars(e, path);
566 if (chars) {
567#ifdef PLATFORM_WINDOWS
568// Option: without opening file
569// http://msdn.microsoft.com/en-us/library/windows/desktop/aa364946(v=vs.85).aspx
570#if !defined(WINAPI_FAMILY) || WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
571 HANDLE hFile = CreateFileW(
572 chars, FILE_READ_DATA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
573#else
574 HANDLE hFile = CreateFile2(
575 chars, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, nullptr);
576#endif
577 releaseChars(e, path, chars);
578 if (hFile == INVALID_HANDLE_VALUE)
579 return 0;
580 LARGE_INTEGER fileDate, filetimeToUnixEpochAdjustment;
581 filetimeToUnixEpochAdjustment.QuadPart = 11644473600000L * 10000L;
582#if !defined(WINAPI_FAMILY) || WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
583 FILETIME fileLastWriteTime;
584 if (!GetFileTime(hFile, 0, 0, &fileLastWriteTime)) {
585 CloseHandle(hFile);
586 return 0;
587 }
588 fileDate.HighPart = fileLastWriteTime.dwHighDateTime;
589 fileDate.LowPart = fileLastWriteTime.dwLowDateTime;
590#else
591 FILE_BASIC_INFO fileInfo;
592 if (!GetFileInformationByHandleEx(
593 hFile, FileBasicInfo, &fileInfo, sizeof(fileInfo))) {
594 CloseHandle(hFile);
595 return 0;
596 }
597 fileDate = fileInfo.ChangeTime;
598#endif
599 CloseHandle(hFile);
600 fileDate.QuadPart -= filetimeToUnixEpochAdjustment.QuadPart;
601 return fileDate.QuadPart / 10000000L;
602#else
603 struct stat fileStat;
604 int res = stat(chars, &fileStat);
605 releaseChars(e, path, chars);
606
607 if (res == -1) {
608 return 0;
609 }
610#ifdef __APPLE__
611#define MTIME st_mtimespec
612#else
613#define MTIME st_mtim
614#endif
615 return (static_cast<jlong>(fileStat.MTIME.tv_sec) * 1000)
616 + (static_cast<jlong>(fileStat.MTIME.tv_nsec) / (1000 * 1000));
617#endif
618 }
619

Callers

nothing calls this directly

Calls 3

getCharsFunction · 0.85
releaseCharsFunction · 0.85
statClass · 0.70

Tested by

no test coverage detected