lzfruby 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,18 +8,14 @@ Ruby bindings for LibLZF.
8
8
 
9
9
  LibLZF is a very fast compression library.
10
10
 
11
- == Project Page
11
+ == Source Code
12
12
 
13
- http://rubyforge.org/projects/lzfruby
13
+ https://bitbucket.org/winebarrel/lzf-ruby
14
14
 
15
15
  == Install
16
16
 
17
17
  gem install lzfruby
18
18
 
19
- == Download
20
-
21
- http://rubyforge.org/frs/?group_id=6750
22
-
23
19
  == Example
24
20
 
25
21
  require 'lzfruby'
@@ -72,9 +68,10 @@ http://rubyforge.org/frs/?group_id=6750
72
68
  DAMAGE.
73
69
 
74
70
  === LibLZF
71
+
75
72
  LZF/Ruby contains LibLZF.
76
73
 
77
74
  LibLZF is a very fast compression library.
78
75
 
79
76
  * http://www.goof.com/pcg/marc/liblzf.html
80
- * Copyright (c) 2000-2007 Marc Alexander Lehmann <schmorp@schmorp.de>
77
+ * Copyright (c) 2000-2008 Marc Alexander Lehmann <schmorp@schmorp.de>
@@ -1,2 +1,5 @@
1
1
  require 'mkmf'
2
- create_makefile('lzfruby')
2
+
3
+ if have_library('lzf')
4
+ create_makefile('lzfruby')
5
+ end
@@ -26,7 +26,7 @@ typedef int ssize_t;
26
26
  } \
27
27
  } while(0)
28
28
 
29
- #define VERSION "0.1.2"
29
+ #define VERSION "0.1.3"
30
30
  #define BLOCKSIZE (1024 * 64 - 1)
31
31
  #define MAX_BLOCKSIZE BLOCKSIZE
32
32
  #define TYPE0_HDR_SIZE 5
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lzfruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 3
10
+ version: 0.1.3
5
11
  platform: ruby
6
12
  authors:
7
13
  - winebarrel
@@ -9,7 +15,7 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2008-08-08 00:00:00 +09:00
18
+ date: 2011-01-12 00:00:00 +09:00
13
19
  default_executable:
14
20
  dependencies: []
15
21
 
@@ -20,18 +26,16 @@ executables: []
20
26
  extensions:
21
27
  - ext/extconf.rb
22
28
  extra_rdoc_files:
23
- - README.txt
29
+ - README
24
30
  - ext/lzfruby.c
25
31
  files:
26
32
  - ext/extconf.rb
27
- - ext/lzf.h
28
- - ext/lzfP.h
29
33
  - ext/lzfruby.c
30
- - ext/lzf_c.c
31
- - ext/lzf_d.c
32
- - README.txt
34
+ - README
33
35
  has_rdoc: true
34
- homepage: http://lzfruby.rubyforge.org
36
+ homepage: https://bitbucket.org/winebarrel/lzf-ruby
37
+ licenses: []
38
+
35
39
  post_install_message:
36
40
  rdoc_options:
37
41
  - --title
@@ -39,23 +43,29 @@ rdoc_options:
39
43
  require_paths:
40
44
  - lib
41
45
  required_ruby_version: !ruby/object:Gem::Requirement
46
+ none: false
42
47
  requirements:
43
48
  - - ">="
44
49
  - !ruby/object:Gem::Version
50
+ hash: 3
51
+ segments:
52
+ - 0
45
53
  version: "0"
46
- version:
47
54
  required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
48
56
  requirements:
49
57
  - - ">="
50
58
  - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
51
62
  version: "0"
52
- version:
53
63
  requirements: []
54
64
 
55
- rubyforge_project: lzfruby
56
- rubygems_version: 1.1.1
65
+ rubyforge_project:
66
+ rubygems_version: 1.3.7
57
67
  signing_key:
58
- specification_version: 2
68
+ specification_version: 3
59
69
  summary: Ruby bindings for LibLZF.
60
70
  test_files: []
61
71
 
data/ext/lzf.h DELETED
@@ -1,99 +0,0 @@
1
- /*
2
- * Copyright (c) 2000-2007 Marc Alexander Lehmann <schmorp@schmorp.de>
3
- *
4
- * Redistribution and use in source and binary forms, with or without modifica-
5
- * tion, are permitted provided that the following conditions are met:
6
- *
7
- * 1. Redistributions of source code must retain the above copyright notice,
8
- * this list of conditions and the following disclaimer.
9
- *
10
- * 2. Redistributions in binary form must reproduce the above copyright
11
- * notice, this list of conditions and the following disclaimer in the
12
- * documentation and/or other materials provided with the distribution.
13
- *
14
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
15
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-
16
- * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
17
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
18
- * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
22
- * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
23
- * OF THE POSSIBILITY OF SUCH DAMAGE.
24
- *
25
- * Alternatively, the contents of this file may be used under the terms of
26
- * the GNU General Public License ("GPL") version 2 or any later version,
27
- * in which case the provisions of the GPL are applicable instead of
28
- * the above. If you wish to allow the use of your version of this file
29
- * only under the terms of the GPL and not to allow others to use your
30
- * version of this file under the BSD license, indicate your decision
31
- * by deleting the provisions above and replace them with the notice
32
- * and other provisions required by the GPL. If you do not delete the
33
- * provisions above, a recipient may use your version of this file under
34
- * either the BSD or the GPL.
35
- */
36
-
37
- #ifndef LZF_H
38
- #define LZF_H
39
-
40
- /***********************************************************************
41
- **
42
- ** lzf -- an extremely fast/free compression/decompression-method
43
- ** http://liblzf.plan9.de/
44
- **
45
- ** This algorithm is believed to be patent-free.
46
- **
47
- ***********************************************************************/
48
-
49
- #define LZF_VERSION 0x0105 /* 1.5 */
50
-
51
- /*
52
- * Compress in_len bytes stored at the memory block starting at
53
- * in_data and write the result to out_data, up to a maximum length
54
- * of out_len bytes.
55
- *
56
- * If the output buffer is not large enough or any error occurs
57
- * return 0, otherwise return the number of bytes used (which might
58
- * be considerably larger than in_len, so it makes sense to always
59
- * use out_len == in_len - 1), to ensure _some_ compression, and store
60
- * the data uncompressed otherwise.
61
- *
62
- * lzf_compress might use different algorithms on different systems and
63
- * even different runs, thus might result in different compressed strings
64
- * depending on the phase of the moon or similar factors. However, all
65
- * these strings are architecture-independent and will result in the
66
- * original data when decompressed using lzf_decompress.
67
- *
68
- * The buffers must not be overlapping.
69
- *
70
- * If the option LZF_STATE_ARG is enabled, an extra argument must be
71
- * supplied which is not reflected in this header file. Refer to lzfP.h
72
- * and lzf_c.c.
73
- *
74
- */
75
- unsigned int
76
- lzf_compress (const void *const in_data, unsigned int in_len,
77
- void *out_data, unsigned int out_len);
78
-
79
- /*
80
- * Decompress data compressed with some version of the lzf_compress
81
- * function and stored at location in_data and length in_len. The result
82
- * will be stored at out_data up to a maximum of out_len characters.
83
- *
84
- * If the output buffer is not large enough to hold the decompressed
85
- * data, a 0 is returned and errno is set to E2BIG. Otherwise the number
86
- * of decompressed bytes (i.e. the original length of the data) is
87
- * returned.
88
- *
89
- * If an error in the compressed data is detected, a zero is returned and
90
- * errno is set to EINVAL.
91
- *
92
- * This function is very fast, about as fast as a copying loop.
93
- */
94
- unsigned int
95
- lzf_decompress (const void *const in_data, unsigned int in_len,
96
- void *out_data, unsigned int out_len);
97
-
98
- #endif
99
-
data/ext/lzfP.h DELETED
@@ -1,159 +0,0 @@
1
- /*
2
- * Copyright (c) 2000-2007 Marc Alexander Lehmann <schmorp@schmorp.de>
3
- *
4
- * Redistribution and use in source and binary forms, with or without modifica-
5
- * tion, are permitted provided that the following conditions are met:
6
- *
7
- * 1. Redistributions of source code must retain the above copyright notice,
8
- * this list of conditions and the following disclaimer.
9
- *
10
- * 2. Redistributions in binary form must reproduce the above copyright
11
- * notice, this list of conditions and the following disclaimer in the
12
- * documentation and/or other materials provided with the distribution.
13
- *
14
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
15
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-
16
- * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
17
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
18
- * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
22
- * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
23
- * OF THE POSSIBILITY OF SUCH DAMAGE.
24
- *
25
- * Alternatively, the contents of this file may be used under the terms of
26
- * the GNU General Public License ("GPL") version 2 or any later version,
27
- * in which case the provisions of the GPL are applicable instead of
28
- * the above. If you wish to allow the use of your version of this file
29
- * only under the terms of the GPL and not to allow others to use your
30
- * version of this file under the BSD license, indicate your decision
31
- * by deleting the provisions above and replace them with the notice
32
- * and other provisions required by the GPL. If you do not delete the
33
- * provisions above, a recipient may use your version of this file under
34
- * either the BSD or the GPL.
35
- */
36
-
37
- #ifndef LZFP_h
38
- #define LZFP_h
39
-
40
- #define STANDALONE 1 /* at the moment, this is ok. */
41
-
42
- #ifndef STANDALONE
43
- # include "lzf.h"
44
- #endif
45
-
46
- /*
47
- * Size of hashtable is (1 << HLOG) * sizeof (char *)
48
- * decompression is independent of the hash table size
49
- * the difference between 15 and 14 is very small
50
- * for small blocks (and 14 is usually a bit faster).
51
- * For a low-memory/faster configuration, use HLOG == 13;
52
- * For best compression, use 15 or 16 (or more, up to 23).
53
- */
54
- #ifndef HLOG
55
- # define HLOG 16
56
- #endif
57
-
58
- /*
59
- * Sacrifice very little compression quality in favour of compression speed.
60
- * This gives almost the same compression as the default code, and is
61
- * (very roughly) 15% faster. This is the preferred mode of operation.
62
- */
63
- #ifndef VERY_FAST
64
- # define VERY_FAST 1
65
- #endif
66
-
67
- /*
68
- * Sacrifice some more compression quality in favour of compression speed.
69
- * (roughly 1-2% worse compression for large blocks and
70
- * 9-10% for small, redundant, blocks and >>20% better speed in both cases)
71
- * In short: when in need for speed, enable this for binary data,
72
- * possibly disable this for text data.
73
- */
74
- #ifndef ULTRA_FAST
75
- # define ULTRA_FAST 0
76
- #endif
77
-
78
- /*
79
- * Unconditionally aligning does not cost very much, so do it if unsure
80
- */
81
- #ifndef STRICT_ALIGN
82
- # define STRICT_ALIGN !(defined(__i386) || defined (__amd64))
83
- #endif
84
-
85
- /*
86
- * You may choose to pre-set the hash table (might be faster on some
87
- * modern cpus and large (>>64k) blocks, and also makes compression
88
- * deterministic/repeatable when the configuration otherwise is the same).
89
- */
90
- #ifndef INIT_HTAB
91
- # define INIT_HTAB 0
92
- #endif
93
-
94
- /*
95
- * Avoid assigning values to errno variable? for some embedding purposes
96
- * (linux kernel for example), this is neccessary. NOTE: this breaks
97
- * the documentation in lzf.h.
98
- */
99
- #ifndef AVOID_ERRNO
100
- # define AVOID_ERRNO 0
101
- #endif
102
-
103
- /*
104
- * Wether to pass the LZF_STATE variable as argument, or allocate it
105
- * on the stack. For small-stack environments, define this to 1.
106
- * NOTE: this breaks the prototype in lzf.h.
107
- */
108
- #ifndef LZF_STATE_ARG
109
- # define LZF_STATE_ARG 0
110
- #endif
111
-
112
- /*
113
- * Wether to add extra checks for input validity in lzf_decompress
114
- * and return EINVAL if the input stream has been corrupted. This
115
- * only shields against overflowing the input buffer and will not
116
- * detect most corrupted streams.
117
- * This check is not normally noticable on modern hardware
118
- * (<1% slowdown), but might slow down older cpus considerably.
119
- */
120
- #ifndef CHECK_INPUT
121
- # define CHECK_INPUT 1
122
- #endif
123
-
124
- /*****************************************************************************/
125
- /* nothing should be changed below */
126
-
127
- typedef unsigned char u8;
128
-
129
- typedef const u8 *LZF_STATE[1 << (HLOG)];
130
-
131
- #if !STRICT_ALIGN
132
- /* for unaligned accesses we need a 16 bit datatype. */
133
- # include <limits.h>
134
- # if USHRT_MAX == 65535
135
- typedef unsigned short u16;
136
- # elif UINT_MAX == 65535
137
- typedef unsigned int u16;
138
- # else
139
- # undef STRICT_ALIGN
140
- # define STRICT_ALIGN 1
141
- # endif
142
- #endif
143
-
144
- #if ULTRA_FAST
145
- # if defined(VERY_FAST)
146
- # undef VERY_FAST
147
- # endif
148
- #endif
149
-
150
- #if INIT_HTAB
151
- # ifdef __cplusplus
152
- # include <cstring>
153
- # else
154
- # include <string.h>
155
- # endif
156
- #endif
157
-
158
- #endif
159
-
@@ -1,289 +0,0 @@
1
- /*
2
- * Copyright (c) 2000-2007 Marc Alexander Lehmann <schmorp@schmorp.de>
3
- *
4
- * Redistribution and use in source and binary forms, with or without modifica-
5
- * tion, are permitted provided that the following conditions are met:
6
- *
7
- * 1. Redistributions of source code must retain the above copyright notice,
8
- * this list of conditions and the following disclaimer.
9
- *
10
- * 2. Redistributions in binary form must reproduce the above copyright
11
- * notice, this list of conditions and the following disclaimer in the
12
- * documentation and/or other materials provided with the distribution.
13
- *
14
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
15
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-
16
- * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
17
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
18
- * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
22
- * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
23
- * OF THE POSSIBILITY OF SUCH DAMAGE.
24
- *
25
- * Alternatively, the contents of this file may be used under the terms of
26
- * the GNU General Public License ("GPL") version 2 or any later version,
27
- * in which case the provisions of the GPL are applicable instead of
28
- * the above. If you wish to allow the use of your version of this file
29
- * only under the terms of the GPL and not to allow others to use your
30
- * version of this file under the BSD license, indicate your decision
31
- * by deleting the provisions above and replace them with the notice
32
- * and other provisions required by the GPL. If you do not delete the
33
- * provisions above, a recipient may use your version of this file under
34
- * either the BSD or the GPL.
35
- */
36
-
37
- #include "lzfP.h"
38
-
39
- #define HSIZE (1 << (HLOG))
40
-
41
- /*
42
- * don't play with this unless you benchmark!
43
- * decompression is not dependent on the hash function
44
- * the hashing function might seem strange, just believe me
45
- * it works ;)
46
- */
47
- #ifndef FRST
48
- # define FRST(p) (((p[0]) << 8) | p[1])
49
- # define NEXT(v,p) (((v) << 8) | p[2])
50
- # if ULTRA_FAST
51
- # define IDX(h) ((( h >> (3*8 - HLOG)) - h ) & (HSIZE - 1))
52
- # elif VERY_FAST
53
- # define IDX(h) ((( h >> (3*8 - HLOG)) - h*5) & (HSIZE - 1))
54
- # else
55
- # define IDX(h) ((((h ^ (h << 5)) >> (3*8 - HLOG)) - h*5) & (HSIZE - 1))
56
- # endif
57
- #endif
58
- /*
59
- * IDX works because it is very similar to a multiplicative hash, e.g.
60
- * ((h * 57321 >> (3*8 - HLOG)) & (HSIZE - 1))
61
- * the latter is also quite fast on newer CPUs, and compresses similarly.
62
- *
63
- * the next one is also quite good, albeit slow ;)
64
- * (int)(cos(h & 0xffffff) * 1e6)
65
- */
66
-
67
- #if 0
68
- /* original lzv-like hash function, much worse and thus slower */
69
- # define FRST(p) (p[0] << 5) ^ p[1]
70
- # define NEXT(v,p) ((v) << 5) ^ p[2]
71
- # define IDX(h) ((h) & (HSIZE - 1))
72
- #endif
73
-
74
- #define MAX_LIT (1 << 5)
75
- #define MAX_OFF (1 << 13)
76
- #define MAX_REF ((1 << 8) + (1 << 3))
77
-
78
- #if __GNUC__ >= 3
79
- # define expect(expr,value) __builtin_expect ((expr),(value))
80
- # define inline inline
81
- #else
82
- # define expect(expr,value) (expr)
83
- # define inline static
84
- #endif
85
-
86
- #define expect_false(expr) expect ((expr) != 0, 0)
87
- #define expect_true(expr) expect ((expr) != 0, 1)
88
-
89
- /*
90
- * compressed format
91
- *
92
- * 000LLLLL <L+1> ; literal
93
- * LLLooooo oooooooo ; backref L
94
- * 111ooooo LLLLLLLL oooooooo ; backref L+7
95
- *
96
- */
97
-
98
- unsigned int
99
- lzf_compress (const void *const in_data, unsigned int in_len,
100
- void *out_data, unsigned int out_len
101
- #if LZF_STATE_ARG
102
- , LZF_STATE htab
103
- #endif
104
- )
105
- {
106
- #if !LZF_STATE_ARG
107
- LZF_STATE htab;
108
- #endif
109
- const u8 **hslot;
110
- const u8 *ip = (const u8 *)in_data;
111
- u8 *op = (u8 *)out_data;
112
- const u8 *in_end = ip + in_len;
113
- u8 *out_end = op + out_len;
114
- const u8 *ref;
115
-
116
- /* off requires a type wide enough to hold a general pointer difference.
117
- * ISO C doesn't have that (size_t might not be enough and ptrdiff_t only
118
- * works for differences within a single object). We also assume that no
119
- * no bit pattern traps. Since the only platform that is both non-POSIX
120
- * and fails to support both assumptions is windows 64 bit, we make a
121
- * special workaround for it.
122
- */
123
- #if defined (WIN32) && defined (_M_X64)
124
- unsigned _int64 off; /* workaround for missing POSIX compliance */
125
- #else
126
- unsigned long off;
127
- #endif
128
- unsigned int hval;
129
- int lit;
130
-
131
- if (!in_len || !out_len)
132
- return 0;
133
-
134
- #if INIT_HTAB
135
- memset (htab, 0, sizeof (htab));
136
- # if 0
137
- for (hslot = htab; hslot < htab + HSIZE; hslot++)
138
- *hslot++ = ip;
139
- # endif
140
- #endif
141
-
142
- lit = 0; op++; /* start run */
143
-
144
- hval = FRST (ip);
145
- while (ip < in_end - 2)
146
- {
147
- hval = NEXT (hval, ip);
148
- hslot = htab + IDX (hval);
149
- ref = *hslot; *hslot = ip;
150
-
151
- if (1
152
- #if INIT_HTAB
153
- && ref < ip /* the next test will actually take care of this, but this is faster */
154
- #endif
155
- && (off = ip - ref - 1) < MAX_OFF
156
- && ip + 4 < in_end
157
- && ref > (u8 *)in_data
158
- #if STRICT_ALIGN
159
- && ref[0] == ip[0]
160
- && ref[1] == ip[1]
161
- && ref[2] == ip[2]
162
- #else
163
- && *(u16 *)ref == *(u16 *)ip
164
- && ref[2] == ip[2]
165
- #endif
166
- )
167
- {
168
- /* match found at *ref++ */
169
- unsigned int len = 2;
170
- unsigned int maxlen = in_end - ip - len;
171
- maxlen = maxlen > MAX_REF ? MAX_REF : maxlen;
172
-
173
- op [- lit - 1] = lit - 1; /* stop run */
174
- op -= !lit; /* undo run if length is zero */
175
-
176
- if (expect_false (op + 3 + 1 >= out_end))
177
- return 0;
178
-
179
- for (;;)
180
- {
181
- if (expect_true (maxlen > 16))
182
- {
183
- len++; if (ref [len] != ip [len]) break;
184
- len++; if (ref [len] != ip [len]) break;
185
- len++; if (ref [len] != ip [len]) break;
186
- len++; if (ref [len] != ip [len]) break;
187
-
188
- len++; if (ref [len] != ip [len]) break;
189
- len++; if (ref [len] != ip [len]) break;
190
- len++; if (ref [len] != ip [len]) break;
191
- len++; if (ref [len] != ip [len]) break;
192
-
193
- len++; if (ref [len] != ip [len]) break;
194
- len++; if (ref [len] != ip [len]) break;
195
- len++; if (ref [len] != ip [len]) break;
196
- len++; if (ref [len] != ip [len]) break;
197
-
198
- len++; if (ref [len] != ip [len]) break;
199
- len++; if (ref [len] != ip [len]) break;
200
- len++; if (ref [len] != ip [len]) break;
201
- len++; if (ref [len] != ip [len]) break;
202
- }
203
-
204
- do
205
- len++;
206
- while (len < maxlen && ref[len] == ip[len]);
207
-
208
- break;
209
- }
210
-
211
- len -= 2;
212
- ip++;
213
-
214
- if (len < 7)
215
- {
216
- *op++ = (off >> 8) + (len << 5);
217
- }
218
- else
219
- {
220
- *op++ = (off >> 8) + ( 7 << 5);
221
- *op++ = len - 7;
222
- }
223
-
224
- *op++ = off;
225
-
226
- #if ULTRA_FAST || VERY_FAST
227
- ip += len;
228
- #if VERY_FAST && !ULTRA_FAST
229
- --ip;
230
- #endif
231
- hval = FRST (ip);
232
-
233
- hval = NEXT (hval, ip);
234
- htab[IDX (hval)] = ip;
235
- ip++;
236
-
237
- #if VERY_FAST && !ULTRA_FAST
238
- hval = NEXT (hval, ip);
239
- htab[IDX (hval)] = ip;
240
- ip++;
241
- #endif
242
- #else
243
- do
244
- {
245
- hval = NEXT (hval, ip);
246
- htab[IDX (hval)] = ip;
247
- ip++;
248
- }
249
- while (len--);
250
- #endif
251
-
252
- lit = 0; op++; /* start run */
253
- }
254
- else
255
- {
256
- /* one more literal byte we must copy */
257
- if (expect_false (op >= out_end))
258
- return 0;
259
-
260
- lit++; *op++ = *ip++;
261
-
262
- if (expect_false (lit == MAX_LIT))
263
- {
264
- op [- lit - 1] = lit - 1; /* stop run */
265
- lit = 0; op++; /* start run */
266
- }
267
- }
268
- }
269
-
270
- if (op + 3 > out_end) /* at most 3 bytes can be missing here */
271
- return 0;
272
-
273
- while (ip < in_end)
274
- {
275
- lit++; *op++ = *ip++;
276
-
277
- if (expect_false (lit == MAX_LIT))
278
- {
279
- op [- lit - 1] = lit - 1; /* stop run */
280
- lit = 0; op++; /* start run */
281
- }
282
- }
283
-
284
- op [- lit - 1] = lit - 1; /* end run */
285
- op -= !lit; /* undo run if length is zero */
286
-
287
- return op - (u8 *)out_data;
288
- }
289
-
@@ -1,148 +0,0 @@
1
- /*
2
- * Copyright (c) 2000-2007 Marc Alexander Lehmann <schmorp@schmorp.de>
3
- *
4
- * Redistribution and use in source and binary forms, with or without modifica-
5
- * tion, are permitted provided that the following conditions are met:
6
- *
7
- * 1. Redistributions of source code must retain the above copyright notice,
8
- * this list of conditions and the following disclaimer.
9
- *
10
- * 2. Redistributions in binary form must reproduce the above copyright
11
- * notice, this list of conditions and the following disclaimer in the
12
- * documentation and/or other materials provided with the distribution.
13
- *
14
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
15
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-
16
- * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
17
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
18
- * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
22
- * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
23
- * OF THE POSSIBILITY OF SUCH DAMAGE.
24
- *
25
- * Alternatively, the contents of this file may be used under the terms of
26
- * the GNU General Public License ("GPL") version 2 or any later version,
27
- * in which case the provisions of the GPL are applicable instead of
28
- * the above. If you wish to allow the use of your version of this file
29
- * only under the terms of the GPL and not to allow others to use your
30
- * version of this file under the BSD license, indicate your decision
31
- * by deleting the provisions above and replace them with the notice
32
- * and other provisions required by the GPL. If you do not delete the
33
- * provisions above, a recipient may use your version of this file under
34
- * either the BSD or the GPL.
35
- */
36
-
37
- #include "lzfP.h"
38
-
39
- #if AVOID_ERRNO
40
- # define SET_ERRNO(n)
41
- #else
42
- # include <errno.h>
43
- # define SET_ERRNO(n) errno = (n)
44
- #endif
45
-
46
- #if (__i386 || __amd64) && __GNUC__ >= 3
47
- # define lzf_movsb(dst, src, len) \
48
- asm ("rep movsb" \
49
- : "=D" (dst), "=S" (src), "=c" (len) \
50
- : "0" (dst), "1" (src), "2" (len));
51
- #endif
52
-
53
- unsigned int
54
- lzf_decompress (const void *const in_data, unsigned int in_len,
55
- void *out_data, unsigned int out_len)
56
- {
57
- u8 const *ip = (const u8 *)in_data;
58
- u8 *op = (u8 *)out_data;
59
- u8 const *const in_end = ip + in_len;
60
- u8 *const out_end = op + out_len;
61
-
62
- do
63
- {
64
- unsigned int ctrl = *ip++;
65
-
66
- if (ctrl < (1 << 5)) /* literal run */
67
- {
68
- ctrl++;
69
-
70
- if (op + ctrl > out_end)
71
- {
72
- SET_ERRNO (E2BIG);
73
- return 0;
74
- }
75
-
76
- #if CHECK_INPUT
77
- if (ip + ctrl > in_end)
78
- {
79
- SET_ERRNO (EINVAL);
80
- return 0;
81
- }
82
- #endif
83
-
84
- #ifdef lzf_movsb
85
- lzf_movsb (op, ip, ctrl);
86
- #else
87
- do
88
- *op++ = *ip++;
89
- while (--ctrl);
90
- #endif
91
- }
92
- else /* back reference */
93
- {
94
- unsigned int len = ctrl >> 5;
95
-
96
- u8 *ref = op - ((ctrl & 0x1f) << 8) - 1;
97
-
98
- #if CHECK_INPUT
99
- if (ip >= in_end)
100
- {
101
- SET_ERRNO (EINVAL);
102
- return 0;
103
- }
104
- #endif
105
- if (len == 7)
106
- {
107
- len += *ip++;
108
- #if CHECK_INPUT
109
- if (ip >= in_end)
110
- {
111
- SET_ERRNO (EINVAL);
112
- return 0;
113
- }
114
- #endif
115
- }
116
-
117
- ref -= *ip++;
118
-
119
- if (op + len + 2 > out_end)
120
- {
121
- SET_ERRNO (E2BIG);
122
- return 0;
123
- }
124
-
125
- if (ref < (u8 *)out_data)
126
- {
127
- SET_ERRNO (EINVAL);
128
- return 0;
129
- }
130
-
131
- #ifdef lzf_movsb
132
- len += 2;
133
- lzf_movsb (op, ref, len);
134
- #else
135
- *op++ = *ref++;
136
- *op++ = *ref++;
137
-
138
- do
139
- *op++ = *ref++;
140
- while (--len);
141
- #endif
142
- }
143
- }
144
- while (ip < in_end);
145
-
146
- return op - (u8 *)out_data;
147
- }
148
-