libclamunrar/dll.hpp
01eebc13
 #ifndef _UNRAR_DLL_
 #define _UNRAR_DLL_
 
ab504f13
 #pragma pack(push, 1)
01eebc13
 
 #define ERAR_SUCCESS             0
 #define ERAR_END_ARCHIVE        10
 #define ERAR_NO_MEMORY          11
 #define ERAR_BAD_DATA           12
 #define ERAR_BAD_ARCHIVE        13
 #define ERAR_UNKNOWN_FORMAT     14
 #define ERAR_EOPEN              15
 #define ERAR_ECREATE            16
 #define ERAR_ECLOSE             17
 #define ERAR_EREAD              18
 #define ERAR_EWRITE             19
 #define ERAR_SMALL_BUF          20
 #define ERAR_UNKNOWN            21
 #define ERAR_MISSING_PASSWORD   22
 #define ERAR_EREFERENCE         23
 #define ERAR_BAD_PASSWORD       24
 
 #define RAR_OM_LIST              0
 #define RAR_OM_EXTRACT           1
 #define RAR_OM_LIST_INCSPLIT     2
 
 #define RAR_SKIP              0
 #define RAR_TEST              1
 #define RAR_EXTRACT           2
 
 #define RAR_VOL_ASK           0
 #define RAR_VOL_NOTIFY        1
 
 #define RAR_DLL_VERSION       8
 
 #define RAR_HASH_NONE         0
 #define RAR_HASH_CRC32        1
 #define RAR_HASH_BLAKE2       2
 
 
 #ifdef _UNIX
 #define CALLBACK
 #define PASCAL
 #define LONG long
 #define HANDLE void *
 #define LPARAM long
 #define UINT unsigned int
 #endif
 
 #define RHDF_SPLITBEFORE 0x01
 #define RHDF_SPLITAFTER  0x02
 #define RHDF_ENCRYPTED   0x04
 #define RHDF_SOLID       0x10
 #define RHDF_DIRECTORY   0x20
 
 
 struct RARHeaderData
 {
   char         ArcName[260];
   char         FileName[260];
   unsigned int Flags;
   unsigned int PackSize;
   unsigned int UnpSize;
   unsigned int HostOS;
   unsigned int FileCRC;
   unsigned int FileTime;
   unsigned int UnpVer;
   unsigned int Method;
   unsigned int FileAttr;
   char         *CmtBuf;
   unsigned int CmtBufSize;
   unsigned int CmtSize;
   unsigned int CmtState;
 };
 
 
 struct RARHeaderDataEx
 {
   char         ArcName[1024];
   wchar_t      ArcNameW[1024];
   char         FileName[1024];
   wchar_t      FileNameW[1024];
   unsigned int Flags;
   unsigned int PackSize;
   unsigned int PackSizeHigh;
   unsigned int UnpSize;
   unsigned int UnpSizeHigh;
   unsigned int HostOS;
   unsigned int FileCRC;
   unsigned int FileTime;
   unsigned int UnpVer;
   unsigned int Method;
   unsigned int FileAttr;
   char         *CmtBuf;
   unsigned int CmtBufSize;
   unsigned int CmtSize;
   unsigned int CmtState;
   unsigned int DictSize;
   unsigned int HashType;
   char         Hash[32];
   unsigned int RedirType;
   wchar_t      *RedirName;
   unsigned int RedirNameSize;
   unsigned int DirTarget;
   unsigned int MtimeLow;
   unsigned int MtimeHigh;
   unsigned int CtimeLow;
   unsigned int CtimeHigh;
   unsigned int AtimeLow;
   unsigned int AtimeHigh;
   unsigned int Reserved[988];
 };
 
 
 struct RAROpenArchiveData
 {
   char         *ArcName;
   unsigned int OpenMode;
   unsigned int OpenResult;
   char         *CmtBuf;
   unsigned int CmtBufSize;
   unsigned int CmtSize;
   unsigned int CmtState;
 };
 
 typedef int (CALLBACK *UNRARCALLBACK)(UINT msg,LPARAM UserData,LPARAM P1,LPARAM P2);
 
 #define ROADF_VOLUME       0x0001
 #define ROADF_COMMENT      0x0002
 #define ROADF_LOCK         0x0004
 #define ROADF_SOLID        0x0008
 #define ROADF_NEWNUMBERING 0x0010
 #define ROADF_SIGNED       0x0020
 #define ROADF_RECOVERY     0x0040
 #define ROADF_ENCHEADERS   0x0080
 #define ROADF_FIRSTVOLUME  0x0100
 
ab504f13
 #define ROADOF_KEEPBROKEN  0x0001
 
01eebc13
 struct RAROpenArchiveDataEx
 {
   char         *ArcName;
   wchar_t      *ArcNameW;
   unsigned int  OpenMode;
   unsigned int  OpenResult;
   char         *CmtBuf;
   unsigned int  CmtBufSize;
   unsigned int  CmtSize;
   unsigned int  CmtState;
   unsigned int  Flags;
   UNRARCALLBACK Callback;
   LPARAM        UserData;
ab504f13
   unsigned int  OpFlags;
   wchar_t      *CmtBufW;
   unsigned int  Reserved[25];
01eebc13
 };
 
 enum UNRARCALLBACK_MESSAGES {
   UCM_CHANGEVOLUME,UCM_PROCESSDATA,UCM_NEEDPASSWORD,UCM_CHANGEVOLUMEW,
   UCM_NEEDPASSWORDW
 };
 
 typedef int (PASCAL *CHANGEVOLPROC)(char *ArcName,int Mode);
 typedef int (PASCAL *PROCESSDATAPROC)(unsigned char *Addr,int Size);
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 HANDLE PASCAL RAROpenArchive(struct RAROpenArchiveData *ArchiveData);
 HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *ArchiveData);
 int    PASCAL RARCloseArchive(HANDLE hArcData);
 int    PASCAL RARReadHeader(HANDLE hArcData,struct RARHeaderData *HeaderData);
 int    PASCAL RARReadHeaderEx(HANDLE hArcData,struct RARHeaderDataEx *HeaderData);
 int    PASCAL RARProcessFile(HANDLE hArcData,int Operation,char *DestPath,char *DestName);
 int    PASCAL RARProcessFileW(HANDLE hArcData,int Operation,wchar_t *DestPath,wchar_t *DestName);
 void   PASCAL RARSetCallback(HANDLE hArcData,UNRARCALLBACK Callback,LPARAM UserData);
 void   PASCAL RARSetChangeVolProc(HANDLE hArcData,CHANGEVOLPROC ChangeVolProc);
 void   PASCAL RARSetProcessDataProc(HANDLE hArcData,PROCESSDATAPROC ProcessDataProc);
 void   PASCAL RARSetPassword(HANDLE hArcData,char *Password);
 int    PASCAL RARGetDllVersion();
 
 #ifdef __cplusplus
 }
 #endif
 
ab504f13
 #pragma pack(pop)
01eebc13
 
 #endif