blob: 353b29272621c2077fb09fe1432bdaf5b0b1a1c3 [file] [log] [blame]
#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;
}