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