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