From 737720be9b1044b501bc5a86a9835b4b9fdeadd3 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 7 Nov 2015 15:28:27 +0100 Subject: Merging upstream version 1.3. Signed-off-by: Daniel Baumann --- main.c | 84 ++++++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 48 insertions(+), 36 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 3a75453..353a1d9 100644 --- a/main.c +++ b/main.c @@ -1,6 +1,6 @@ /* Pdlzip - Data compressor based on the LZMA algorithm 2009-08-14 : Igor Pavlov : Public domain - Copyright (C) 2010, 2011 Antonio Diaz Diaz. + Copyright (C) 2010, 2011, 2012 Antonio Diaz Diaz. This program is free software: you have unlimited permission to copy, distribute and modify it. @@ -19,8 +19,11 @@ #include #include #include +#if defined(__OS2__) +#include +#endif -#include "carg_parser.h" +#include "pdarg_parser.h" #include "pdlzip.h" #include "Alloc.h" #include "7zFile.h" @@ -50,7 +53,7 @@ static ISzAlloc g_Alloc = { SzAlloc, SzFree }; const char * const Program_name = "Pdlzip"; const char * const program_name = "pdlzip"; -const char * const program_year = "2011"; +const char * const program_year = "2012"; const char * invocation_name = 0; @@ -70,7 +73,7 @@ enum Mode { m_compress, m_decompress, m_test }; char * output_filename = 0; -/* assure at least a minimum size for buffer `buf' */ +/* assure at least a minimum size for buffer 'buf' */ inline void * resize_buffer( void * buf, const int min_size ) { if( buf ) buf = realloc( buf, min_size ); @@ -82,29 +85,33 @@ inline void * resize_buffer( void * buf, const int min_size ) static void show_help() { printf( "%s - A \"public domain\" version of the lzip data compressor\n", Program_name ); - printf( "also able to decompress legacy lzma-alone (.lzma) files.\n" ); - printf( "\nUsage: %s [options] [file]\n", invocation_name ); - printf( "\nOptions:\n" ); - printf( " -h, --help display this help and exit\n" ); - printf( " -V, --version output version information and exit\n" ); - printf( " -c, --stdout send output to standard output\n" ); - printf( " -d, --decompress decompress\n" ); -/* printf( " -f, --force overwrite existing output files\n" ); */ -/* printf( " -k, --keep keep (don't delete) input files\n" ); */ - printf( " -m, --match-length= set match length limit in bytes [36]\n" ); - printf( " -q, --quiet suppress all messages\n" ); - printf( " -s, --dictionary-size= set dictionary size limit in bytes [8MiB]\n" ); - printf( " -t, --test test compressed file integrity\n" ); - printf( " -v, --verbose be verbose (a 2nd -v gives more)\n" ); - printf( " -1 .. -9 set compression level [default 6]\n" ); - printf( " --fast alias for -1\n" ); - printf( " --best alias for -9\n" ); - printf( "If no file name is given, %s compresses or decompresses\n", program_name ); - printf( "from standard input to standard output.\n" ); - printf( "Numbers may be followed by a multiplier: k = kB = 10^3 = 1000,\n" ); - printf( "Ki = KiB = 2^10 = 1024, M = 10^6, Mi = 2^20, G = 10^9, Gi = 2^30, etc...\n" ); - printf( "\nReport bugs to lzip-bug@nongnu.org\n" ); - printf( "Pdlzip home page: http://www.nongnu.org/lzip/pdlzip.html\n" ); + printf( "also able to decompress legacy lzma-alone (.lzma) files.\n" + "\nUsage: %s [options] [file]\n", invocation_name ); + printf( "\nOptions:\n" + " -h, --help display this help and exit\n" + " -V, --version output version information and exit\n" + " -c, --stdout send output to standard output\n" + " -d, --decompress decompress\n" +/* " -f, --force overwrite existing output files\n" */ +/* " -k, --keep keep (don't delete) input files\n" */ + " -m, --match-length= set match length limit in bytes [36]\n" + " -q, --quiet suppress all messages\n" + " -s, --dictionary-size= set dictionary size limit in bytes [8MiB]\n" + " -t, --test test compressed file integrity\n" + " -v, --verbose be verbose (a 2nd -v gives more)\n" + " -1 .. -9 set compression level [default 6]\n" + " --fast alias for -1\n" + " --best alias for -9\n" + "If no file name is given, pdlzip compresses or decompresses\n" + "from standard input to standard output.\n" + "Numbers may be followed by a multiplier: k = kB = 10^3 = 1000,\n" + "Ki = KiB = 2^10 = 1024, M = 10^6, Mi = 2^20, G = 10^9, Gi = 2^30, etc...\n" + "The bidimensional parameter space of LZMA can't be mapped to a linear\n" + "scale optimal for all files. If your files are large, very repetitive,\n" + "etc, you may need to use the --match-length and --dictionary-size\n" + "options directly to achieve optimal performance.\n" + "\nReport bugs to lzip-bug@nongnu.org\n" + "Pdlzip home page: http://www.nongnu.org/lzip/pdlzip.html\n" ); } @@ -112,9 +119,9 @@ static void show_version() { printf( "%s %s\n", Program_name, PROGVERSION ); printf( "Copyright (C) %s Antonio Diaz Diaz.\n", program_year ); - printf( "Public Domain 2009 Igor Pavlov.\n" ); - printf( "This is free software: you are free to change and redistribute it.\n" ); - printf( "There is NO WARRANTY, to the extent permitted by law.\n" ); + printf( "Public Domain 2009 Igor Pavlov.\n" + "This is free software: you are free to change and redistribute it.\n" + "There is NO WARRANTY, to the extent permitted by law.\n" ); } @@ -125,11 +132,12 @@ static const char * format_num( long long num ) enum { buf_size = 16, factor = 1024 }; static char buf[buf_size]; const char *p = ""; + bool exact = ( num % factor == 0 ); int i; for( i = 0; i < 8 && ( llabs( num ) > 9999 || - ( llabs( num ) >= factor && num % factor == 0 ) ); ++i ) - { num /= factor; p = prefix[i]; } + ( exact && llabs( num ) >= factor ) ); ++i ) + { num /= factor; if( num % factor != 0 ) exact = false; p = prefix[i]; } snprintf( buf, buf_size, "%lld %s", num, p ); return buf; } @@ -537,7 +545,7 @@ void show_error( const char * const msg, const int errcode, const bool help ) fprintf( stderr, "\n" ); } if( help && invocation_name && invocation_name[0] ) - fprintf( stderr, "Try `%s --help' for more information.\n", + fprintf( stderr, "Try '%s --help' for more information.\n", invocation_name ); } } @@ -593,8 +601,8 @@ static void set_d_outname( const char * const name ) output_filename = resize_buffer( output_filename, strlen( name ) + 4 + 1 ); strcpy( output_filename, name ); strcat( output_filename, ".out" ); - if( verbosity >= 0 ) - fprintf( stderr, "%s: can't guess original name for `%s' -- using `%s'.\n", + if( verbosity >= 1 ) + fprintf( stderr, "%s: Can't guess original name for '%s' -- using '%s'.\n", program_name, name, output_filename ); } @@ -644,7 +652,6 @@ int main( const int argc, const char * const argv[] ) { 'b', "member-size", ap_yes }, { 'c', "stdout", ap_no }, { 'd', "decompress", ap_no }, - { 'e', "extreme", ap_no }, { 'f', "force", ap_no }, { 'h', "help", ap_no }, { 'k', "keep", ap_no }, @@ -699,6 +706,11 @@ int main( const int argc, const char * const argv[] ) } } /* end process options */ +#if defined(__OS2__) + _fsetmode( stdin, "b" ); + _fsetmode( stdout, "b" ); +#endif + if( ap_arguments( &parser ) > argind && strcmp( ap_argument( &parser, argind ), "-" ) ) input_filename = ap_argument( &parser, argind ); -- cgit v1.2.3