libclamav/unrarlib.h
b151ef55
 /* ***************************************************************************
  **
  **  This file is part of the UniquE RAR File Library.
  **
  **  Copyright (C) 2000-2002 by Christian Scheurer (www.ChristianScheurer.ch)
  **  UNIX port copyright (c) 2000-2002 by Johannes Winkelmann (jw@tks6.net)
  **
  **  The contents of this file are subject to the UniquE RAR File Library
  **  License (the "unrarlib-license.txt"). You may not use this file except
  **  in compliance with the License. You may obtain a copy of the License
  **  at http://www.unrarlib.org/license.html.
  **  Software distributed under the License is distributed on an "AS IS"
  **  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied warranty.
  **
  **  Alternatively, the contents of this file may be used under the terms
  **  of the GNU General Public License Version 2 or later (the "GPL"), in
  **  which case the provisions of the GPL are applicable instead of those
  **  above. If you wish to allow use of your version of this file only
  **  under the terms of the GPL and not to allow others to use your version
  **  of this file under the terms of the UniquE RAR File Library License,
  **  indicate your decision by deleting the provisions above and replace
  **  them with the notice and other provisions required by the GPL. If you
  **  do not delete the provisions above, a recipient may use your version
  **  of this file under the terms of the GPL or the UniquE RAR File Library
  **  License.
  **
  ************************************************************************** */
 
 /* include file for the "UniquE RAR File Library"  */
 /* (C) 2000-2002 by Christian Scheurer aka. UniquE */
 /* multi-OS version (Win32, Linux and SUN)         */
 
 #ifndef __URARLIB_H
 #define __URARLIB_H
 
 #ifdef __cplusplus
 extern "C"
 {
 #endif
 
 
 /* ************************************************************************ */
 /* ************************************************************************ */
 /* **                                                                    ** */
 /* **   CONFIGURATION of the UniquE RAR FileLib                          ** */
 /* **   ==> you may change the setting for the lib HERE!                 ** */
 /* **                                                                    ** */
 /* ************************************************************************ */
 /* ************************************************************************ */
 
 
 /* #define _DEBUG_LOG */                          /* generate debug messages      */
 
 #define _DO_CRC32_CHECK                     /* perform cyclical redundancy  */
                                             /* check (CRC32) - disable this */
                                             /* for a little speed-up        */
 /*#define _USE_ASM*/                            /*
                                              * enable assembly extensions
                                              * x86 cpus.
                                              */
 
 /*#define _USE_MEMORY_TO_MEMORY_DECOMPRESSION*/ /* read file from memory or a   */
                                             /* resource instead of reading  */
                                             /* from a file. NOTE: you wont't*/
                                             /*  be able to decompress from  */
                                             /*  file if you enable this     */
                                             /*  option!                     */
 
 
 #ifdef WIN32                                /* autodetect Win32 and Linux   */
 #define _WIN_32                             /* Win32 with VisualC           */
 #define _DEBUG_LOG_FILE "C:\\temp\\debug_unrar.txt" /* log file path        */
 #else
 #define _UNIX                               /* Linux or Unix with GCC       */
 #define _DEBUG_LOG_FILE "/tmp/debug_unrar.txt" /* log file path             */
 /*#define NON_INTEL_BYTE_ORDER*/               /* GCC on motorola systems    */
 
 #endif
 
 /* ------------------------------------------------------------------------ */
 
 /* detected by clamav/configure */
cf0744c5
 #if 1 - WORDS_BIGENDIAN
b151ef55
 #define NON_INTEL_BYTE_ORDER
 #endif
 
 /* -- global type definitions --------------------------------------------- */
 
 #ifdef NON_INTEL_BYTE_ORDER
 #ifdef _USE_ASM
 #warning Disabling assembly because NON_INTEL_BYTE_ORDER is set
 #undef _USE_ASM
 #endif
 #endif
 
 #ifdef _WIN_32
 typedef unsigned char    UBYTE;             /* WIN32 definitions            */
 typedef unsigned short   UWORD;
 typedef unsigned long    UDWORD;
 #endif
 
 #ifdef _UNIX                                /* LINUX/UNIX definitions       */
 typedef unsigned char    UBYTE;
 typedef unsigned short   UWORD;
 typedef unsigned long    UDWORD;
 #endif
 
41b894c7
 #define RAR_FENTRY_ATTR_DIRECTORY ( 0x10 | 0x4000 )
b151ef55
 
 /* This structure is used for listing archive content                       */
 struct RAR20_archive_entry                  /* These infos about files are  */
 {                                           /* stored in RAR v2.0 archives  */
   char   *Name;
   UWORD  NameSize;
   UDWORD PackSize;
   UDWORD UnpSize;
   UBYTE  HostOS;                            /* MSDOS=0,OS2=1,WIN32=2,UNIX=3 */
   UDWORD FileCRC;
   UDWORD FileTime;
   UBYTE  UnpVer;
   UBYTE  Method;
   UDWORD FileAttr;
96a39a27
   UWORD  Flags;
b151ef55
 };
 
 typedef struct  archivelist                 /* used to list archives        */
 {
   struct RAR20_archive_entry item;
   struct archivelist         *next;
 } ArchiveList_struct;
 
 
 #ifdef _USE_MEMORY_TO_MEMORY_DECOMPRESSION
 typedef struct  memory_file                 /* used to decompress files in  */
 {                                           /* memory                       */
   void                       *data;         /* pointer to the file data     */
   unsigned long              size;          /* total size of the file data  */
   unsigned long              offset;        /* offset within "memory-file"  */
 } MemoryFile;
 #endif
 
 /* -- global functions ---------------------------------------------------- */
 
 /* urarlib_get:
  * decompresses and decrypt data from a RAR file to a buffer in system memory.
  *
  *   input: *output         pointer to an empty char*. This pointer will show
  *                          to the extracted data
  *          *size           shows where to write the size of the decompressed
  *                          file
  *                          (**NOTE: URARLib _does_ memory allocation etc.!**)
  *          *filename       pointer to string containing the file to decompress
  *          *rarfile        pointer to a string with the full name and path of
  *                          the RAR file or pointer to a RAR file in memory if
  *                          memory-to-memory decompression is active.
  *          *libpassword    pointer to a string with the password used to
  *                          en-/decrypt the RAR
  *   output: int            returns TRUE on success or FALSE on error
  *                          (FALSE=0, TRUE=1)
  */
 
 extern int urarlib_get(void  *output,
                        unsigned long *size,
                        char *filename,
                        int desc,
                        char *libpassword);
 
 
 
 /* urarlib_list:
  * list the content of a RAR archive.
  *
  *   input: *rarfile        pointer to a string with the full name and path of
  *                          the RAR file or pointer to a RAR file in memory if
  *                          memory-to-memory decompression is active.
  *          *list           pointer to an ArchiveList_struct that can be
  *                          filled with details about the archive
  *                          to the extracted data
  *   output: int            number of files/directories within archive
  */
 
 extern int urarlib_list(int desc, ArchiveList_struct *list);
 
 
 /* urarlib_freelist:
  * (after the suggestion and code of Duy Nguyen, Sean O'Blarney
  * and Johannes Winkelmann who independently wrote a patch)
  * free the memory of a ArchiveList_struct created by urarlib_list.
  *
  *    input: *list          pointer to an ArchiveList_struct
  *    output: -
  */
 
 extern void urarlib_freelist(ArchiveList_struct *list);
 
 /* ------------------------------------------------------------------------ */
 
 
 
 #ifdef __cplusplus
 };
 #endif
 
 #endif