annotate src/bzip2-1.0.6/dlltest.c @ 83:ae30d91d2ffe

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