|  | #define _FILE_OFFSET_BITS 64 | 
|  | #include <stdio.h> | 
|  | #include <stdlib.h> | 
|  | #include <string.h> | 
|  | #include <windows.h> | 
|  | #include <shlobj.h> | 
|  |  | 
|  | static const char *writebuf = "TESTVECTORSTRING"; | 
|  | static wchar_t szPath[MAX_PATH]; | 
|  |  | 
|  | static int writefile(wchar_t *path){ | 
|  | OVERLAPPED ov; | 
|  | DWORD dwResult; | 
|  | memset(&ov,0,sizeof(OVERLAPPED)); | 
|  | ov.Offset = 0x0; | 
|  | ov.OffsetHigh = 0x1; | 
|  | HANDLE fd = CreateFileW(path,GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); | 
|  | if (fd == INVALID_HANDLE_VALUE) return 1; | 
|  | SetFilePointer (fd, ov.Offset, &ov.OffsetHigh, FILE_BEGIN); | 
|  | WriteFile(fd, writebuf, strlen(writebuf), &dwResult, NULL); | 
|  | dwResult = WaitForSingleObject(fd, INFINITE); | 
|  | while(dwResult==WAIT_IO_COMPLETION) | 
|  | { | 
|  | dwResult = WaitForSingleObject(fd, INFINITE); | 
|  | } | 
|  | CloseHandle(fd); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | static int testread(wchar_t *path){ | 
|  | FILE *fd; | 
|  | char *readbuff; | 
|  | int ret; | 
|  |  | 
|  | readbuff = calloc(sizeof(char),strlen(writebuf) + 1); | 
|  | if (!readbuff) return 1; | 
|  |  | 
|  | fd = _wfopen(path, L"r+bc"); | 
|  | if (!fd) { | 
|  | free(readbuff); | 
|  | return 1; | 
|  | } | 
|  | fseeko(fd,0x100000000LL,SEEK_SET); | 
|  | fread(readbuff,sizeof(char),strlen(writebuf),fd); | 
|  | ret = strncmp(readbuff,writebuf,strlen(writebuf)); | 
|  | free(readbuff); | 
|  | fclose(fd); | 
|  | return ret; | 
|  | } | 
|  |  | 
|  | int main(int argc, char **argv){ | 
|  | int check; | 
|  | wchar_t *path; | 
|  | SHGetFolderPathW(NULL,CSIDL_PERSONAL,NULL,0,szPath); | 
|  | path = _wtempnam(szPath, L"mingw-w64-lfs64-test-"); | 
|  | #ifdef debugtest | 
|  | wprintf(L"Path: %ws\n", path); | 
|  | #endif | 
|  | if (!path) return 1; | 
|  |  | 
|  | check = writefile(path); | 
|  | if (check) goto err; /* error creating large file */ | 
|  | check = testread(path); | 
|  |  | 
|  | err: | 
|  | #ifndef debugtest | 
|  | DeleteFileW(path); /* Delete anyway */ | 
|  | #endif | 
|  | free(path); | 
|  | printf ("check: %d\n", check); | 
|  | return check; | 
|  | } |