Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 26 | pmbaty | 1 | #ifdef TESTLZO |
| 2 | /* testmini.c -- very simple test program for the miniLZO library |
||
| 3 | |||
| 4 | This file is part of the LZO real-time data compression library. |
||
| 5 | |||
| 6 | Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer |
||
| 7 | All Rights Reserved. |
||
| 8 | |||
| 9 | The LZO library is free software; you can redistribute it and/or |
||
| 10 | modify it under the terms of the GNU General Public License as |
||
| 11 | published by the Free Software Foundation; either version 2 of |
||
| 12 | the License, or (at your option) any later version. |
||
| 13 | |||
| 14 | The LZO library is distributed in the hope that it will be useful, |
||
| 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
| 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
| 17 | GNU General Public License for more details. |
||
| 18 | |||
| 19 | You should have received a copy of the GNU General Public License |
||
| 20 | along with the LZO library; see the file COPYING. |
||
| 21 | If not, write to the Free Software Foundation, Inc., |
||
| 22 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
||
| 23 | |||
| 24 | Markus F.X.J. Oberhumer |
||
| 25 | <markus@oberhumer.com> |
||
| 26 | http://www.oberhumer.com/opensource/lzo/ |
||
| 27 | */ |
||
| 28 | |||
| 29 | |||
| 30 | #include <stdio.h> |
||
| 31 | #include <stdlib.h> |
||
| 32 | |||
| 33 | |||
| 34 | /************************************************************************* |
||
| 35 | // This program shows the basic usage of the LZO library. |
||
| 36 | // We will compress a block of data and decompress again. |
||
| 37 | // |
||
| 38 | // For more information, documentation, example programs and other support |
||
| 39 | // files (like Makefiles and build scripts) please download the full LZO |
||
| 40 | // package from |
||
| 41 | // http://www.oberhumer.com/opensource/lzo/ |
||
| 42 | **************************************************************************/ |
||
| 43 | |||
| 44 | /* First let's include "minizo.h". */ |
||
| 45 | |||
| 46 | #include "minilzo.h" |
||
| 47 | |||
| 48 | |||
| 49 | /* We want to compress the data block at 'in' with length 'IN_LEN' to |
||
| 50 | * the block at 'out'. Because the input block may be incompressible, |
||
| 51 | * we must provide a little more output space in case that compression |
||
| 52 | * is not possible. |
||
| 53 | */ |
||
| 54 | |||
| 55 | #define IN_LEN (128*1024ul) |
||
| 56 | #define OUT_LEN (IN_LEN + IN_LEN / 16 + 64 + 3) |
||
| 57 | |||
| 58 | static unsigned char __LZO_MMODEL in [ IN_LEN ]; |
||
| 59 | static unsigned char __LZO_MMODEL out [ OUT_LEN ]; |
||
| 60 | |||
| 61 | |||
| 62 | /* Work-memory needed for compression. Allocate memory in units |
||
| 63 | * of 'lzo_align_t' (instead of 'char') to make sure it is properly aligned. |
||
| 64 | */ |
||
| 65 | |||
| 66 | #define HEAP_ALLOC(var,size) \ |
||
| 67 | lzo_align_t __LZO_MMODEL var [ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ] |
||
| 68 | |||
| 69 | static HEAP_ALLOC(wrkmem, LZO1X_1_MEM_COMPRESS); |
||
| 70 | |||
| 71 | |||
| 72 | /************************************************************************* |
||
| 73 | // |
||
| 74 | **************************************************************************/ |
||
| 75 | |||
| 76 | int main(int argc, char *argv[]) |
||
| 77 | { |
||
| 78 | int r; |
||
| 79 | lzo_uint in_len; |
||
| 80 | lzo_uint out_len; |
||
| 81 | lzo_uint new_len; |
||
| 82 | |||
| 83 | if (argc < 0 && argv == NULL) /* avoid warning about unused args */ |
||
| 84 | return 0; |
||
| 85 | |||
| 86 | printf("\nLZO real-time data compression library (v%s, %s).\n", |
||
| 87 | lzo_version_string(), lzo_version_date()); |
||
| 88 | printf("Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer\nAll Rights Reserved.\n\n"); |
||
| 89 | |||
| 90 | |||
| 91 | /* |
||
| 92 | * Step 1: initialize the LZO library |
||
| 93 | */ |
||
| 94 | if (lzo_init() != LZO_E_OK) |
||
| 95 | { |
||
| 96 | printf("internal error - lzo_init() failed !!!\n"); |
||
| 97 | printf("(this usually indicates a compiler bug - try recompiling\nwithout optimizations, and enable '-DLZO_DEBUG' for diagnostics)\n"); |
||
| 98 | return 3; |
||
| 99 | } |
||
| 100 | |||
| 101 | /* |
||
| 102 | * Step 2: prepare the input block that will get compressed. |
||
| 103 | * We just fill it with zeros in this example program, |
||
| 104 | * but you would use your real-world data here. |
||
| 105 | */ |
||
| 106 | in_len = IN_LEN; |
||
| 107 | lzo_memset(in,0,in_len); |
||
| 108 | |||
| 109 | /* |
||
| 110 | * Step 3: compress from 'in' to 'out' with LZO1X-1 |
||
| 111 | */ |
||
| 112 | r = lzo1x_1_compress(in,in_len,out,&out_len,wrkmem); |
||
| 113 | if (r == LZO_E_OK) |
||
| 114 | printf("compressed %lu bytes into %lu bytes\n", |
||
| 115 | (unsigned long) in_len, (unsigned long) out_len); |
||
| 116 | else |
||
| 117 | { |
||
| 118 | /* this should NEVER happen */ |
||
| 119 | printf("internal error - compression failed: %d\n", r); |
||
| 120 | return 2; |
||
| 121 | } |
||
| 122 | /* check for an incompressible block */ |
||
| 123 | if (out_len >= in_len) |
||
| 124 | { |
||
| 125 | printf("This block contains incompressible data.\n"); |
||
| 126 | return 0; |
||
| 127 | } |
||
| 128 | |||
| 129 | /* |
||
| 130 | * Step 4: decompress again, now going from 'out' to 'in' |
||
| 131 | */ |
||
| 132 | new_len = in_len; |
||
| 133 | r = lzo1x_decompress(out,out_len,in,&new_len,NULL); |
||
| 134 | if (r == LZO_E_OK && new_len == in_len) |
||
| 135 | printf("decompressed %lu bytes back into %lu bytes\n", |
||
| 136 | (unsigned long) out_len, (unsigned long) in_len); |
||
| 137 | else |
||
| 138 | { |
||
| 139 | /* this should NEVER happen */ |
||
| 140 | printf("internal error - decompression failed: %d\n", r); |
||
| 141 | return 1; |
||
| 142 | } |
||
| 143 | |||
| 144 | printf("\nminiLZO simple compression test passed.\n"); |
||
| 145 | return 0; |
||
| 146 | } |
||
| 147 | |||
| 148 | |||
| 149 | /* vim:set ts=4 sw=4 et: */ |
||
| 150 | #endif // TESTLZO |