rdate: make it do something remotely sane, facing 32-bit time overflow
[oweals/busybox.git] / archival / lzop.c
index f5e06b54bef8727938dce98d8ace83dd77f331ed..e0e90ac6cdcb8ca31d07d37f79a3c80812aa21d9 100644 (file)
    "Minimalized" for busybox by Alain Knaff
 */
 
+//config:config LZOP
+//config:      bool "lzop"
+//config:      default y
+//config:      help
+//config:        Lzop compression/decompresion.
+//config:
+//config:config UNLZOP
+//config:      bool "unlzop"
+//config:      default y
+//config:      help
+//config:        Lzop decompresion.
+//config:
+//config:config LZOPCAT
+//config:      bool "lzopcat"
+//config:      default y
+//config:      help
+//config:        Alias to "unlzop -c".
+//config:
+//config:config LZOP_COMPR_HIGH
+//config:      bool "lzop compression levels 7,8,9 (not very useful)"
+//config:      default n
+//config:      depends on LZOP || UNLZOP || LZOPCAT
+//config:      help
+//config:        High levels (7,8,9) of lzop compression. These levels
+//config:        are actually slower than gzip at equivalent compression ratios
+//config:        and take up 3.2K of code.
+
+//applet:IF_LZOP(APPLET(lzop, BB_DIR_BIN, BB_SUID_DROP))
+//applet:IF_UNLZOP(APPLET_ODDNAME(unlzop, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, unlzop))
+//applet:IF_LZOPCAT(APPLET_ODDNAME(lzopcat, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, lzopcat))
+//kbuild:lib-$(CONFIG_LZOP) += lzop.o
+//kbuild:lib-$(CONFIG_UNLZOP) += lzop.o
+//kbuild:lib-$(CONFIG_LZOPCAT) += lzop.o
+
 //usage:#define lzop_trivial_usage
 //usage:       "[-cfvd123456789CF] [FILE]..."
 //usage:#define lzop_full_usage "\n\n"
 //usage:     "\n       -C      Also write checksum of compressed block"
 //usage:
 //usage:#define lzopcat_trivial_usage
-//usage:       "[-vCF] [FILE]..."
+//usage:       "[-vF] [FILE]..."
 //usage:#define lzopcat_full_usage "\n\n"
 //usage:       "       -v      Verbose"
-//usage:     "\n       -F      Don't store or verify checksum"
+//usage:     "\n       -F      Don't verify checksum"
 //usage:
 //usage:#define unlzop_trivial_usage
-//usage:       "[-cfvCF] [FILE]..."
+//usage:       "[-cfvF] [FILE]..."
 //usage:#define unlzop_full_usage "\n\n"
 //usage:       "       -c      Write to stdout"
 //usage:     "\n       -f      Force"
 //usage:     "\n       -v      Verbose"
-//usage:     "\n       -F      Don't store or verify checksum"
+//usage:     "\n       -F      Don't verify checksum"
 
 #include "libbb.h"
+#include "common_bufsiz.h"
 #include "bb_archive.h"
 #include "liblzo_interface.h"
 
@@ -423,8 +458,8 @@ struct globals {
        chksum_t chksum_in;
        chksum_t chksum_out;
 } FIX_ALIASING;
-#define G (*(struct globals*)&bb_common_bufsiz1)
-#define INIT_G() do { } while (0)
+#define G (*(struct globals*)bb_common_bufsiz1)
+#define INIT_G() do { setup_common_bufsiz(); } while (0)
 //#define G (*ptr_to_globals)
 //#define INIT_G() do {
 //     SET_PTR_TO_GLOBALS(xzalloc(sizeof(G)));
@@ -438,6 +473,7 @@ struct globals {
 
 #define OPTION_STRING "cfvqdt123456789CF"
 
+/* Note: must be kept in sync with archival/bbunzip.c */
 enum {
        OPT_STDOUT      = (1 << 0),
        OPT_FORCE       = (1 << 1),
@@ -619,7 +655,7 @@ static int lzo_get_method(header_t *h)
 /**********************************************************************/
 // compress a file
 /**********************************************************************/
-static NOINLINE smallint lzo_compress(const header_t *h)
+static NOINLINE int lzo_compress(const header_t *h)
 {
        unsigned block_size = LZO_BLOCK_SIZE;
        int r = 0; /* LZO_E_OK */
@@ -629,7 +665,6 @@ static NOINLINE smallint lzo_compress(const header_t *h)
        uint32_t d_adler32 = ADLER32_INIT_VALUE;
        uint32_t d_crc32 = CRC32_INIT_VALUE;
        int l;
-       smallint ok = 1;
        uint8_t *wrk_mem = NULL;
 
        if (h->method == M_LZO1X_1)
@@ -711,7 +746,7 @@ static NOINLINE smallint lzo_compress(const header_t *h)
        free(wrk_mem);
        free(b1);
        free(b2);
-       return ok;
+       return 1;
 }
 
 static FAST_FUNC void lzo_check(
@@ -732,7 +767,7 @@ static FAST_FUNC void lzo_check(
 /**********************************************************************/
 // decompress a file
 /**********************************************************************/
-static NOINLINE smallint lzo_decompress(const header_t *h)
+static NOINLINE int lzo_decompress(const header_t *h)
 {
        unsigned block_size = LZO_BLOCK_SIZE;
        int r;
@@ -740,7 +775,6 @@ static NOINLINE smallint lzo_decompress(const header_t *h)
        uint32_t c_adler32 = ADLER32_INIT_VALUE;
        uint32_t d_adler32 = ADLER32_INIT_VALUE;
        uint32_t c_crc32 = CRC32_INIT_VALUE, d_crc32 = CRC32_INIT_VALUE;
-       smallint ok = 1;
        uint8_t *b1;
        uint32_t mcs_block_size = MAX_COMPRESSED_SIZE(block_size);
        uint8_t *b2 = NULL;
@@ -844,7 +878,7 @@ static NOINLINE smallint lzo_decompress(const header_t *h)
        }
 
        free(b2);
-       return ok;
+       return 1;
 }
 
 /**********************************************************************/
@@ -876,7 +910,7 @@ static NOINLINE smallint lzo_decompress(const header_t *h)
  *                  chksum_out
  * The rest is identical.
 */
-static const unsigned char lzop_magic[9] = {
+static const unsigned char lzop_magic[9] ALIGN1 = {
        0x89, 0x4c, 0x5a, 0x4f, 0x00, 0x0d, 0x0a, 0x1a, 0x0a
 };
 
@@ -1029,7 +1063,7 @@ static void lzo_set_method(header_t *h)
        h->level = level;
 }
 
-static smallint do_lzo_compress(void)
+static int do_lzo_compress(void)
 {
        header_t header;
 
@@ -1057,7 +1091,7 @@ static smallint do_lzo_compress(void)
 /**********************************************************************/
 // decompress
 /**********************************************************************/
-static smallint do_lzo_decompress(void)
+static int do_lzo_decompress(void)
 {
        header_t header;
 
@@ -1078,7 +1112,7 @@ static char* FAST_FUNC make_new_name_lzop(char *filename, const char *expected_e
        return xasprintf("%s.lzo", filename);
 }
 
-static IF_DESKTOP(long long) int FAST_FUNC pack_lzop(transformer_aux_data_t *aux UNUSED_PARAM)
+static IF_DESKTOP(long long) int FAST_FUNC pack_lzop(transformer_state_t *xstate UNUSED_PARAM)
 {
        if (option_mask32 & OPT_DECOMPRESS)
                return do_lzo_decompress();
@@ -1091,10 +1125,10 @@ int lzop_main(int argc UNUSED_PARAM, char **argv)
        getopt32(argv, OPTION_STRING);
        argv += optind;
        /* lzopcat? */
-       if (applet_name[4] == 'c')
+       if (ENABLE_LZOPCAT && applet_name[4] == 'c')
                option_mask32 |= (OPT_STDOUT | OPT_DECOMPRESS);
        /* unlzop? */
-       if (applet_name[4] == 'o')
+       if (ENABLE_UNLZOP && applet_name[4] == 'o')
                option_mask32 |= OPT_DECOMPRESS;
 
        global_crc32_table = crc32_filltable(NULL, 0);