diff options
Diffstat (limited to 'main/lzo/minilzo/testmini.c')
| -rw-r--r-- | main/lzo/minilzo/testmini.c | 171 | 
1 files changed, 171 insertions, 0 deletions
diff --git a/main/lzo/minilzo/testmini.c b/main/lzo/minilzo/testmini.c new file mode 100644 index 00000000..991f8789 --- /dev/null +++ b/main/lzo/minilzo/testmini.c @@ -0,0 +1,171 @@ +/* testmini.c -- very simple test program for the miniLZO library + +   This file is part of the LZO real-time data compression library. + +   Copyright (C) 2011 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer +   Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer +   All Rights Reserved. + +   The LZO library is free software; you can redistribute it and/or +   modify it under the terms of the GNU General Public License as +   published by the Free Software Foundation; either version 2 of +   the License, or (at your option) any later version. + +   The LZO library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with the LZO library; see the file COPYING. +   If not, write to the Free Software Foundation, Inc., +   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +   Markus F.X.J. Oberhumer +   <markus@oberhumer.com> +   http://www.oberhumer.com/opensource/lzo/ + */ + + +#include <stdio.h> +#include <stdlib.h> + + +/************************************************************************* +// This program shows the basic usage of the LZO library. +// We will compress a block of data and decompress again. +// +// For more information, documentation, example programs and other support +// files (like Makefiles and build scripts) please download the full LZO +// package from +//    http://www.oberhumer.com/opensource/lzo/ +**************************************************************************/ + +/* First let's include "minizo.h". */ + +#include "minilzo.h" + + +/* We want to compress the data block at 'in' with length 'IN_LEN' to + * the block at 'out'. Because the input block may be incompressible, + * we must provide a little more output space in case that compression + * is not possible. + */ + +#if defined(__LZO_STRICT_16BIT) +#define IN_LEN      (8*1024u) +#elif defined(LZO_ARCH_I086) && !defined(LZO_HAVE_MM_HUGE_ARRAY) +#define IN_LEN      (60*1024u) +#else +#define IN_LEN      (128*1024ul) +#endif +#define OUT_LEN     (IN_LEN + IN_LEN / 16 + 64 + 3) + +static unsigned char __LZO_MMODEL in  [ IN_LEN ]; +static unsigned char __LZO_MMODEL out [ OUT_LEN ]; + + +/* Work-memory needed for compression. Allocate memory in units + * of 'lzo_align_t' (instead of 'char') to make sure it is properly aligned. + */ + +#define HEAP_ALLOC(var,size) \ +    lzo_align_t __LZO_MMODEL var [ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ] + +static HEAP_ALLOC(wrkmem, LZO1X_1_MEM_COMPRESS); + + +/************************************************************************* +// +**************************************************************************/ + +int main(int argc, char *argv[]) +{ +    int r; +    lzo_uint in_len; +    lzo_uint out_len; +    lzo_uint new_len; + +    if (argc < 0 && argv == NULL)   /* avoid warning about unused args */ +        return 0; + +    printf("\nLZO real-time data compression library (v%s, %s).\n", +           lzo_version_string(), lzo_version_date()); +    printf("Copyright (C) 1996-2011 Markus Franz Xaver Johannes Oberhumer\nAll Rights Reserved.\n\n"); + + +/* + * Step 1: initialize the LZO library + */ +    if (lzo_init() != LZO_E_OK) +    { +        printf("internal error - lzo_init() failed !!!\n"); +        printf("(this usually indicates a compiler bug - try recompiling\nwithout optimizations, and enable '-DLZO_DEBUG' for diagnostics)\n"); +        return 3; +    } + +/* + * Step 2: prepare the input block that will get compressed. + *         We just fill it with zeros in this example program, + *         but you would use your real-world data here. + */ +    in_len = IN_LEN; +    lzo_memset(in,0,in_len); + +/* + * Step 3: compress from 'in' to 'out' with LZO1X-1 + */ +    r = lzo1x_1_compress(in,in_len,out,&out_len,wrkmem); +    if (r == LZO_E_OK) +        printf("compressed %lu bytes into %lu bytes\n", +            (unsigned long) in_len, (unsigned long) out_len); +    else +    { +        /* this should NEVER happen */ +        printf("internal error - compression failed: %d\n", r); +        return 2; +    } +    /* check for an incompressible block */ +    if (out_len >= in_len) +    { +        printf("This block contains incompressible data.\n"); +        return 0; +    } + +/* + * Step 4: decompress again, now going from 'out' to 'in' + */ +    new_len = in_len; +    r = lzo1x_decompress(out,out_len,in,&new_len,NULL); +    if (r == LZO_E_OK && new_len == in_len) +        printf("decompressed %lu bytes back into %lu bytes\n", +            (unsigned long) out_len, (unsigned long) in_len); +    else +    { +        /* this should NEVER happen */ +        printf("internal error - decompression failed: %d\n", r); +        return 1; +    } + +    printf("\nminiLZO simple compression test passed.\n"); +    return 0; +} + +/* +vi:ts=4:et +*/ +  | 
