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