Blame dlltest.c

Packit 71fd91
/*
Packit 71fd91
   minibz2
Packit 71fd91
      libbz2.dll test program.
Packit 71fd91
      by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)
Packit 71fd91
      This file is Public Domain.  Welcome any email to me.
Packit 71fd91

Packit 71fd91
   usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]
Packit 71fd91
*/
Packit 71fd91

Packit 71fd91
#define BZ_IMPORT
Packit 71fd91
#include <stdio.h>
Packit 71fd91
#include <stdlib.h>
Packit 71fd91
#include "bzlib.h"
Packit 71fd91
#ifdef _WIN32
Packit 71fd91
#include <io.h>
Packit 71fd91
#endif
Packit 71fd91

Packit 71fd91

Packit 71fd91
#ifdef _WIN32
Packit 71fd91

Packit 71fd91
#define BZ2_LIBNAME "libbz2-1.0.2.DLL" 
Packit 71fd91

Packit 71fd91
#include <windows.h>
Packit 71fd91
static int BZ2DLLLoaded = 0;
Packit 71fd91
static HINSTANCE BZ2DLLhLib;
Packit 71fd91
int BZ2DLLLoadLibrary(void)
Packit 71fd91
{
Packit 71fd91
   HINSTANCE hLib;
Packit 71fd91

Packit 71fd91
   if(BZ2DLLLoaded==1){return 0;}
Packit 71fd91
   hLib=LoadLibrary(BZ2_LIBNAME);
Packit 71fd91
   if(hLib == NULL){
Packit 71fd91
      fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME);
Packit 71fd91
      return -1;
Packit 71fd91
   }
Packit 71fd91
   BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion");
Packit 71fd91
   BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen");
Packit 71fd91
   BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen");
Packit 71fd91
   BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread");
Packit 71fd91
   BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite");
Packit 71fd91
   BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush");
Packit 71fd91
   BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose");
Packit 71fd91
   BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror");
Packit 71fd91

Packit 71fd91
   if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen
Packit 71fd91
       || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush
Packit 71fd91
       || !BZ2_bzclose || !BZ2_bzerror) {
Packit 71fd91
      fprintf(stderr,"GetProcAddress failed.\n");
Packit 71fd91
      return -1;
Packit 71fd91
   }
Packit 71fd91
   BZ2DLLLoaded=1;
Packit 71fd91
   BZ2DLLhLib=hLib;
Packit 71fd91
   return 0;
Packit 71fd91

Packit 71fd91
}
Packit 71fd91
int BZ2DLLFreeLibrary(void)
Packit 71fd91
{
Packit 71fd91
   if(BZ2DLLLoaded==0){return 0;}
Packit 71fd91
   FreeLibrary(BZ2DLLhLib);
Packit 71fd91
   BZ2DLLLoaded=0;
Packit 71fd91
}
Packit 71fd91
#endif /* WIN32 */
Packit 71fd91

Packit 71fd91
void usage(void)
Packit 71fd91
{
Packit 71fd91
   puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]");
Packit 71fd91
}
Packit 71fd91

Packit 71fd91
int main(int argc,char *argv[])
Packit 71fd91
{
Packit 71fd91
   int decompress = 0;
Packit 71fd91
   int level = 9;
Packit 71fd91
   char *fn_r = NULL;
Packit 71fd91
   char *fn_w = NULL;
Packit 71fd91

Packit 71fd91
#ifdef _WIN32
Packit 71fd91
   if(BZ2DLLLoadLibrary()<0){
Packit 71fd91
      fprintf(stderr,"Loading of %s failed.  Giving up.\n", BZ2_LIBNAME);
Packit 71fd91
      exit(1);
Packit 71fd91
   }
Packit 71fd91
   printf("Loading of %s succeeded.  Library version is %s.\n",
Packit 71fd91
          BZ2_LIBNAME, BZ2_bzlibVersion() );
Packit 71fd91
#endif
Packit 71fd91
   while(++argv,--argc){
Packit 71fd91
      if(**argv =='-' || **argv=='/'){
Packit 71fd91
         char *p;
Packit 71fd91

Packit 71fd91
         for(p=*argv+1;*p;p++){
Packit 71fd91
            if(*p=='d'){
Packit 71fd91
               decompress = 1;
Packit 71fd91
            }else if('1'<=*p && *p<='9'){
Packit 71fd91
               level = *p - '0';
Packit 71fd91
            }else{
Packit 71fd91
               usage();
Packit 71fd91
               exit(1);
Packit 71fd91
            }
Packit 71fd91
         }
Packit 71fd91
      }else{
Packit 71fd91
         break;
Packit 71fd91
      }
Packit 71fd91
   }
Packit 71fd91
   if(argc>=1){
Packit 71fd91
      fn_r = *argv;
Packit 71fd91
      argc--;argv++;
Packit 71fd91
   }else{
Packit 71fd91
      fn_r = NULL;
Packit 71fd91
   }
Packit 71fd91
   if(argc>=1){
Packit 71fd91
      fn_w = *argv;
Packit 71fd91
      argc--;argv++;
Packit 71fd91
   }else{
Packit 71fd91
      fn_w = NULL;
Packit 71fd91
   }
Packit 71fd91
   {
Packit 71fd91
      int len;
Packit 71fd91
      char buff[0x1000];
Packit 71fd91
      char mode[10];
Packit 71fd91

Packit 71fd91
      if(decompress){
Packit 71fd91
         BZFILE *BZ2fp_r = NULL;
Packit 71fd91
         FILE *fp_w = NULL;
Packit 71fd91

Packit 71fd91
         if(fn_w){
Packit 71fd91
            if((fp_w = fopen(fn_w,"wb"))==NULL){
Packit 71fd91
               printf("can't open [%s]\n",fn_w);
Packit 71fd91
               perror("reason:");
Packit 71fd91
               exit(1);
Packit 71fd91
            }
Packit 71fd91
         }else{
Packit 71fd91
            fp_w = stdout;
Packit 71fd91
         }
Packit 71fd91
         if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL)
Packit 71fd91
            || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){
Packit 71fd91
            printf("can't bz2openstream\n");
Packit 71fd91
            exit(1);
Packit 71fd91
         }
Packit 71fd91
         while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){
Packit 71fd91
            fwrite(buff,1,len,fp_w);
Packit 71fd91
         }
Packit 71fd91
         BZ2_bzclose(BZ2fp_r);
Packit 71fd91
         if(fp_w != stdout) fclose(fp_w);
Packit 71fd91
      }else{
Packit 71fd91
         BZFILE *BZ2fp_w = NULL;
Packit 71fd91
         FILE *fp_r = NULL;
Packit 71fd91

Packit 71fd91
         if(fn_r){
Packit 71fd91
            if((fp_r = fopen(fn_r,"rb"))==NULL){
Packit 71fd91
               printf("can't open [%s]\n",fn_r);
Packit 71fd91
               perror("reason:");
Packit 71fd91
               exit(1);
Packit 71fd91
            }
Packit 71fd91
         }else{
Packit 71fd91
            fp_r = stdin;
Packit 71fd91
         }
Packit 71fd91
         mode[0]='w';
Packit 71fd91
         mode[1] = '0' + level;
Packit 71fd91
         mode[2] = '\0';
Packit 71fd91

Packit 71fd91
         if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL)
Packit 71fd91
            || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){
Packit 71fd91
            printf("can't bz2openstream\n");
Packit 71fd91
            exit(1);
Packit 71fd91
         }
Packit 71fd91
         while((len=fread(buff,1,0x1000,fp_r))>0){
Packit 71fd91
            BZ2_bzwrite(BZ2fp_w,buff,len);
Packit 71fd91
         }
Packit 71fd91
         BZ2_bzclose(BZ2fp_w);
Packit 71fd91
         if(fp_r!=stdin)fclose(fp_r);
Packit 71fd91
      }
Packit 71fd91
   }
Packit 71fd91
#ifdef _WIN32
Packit 71fd91
   BZ2DLLFreeLibrary();
Packit 71fd91
#endif
Packit 71fd91
   return 0;
Packit 71fd91
}