/* 7zFile.h -- File IO | |
2017-04-03 : Igor Pavlov : Public domain */ | |
#ifndef __7Z_FILE_H | |
#define __7Z_FILE_H | |
#ifdef _WIN32 | |
#define USE_WINDOWS_FILE | |
#endif | |
#ifdef USE_WINDOWS_FILE | |
#include <windows.h> | |
#else | |
#include <stdio.h> | |
#endif | |
#include "7zTypes.h" | |
EXTERN_C_BEGIN | |
/* ---------- File ---------- */ | |
typedef struct | |
{ | |
#ifdef USE_WINDOWS_FILE | |
HANDLE handle; | |
#else | |
FILE *file; | |
#endif | |
} CSzFile; | |
void File_Construct(CSzFile *p); | |
#if !defined(UNDER_CE) || !defined(USE_WINDOWS_FILE) | |
WRes InFile_Open(CSzFile *p, const char *name); | |
WRes OutFile_Open(CSzFile *p, const char *name); | |
#endif | |
#ifdef USE_WINDOWS_FILE | |
WRes InFile_OpenW(CSzFile *p, const WCHAR *name); | |
WRes OutFile_OpenW(CSzFile *p, const WCHAR *name); | |
#endif | |
WRes File_Close(CSzFile *p); | |
/* reads max(*size, remain file's size) bytes */ | |
WRes File_Read(CSzFile *p, void *data, size_t *size); | |
/* writes *size bytes */ | |
WRes File_Write(CSzFile *p, const void *data, size_t *size); | |
WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin); | |
WRes File_GetLength(CSzFile *p, UInt64 *length); | |
/* ---------- FileInStream ---------- */ | |
typedef struct | |
{ | |
ISeqInStream vt; | |
CSzFile file; | |
} CFileSeqInStream; | |
void FileSeqInStream_CreateVTable(CFileSeqInStream *p); | |
typedef struct | |
{ | |
ISeekInStream vt; | |
CSzFile file; | |
} CFileInStream; | |
void FileInStream_CreateVTable(CFileInStream *p); | |
typedef struct | |
{ | |
ISeqOutStream vt; | |
CSzFile file; | |
} CFileOutStream; | |
void FileOutStream_CreateVTable(CFileOutStream *p); | |
EXTERN_C_END | |
#endif |