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