Home | History | Annotate | Download | only in C
      1 /* 7zFile.h -- File IO
      2 2013-01-18 : 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 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