mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-15 08:52:02 +00:00
4497d7fdaa
As a bonus, add support for XZ-compressed files in ZIP
92 lines
1.7 KiB
C
92 lines
1.7 KiB
C
/* 7zFile.h -- File IO
|
|
2023-03-05 : Igor Pavlov : Public domain */
|
|
|
|
#ifndef ZIP7_INC_FILE_H
|
|
#define ZIP7_INC_FILE_H
|
|
|
|
#ifdef _WIN32
|
|
#define USE_WINDOWS_FILE
|
|
// #include <windows.h>
|
|
#endif
|
|
|
|
#ifdef USE_WINDOWS_FILE
|
|
#include "7zWindows.h"
|
|
|
|
#else
|
|
// note: USE_FOPEN mode is limited to 32-bit file size
|
|
// #define USE_FOPEN
|
|
// #include <stdio.h>
|
|
#endif
|
|
|
|
#include "7zTypes.h"
|
|
|
|
EXTERN_C_BEGIN
|
|
|
|
/* ---------- File ---------- */
|
|
|
|
typedef struct
|
|
{
|
|
#ifdef USE_WINDOWS_FILE
|
|
HANDLE handle;
|
|
#elif defined(USE_FOPEN)
|
|
FILE *file;
|
|
#else
|
|
int fd;
|
|
#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;
|
|
WRes wres;
|
|
} CFileSeqInStream;
|
|
|
|
void FileSeqInStream_CreateVTable(CFileSeqInStream *p);
|
|
|
|
|
|
typedef struct
|
|
{
|
|
ISeekInStream vt;
|
|
CSzFile file;
|
|
WRes wres;
|
|
} CFileInStream;
|
|
|
|
void FileInStream_CreateVTable(CFileInStream *p);
|
|
|
|
|
|
typedef struct
|
|
{
|
|
ISeqOutStream vt;
|
|
CSzFile file;
|
|
WRes wres;
|
|
} CFileOutStream;
|
|
|
|
void FileOutStream_CreateVTable(CFileOutStream *p);
|
|
|
|
EXTERN_C_END
|
|
|
|
#endif
|