/* 7zFile.h -- File IO 2023-03-05 : Igor Pavlov : Public domain */ #ifndef ZIP7_INC_FILE_H #define ZIP7_INC_FILE_H #ifdef _WIN32 #define USE_WINDOWS_FILE // #include #endif #ifdef USE_WINDOWS_FILE #include "7zWindows.h" #else // note: USE_FOPEN mode is limited to 32-bit file size // #define USE_FOPEN // #include #endif #include "7zTypes.h" EXTERN_C_BEGIN /* ---------- File ---------- */ typedef struct { #ifdef USE_WINDOWS_FILE HANDLE handle; #elif defined(USE_FOPEN) FILE *file; #else int fd; #endif } CSzFile; void File_Construct(CSzFile *p); #if !defined(UNDER_CE) || !defined(USE_WINDOWS_FILE) WRes InFile_Open(CSzFile *p, const char *name); WRes OutFile_Open(CSzFile *p, const char *name); #endif #ifdef USE_WINDOWS_FILE WRes InFile_OpenW(CSzFile *p, const WCHAR *name); WRes OutFile_OpenW(CSzFile *p, const WCHAR *name); #endif WRes File_Close(CSzFile *p); /* reads max(*size, remain file's size) bytes */ WRes File_Read(CSzFile *p, void *data, size_t *size); /* writes *size bytes */ WRes File_Write(CSzFile *p, const void *data, size_t *size); WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin); WRes File_GetLength(CSzFile *p, UInt64 *length); /* ---------- FileInStream ---------- */ typedef struct { ISeqInStream vt; CSzFile file; WRes wres; } CFileSeqInStream; void FileSeqInStream_CreateVTable(CFileSeqInStream *p); typedef struct { ISeekInStream vt; CSzFile file; WRes wres; } CFileInStream; void FileInStream_CreateVTable(CFileInStream *p); typedef struct { ISeqOutStream vt; CSzFile file; WRes wres; } CFileOutStream; void FileOutStream_CreateVTable(CFileOutStream *p); EXTERN_C_END #endif