1 /* 7zFile.h -- File IO 2 2021-02-15 : Igor Pavlov : Public domain */ 3 4 #ifndef __7Z_FILE_H 5 #define __7Z_FILE_H 6 7 #ifdef _WIN32 8 #define USE_WINDOWS_FILE 9 // #include <windows.h> 10 #endif 11 12 #ifdef USE_WINDOWS_FILE 13 #include <windows.h> 14 #else 15 // note: USE_FOPEN mode is limited to 32-bit file size 16 // #define USE_FOPEN 17 // #include <stdio.h> 18 #endif 19 20 #include "7zTypes.h" 21 22 EXTERN_C_BEGIN 23 24 /* ---------- File ---------- */ 25 26 typedef struct 27 { 28 #ifdef USE_WINDOWS_FILE 29 HANDLE handle; 30 #elif defined(USE_FOPEN) 31 FILE *file; 32 #else 33 int fd; 34 #endif 35 } CSzFile; 36 37 void File_Construct(CSzFile *p); 38 #if !defined(UNDER_CE) || !defined(USE_WINDOWS_FILE) 39 WRes InFile_Open(CSzFile *p, const char *name); 40 WRes OutFile_Open(CSzFile *p, const char *name); 41 #endif 42 #ifdef USE_WINDOWS_FILE 43 WRes InFile_OpenW(CSzFile *p, const WCHAR *name); 44 WRes OutFile_OpenW(CSzFile *p, const WCHAR *name); 45 #endif 46 WRes File_Close(CSzFile *p); 47 48 /* reads max(*size, remain file's size) bytes */ 49 WRes File_Read(CSzFile *p, void *data, size_t *size); 50 51 /* writes *size bytes */ 52 WRes File_Write(CSzFile *p, const void *data, size_t *size); 53 54 WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin); 55 WRes File_GetLength(CSzFile *p, UInt64 *length); 56 57 58 /* ---------- FileInStream ---------- */ 59 60 typedef struct 61 { 62 ISeqInStream vt; 63 CSzFile file; 64 WRes wres; 65 } CFileSeqInStream; 66 67 void FileSeqInStream_CreateVTable(CFileSeqInStream *p); 68 69 70 typedef struct 71 { 72 ISeekInStream vt; 73 CSzFile file; 74 WRes wres; 75 } CFileInStream; 76 77 void FileInStream_CreateVTable(CFileInStream *p); 78 79 80 typedef struct 81 { 82 ISeqOutStream vt; 83 CSzFile file; 84 WRes wres; 85 } CFileOutStream; 86 87 void FileOutStream_CreateVTable(CFileOutStream *p); 88 89 EXTERN_C_END 90 91 #endif 92