xref: /netbsd-src/external/bsd/bzip2/dist/dlltest.c (revision 4f9a14591a53924af02e2a35ceb2ac984e9c0ffe)
1*4f9a1459Swiz /*	$NetBSD: dlltest.c,v 1.1.1.1 2012/05/07 00:21:46 wiz Exp $	*/
2*4f9a1459Swiz 
3*4f9a1459Swiz /*
4*4f9a1459Swiz    minibz2
5*4f9a1459Swiz       libbz2.dll test program.
6*4f9a1459Swiz       by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp)
7*4f9a1459Swiz       This file is Public Domain.  Welcome any email to me.
8*4f9a1459Swiz 
9*4f9a1459Swiz    usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]
10*4f9a1459Swiz */
11*4f9a1459Swiz 
12*4f9a1459Swiz #define BZ_IMPORT
13*4f9a1459Swiz #include <stdio.h>
14*4f9a1459Swiz #include <stdlib.h>
15*4f9a1459Swiz #include "bzlib.h"
16*4f9a1459Swiz #ifdef _WIN32
17*4f9a1459Swiz #include <io.h>
18*4f9a1459Swiz #endif
19*4f9a1459Swiz 
20*4f9a1459Swiz 
21*4f9a1459Swiz #ifdef _WIN32
22*4f9a1459Swiz 
23*4f9a1459Swiz #define BZ2_LIBNAME "libbz2-1.0.2.DLL"
24*4f9a1459Swiz 
25*4f9a1459Swiz #include <windows.h>
26*4f9a1459Swiz static int BZ2DLLLoaded = 0;
27*4f9a1459Swiz static HINSTANCE BZ2DLLhLib;
BZ2DLLLoadLibrary(void)28*4f9a1459Swiz int BZ2DLLLoadLibrary(void)
29*4f9a1459Swiz {
30*4f9a1459Swiz    HINSTANCE hLib;
31*4f9a1459Swiz 
32*4f9a1459Swiz    if(BZ2DLLLoaded==1){return 0;}
33*4f9a1459Swiz    hLib=LoadLibrary(BZ2_LIBNAME);
34*4f9a1459Swiz    if(hLib == NULL){
35*4f9a1459Swiz       fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME);
36*4f9a1459Swiz       return -1;
37*4f9a1459Swiz    }
38*4f9a1459Swiz    BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion");
39*4f9a1459Swiz    BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen");
40*4f9a1459Swiz    BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen");
41*4f9a1459Swiz    BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread");
42*4f9a1459Swiz    BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite");
43*4f9a1459Swiz    BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush");
44*4f9a1459Swiz    BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose");
45*4f9a1459Swiz    BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror");
46*4f9a1459Swiz 
47*4f9a1459Swiz    if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen
48*4f9a1459Swiz        || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush
49*4f9a1459Swiz        || !BZ2_bzclose || !BZ2_bzerror) {
50*4f9a1459Swiz       fprintf(stderr,"GetProcAddress failed.\n");
51*4f9a1459Swiz       return -1;
52*4f9a1459Swiz    }
53*4f9a1459Swiz    BZ2DLLLoaded=1;
54*4f9a1459Swiz    BZ2DLLhLib=hLib;
55*4f9a1459Swiz    return 0;
56*4f9a1459Swiz 
57*4f9a1459Swiz }
BZ2DLLFreeLibrary(void)58*4f9a1459Swiz int BZ2DLLFreeLibrary(void)
59*4f9a1459Swiz {
60*4f9a1459Swiz    if(BZ2DLLLoaded==0){return 0;}
61*4f9a1459Swiz    FreeLibrary(BZ2DLLhLib);
62*4f9a1459Swiz    BZ2DLLLoaded=0;
63*4f9a1459Swiz }
64*4f9a1459Swiz #endif /* WIN32 */
65*4f9a1459Swiz 
usage(void)66*4f9a1459Swiz void usage(void)
67*4f9a1459Swiz {
68*4f9a1459Swiz    puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]");
69*4f9a1459Swiz }
70*4f9a1459Swiz 
main(int argc,char * argv[])71*4f9a1459Swiz int main(int argc,char *argv[])
72*4f9a1459Swiz {
73*4f9a1459Swiz    int decompress = 0;
74*4f9a1459Swiz    int level = 9;
75*4f9a1459Swiz    char *fn_r = NULL;
76*4f9a1459Swiz    char *fn_w = NULL;
77*4f9a1459Swiz 
78*4f9a1459Swiz #ifdef _WIN32
79*4f9a1459Swiz    if(BZ2DLLLoadLibrary()<0){
80*4f9a1459Swiz       fprintf(stderr,"Loading of %s failed.  Giving up.\n", BZ2_LIBNAME);
81*4f9a1459Swiz       exit(1);
82*4f9a1459Swiz    }
83*4f9a1459Swiz    printf("Loading of %s succeeded.  Library version is %s.\n",
84*4f9a1459Swiz           BZ2_LIBNAME, BZ2_bzlibVersion() );
85*4f9a1459Swiz #endif
86*4f9a1459Swiz    while(++argv,--argc){
87*4f9a1459Swiz       if(**argv =='-' || **argv=='/'){
88*4f9a1459Swiz          char *p;
89*4f9a1459Swiz 
90*4f9a1459Swiz          for(p=*argv+1;*p;p++){
91*4f9a1459Swiz             if(*p=='d'){
92*4f9a1459Swiz                decompress = 1;
93*4f9a1459Swiz             }else if('1'<=*p && *p<='9'){
94*4f9a1459Swiz                level = *p - '0';
95*4f9a1459Swiz             }else{
96*4f9a1459Swiz                usage();
97*4f9a1459Swiz                exit(1);
98*4f9a1459Swiz             }
99*4f9a1459Swiz          }
100*4f9a1459Swiz       }else{
101*4f9a1459Swiz          break;
102*4f9a1459Swiz       }
103*4f9a1459Swiz    }
104*4f9a1459Swiz    if(argc>=1){
105*4f9a1459Swiz       fn_r = *argv;
106*4f9a1459Swiz       argc--;argv++;
107*4f9a1459Swiz    }else{
108*4f9a1459Swiz       fn_r = NULL;
109*4f9a1459Swiz    }
110*4f9a1459Swiz    if(argc>=1){
111*4f9a1459Swiz       fn_w = *argv;
112*4f9a1459Swiz       argc--;argv++;
113*4f9a1459Swiz    }else{
114*4f9a1459Swiz       fn_w = NULL;
115*4f9a1459Swiz    }
116*4f9a1459Swiz    {
117*4f9a1459Swiz       int len;
118*4f9a1459Swiz       char buff[0x1000];
119*4f9a1459Swiz       char mode[10];
120*4f9a1459Swiz 
121*4f9a1459Swiz       if(decompress){
122*4f9a1459Swiz          BZFILE *BZ2fp_r = NULL;
123*4f9a1459Swiz          FILE *fp_w = NULL;
124*4f9a1459Swiz 
125*4f9a1459Swiz          if(fn_w){
126*4f9a1459Swiz             if((fp_w = fopen(fn_w,"wb"))==NULL){
127*4f9a1459Swiz                printf("can't open [%s]\n",fn_w);
128*4f9a1459Swiz                perror("reason:");
129*4f9a1459Swiz                exit(1);
130*4f9a1459Swiz             }
131*4f9a1459Swiz          }else{
132*4f9a1459Swiz             fp_w = stdout;
133*4f9a1459Swiz          }
134*4f9a1459Swiz          if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL)
135*4f9a1459Swiz             || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){
136*4f9a1459Swiz             printf("can't bz2openstream\n");
137*4f9a1459Swiz             exit(1);
138*4f9a1459Swiz          }
139*4f9a1459Swiz          while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){
140*4f9a1459Swiz             fwrite(buff,1,len,fp_w);
141*4f9a1459Swiz          }
142*4f9a1459Swiz          BZ2_bzclose(BZ2fp_r);
143*4f9a1459Swiz          if(fp_w != stdout) fclose(fp_w);
144*4f9a1459Swiz       }else{
145*4f9a1459Swiz          BZFILE *BZ2fp_w = NULL;
146*4f9a1459Swiz          FILE *fp_r = NULL;
147*4f9a1459Swiz 
148*4f9a1459Swiz          if(fn_r){
149*4f9a1459Swiz             if((fp_r = fopen(fn_r,"rb"))==NULL){
150*4f9a1459Swiz                printf("can't open [%s]\n",fn_r);
151*4f9a1459Swiz                perror("reason:");
152*4f9a1459Swiz                exit(1);
153*4f9a1459Swiz             }
154*4f9a1459Swiz          }else{
155*4f9a1459Swiz             fp_r = stdin;
156*4f9a1459Swiz          }
157*4f9a1459Swiz          mode[0]='w';
158*4f9a1459Swiz          mode[1] = '0' + level;
159*4f9a1459Swiz          mode[2] = '\0';
160*4f9a1459Swiz 
161*4f9a1459Swiz          if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL)
162*4f9a1459Swiz             || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){
163*4f9a1459Swiz             printf("can't bz2openstream\n");
164*4f9a1459Swiz             exit(1);
165*4f9a1459Swiz          }
166*4f9a1459Swiz          while((len=fread(buff,1,0x1000,fp_r))>0){
167*4f9a1459Swiz             BZ2_bzwrite(BZ2fp_w,buff,len);
168*4f9a1459Swiz          }
169*4f9a1459Swiz          BZ2_bzclose(BZ2fp_w);
170*4f9a1459Swiz          if(fp_r!=stdin)fclose(fp_r);
171*4f9a1459Swiz       }
172*4f9a1459Swiz    }
173*4f9a1459Swiz #ifdef _WIN32
174*4f9a1459Swiz    BZ2DLLFreeLibrary();
175*4f9a1459Swiz #endif
176*4f9a1459Swiz    return 0;
177*4f9a1459Swiz }
178