7zFile.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /* 7zFile.h -- File IO
  2. 2023-03-05 : Igor Pavlov : Public domain */
  3. #ifndef ZIP7_INC_FILE_H
  4. #define ZIP7_INC_FILE_H
  5. #ifdef _WIN32
  6. #define USE_WINDOWS_FILE
  7. // #include <windows.h>
  8. #endif
  9. #ifdef USE_WINDOWS_FILE
  10. #include "7zWindows.h"
  11. #else
  12. // note: USE_FOPEN mode is limited to 32-bit file size
  13. // #define USE_FOPEN
  14. // #include <stdio.h>
  15. #endif
  16. #include "7zTypes.h"
  17. EXTERN_C_BEGIN
  18. /* ---------- File ---------- */
  19. typedef struct
  20. {
  21. #ifdef USE_WINDOWS_FILE
  22. HANDLE handle;
  23. #elif defined(USE_FOPEN)
  24. FILE *file;
  25. #else
  26. int fd;
  27. #endif
  28. } CSzFile;
  29. void File_Construct(CSzFile *p);
  30. #if !defined(UNDER_CE) || !defined(USE_WINDOWS_FILE)
  31. WRes InFile_Open(CSzFile *p, const char *name);
  32. WRes OutFile_Open(CSzFile *p, const char *name);
  33. #endif
  34. #ifdef USE_WINDOWS_FILE
  35. WRes InFile_OpenW(CSzFile *p, const WCHAR *name);
  36. WRes OutFile_OpenW(CSzFile *p, const WCHAR *name);
  37. #endif
  38. WRes File_Close(CSzFile *p);
  39. /* reads max(*size, remain file's size) bytes */
  40. WRes File_Read(CSzFile *p, void *data, size_t *size);
  41. /* writes *size bytes */
  42. WRes File_Write(CSzFile *p, const void *data, size_t *size);
  43. WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin);
  44. WRes File_GetLength(CSzFile *p, UInt64 *length);
  45. /* ---------- FileInStream ---------- */
  46. typedef struct
  47. {
  48. ISeqInStream vt;
  49. CSzFile file;
  50. WRes wres;
  51. } CFileSeqInStream;
  52. void FileSeqInStream_CreateVTable(CFileSeqInStream *p);
  53. typedef struct
  54. {
  55. ISeekInStream vt;
  56. CSzFile file;
  57. WRes wres;
  58. } CFileInStream;
  59. void FileInStream_CreateVTable(CFileInStream *p);
  60. typedef struct
  61. {
  62. ISeqOutStream vt;
  63. CSzFile file;
  64. WRes wres;
  65. } CFileOutStream;
  66. void FileOutStream_CreateVTable(CFileOutStream *p);
  67. EXTERN_C_END
  68. #endif