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