bool decompress_volume(std::string password, std::string targetvolumename, std::string archivefolder, std::string archivename, const params & p) { if (!utils::dockerVolExists(targetvolumename)) fatal("Can't restore into volume " + targetvolumename + " because it doesn't exist."); return _decompress(password, targetvolumename, archivefolder + "/", archivename, p); }
bool decompress_folder(std::string password, std::string targetfoldername, std::string archivefolder, std::string archivename, const params & p) { if (!utils::fileexists(targetfoldername)) fatal("Can't archive to non-existant folder " + targetfoldername); std::string ap = utils::getcanonicalpath(targetfoldername); return _decompress(password, ap + "/", archivefolder + "/", archivename, p); }
bool DataIStream::_checkBuffer() { while( _impl->position >= _impl->inputSize ) { uint32_t compressor = EQ_COMPRESSOR_NONE; uint32_t nChunks = 0; const void* data = 0; if( !getNextBuffer( compressor, nChunks, &data, _impl->inputSize )) return false; _impl->input = _decompress( data, compressor, nChunks, _impl->inputSize ); _impl->position = 0; } return true; }
bool DataIStream::_checkBuffer() { while (_impl->position >= _impl->inputSize) { CompressorInfo info; uint32_t nChunks = 0; const void* data = 0; _impl->position = 0; _impl->input = 0; _impl->inputSize = 0; if (!getNextBuffer(info, nChunks, data, _impl->inputSize)) return false; _impl->input = _decompress(data, info, nChunks, _impl->inputSize); } return true; }
int main(const int argc, const char **argv){ initstdio(); #else int zlibrawstdio2(const int argc, const char **argv){ #endif char mode,level; if(argc<2)goto argerror; mode=argv[1][0],level=argv[1][1]; if(!mode)goto argerror; if(mode=='-')mode=argv[1][1],level=argv[1][2]; if(mode!='e'&&mode!='c'&&mode!='d')goto argerror; if(isatty(fileno(stdin))&&isatty(fileno(stdout)))goto argerror; return mode=='d'?_decompress(stdin,stdout):_compress(stdin,stdout,level?level-'0':9); argerror: fprintf(stderr,"zlibrawstdio2 e/d < in > out\nYou can also use -e,-c,-d.\n"); if(!lzmaOpen7z())fprintf(stderr,"\nNote: 7-zip is AVAILABLE.\n"),lzmaClose7z(); else fprintf(stderr,"\nNote: 7-zip is NOT available.\n"); return -1; }
int main(const int argc, const char **argv){ initstdio(); #else int _7ciso(const int argc, const char **argv){ #endif int cmode=0,mode=0; int zlib=0,sevenzip=0,zopfli=0,miniz=0,slz=0,libdeflate=0; int threshold=100; poptContext optCon; int optc; struct poptOption optionsTable[] = { //{ "longname", "shortname", argInfo, *arg, int val, description, argment description} { "stdout", 'c', POPT_ARG_NONE, &cmode, 0, "stdout (currently ignored)", NULL }, { "zlib", 'z', POPT_ARG_INT|POPT_ARGFLAG_OPTIONAL, NULL, 'z', "1-9 (default 6) zlib", "level" }, { "miniz", 'm', POPT_ARG_INT|POPT_ARGFLAG_OPTIONAL, NULL, 'm', "1-2 (default 1) miniz", "level" }, { "slz", 's', POPT_ARG_INT|POPT_ARGFLAG_OPTIONAL, NULL, 's', "1-1 (default 1) slz", "level" }, { "libdeflate", 'l', POPT_ARG_INT|POPT_ARGFLAG_OPTIONAL, NULL, 'l', "1-12 (default 6) libdeflate", "level" }, { "7zip", 'S', POPT_ARG_INT|POPT_ARGFLAG_OPTIONAL, NULL, 'S', "1-9 (default 2) 7zip", "level" }, { "zopfli", 'Z', POPT_ARG_INT, &zopfli, 0, "zopfli", "numiterations" }, { "threshold", 't', POPT_ARG_INT, &threshold, 0, "compression threshold (in %, 10-100)", "threshold" }, { "decompress", 'd', POPT_ARG_NONE, &mode, 0, "decompress", NULL }, POPT_AUTOHELP, POPT_TABLEEND, }; optCon = poptGetContext(argv[0], argc, argv, optionsTable, 0); poptSetOtherOptionHelp(optCon, "{-z9 dec.iso enc.cso} or {-cd <enc.cso >dec.iso}"); for(;(optc=poptGetNextOpt(optCon))>=0;){ switch(optc){ case 'z':{ char *arg=poptGetOptArg(optCon); if(arg)zlib=strtol(arg,NULL,10),free(arg); else zlib=6; break; } case 'm':{ char *arg=poptGetOptArg(optCon); if(arg)miniz=strtol(arg,NULL,10),free(arg); else miniz=1; break; } case 's':{ char *arg=poptGetOptArg(optCon); if(arg)slz=strtol(arg,NULL,10),free(arg); else slz=1; break; } case 'l':{ char *arg=poptGetOptArg(optCon); if(arg)libdeflate=strtol(arg,NULL,10),free(arg); else libdeflate=1; break; } case 'S':{ char *arg=poptGetOptArg(optCon); if(arg)sevenzip=strtol(arg,NULL,10),free(arg); else sevenzip=2; break; } } } int level_sum=zlib+sevenzip+zopfli+miniz+slz+libdeflate; if( optc<-1 || (!mode&&!zlib&&!sevenzip&&!zopfli&&!miniz&&!slz&&!libdeflate) || (mode&&(zlib||sevenzip||zopfli||miniz||slz||libdeflate)) || (!mode&&(level_sum==zlib)+(level_sum==sevenzip)+(level_sum==zopfli)+(level_sum==miniz)+(level_sum==slz)+(level_sum==libdeflate)!=1) ){ poptPrintHelp(optCon, stderr, 0); poptFreeContext(optCon); if(!lzmaOpen7z())fprintf(stderr,"\nNote: 7-zip is AVAILABLE.\n"),lzmaClose7z(); else fprintf(stderr,"\nNote: 7-zip is NOT available.\n"); return 1; } if(mode){ if(isatty(fileno(stdin))||isatty(fileno(stdout))) {poptPrintHelp(optCon, stderr, 0);poptFreeContext(optCon);return -1;} poptFreeContext(optCon); //lzmaOpen7z(); int ret=_decompress(stdin,stdout); //lzmaClose7z(); return ret; }else{ if(threshold<10)threshold=10; if(threshold>100)threshold=100; const char *fname=poptGetArg(optCon); if(!fname){poptPrintHelp(optCon, stderr, 0);poptFreeContext(optCon);return -1;} FILE *in=fopen(fname,"rb"); if(!in){fprintf(stderr,"failed to open %s\n",fname);poptFreeContext(optCon);return 2;} fname=poptGetArg(optCon); if(!fname){poptPrintHelp(optCon, stderr, 0);poptFreeContext(optCon);return -1;} FILE *out=fopen(fname,"wb"); if(!out){fclose(in);fprintf(stderr,"failed to open %s\n",fname);poptFreeContext(optCon);return 2;} poptFreeContext(optCon); fprintf(stderr,"compression level = %d ",level_sum); int ret=0; if(zlib){ fprintf(stderr,"(zlib)\n"); ret=_compress(in,out,zlib,DEFLATE_ZLIB,threshold); }else if(sevenzip){ fprintf(stderr,"(7zip)\n"); if(lzmaOpen7z()){ fprintf(stderr,"7-zip is NOT available.\n"); return -1; } ret=_compress(in,out,sevenzip,DEFLATE_7ZIP,threshold); lzmaClose7z(); }else if(zopfli){ fprintf(stderr,"(zopfli)\n"); ret=_compress(in,out,zopfli,DEFLATE_ZOPFLI,threshold); }else if(miniz){ fprintf(stderr,"(miniz)\n"); ret=_compress(in,out,miniz,DEFLATE_MINIZ,threshold); }else if(slz){ fprintf(stderr,"(slz)\n"); ret=_compress(in,out,slz,DEFLATE_SLZ,threshold); }else if(libdeflate){ fprintf(stderr,"(libdeflate)\n"); ret=_compress(in,out,libdeflate,DEFLATE_LIBDEFLATE,threshold); } fclose(in),fclose(out); return ret; } }