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