| 420 | } |
| 421 | |
| 422 | bool Win32File::open(AccessMode mode) |
| 423 | { |
| 424 | close(); |
| 425 | |
| 426 | if (mName.isEmpty()) |
| 427 | return mStatus; |
| 428 | |
| 429 | struct Mode |
| 430 | { |
| 431 | DWORD mode,share,open; |
| 432 | } Modes[] = |
| 433 | { |
| 434 | { GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING }, // Read |
| 435 | { GENERIC_WRITE,0,CREATE_ALWAYS }, // Write |
| 436 | { GENERIC_WRITE | GENERIC_READ,0,OPEN_ALWAYS }, // ReadWrite |
| 437 | { GENERIC_WRITE,0,OPEN_ALWAYS } // WriteAppend |
| 438 | }; |
| 439 | |
| 440 | Mode& m = (mode == Read)? Modes[0]: (mode == Write)? Modes[1]: |
| 441 | (mode == ReadWrite)? Modes[2]: Modes[3]; |
| 442 | |
| 443 | mHandle = (void*)::CreateFileW(PathToOS(mName).utf16(), |
| 444 | m.mode, m.share, |
| 445 | NULL, m.open, |
| 446 | FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, |
| 447 | NULL); |
| 448 | |
| 449 | if ( mHandle == INVALID_HANDLE_VALUE || mHandle == NULL ) |
| 450 | { |
| 451 | _updateStatus(); |
| 452 | return false; |
| 453 | } |
| 454 | |
| 455 | mStatus = Open; |
| 456 | return true; |
| 457 | } |
| 458 | |
| 459 | bool Win32File::close() |
| 460 | { |
nothing calls this directly
no test coverage detected