1 /* 7zFile.h -- File IO 2 2017-04-03 : 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 #endif 10 11 #ifdef USE_WINDOWS_FILE 12 #include <windows.h> 13 #else 14 #include <stdio.h> 15 #endif 16 17 #include "7zTypes.h" 18 19 EXTERN_C_BEGIN 20 21 /* ---------- File ---------- */ 22 23 typedef struct 24 { 25 #ifdef USE_WINDOWS_FILE 26 HANDLE handle; 27 #else 28 FILE *file; 29 #endif 30 } CSzFile; 31 32 void File_Construct(CSzFile *p); 33 #if !defined(UNDER_CE) || !defined(USE_WINDOWS_FILE) 34 WRes InFile_Open(CSzFile *p, const char *name); 35 WRes OutFile_Open(CSzFile *p, const char *name); 36 #endif 37 #ifdef USE_WINDOWS_FILE 38 WRes InFile_OpenW(CSzFile *p, const WCHAR *name); 39 WRes OutFile_OpenW(CSzFile *p, const WCHAR *name); 40 #endif 41 WRes File_Close(CSzFile *p); 42 43 /* reads max(*size, remain file's size) bytes */ 44 WRes File_Read(CSzFile *p, void *data, size_t *size); 45 46 /* writes *size bytes */ 47 WRes File_Write(CSzFile *p, const void *data, size_t *size); 48 49 WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin); 50 WRes File_GetLength(CSzFile *p, UInt64 *length); 51 52 53 /* ---------- FileInStream ---------- */ 54 55 typedef struct 56 { 57 ISeqInStream vt; 58 CSzFile file; 59 } CFileSeqInStream; 60 61 void FileSeqInStream_CreateVTable(CFileSeqInStream *p); 62 63 64 typedef struct 65 { 66 ISeekInStream vt; 67 CSzFile file; 68 } CFileInStream; 69 70 void FileInStream_CreateVTable(CFileInStream *p); 71 72 73 typedef struct 74 { 75 ISeqOutStream vt; 76 CSzFile file; 77 } CFileOutStream; 78 79 void FileOutStream_CreateVTable(CFileOutStream *p); 80 81 EXTERN_C_END 82 83 #endif 84