mirror of
				https://github.com/Cisco-Talos/clamav.git
				synced 2025-10-31 08:00:54 +00:00 
			
		
		
		
	
		
			
	
	
		
			176 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			176 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |    minibz2 | ||
|  |       libbz2.dll test program. | ||
|  |       by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) | ||
|  |       This file is Public Domain.  Welcome any email to me. | ||
|  | 
 | ||
|  |    usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename] | ||
|  | */ | ||
|  | 
 | ||
|  | #define BZ_IMPORT
 | ||
|  | #include <stdio.h>
 | ||
|  | #include <stdlib.h>
 | ||
|  | #include "bzlib.h"
 | ||
|  | #ifdef _WIN32
 | ||
|  | #include <io.h>
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifdef _WIN32
 | ||
|  | 
 | ||
|  | #define BZ2_LIBNAME "libbz2-1.0.2.DLL" 
 | ||
|  | 
 | ||
|  | #include <windows.h>
 | ||
|  | static int BZ2DLLLoaded = 0; | ||
|  | static HINSTANCE BZ2DLLhLib; | ||
|  | int BZ2DLLLoadLibrary(void) | ||
|  | { | ||
|  |    HINSTANCE hLib; | ||
|  | 
 | ||
|  |    if(BZ2DLLLoaded==1){return 0;} | ||
|  |    hLib=LoadLibrary(BZ2_LIBNAME); | ||
|  |    if(hLib == NULL){ | ||
|  |       fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME); | ||
|  |       return -1; | ||
|  |    } | ||
|  |    BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion"); | ||
|  |    BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen"); | ||
|  |    BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen"); | ||
|  |    BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread"); | ||
|  |    BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite"); | ||
|  |    BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush"); | ||
|  |    BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose"); | ||
|  |    BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror"); | ||
|  | 
 | ||
|  |    if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen | ||
|  |        || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush | ||
|  |        || !BZ2_bzclose || !BZ2_bzerror) { | ||
|  |       fprintf(stderr,"GetProcAddress failed.\n"); | ||
|  |       return -1; | ||
|  |    } | ||
|  |    BZ2DLLLoaded=1; | ||
|  |    BZ2DLLhLib=hLib; | ||
|  |    return 0; | ||
|  | 
 | ||
|  | } | ||
|  | int BZ2DLLFreeLibrary(void) | ||
|  | { | ||
|  |    if(BZ2DLLLoaded==0){return 0;} | ||
|  |    FreeLibrary(BZ2DLLhLib); | ||
|  |    BZ2DLLLoaded=0; | ||
|  | } | ||
|  | #endif /* WIN32 */
 | ||
|  | 
 | ||
|  | void usage(void) | ||
|  | { | ||
|  |    puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]"); | ||
|  | } | ||
|  | 
 | ||
|  | int main(int argc,char *argv[]) | ||
|  | { | ||
|  |    int decompress = 0; | ||
|  |    int level = 9; | ||
|  |    char *fn_r = NULL; | ||
|  |    char *fn_w = NULL; | ||
|  | 
 | ||
|  | #ifdef _WIN32
 | ||
|  |    if(BZ2DLLLoadLibrary()<0){ | ||
|  |       fprintf(stderr,"Loading of %s failed.  Giving up.\n", BZ2_LIBNAME); | ||
|  |       exit(1); | ||
|  |    } | ||
|  |    printf("Loading of %s succeeded.  Library version is %s.\n", | ||
|  |           BZ2_LIBNAME, BZ2_bzlibVersion() ); | ||
|  | #endif
 | ||
|  |    while(++argv,--argc){ | ||
|  |       if(**argv =='-' || **argv=='/'){ | ||
|  |          char *p; | ||
|  | 
 | ||
|  |          for(p=*argv+1;*p;p++){ | ||
|  |             if(*p=='d'){ | ||
|  |                decompress = 1; | ||
|  |             }else if('1'<=*p && *p<='9'){ | ||
|  |                level = *p - '0'; | ||
|  |             }else{ | ||
|  |                usage(); | ||
|  |                exit(1); | ||
|  |             } | ||
|  |          } | ||
|  |       }else{ | ||
|  |          break; | ||
|  |       } | ||
|  |    } | ||
|  |    if(argc>=1){ | ||
|  |       fn_r = *argv; | ||
|  |       argc--;argv++; | ||
|  |    }else{ | ||
|  |       fn_r = NULL; | ||
|  |    } | ||
|  |    if(argc>=1){ | ||
|  |       fn_w = *argv; | ||
|  |       argc--;argv++; | ||
|  |    }else{ | ||
|  |       fn_w = NULL; | ||
|  |    } | ||
|  |    { | ||
|  |       int len; | ||
|  |       char buff[0x1000]; | ||
|  |       char mode[10]; | ||
|  | 
 | ||
|  |       if(decompress){ | ||
|  |          BZFILE *BZ2fp_r = NULL; | ||
|  |          FILE *fp_w = NULL; | ||
|  | 
 | ||
|  |          if(fn_w){ | ||
|  |             if((fp_w = fopen(fn_w,"wb"))==NULL){ | ||
|  |                printf("can't open [%s]\n",fn_w); | ||
|  |                perror("reason:"); | ||
|  |                exit(1); | ||
|  |             } | ||
|  |          }else{ | ||
|  |             fp_w = stdout; | ||
|  |          } | ||
|  |          if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL) | ||
|  |             || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){ | ||
|  |             printf("can't bz2openstream\n"); | ||
|  |             exit(1); | ||
|  |          } | ||
|  |          while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){ | ||
|  |             fwrite(buff,1,len,fp_w); | ||
|  |          } | ||
|  |          BZ2_bzclose(BZ2fp_r); | ||
|  |          if(fp_w != stdout) fclose(fp_w); | ||
|  |       }else{ | ||
|  |          BZFILE *BZ2fp_w = NULL; | ||
|  |          FILE *fp_r = NULL; | ||
|  | 
 | ||
|  |          if(fn_r){ | ||
|  |             if((fp_r = fopen(fn_r,"rb"))==NULL){ | ||
|  |                printf("can't open [%s]\n",fn_r); | ||
|  |                perror("reason:"); | ||
|  |                exit(1); | ||
|  |             } | ||
|  |          }else{ | ||
|  |             fp_r = stdin; | ||
|  |          } | ||
|  |          mode[0]='w'; | ||
|  |          mode[1] = '0' + level; | ||
|  |          mode[2] = '\0'; | ||
|  | 
 | ||
|  |          if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL) | ||
|  |             || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){ | ||
|  |             printf("can't bz2openstream\n"); | ||
|  |             exit(1); | ||
|  |          } | ||
|  |          while((len=fread(buff,1,0x1000,fp_r))>0){ | ||
|  |             BZ2_bzwrite(BZ2fp_w,buff,len); | ||
|  |          } | ||
|  |          BZ2_bzclose(BZ2fp_w); | ||
|  |          if(fp_r!=stdin)fclose(fp_r); | ||
|  |       } | ||
|  |    } | ||
|  | #ifdef _WIN32
 | ||
|  |    BZ2DLLFreeLibrary(); | ||
|  | #endif
 | ||
|  |    return 0; | ||
|  | } |