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