ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/liblzf/lzf.c
(Generate patch)

Comparing liblzf/lzf.c (file contents):
Revision 1.3 by pcg, Tue Dec 23 04:52:00 2003 UTC vs.
Revision 1.8 by root, Wed Sep 27 13:51:51 2006 UTC

1/* 1/*
2 * Copyright (c) 2000-2003 Marc Alexander Lehmann <pcg@goof.com> 2 * Copyright (c) 2000-2005 Marc Alexander Lehmann <schmorp@schmorp.de>
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without modifica- 4 * Redistribution and use in source and binary forms, with or without modifica-
5 * tion, are permitted provided that the following conditions are met: 5 * tion, are permitted provided that the following conditions are met:
6 * 6 *
7 * 1. Redistributions of source code must retain the above copyright notice, 7 * 1. Redistributions of source code must retain the above copyright notice,
22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
25 * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 25 * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
26 * OF THE POSSIBILITY OF SUCH DAMAGE. 26 * OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * Alternatively, the contents of this file may be used under the terms of
29 * the GNU General Public License version 2 (the "GPL"), in which case the
30 * provisions of the GPL are applicable instead of the above. If you wish to
31 * allow the use of your version of this file only under the terms of the
32 * GPL and not to allow others to use your version of this file under the
33 * BSD license, indicate your decision by deleting the provisions above and
34 * replace them with the notice and other provisions required by the GPL. If
35 * you do not delete the provisions above, a recipient may use your version
36 * of this file under either the BSD or the GPL.
27 */ 37 */
28 38
29#include "config.h" 39#include "config.h"
30 40
31#include <stdio.h> 41#include <stdio.h>
32#include <stdlib.h> 42#include <stdlib.h>
43#include <string.h>
33#include <assert.h> 44#include <assert.h>
34 45
35#include <unistd.h> 46#include <unistd.h>
36#include <getopt.h> 47#include <getopt.h>
37 48
42static void 53static void
43usage (int ec) 54usage (int ec)
44{ 55{
45 fprintf (stderr, "\n" 56 fprintf (stderr, "\n"
46 "lzf, a very lightweight compression/decompression filter\n" 57 "lzf, a very lightweight compression/decompression filter\n"
47 "written by Marc Lehmann <pcg@goof.com> You can find more info at\n" 58 "written by Marc Lehmann <schmorp@schmorp.de> You can find more info at\n"
48 "http://liblzf.plan9.de/\n" 59 "http://liblzf.plan9.de/\n"
49 "\n" 60 "\n"
50 "USAGE: lzf -c [-b blocksize] | -d\n" 61 "USAGE: lzf -c [-b blocksize] | -d\n"
51 " -c compress\n" 62 " -c compress\n"
52 " -d decompress\n" 63 " -d decompress\n"
58} 69}
59 70
60/* 71/*
61 * Anatomy: an lzf file consists of any number of blocks in the following format: 72 * Anatomy: an lzf file consists of any number of blocks in the following format:
62 * 73 *
74 * \x00 EOF (optional)
63 * "ZV\0" 2-byte-usize <uncompressed data> 75 * "ZV\0" 2-byte-usize <uncompressed data>
64 * "ZV\1" 2-byte-csize 2-byte-usize <compressed data> 76 * "ZV\1" 2-byte-csize 2-byte-usize <compressed data>
65 * "ZV\2" 4-byte-crc32-0xdebb20e3 (NYI) 77 * "ZV\2" 4-byte-crc32-0xdebb20e3 (NYI)
66 * 78 *
67 */ 79 */
123 u8 buff1[64*1024]; 135 u8 buff1[64*1024];
124 u8 buff2[64*1024]; 136 u8 buff2[64*1024];
125 u8 header[3+2+2]; 137 u8 header[3+2+2];
126 138
127 for(;;) { 139 for(;;) {
128 if (fread (header, 3+2, 1, stdin) != 1) 140 int hdrsize = fread (header, 1, 3+2, stdin);
141
142 /* check for \0 record */
143 if (hdrsize)
144 {
145 if (!header[0])
146 break;
147 else if (hdrsize != 3+2)
148 {
149 if (feof (stdin))
150 fprintf (stderr, "decompress: invalid stream - short header\n");
151 else
152 perror ("decompress");
153
154 exit (1);
155 }
156 }
157 else
129 { 158 {
130 if (feof (stdin)) 159 if (feof (stdin))
131 break; 160 break;
132 else 161 else
133 { 162 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines