aboutsummaryrefslogtreecommitdiff
path: root/dlltest.c
diff options
context:
space:
mode:
Diffstat (limited to 'dlltest.c')
-rw-r--r--dlltest.c341
1 files changed, 176 insertions, 165 deletions
diff --git a/dlltest.c b/dlltest.c
index e5639f1..f79279c 100644
--- a/dlltest.c
+++ b/dlltest.c
@@ -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"
23static int BZ2DLLLoaded = 0; 23
24static HINSTANCE BZ2DLLhLib; 24#include <windows.h>
25int BZ2DLLLoadLibrary(void) 25static int BZ2DLLLoaded = 0;
26{ 26static HINSTANCE BZ2DLLhLib;
27 HINSTANCE hLib; 27int 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
48int 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
56void usage(void) 56}
57{ 57int BZ2DLLFreeLibrary(void)
58 puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]"); 58{
59} 59 if(BZ2DLLLoaded==0){return 0;}
60 60 FreeLibrary(BZ2DLLhLib);
61int 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; 65void 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"); 70int 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}