84 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/* 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
							 |