diff options
Diffstat (limited to 'programs/lz4io.c')
-rw-r--r-- | programs/lz4io.c | 184 |
1 files changed, 92 insertions, 92 deletions
diff --git a/programs/lz4io.c b/programs/lz4io.c index a886ac7..fa1f0f9 100644 --- a/programs/lz4io.c +++ b/programs/lz4io.c @@ -29,13 +29,13 @@ - The license of this source file is GPLv2. */ -//************************************** -// Compiler Options -//************************************** +/************************************** +* Compiler Options +***************************************/ #ifdef _MSC_VER /* Visual Studio */ # define _CRT_SECURE_NO_WARNINGS -# define _CRT_SECURE_NO_DEPRECATE // VS2005 -# pragma warning(disable : 4127) // disable: C4127: conditional expression is constant +# define _CRT_SECURE_NO_DEPRECATE /* VS2005 */ +# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ #endif #define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) @@ -44,45 +44,45 @@ # pragma GCC diagnostic ignored "-Wmissing-field-initializers" /* GCC bug 53119 : doesn't accept { 0 } as initializer (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119) */ #endif -#define _LARGE_FILES // Large file support on 32-bits AIX -#define _FILE_OFFSET_BITS 64 // Large file support on 32-bits unix -#define _POSIX_SOURCE 1 // for fileno() within <stdio.h> on unix +#define _LARGE_FILES /* Large file support on 32-bits AIX */ +#define _FILE_OFFSET_BITS 64 /* Large file support on 32-bits unix */ +#define _POSIX_SOURCE 1 /* for fileno() within <stdio.h> on unix */ -//**************************** -// Includes -//**************************** -#include <stdio.h> // fprintf, fopen, fread, _fileno, stdin, stdout -#include <stdlib.h> // malloc, free -#include <string.h> // strcmp, strlen -#include <time.h> // clock +/**************************** +* Includes +*****************************/ +#include <stdio.h> /* fprintf, fopen, fread, _fileno, stdin, stdout */ +#include <stdlib.h> /* malloc, free */ +#include <string.h> /* strcmp, strlen */ +#include <time.h> /* clock */ #include "lz4io.h" -#include "lz4.h" // still required for legacy format -#include "lz4hc.h" // still required for legacy format +#include "lz4.h" /* still required for legacy format */ +#include "lz4hc.h" /* still required for legacy format */ #include "lz4frame.h" -//**************************** -// OS-specific Includes -//**************************** +/**************************** +* OS-specific Includes +*****************************/ #if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) -# include <fcntl.h> // _O_BINARY -# include <io.h> // _setmode, _isatty +# include <fcntl.h> /* _O_BINARY */ +# include <io.h> /* _setmode, _isatty */ # ifdef __MINGW32__ - int _fileno(FILE *stream); // MINGW somehow forgets to include this windows declaration into <stdio.h> + int _fileno(FILE *stream); /* MINGW somehow forgets to include this windows declaration into <stdio.h> */ # endif # define SET_BINARY_MODE(file) _setmode(_fileno(file), _O_BINARY) # define IS_CONSOLE(stdStream) _isatty(_fileno(stdStream)) #else -# include <unistd.h> // isatty +# include <unistd.h> /* isatty */ # define SET_BINARY_MODE(file) # define IS_CONSOLE(stdStream) isatty(fileno(stdStream)) #endif -//**************************** -// Constants -//**************************** +/**************************** +* Constants +*****************************/ #define KB *(1 <<10) #define MB *(1 <<20) #define GB *(1U<<30) @@ -108,9 +108,9 @@ #define LZ4S_MAXHEADERSIZE (MAGICNUMBER_SIZE+2+8+4+1) -//************************************** -// Macros -//************************************** +/************************************** +* Macros +***************************************/ #define DISPLAY(...) fprintf(stderr, __VA_ARGS__) #define DISPLAYLEVEL(l, ...) if (displayLevel>=l) { DISPLAY(__VA_ARGS__); } #define DISPLAYUPDATE(l, ...) if (displayLevel>=l) { \ @@ -121,10 +121,10 @@ static const unsigned refreshRate = 150; static clock_t g_time = 0; -//************************************** -// Local Parameters -//************************************** -static int displayLevel = 0; // 0 : no display // 1: errors // 2 : + result + interaction + warnings ; // 3 : + progression; // 4 : + information +/************************************** +* Local Parameters +***************************************/ +static int displayLevel = 0; /* 0 : no display ; 1: errors ; 2 : + result + interaction + warnings ; 3 : + progression; 4 : + information */ static int overwrite = 1; static int globalBlockSizeId = LZ4S_BLOCKSIZEID_DEFAULT; static int blockChecksum = 0; @@ -135,9 +135,9 @@ static const int minBlockSizeID = 4; static const int maxBlockSizeID = 7; -//************************************** -// Exceptions -//************************************** +/************************************** +* Exceptions +***************************************/ #define DEBUG 0 #define DEBUGOUTPUT(...) if (DEBUG) DISPLAY(__VA_ARGS__); #define EXM_THROW(error, ...) \ @@ -150,9 +150,9 @@ static const int maxBlockSizeID = 7; } -//************************************** -// Version modifiers -//************************************** +/************************************** +* Version modifiers +***************************************/ #define EXTENDED_ARGUMENTS #define EXTENDED_HELP #define EXTENDED_FORMAT @@ -245,7 +245,7 @@ static int get_fileHandle(char* input_filename, char* output_filename, FILE** pf } else { - // Check if destination file already exists + /* Check if destination file already exists */ *pfoutput=0; if (output_filename != nulmark) *pfoutput = fopen( output_filename, "rb" ); if (*pfoutput!=0) @@ -256,7 +256,7 @@ static int get_fileHandle(char* input_filename, char* output_filename, FILE** pf char ch; DISPLAYLEVEL(2, "Warning : %s already exists\n", output_filename); DISPLAYLEVEL(2, "Overwrite ? (Y/N) : "); - if (displayLevel <= 1) EXM_THROW(11, "Operation aborted : %s already exists", output_filename); // No interaction possible + if (displayLevel <= 1) EXM_THROW(11, "Operation aborted : %s already exists", output_filename); /* No interaction possible */ ch = (char)getchar(); if ((ch!='Y') && (ch!='y')) EXM_THROW(11, "Operation aborted : %s already exists", output_filename); } @@ -303,44 +303,44 @@ int LZ4IO_compressFilename_Legacy(char* input_filename, char* output_filename, i size_t sizeCheck; - // Init + /* Init */ start = clock(); if (compressionlevel < 3) compressionFunction = LZ4_compress; else compressionFunction = LZ4_compressHC; get_fileHandle(input_filename, output_filename, &finput, &foutput); if ((displayLevel==2) && (compressionlevel==1)) displayLevel=3; - // Allocate Memory + /* Allocate Memory */ in_buff = (char*)malloc(LEGACY_BLOCKSIZE); out_buff = (char*)malloc(LZ4_compressBound(LEGACY_BLOCKSIZE)); if (!in_buff || !out_buff) EXM_THROW(21, "Allocation error : not enough memory"); - // Write Archive Header + /* Write Archive Header */ LZ4IO_writeLE32(out_buff, LEGACY_MAGICNUMBER); sizeCheck = fwrite(out_buff, 1, MAGICNUMBER_SIZE, foutput); if (sizeCheck!=MAGICNUMBER_SIZE) EXM_THROW(22, "Write error : cannot write header"); - // Main Loop + /* Main Loop */ while (1) { unsigned int outSize; - // Read Block + /* Read Block */ int inSize = (int) fread(in_buff, (size_t)1, (size_t)LEGACY_BLOCKSIZE, finput); if( inSize<=0 ) break; filesize += inSize; - // Compress Block + /* Compress Block */ outSize = compressionFunction(in_buff, out_buff+4, inSize); compressedfilesize += outSize+4; DISPLAYUPDATE(3, "\rRead : %i MB ==> %.2f%% ", (int)(filesize>>20), (double)compressedfilesize/filesize*100); - // Write Block + /* Write Block */ LZ4IO_writeLE32(out_buff, outSize); sizeCheck = fwrite(out_buff, 1, outSize+4, foutput); if (sizeCheck!=(size_t)(outSize+4)) EXM_THROW(23, "Write error : cannot write compressed block"); } - // Status + /* Status */ end = clock(); DISPLAYLEVEL(2, "\r%79s\r", ""); DISPLAYLEVEL(2,"Compressed %llu bytes into %llu bytes ==> %.2f%%\n", @@ -350,7 +350,7 @@ int LZ4IO_compressFilename_Legacy(char* input_filename, char* output_filename, i DISPLAYLEVEL(4,"Done in %.2f s ==> %.2f MB/s\n", seconds, (double)filesize / seconds / 1024 / 1024); } - // Close & Free + /* Close & Free */ free(in_buff); free(out_buff); fclose(finput); @@ -380,7 +380,7 @@ int LZ4IO_compressFilename(char* input_filename, char* output_filename, int comp LZ4F_preferences_t prefs = {0}; - // Init + /* Init */ start = clock(); if ((displayLevel==2) && (compressionLevel>=3)) displayLevel=3; errorCode = LZ4F_createCompressionContext(&ctx, LZ4F_VERSION); @@ -388,51 +388,51 @@ int LZ4IO_compressFilename(char* input_filename, char* output_filename, int comp get_fileHandle(input_filename, output_filename, &finput, &foutput); blockSize = LZ4S_GetBlockSize_FromBlockId (globalBlockSizeId); - // Set compression parameters + /* Set compression parameters */ prefs.autoFlush = 1; prefs.compressionLevel = compressionLevel; prefs.frameInfo.blockMode = blockIndependence; prefs.frameInfo.blockSizeID = globalBlockSizeId; prefs.frameInfo.contentChecksumFlag = streamChecksum; - // Allocate Memory + /* Allocate Memory */ in_buff = (char*)malloc(blockSize); outBuffSize = LZ4F_compressBound(blockSize, &prefs); out_buff = (char*)malloc(outBuffSize); if (!in_buff || !out_buff) EXM_THROW(31, "Allocation error : not enough memory"); - // Write Archive Header + /* Write Archive Header */ headerSize = LZ4F_compressBegin(ctx, out_buff, outBuffSize, &prefs); if (LZ4F_isError(headerSize)) EXM_THROW(32, "File header generation failed : %s", LZ4F_getErrorName(headerSize)); sizeCheck = fwrite(out_buff, 1, headerSize, foutput); if (sizeCheck!=headerSize) EXM_THROW(33, "Write error : cannot write header"); compressedfilesize += headerSize; - // read first block + /* read first block */ readSize = fread(in_buff, (size_t)1, (size_t)blockSize, finput); filesize += readSize; - // Main Loop + /* Main Loop */ while (readSize>0) { size_t outSize; - // Compress Block + /* Compress Block */ outSize = LZ4F_compressUpdate(ctx, out_buff, outBuffSize, in_buff, readSize, NULL); if (LZ4F_isError(outSize)) EXM_THROW(34, "Compression failed : %s", LZ4F_getErrorName(outSize)); compressedfilesize += outSize; DISPLAYUPDATE(3, "\rRead : %i MB ==> %.2f%% ", (int)(filesize>>20), (double)compressedfilesize/filesize*100); - // Write Block + /* Write Block */ sizeCheck = fwrite(out_buff, 1, outSize, foutput); if (sizeCheck!=outSize) EXM_THROW(35, "Write error : cannot write compressed block"); - // Read next block + /* Read next block */ readSize = fread(in_buff, (size_t)1, (size_t)blockSize, finput); filesize += readSize; } - // End of Stream mark + /* End of Stream mark */ headerSize = LZ4F_compressEnd(ctx, out_buff, outBuffSize, NULL); if (LZ4F_isError(headerSize)) EXM_THROW(36, "End of file generation failed : %s", LZ4F_getErrorName(headerSize)); @@ -440,7 +440,7 @@ int LZ4IO_compressFilename(char* input_filename, char* output_filename, int comp if (sizeCheck!=headerSize) EXM_THROW(37, "Write error : cannot write end of stream"); compressedfilesize += headerSize; - // Close & Free + /* Close & Free */ free(in_buff); free(out_buff); fclose(finput); @@ -448,7 +448,7 @@ int LZ4IO_compressFilename(char* input_filename, char* output_filename, int comp errorCode = LZ4F_freeCompressionContext(ctx); if (LZ4F_isError(errorCode)) EXM_THROW(38, "Error : can't free LZ4F context resource : %s", LZ4F_getErrorName(errorCode)); - // Final Status + /* Final Status */ end = clock(); DISPLAYLEVEL(2, "\r%79s\r", ""); DISPLAYLEVEL(2, "Compressed %llu bytes into %llu bytes ==> %.2f%%\n", @@ -482,42 +482,42 @@ static unsigned long long decodeLegacyStream(FILE* finput, FILE* foutput) char* in_buff; char* out_buff; - // Allocate Memory + /* Allocate Memory */ in_buff = (char*)malloc(LZ4_compressBound(LEGACY_BLOCKSIZE)); out_buff = (char*)malloc(LEGACY_BLOCKSIZE); if (!in_buff || !out_buff) EXM_THROW(51, "Allocation error : not enough memory"); - // Main Loop + /* Main Loop */ while (1) { int decodeSize; size_t sizeCheck; unsigned int blockSize; - // Block Size + /* Block Size */ sizeCheck = fread(in_buff, 1, 4, finput); - if (sizeCheck==0) break; // Nothing to read : file read is completed - blockSize = LZ4IO_readLE32(in_buff); // Convert to Little Endian + if (sizeCheck==0) break; /* Nothing to read : file read is completed */ + blockSize = LZ4IO_readLE32(in_buff); /* Convert to Little Endian */ if (blockSize > LZ4_COMPRESSBOUND(LEGACY_BLOCKSIZE)) - { // Cannot read next block : maybe new stream ? + { /* Cannot read next block : maybe new stream ? */ fseek(finput, -4, SEEK_CUR); break; } - // Read Block + /* Read Block */ sizeCheck = fread(in_buff, 1, blockSize, finput); - // Decode Block + /* Decode Block */ decodeSize = LZ4_decompress_safe(in_buff, out_buff, blockSize, LEGACY_BLOCKSIZE); if (decodeSize < 0) EXM_THROW(52, "Decoding Failed ! Corrupted input detected !"); filesize += decodeSize; - // Write Block + /* Write Block */ sizeCheck = fwrite(out_buff, 1, decodeSize, foutput); if (sizeCheck != (size_t)decodeSize) EXM_THROW(53, "Write error : cannot write decoded block into output\n"); } - // Free + /* Free */ free(in_buff); free(out_buff); @@ -537,12 +537,12 @@ static unsigned long long decodeLZ4S(FILE* finput, FILE* foutput) LZ4F_errorCode_t errorCode; LZ4F_frameInfo_t frameInfo; - // init + /* init */ errorCode = LZ4F_createDecompressionContext(&ctx, LZ4F_VERSION); if (LZ4F_isError(errorCode)) EXM_THROW(60, "Allocation error : can't create context : %s", LZ4F_getErrorName(errorCode)); LZ4IO_writeLE32(headerBuff, LZ4S_MAGICNUMBER); /* regenerated here, as it was already read from finput */ - // Decode stream descriptor + /* Decode stream descriptor */ outBuffSize = 0; inBuffSize = 0; sizeCheck = MAGICNUMBER_SIZE; nextToRead = LZ4F_decompress(ctx, NULL, &outBuffSize, headerBuff, &sizeCheck, NULL); if (LZ4F_isError(nextToRead)) EXM_THROW(61, "Decompression error : %s", LZ4F_getErrorName(nextToRead)); @@ -553,35 +553,35 @@ static unsigned long long decodeLZ4S(FILE* finput, FILE* foutput) errorCode = LZ4F_getFrameInfo(ctx, &frameInfo, NULL, &inBuffSize); if (LZ4F_isError(errorCode)) EXM_THROW(64, "can't decode frame header : %s", LZ4F_getErrorName(errorCode)); - // Allocate Memory + /* Allocate Memory */ outBuffSize = LZ4IO_setBlockSizeID(frameInfo.blockSizeID); inBuffSize = outBuffSize + 4; inBuff = (char*)malloc(inBuffSize); outBuff = (char*)malloc(outBuffSize); if (!inBuff || !outBuff) EXM_THROW(65, "Allocation error : not enough memory"); - // Main Loop + /* Main Loop */ while (nextToRead != 0) { size_t decodedBytes = outBuffSize; - // Read Block + /* Read Block */ sizeCheck = fread(inBuff, 1, nextToRead, finput); if (sizeCheck!=nextToRead) EXM_THROW(66, "Read error "); - // Decode Block + /* Decode Block */ errorCode = LZ4F_decompress(ctx, outBuff, &decodedBytes, inBuff, &sizeCheck, NULL); if (LZ4F_isError(errorCode)) EXM_THROW(67, "Decompression error : %s", LZ4F_getErrorName(errorCode)); if (sizeCheck!=nextToRead) EXM_THROW(67, "Synchronization error"); nextToRead = errorCode; filesize += decodedBytes; - // Write Block + /* Write Block */ sizeCheck = fwrite(outBuff, 1, decodedBytes, foutput); if (sizeCheck != decodedBytes) EXM_THROW(68, "Write error : cannot write decoded block\n"); } - // Free + /* Free */ free(inBuff); free(outBuff); errorCode = LZ4F_freeDecompressionContext(ctx); @@ -599,12 +599,12 @@ static unsigned long long selectDecoder( FILE* finput, FILE* foutput) int errorNb; size_t nbReadBytes; - // Check Archive Header + /* Check Archive Header */ nbReadBytes = fread(U32store, 1, MAGICNUMBER_SIZE, finput); - if (nbReadBytes==0) return ENDOFSTREAM; // EOF + if (nbReadBytes==0) return ENDOFSTREAM; /* EOF */ if (nbReadBytes != MAGICNUMBER_SIZE) EXM_THROW(40, "Unrecognized header : Magic Number unreadable"); - magicNumber = LZ4IO_readLE32(U32store); // Convert to Little Endian format - if (LZ4S_isSkippableMagicNumber(magicNumber)) magicNumber = LZ4S_SKIPPABLE0; // fold skippable magic numbers + magicNumber = LZ4IO_readLE32(U32store); /* Little Endian format */ + if (LZ4S_isSkippableMagicNumber(magicNumber)) magicNumber = LZ4S_SKIPPABLE0; /* fold skippable magic numbers */ switch(magicNumber) { @@ -617,13 +617,13 @@ static unsigned long long selectDecoder( FILE* finput, FILE* foutput) DISPLAYLEVEL(4, "Skipping detected skippable area \n"); nbReadBytes = fread(U32store, 1, 4, finput); if (nbReadBytes != 4) EXM_THROW(42, "Stream error : skippable size unreadable"); - size = LZ4IO_readLE32(U32store); // Convert to Little Endian format + size = LZ4IO_readLE32(U32store); /* Little Endian format */ errorNb = fseek(finput, size, SEEK_CUR); if (errorNb != 0) EXM_THROW(43, "Stream error : cannot skip skippable area"); return selectDecoder(finput, foutput); EXTENDED_FORMAT; default: - if (ftell(finput) == MAGICNUMBER_SIZE) EXM_THROW(44,"Unrecognized header : file cannot be decoded"); // Wrong magic number at the beginning of 1st stream + if (ftell(finput) == MAGICNUMBER_SIZE) EXM_THROW(44,"Unrecognized header : file cannot be decoded"); /* Wrong magic number at the beginning of 1st stream */ DISPLAYLEVEL(2, "Stream followed by unrecognized data\n"); return ENDOFSTREAM; } @@ -638,11 +638,11 @@ int LZ4IO_decompressFilename(char* input_filename, char* output_filename) clock_t start, end; - // Init + /* Init */ start = clock(); get_fileHandle(input_filename, output_filename, &finput, &foutput); - // Loop over multiple streams + /* Loop over multiple streams */ do { decodedSize = selectDecoder(finput, foutput); @@ -650,7 +650,7 @@ int LZ4IO_decompressFilename(char* input_filename, char* output_filename) filesize += decodedSize; } while (decodedSize != ENDOFSTREAM); - // Final Status + /* Final Status */ end = clock(); DISPLAYLEVEL(2, "\r%79s\r", ""); DISPLAYLEVEL(2, "Successfully decoded %llu bytes \n", filesize); @@ -659,11 +659,11 @@ int LZ4IO_decompressFilename(char* input_filename, char* output_filename) DISPLAYLEVEL(4, "Done in %.2f s ==> %.2f MB/s\n", seconds, (double)filesize / seconds / 1024 / 1024); } - // Close + /* Close */ fclose(finput); fclose(foutput); - // Error status = OK + /* Error status = OK */ return 0; } |