CLI : Added : capability to compress/decompress to NULL (useful for testings)

Corrected small bug into LZ4_uncompress(). Update is recommended.

git-svn-id: https://lz4.googlecode.com/svn/trunk@28 650e7d94-2a16-8b24-b05c-7c0b3f6821cd
This commit is contained in:
yann.collet.73@gmail.com 2011-09-25 20:11:05 +00:00
parent e1ae3a0b95
commit dab6b9d3dc
2 changed files with 15 additions and 6 deletions

5
lz4.c
View File

@ -72,8 +72,8 @@
#define COPYTOKEN 4
#define COPYLENGTH 8
#define LASTLITERALS 5
#define MFLIMIT 12
#define MINLENGTH 13
#define MFLIMIT (COPYLENGTH+MINMATCH)
#define MINLENGTH (MFLIMIT+1)
#define MAXD_LOG 16
#define MAX_DISTANCE ((1 << MAXD_LOG) - 1)
@ -302,6 +302,7 @@ int LZ4_uncompress(char* source,
{
if (ref > oend) goto _output_error;
memcpy(op, ip, length);
ip+=length;
break; // Necessarily EOF
}
LZ4_WILDCOPY(ip, op, ref);

16
main.c
View File

@ -89,8 +89,8 @@ int usage()
fprintf(stderr, " -c : force compression (default)\n");
fprintf(stderr, " -d : force decompression \n");
fprintf(stderr, " -h : help (this text)\n");
fprintf(stderr, "input : can be 'stdin' (pipe) or a filename\n");
fprintf(stderr, "output : can be 'stdout' (pipe) or a filename\n");
fprintf(stderr, "input : can be 'stdin' (pipe) or a filename\n");
fprintf(stderr, "output : can be 'stdout'(pipe) or a filename or 'nul'\n");
return 0;
}
@ -113,11 +113,12 @@ int compress_file(char* input_filename, char* output_filename)
FILE* foutput;
char stdinmark[] = "stdin";
char stdoutmark[] = "stdout";
char nulmark[] = "nul";
if (!strcmp (input_filename, stdinmark)) {
fprintf(stderr, "Using stdin for input\n");
finput = stdin;
#ifdef _WIN32 /* We need to set stdin/stdout to binary mode. Damn windows. */
#ifdef _WIN32 // Need to set stdin/stdout to binary mode specifically for windows
_setmode( _fileno( stdin ), _O_BINARY );
#endif
} else {
@ -127,9 +128,12 @@ int compress_file(char* input_filename, char* output_filename)
if (!strcmp (output_filename, stdoutmark)) {
fprintf(stderr, "Using stdout for output\n");
foutput = stdout;
#ifdef _WIN32 /* We need to set stdin/stdout to binary mode. Damn windows. */
#ifdef _WIN32 // Need to set stdin/stdout to binary mode specifically for windows
_setmode( _fileno( stdout ), _O_BINARY );
#endif
} else if (!strcmp (input_filename, nulmark)) {
fprintf(stderr, "Sending output to nul\n");
foutput = NULL;
} else {
foutput = fopen( output_filename, "wb" );
}
@ -186,6 +190,7 @@ int decode_file(char* input_filename, char* output_filename)
FILE* foutput;
char stdinmark[] = "stdin";
char stdoutmark[] = "stdout";
char nulmark[] = "nul";
if (!strcmp (input_filename, stdinmark)) {
fprintf(stderr, "Using stdin for input\n");
@ -203,6 +208,9 @@ int decode_file(char* input_filename, char* output_filename)
#ifdef _WIN32 // need to set stdin/stdout to binary mode
_setmode( _fileno( stdout ), _O_BINARY );
#endif
} else if (!strcmp (input_filename, nulmark)) {
fprintf(stderr, "Sending output to nul\n");
foutput = NULL;
} else {
foutput = fopen( output_filename, "wb" );
}