#include "iowin32.h"
BOOL IoGenericIsValid(LPVOID handle){
return handle!=NULL;
}
BOOL IoWin32IsValid(LPVOID handle){
return ((HANDLE)handle!=INVALID_HANDLE_VALUE);
}
DWORD IoWin32ReadFile(LPVOID handle, LPVOID ptr, DWORD sz){
DWORD ret;
ReadFile((HANDLE)handle,ptr,sz,&ret,NULL);
return ret;
}
DWORD IoWin32WriteFile(LPVOID handle, LPVOID ptr, DWORD sz){
DWORD ret;
WriteFile((HANDLE)handle,ptr,sz,&ret,NULL);
return ret;
}
LONG IoWin32SeekFile(LPVOID handle, LONG pos, int seek){
return SetFilePointer((HANDLE)handle,pos,NULL,seek);
}
LPVOID IoWin32OpenFile(LPCTSTR filename, int read){
if(read==FILE_READ){
return CreateFileA(filename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
} else if(read==FILE_WRITE){
return CreateFileA(filename,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
} else if(read==FILE_APPEND){
LPVOID h=CreateFileA(filename,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,0,NULL);
if((HANDLE)h==INVALID_HANDLE_VALUE)return h;
SetFilePointer((HANDLE)h,0,NULL,FILE_END);
return h;
} else if(read==FILE_READWRITE){
return CreateFileA(filename,GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
}
return INVALID_HANDLE_VALUE;
}
BOOL IoWin32CloseFile(LPVOID handle){
return CloseHandle((HANDLE)handle);
}
BOOL IoWin32FlushFile(LPVOID handle){
return FlushFileBuffers((HANDLE)handle);
}
DWORD IoWin32GetSize(LPVOID handle){
if(IoWin32IsValid(handle)){
return GetFileSize((HANDLE)handle,NULL);
}
return 0;
}
IOSTRUCT Win32Io={
IoWin32IsValid,
IoWin32OpenFile,
IoWin32CloseFile,
IoWin32ReadFile,
IoWin32WriteFile,
IoWin32SeekFile,
IoWin32GetSize,
IoWin32FlushFile
};
IOSTRUCT *GetNativeIo(void){
return &Win32Io;
}