1 | /* 7zFile.h -- File IO |
2 | 2009-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 | |
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 s; |
58 | CSzFile file; |
59 | } CFileSeqInStream; |
60 | |
61 | void FileSeqInStream_CreateVTable(CFileSeqInStream *p); |
62 | |
63 | |
64 | typedef struct |
65 | { |
66 | ISeekInStream s; |
67 | CSzFile file; |
68 | } CFileInStream; |
69 | |
70 | void FileInStream_CreateVTable(CFileInStream *p); |
71 | |
72 | |
73 | typedef struct |
74 | { |
75 | ISeqOutStream s; |
76 | CSzFile file; |
77 | } CFileOutStream; |
78 | |
79 | void FileOutStream_CreateVTable(CFileOutStream *p); |
80 | |
81 | EXTERN_C_END |
82 | |
83 | #endif |
84 | |