| 292 | } |
| 293 | |
| 294 | extern "C" JNIEXPORT jlong JNICALL |
| 295 | Java_java_io_File_length(JNIEnv* e, jclass, jstring path) |
| 296 | { |
| 297 | #ifdef PLATFORM_WINDOWS |
| 298 | // Option: without opening file |
| 299 | // http://msdn.microsoft.com/en-us/library/windows/desktop/aa364946(v=vs.85).aspx |
| 300 | string_t chars = getChars(e, path); |
| 301 | if (chars) { |
| 302 | LARGE_INTEGER fileSize; |
| 303 | #if !defined(WINAPI_FAMILY) || WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) |
| 304 | HANDLE file = CreateFileW( |
| 305 | chars, FILE_READ_DATA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); |
| 306 | #else |
| 307 | HANDLE file = CreateFile2( |
| 308 | chars, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, nullptr); |
| 309 | #endif |
| 310 | releaseChars(e, path, chars); |
| 311 | if (file == INVALID_HANDLE_VALUE) |
| 312 | return 0; |
| 313 | #if !defined(WINAPI_FAMILY) || WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) |
| 314 | if (!GetFileSizeEx(file, &fileSize)) { |
| 315 | CloseHandle(file); |
| 316 | return 0; |
| 317 | } |
| 318 | #else |
| 319 | FILE_STANDARD_INFO info; |
| 320 | if (!GetFileInformationByHandleEx( |
| 321 | file, FileStandardInfo, &info, sizeof(info))) { |
| 322 | CloseHandle(file); |
| 323 | return 0; |
| 324 | } |
| 325 | fileSize = info.EndOfFile; |
| 326 | #endif |
| 327 | |
| 328 | CloseHandle(file); |
| 329 | return static_cast<jlong>(fileSize.QuadPart); |
| 330 | } |
| 331 | #else |
| 332 | |
| 333 | string_t chars = getChars(e, path); |
| 334 | if (chars) { |
| 335 | STRUCT_STAT s; |
| 336 | int r = STAT(chars, &s); |
| 337 | releaseChars(e, path, chars); |
| 338 | if (r == 0) { |
| 339 | return s.st_size; |
| 340 | } |
| 341 | } |
| 342 | |
| 343 | #endif |
| 344 | |
| 345 | return 0; |
| 346 | } |
| 347 | |
| 348 | extern "C" JNIEXPORT void JNICALL |
| 349 | Java_java_io_File_mkdir(JNIEnv* e, jclass, jstring path) |
nothing calls this directly
no test coverage detected