From 9674c03a8e448124e806751664b97e62cc317f8f Mon Sep 17 00:00:00 2001 From: Siyuan Fu Date: Tue, 24 Mar 2015 20:41:03 -0400 Subject: [PATCH] fix some small problem in archiver, no change to libcsc --- src/archiver/csa_file.h | 6 +----- src/archiver/csa_worker.cpp | 4 ++-- src/archiver/csarc.cpp | 35 +++++++++++++++++++++-------------- 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/archiver/csa_file.h b/src/archiver/csa_file.h index 2bb3699..fb075f5 100644 --- a/src/archiver/csa_file.h +++ b/src/archiver/csa_file.h @@ -28,7 +28,6 @@ class InputFile { bool open(const char* filename) { in=fopen(filename, "rb"); - if (!in) perror(filename); return in!=0; } @@ -162,9 +161,6 @@ class InputFile { std::wstring w=utow(filename, true); in=CreateFile(w.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - if (in==INVALID_HANDLE_VALUE){ - fprintf(stderr, "File open error %s\n", filename); - } return in!=INVALID_HANDLE_VALUE; } @@ -231,7 +227,7 @@ class OutputFile { FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (out==INVALID_HANDLE_VALUE) { - fprintf(stderr, "File open error %s\n", filename); + fprintf(stderr, "File open error %s\n", filename.c_str()); DWORD x = GetLastError(); printf("%d", x); } else { diff --git a/src/archiver/csa_worker.cpp b/src/archiver/csa_worker.cpp index d7d31e1..7085fcd 100644 --- a/src/archiver/csa_worker.cpp +++ b/src/archiver/csa_worker.cpp @@ -24,7 +24,7 @@ int CompressionWorker::do_work() { FileReader file_reader; file_reader.obj = new AsyncFileReader(task_->filelist, - std::min(32 * 1048576, task_->total_size)); + std::min(32 * 1048576, task_->total_size)); file_reader.is.Read = file_read_proc; FileWriter file_writer; @@ -32,7 +32,7 @@ int CompressionWorker::do_work() file_writer.os.Write = file_write_proc; CSCProps p; - CSCEncProps_Init(&p, std::min(dict_size_, task_->total_size), level_); + CSCEncProps_Init(&p, std::min(dict_size_, task_->total_size), level_); CSCEncHandle h = CSCEnc_Create(&p, (ISeqOutStream*)&file_writer); uint8_t buf[CSC_PROP_SIZE]; CSCEnc_WriteProperties(&p, buf, 0); diff --git a/src/archiver/csarc.cpp b/src/archiver/csarc.cpp index 01d8b1d..d6317fb 100644 --- a/src/archiver/csarc.cpp +++ b/src/archiver/csarc.cpp @@ -60,7 +60,7 @@ class CSArc { void compress_index(); void decompress_index(); void compress_mt(vector &tasks); - void decompress_mt(vector &tasks); + int decompress_mt(vector &tasks); public: int Add(); @@ -407,7 +407,7 @@ void CSArc::compress_mt(vector &tasks) pi.Finish(); } -void CSArc::decompress_mt(vector &tasks) +int CSArc::decompress_mt(vector &tasks) { DecompressionWorker *workers[8]; uint32_t workertasks[8]; @@ -467,14 +467,16 @@ void CSArc::decompress_mt(vector &tasks) if (decomp_ret < 0) { fprintf(stderr, "Extraction error, archive corrupted\n"); + return -1; } + return 0; } int CSArc::Add() { { // check if file already exists - OutputFile f; + InputFile f; f.open(arcname_.c_str()); if (f.isopen() && !overwrite_) { fprintf(stderr, "Archive %s already exists, use -f to force overwrite\n", arcname_.c_str()); @@ -598,7 +600,7 @@ int CSArc::check_header() int CSArc::Extract() { if (check_header() < 0) - return -1; + return 1; decompress_index(); vector tasks; @@ -644,8 +646,10 @@ int CSArc::Extract() f.close(it->second.edate, it->second.eattr); } } - decompress_mt(tasks); - return 0; + if (decompress_mt(tasks) < 0) + return -1; + else + return 0; } int CSArc::List() @@ -697,8 +701,10 @@ int CSArc::Test() task->push_back(DUMMY_FILENAME, ff.posfile, ff.size, ff.posblock, ff.checksum, it); } } - decompress_mt(tasks); - return 0; + if (decompress_mt(tasks) < 0) + return -1; + else + return 0; } // Return the part of fn up to the last slash @@ -829,7 +835,7 @@ bool CSArc::isselected(const char* filename) { int main(int argc, char *argv[]) { CSArc csarc; - fprintf(stderr, "CSArc 3.3, experimential archiver by Siyuan Fu\n (https://github.com/fusiyuan2010)\n"); + fprintf(stderr, "CSArc 3.3, experimental archiver by Siyuan Fu\n (https://github.com/fusiyuan2010)\n"); if (argc < 3) { fprintf(stderr, "At least two arguments, command and archive name\n"); @@ -844,18 +850,19 @@ int main(int argc, char *argv[]) return 1; } + int ret = 0; switch(op) { case 'a': - csarc.Add(); + ret = csarc.Add(); break; case 't': - csarc.Test(); + ret = csarc.Test(); break; case 'l': - csarc.List(); + ret = csarc.List(); break; case 'x': - csarc.Extract(); + ret = csarc.Extract(); break; default: csarc.Usage(); @@ -863,7 +870,7 @@ int main(int argc, char *argv[]) return 1; } - return 0; + return ret; }