summaryrefslogtreecommitdiffstats
path: root/programs/lz4io.c
diff options
context:
space:
mode:
Diffstat (limited to 'programs/lz4io.c')
-rw-r--r--programs/lz4io.c184
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;
}