snappy 0.0.12-java → 0.1.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +28 -1
- data/Gemfile +6 -1
- data/README.md +28 -4
- data/Rakefile +1 -0
- data/ext/extconf.rb +21 -24
- data/lib/snappy.rb +3 -1
- data/lib/snappy/hadoop.rb +22 -0
- data/lib/snappy/hadoop/reader.rb +58 -0
- data/lib/snappy/hadoop/writer.rb +51 -0
- data/lib/snappy/reader.rb +11 -7
- data/lib/snappy/shim.rb +30 -0
- data/lib/snappy/version.rb +3 -1
- data/lib/snappy/writer.rb +14 -9
- data/smoke.sh +8 -0
- data/snappy.gemspec +6 -30
- data/test/hadoop/test-snappy-hadoop-reader.rb +103 -0
- data/test/hadoop/test-snappy-hadoop-writer.rb +48 -0
- data/test/test-snappy-hadoop.rb +22 -0
- data/vendor/snappy/CMakeLists.txt +174 -0
- data/vendor/snappy/CONTRIBUTING.md +26 -0
- data/vendor/snappy/COPYING +1 -1
- data/vendor/snappy/NEWS +52 -0
- data/vendor/snappy/{README → README.md} +23 -9
- data/vendor/snappy/cmake/SnappyConfig.cmake +1 -0
- data/vendor/snappy/cmake/config.h.in +62 -0
- data/vendor/snappy/snappy-c.h +3 -3
- data/vendor/snappy/snappy-internal.h +101 -27
- data/vendor/snappy/snappy-sinksource.cc +33 -0
- data/vendor/snappy/snappy-sinksource.h +51 -6
- data/vendor/snappy/snappy-stubs-internal.h +107 -37
- data/vendor/snappy/snappy-stubs-public.h.in +16 -20
- data/vendor/snappy/snappy-test.cc +15 -9
- data/vendor/snappy/snappy-test.h +34 -43
- data/vendor/snappy/snappy.cc +529 -320
- data/vendor/snappy/snappy.h +23 -4
- data/vendor/snappy/snappy_unittest.cc +240 -185
- metadata +27 -74
- data/vendor/snappy/ChangeLog +0 -1916
- data/vendor/snappy/Makefile.am +0 -23
- data/vendor/snappy/autogen.sh +0 -7
- data/vendor/snappy/configure.ac +0 -133
- data/vendor/snappy/m4/gtest.m4 +0 -74
- data/vendor/snappy/testdata/alice29.txt +0 -3609
- data/vendor/snappy/testdata/asyoulik.txt +0 -4122
- data/vendor/snappy/testdata/baddata1.snappy +0 -0
- data/vendor/snappy/testdata/baddata2.snappy +0 -0
- data/vendor/snappy/testdata/baddata3.snappy +0 -0
- data/vendor/snappy/testdata/fireworks.jpeg +0 -0
- data/vendor/snappy/testdata/geo.protodata +0 -0
- data/vendor/snappy/testdata/html +0 -1
- data/vendor/snappy/testdata/html_x_4 +0 -1
- data/vendor/snappy/testdata/kppkn.gtb +0 -0
- data/vendor/snappy/testdata/lcet10.txt +0 -7519
- data/vendor/snappy/testdata/paper-100k.pdf +2 -600
- data/vendor/snappy/testdata/plrabn12.txt +0 -10699
- data/vendor/snappy/testdata/urls.10K +0 -10000
@@ -28,8 +28,8 @@
|
|
28
28
|
//
|
29
29
|
// Various stubs for the open-source version of Snappy.
|
30
30
|
|
31
|
-
#ifndef
|
32
|
-
#define
|
31
|
+
#ifndef THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_
|
32
|
+
#define THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_
|
33
33
|
|
34
34
|
#ifdef HAVE_CONFIG_H
|
35
35
|
#include "config.h"
|
@@ -45,6 +45,14 @@
|
|
45
45
|
#include <sys/mman.h>
|
46
46
|
#endif
|
47
47
|
|
48
|
+
#ifdef HAVE_UNISTD_H
|
49
|
+
#include <unistd.h>
|
50
|
+
#endif
|
51
|
+
|
52
|
+
#if defined(_MSC_VER)
|
53
|
+
#include <intrin.h>
|
54
|
+
#endif // defined(_MSC_VER)
|
55
|
+
|
48
56
|
#include "snappy-stubs-public.h"
|
49
57
|
|
50
58
|
#if defined(__x86_64__)
|
@@ -52,6 +60,14 @@
|
|
52
60
|
// Enable 64-bit optimized versions of some routines.
|
53
61
|
#define ARCH_K8 1
|
54
62
|
|
63
|
+
#elif defined(__ppc64__)
|
64
|
+
|
65
|
+
#define ARCH_PPC 1
|
66
|
+
|
67
|
+
#elif defined(__aarch64__)
|
68
|
+
|
69
|
+
#define ARCH_ARM 1
|
70
|
+
|
55
71
|
#endif
|
56
72
|
|
57
73
|
// Needed by OS X, among others.
|
@@ -59,10 +75,6 @@
|
|
59
75
|
#define MAP_ANONYMOUS MAP_ANON
|
60
76
|
#endif
|
61
77
|
|
62
|
-
// Pull in std::min, std::ostream, and the likes. This is safe because this
|
63
|
-
// header file is never used from any public header files.
|
64
|
-
using namespace std;
|
65
|
-
|
66
78
|
// The size of an array, if known at compile-time.
|
67
79
|
// Will give unexpected results if used on a pointer.
|
68
80
|
// We undefine it first, since some compilers already have a definition.
|
@@ -73,11 +85,11 @@ using namespace std;
|
|
73
85
|
|
74
86
|
// Static prediction hints.
|
75
87
|
#ifdef HAVE_BUILTIN_EXPECT
|
76
|
-
#define
|
77
|
-
#define
|
88
|
+
#define SNAPPY_PREDICT_FALSE(x) (__builtin_expect(x, 0))
|
89
|
+
#define SNAPPY_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
|
78
90
|
#else
|
79
|
-
#define
|
80
|
-
#define
|
91
|
+
#define SNAPPY_PREDICT_FALSE(x) x
|
92
|
+
#define SNAPPY_PREDICT_TRUE(x) x
|
81
93
|
#endif
|
82
94
|
|
83
95
|
// This is only used for recomputing the tag byte table used during
|
@@ -96,9 +108,10 @@ static const int64 kint64max = static_cast<int64>(0x7FFFFFFFFFFFFFFFLL);
|
|
96
108
|
|
97
109
|
// Potentially unaligned loads and stores.
|
98
110
|
|
99
|
-
// x86 and
|
111
|
+
// x86, PowerPC, and ARM64 can simply do these loads and stores native.
|
100
112
|
|
101
|
-
#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__)
|
113
|
+
#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || \
|
114
|
+
defined(__aarch64__)
|
102
115
|
|
103
116
|
#define UNALIGNED_LOAD16(_p) (*reinterpret_cast<const uint16 *>(_p))
|
104
117
|
#define UNALIGNED_LOAD32(_p) (*reinterpret_cast<const uint32 *>(_p))
|
@@ -116,6 +129,15 @@ static const int64 kint64max = static_cast<int64>(0x7FFFFFFFFFFFFFFFLL);
|
|
116
129
|
// sub-architectures.
|
117
130
|
//
|
118
131
|
// This is a mess, but there's not much we can do about it.
|
132
|
+
//
|
133
|
+
// To further complicate matters, only LDR instructions (single reads) are
|
134
|
+
// allowed to be unaligned, not LDRD (two reads) or LDM (many reads). Unless we
|
135
|
+
// explicitly tell the compiler that these accesses can be unaligned, it can and
|
136
|
+
// will combine accesses. On armcc, the way to signal this is done by accessing
|
137
|
+
// through the type (uint32 __packed *), but GCC has no such attribute
|
138
|
+
// (it ignores __attribute__((packed)) on individual variables). However,
|
139
|
+
// we can tell it that a _struct_ is unaligned, which has the same effect,
|
140
|
+
// so we do that.
|
119
141
|
|
120
142
|
#elif defined(__arm__) && \
|
121
143
|
!defined(__ARM_ARCH_4__) && \
|
@@ -131,11 +153,39 @@ static const int64 kint64max = static_cast<int64>(0x7FFFFFFFFFFFFFFFLL);
|
|
131
153
|
!defined(__ARM_ARCH_6ZK__) && \
|
132
154
|
!defined(__ARM_ARCH_6T2__)
|
133
155
|
|
134
|
-
#
|
135
|
-
#define
|
156
|
+
#if __GNUC__
|
157
|
+
#define ATTRIBUTE_PACKED __attribute__((__packed__))
|
158
|
+
#else
|
159
|
+
#define ATTRIBUTE_PACKED
|
160
|
+
#endif
|
136
161
|
|
137
|
-
|
138
|
-
|
162
|
+
namespace base {
|
163
|
+
namespace internal {
|
164
|
+
|
165
|
+
struct Unaligned16Struct {
|
166
|
+
uint16 value;
|
167
|
+
uint8 dummy; // To make the size non-power-of-two.
|
168
|
+
} ATTRIBUTE_PACKED;
|
169
|
+
|
170
|
+
struct Unaligned32Struct {
|
171
|
+
uint32 value;
|
172
|
+
uint8 dummy; // To make the size non-power-of-two.
|
173
|
+
} ATTRIBUTE_PACKED;
|
174
|
+
|
175
|
+
} // namespace internal
|
176
|
+
} // namespace base
|
177
|
+
|
178
|
+
#define UNALIGNED_LOAD16(_p) \
|
179
|
+
((reinterpret_cast<const ::snappy::base::internal::Unaligned16Struct *>(_p))->value)
|
180
|
+
#define UNALIGNED_LOAD32(_p) \
|
181
|
+
((reinterpret_cast<const ::snappy::base::internal::Unaligned32Struct *>(_p))->value)
|
182
|
+
|
183
|
+
#define UNALIGNED_STORE16(_p, _val) \
|
184
|
+
((reinterpret_cast< ::snappy::base::internal::Unaligned16Struct *>(_p))->value = \
|
185
|
+
(_val))
|
186
|
+
#define UNALIGNED_STORE32(_p, _val) \
|
187
|
+
((reinterpret_cast< ::snappy::base::internal::Unaligned32Struct *>(_p))->value = \
|
188
|
+
(_val))
|
139
189
|
|
140
190
|
// TODO(user): NEON supports unaligned 64-bit loads and stores.
|
141
191
|
// See if that would be more efficient on platforms supporting it,
|
@@ -188,22 +238,8 @@ inline void UNALIGNED_STORE64(void *p, uint64 v) {
|
|
188
238
|
|
189
239
|
#endif
|
190
240
|
|
191
|
-
// This can be more efficient than UNALIGNED_LOAD64 + UNALIGNED_STORE64
|
192
|
-
// on some platforms, in particular ARM.
|
193
|
-
inline void UnalignedCopy64(const void *src, void *dst) {
|
194
|
-
if (sizeof(void *) == 8) {
|
195
|
-
UNALIGNED_STORE64(dst, UNALIGNED_LOAD64(src));
|
196
|
-
} else {
|
197
|
-
const char *src_char = reinterpret_cast<const char *>(src);
|
198
|
-
char *dst_char = reinterpret_cast<char *>(dst);
|
199
|
-
|
200
|
-
UNALIGNED_STORE32(dst_char, UNALIGNED_LOAD32(src_char));
|
201
|
-
UNALIGNED_STORE32(dst_char + 4, UNALIGNED_LOAD32(src_char + 4));
|
202
|
-
}
|
203
|
-
}
|
204
|
-
|
205
241
|
// The following guarantees declaration of the byte swap functions.
|
206
|
-
#
|
242
|
+
#if defined(SNAPPY_IS_BIG_ENDIAN)
|
207
243
|
|
208
244
|
#ifdef HAVE_SYS_BYTEORDER_H
|
209
245
|
#include <sys/byteorder.h>
|
@@ -260,7 +296,7 @@ inline uint64 bswap_64(uint64 x) {
|
|
260
296
|
|
261
297
|
#endif
|
262
298
|
|
263
|
-
#endif //
|
299
|
+
#endif // defined(SNAPPY_IS_BIG_ENDIAN)
|
264
300
|
|
265
301
|
// Convert to little-endian storage, opposite of network format.
|
266
302
|
// Convert x from host to little endian: x = LittleEndian.FromHost(x);
|
@@ -274,7 +310,7 @@ inline uint64 bswap_64(uint64 x) {
|
|
274
310
|
class LittleEndian {
|
275
311
|
public:
|
276
312
|
// Conversion functions.
|
277
|
-
#
|
313
|
+
#if defined(SNAPPY_IS_BIG_ENDIAN)
|
278
314
|
|
279
315
|
static uint16 FromHost16(uint16 x) { return bswap_16(x); }
|
280
316
|
static uint16 ToHost16(uint16 x) { return bswap_16(x); }
|
@@ -284,7 +320,7 @@ class LittleEndian {
|
|
284
320
|
|
285
321
|
static bool IsLittleEndian() { return false; }
|
286
322
|
|
287
|
-
#else // !defined(
|
323
|
+
#else // !defined(SNAPPY_IS_BIG_ENDIAN)
|
288
324
|
|
289
325
|
static uint16 FromHost16(uint16 x) { return x; }
|
290
326
|
static uint16 ToHost16(uint16 x) { return x; }
|
@@ -294,7 +330,7 @@ class LittleEndian {
|
|
294
330
|
|
295
331
|
static bool IsLittleEndian() { return true; }
|
296
332
|
|
297
|
-
#endif // !defined(
|
333
|
+
#endif // !defined(SNAPPY_IS_BIG_ENDIAN)
|
298
334
|
|
299
335
|
// Functions to do unaligned loads and stores in little-endian order.
|
300
336
|
static uint16 Load16(const void *p) {
|
@@ -324,10 +360,15 @@ class Bits {
|
|
324
360
|
// undefined value if n == 0. FindLSBSetNonZero() is similar to ffs() except
|
325
361
|
// that it's 0-indexed.
|
326
362
|
static int FindLSBSetNonZero(uint32 n);
|
363
|
+
|
364
|
+
#if defined(ARCH_K8) || defined(ARCH_PPC) || defined(ARCH_ARM)
|
327
365
|
static int FindLSBSetNonZero64(uint64 n);
|
366
|
+
#endif // defined(ARCH_K8) || defined(ARCH_PPC) || defined(ARCH_ARM)
|
328
367
|
|
329
368
|
private:
|
330
|
-
|
369
|
+
// No copying
|
370
|
+
Bits(const Bits&);
|
371
|
+
void operator=(const Bits&);
|
331
372
|
};
|
332
373
|
|
333
374
|
#ifdef HAVE_BUILTIN_CTZ
|
@@ -340,9 +381,36 @@ inline int Bits::FindLSBSetNonZero(uint32 n) {
|
|
340
381
|
return __builtin_ctz(n);
|
341
382
|
}
|
342
383
|
|
384
|
+
#if defined(ARCH_K8) || defined(ARCH_PPC) || defined(ARCH_ARM)
|
343
385
|
inline int Bits::FindLSBSetNonZero64(uint64 n) {
|
344
386
|
return __builtin_ctzll(n);
|
345
387
|
}
|
388
|
+
#endif // defined(ARCH_K8) || defined(ARCH_PPC) || defined(ARCH_ARM)
|
389
|
+
|
390
|
+
#elif defined(_MSC_VER)
|
391
|
+
|
392
|
+
inline int Bits::Log2Floor(uint32 n) {
|
393
|
+
unsigned long where;
|
394
|
+
if (_BitScanReverse(&where, n)) {
|
395
|
+
return where;
|
396
|
+
} else {
|
397
|
+
return -1;
|
398
|
+
}
|
399
|
+
}
|
400
|
+
|
401
|
+
inline int Bits::FindLSBSetNonZero(uint32 n) {
|
402
|
+
unsigned long where;
|
403
|
+
if (_BitScanForward(&where, n)) return static_cast<int>(where);
|
404
|
+
return 32;
|
405
|
+
}
|
406
|
+
|
407
|
+
#if defined(ARCH_K8) || defined(ARCH_PPC) || defined(ARCH_ARM)
|
408
|
+
inline int Bits::FindLSBSetNonZero64(uint64 n) {
|
409
|
+
unsigned long where;
|
410
|
+
if (_BitScanForward64(&where, n)) return static_cast<int>(where);
|
411
|
+
return 64;
|
412
|
+
}
|
413
|
+
#endif // defined(ARCH_K8) || defined(ARCH_PPC) || defined(ARCH_ARM)
|
346
414
|
|
347
415
|
#else // Portable versions.
|
348
416
|
|
@@ -376,6 +444,7 @@ inline int Bits::FindLSBSetNonZero(uint32 n) {
|
|
376
444
|
return rc;
|
377
445
|
}
|
378
446
|
|
447
|
+
#if defined(ARCH_K8) || defined(ARCH_PPC) || defined(ARCH_ARM)
|
379
448
|
// FindLSBSetNonZero64() is defined in terms of FindLSBSetNonZero().
|
380
449
|
inline int Bits::FindLSBSetNonZero64(uint64 n) {
|
381
450
|
const uint32 bottombits = static_cast<uint32>(n);
|
@@ -386,6 +455,7 @@ inline int Bits::FindLSBSetNonZero64(uint64 n) {
|
|
386
455
|
return FindLSBSetNonZero(bottombits);
|
387
456
|
}
|
388
457
|
}
|
458
|
+
#endif // defined(ARCH_K8) || defined(ARCH_PPC) || defined(ARCH_ARM)
|
389
459
|
|
390
460
|
#endif // End portable versions.
|
391
461
|
|
@@ -488,4 +558,4 @@ inline char* string_as_array(string* str) {
|
|
488
558
|
|
489
559
|
} // namespace snappy
|
490
560
|
|
491
|
-
#endif //
|
561
|
+
#endif // THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_INTERNAL_H_
|
@@ -33,24 +33,24 @@
|
|
33
33
|
// which is a public header. Instead, snappy-stubs-public.h is generated by
|
34
34
|
// from snappy-stubs-public.h.in at configure time.
|
35
35
|
|
36
|
-
#ifndef
|
37
|
-
#define
|
36
|
+
#ifndef THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_
|
37
|
+
#define THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_
|
38
38
|
|
39
|
-
#if
|
39
|
+
#if ${HAVE_STDINT_H_01} // HAVE_STDINT_H
|
40
40
|
#include <stdint.h>
|
41
|
-
#endif
|
41
|
+
#endif // HAVE_STDDEF_H
|
42
42
|
|
43
|
-
#if
|
43
|
+
#if ${HAVE_STDDEF_H_01} // HAVE_STDDEF_H
|
44
44
|
#include <stddef.h>
|
45
|
-
#endif
|
45
|
+
#endif // HAVE_STDDEF_H
|
46
46
|
|
47
|
-
#if
|
47
|
+
#if ${HAVE_SYS_UIO_H_01} // HAVE_SYS_UIO_H
|
48
48
|
#include <sys/uio.h>
|
49
|
-
#endif
|
49
|
+
#endif // HAVE_SYS_UIO_H
|
50
50
|
|
51
|
-
#define SNAPPY_MAJOR
|
52
|
-
#define SNAPPY_MINOR
|
53
|
-
#define SNAPPY_PATCHLEVEL
|
51
|
+
#define SNAPPY_MAJOR ${SNAPPY_MAJOR}
|
52
|
+
#define SNAPPY_MINOR ${SNAPPY_MINOR}
|
53
|
+
#define SNAPPY_PATCHLEVEL ${SNAPPY_PATCHLEVEL}
|
54
54
|
#define SNAPPY_VERSION \
|
55
55
|
((SNAPPY_MAJOR << 16) | (SNAPPY_MINOR << 8) | SNAPPY_PATCHLEVEL)
|
56
56
|
|
@@ -58,7 +58,7 @@
|
|
58
58
|
|
59
59
|
namespace snappy {
|
60
60
|
|
61
|
-
#if
|
61
|
+
#if ${HAVE_STDINT_H_01} // HAVE_STDINT_H
|
62
62
|
typedef int8_t int8;
|
63
63
|
typedef uint8_t uint8;
|
64
64
|
typedef int16_t int16;
|
@@ -76,23 +76,19 @@ typedef int int32;
|
|
76
76
|
typedef unsigned int uint32;
|
77
77
|
typedef long long int64;
|
78
78
|
typedef unsigned long long uint64;
|
79
|
-
#endif
|
79
|
+
#endif // HAVE_STDINT_H
|
80
80
|
|
81
81
|
typedef std::string string;
|
82
82
|
|
83
|
-
#
|
84
|
-
TypeName(const TypeName&); \
|
85
|
-
void operator=(const TypeName&)
|
86
|
-
|
87
|
-
#if !@ac_cv_have_sys_uio_h@
|
83
|
+
#if !${HAVE_SYS_UIO_H_01} // !HAVE_SYS_UIO_H
|
88
84
|
// Windows does not have an iovec type, yet the concept is universally useful.
|
89
85
|
// It is simple to define it ourselves, so we put it inside our own namespace.
|
90
86
|
struct iovec {
|
91
87
|
void* iov_base;
|
92
88
|
size_t iov_len;
|
93
89
|
};
|
94
|
-
#endif
|
90
|
+
#endif // !HAVE_SYS_UIO_H
|
95
91
|
|
96
92
|
} // namespace snappy
|
97
93
|
|
98
|
-
#endif //
|
94
|
+
#endif // THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_STUBS_PUBLIC_H_
|
@@ -28,13 +28,19 @@
|
|
28
28
|
//
|
29
29
|
// Various stubs for the unit tests for the open-source version of Snappy.
|
30
30
|
|
31
|
-
#
|
31
|
+
#ifdef HAVE_CONFIG_H
|
32
|
+
#include "config.h"
|
33
|
+
#endif
|
32
34
|
|
33
35
|
#ifdef HAVE_WINDOWS_H
|
34
|
-
|
36
|
+
// Needed to be able to use std::max without workarounds in the source code.
|
37
|
+
// https://support.microsoft.com/en-us/help/143208/prb-using-stl-in-windows-program-can-cause-min-max-conflicts
|
38
|
+
#define NOMINMAX
|
35
39
|
#include <windows.h>
|
36
40
|
#endif
|
37
41
|
|
42
|
+
#include "snappy-test.h"
|
43
|
+
|
38
44
|
#include <algorithm>
|
39
45
|
|
40
46
|
DEFINE_bool(run_microbenchmarks, true,
|
@@ -198,7 +204,7 @@ void Benchmark::Run() {
|
|
198
204
|
if (benchmark_real_time_us > 0) {
|
199
205
|
num_iterations = 200000 * kCalibrateIterations / benchmark_real_time_us;
|
200
206
|
}
|
201
|
-
num_iterations = max(num_iterations, kCalibrateIterations);
|
207
|
+
num_iterations = std::max(num_iterations, kCalibrateIterations);
|
202
208
|
BenchmarkRun benchmark_runs[kNumRuns];
|
203
209
|
|
204
210
|
for (int run = 0; run < kNumRuns; ++run) {
|
@@ -214,10 +220,10 @@ void Benchmark::Run() {
|
|
214
220
|
string heading = StringPrintf("%s/%d", name_.c_str(), test_case_num);
|
215
221
|
string human_readable_speed;
|
216
222
|
|
217
|
-
nth_element(benchmark_runs,
|
218
|
-
|
219
|
-
|
220
|
-
|
223
|
+
std::nth_element(benchmark_runs,
|
224
|
+
benchmark_runs + kMedianPos,
|
225
|
+
benchmark_runs + kNumRuns,
|
226
|
+
BenchmarkCompareCPUTime());
|
221
227
|
int64 real_time_us = benchmark_runs[kMedianPos].real_time_us;
|
222
228
|
int64 cpu_time_us = benchmark_runs[kMedianPos].cpu_time_us;
|
223
229
|
if (cpu_time_us <= 0) {
|
@@ -520,8 +526,8 @@ int ZLib::UncompressAtMostOrAll(Bytef *dest, uLongf *destLen,
|
|
520
526
|
LOG(WARNING)
|
521
527
|
<< "UncompressChunkOrAll: Received some extra data, bytes total: "
|
522
528
|
<< uncomp_stream_.avail_in << " bytes: "
|
523
|
-
<< string(reinterpret_cast<const char *>(uncomp_stream_.next_in),
|
524
|
-
|
529
|
+
<< std::string(reinterpret_cast<const char *>(uncomp_stream_.next_in),
|
530
|
+
std::min(int(uncomp_stream_.avail_in), 20));
|
525
531
|
UncompressErrorInit();
|
526
532
|
return Z_DATA_ERROR; // what's the extra data for?
|
527
533
|
} else if (err != Z_OK && err != Z_STREAM_END && err != Z_BUF_ERROR) {
|
data/vendor/snappy/snappy-test.h
CHANGED
@@ -28,8 +28,8 @@
|
|
28
28
|
//
|
29
29
|
// Various stubs for the unit tests for the open-source version of Snappy.
|
30
30
|
|
31
|
-
#ifndef
|
32
|
-
#define
|
31
|
+
#ifndef THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_
|
32
|
+
#define THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_
|
33
33
|
|
34
34
|
#include <iostream>
|
35
35
|
#include <string>
|
@@ -52,7 +52,6 @@
|
|
52
52
|
#endif
|
53
53
|
|
54
54
|
#ifdef HAVE_WINDOWS_H
|
55
|
-
#define WIN32_LEAN_AND_MEAN
|
56
55
|
#include <windows.h>
|
57
56
|
#endif
|
58
57
|
|
@@ -111,35 +110,18 @@
|
|
111
110
|
#include "lzo/lzo1x.h"
|
112
111
|
#endif
|
113
112
|
|
114
|
-
#ifdef HAVE_LIBLZF
|
115
|
-
extern "C" {
|
116
|
-
#include "lzf.h"
|
117
|
-
}
|
118
|
-
#endif
|
119
|
-
|
120
|
-
#ifdef HAVE_LIBFASTLZ
|
121
|
-
#include "fastlz.h"
|
122
|
-
#endif
|
123
|
-
|
124
|
-
#ifdef HAVE_LIBQUICKLZ
|
125
|
-
#include "quicklz.h"
|
126
|
-
#endif
|
127
|
-
|
128
113
|
namespace {
|
129
114
|
|
130
|
-
namespace File {
|
131
|
-
void Init() { }
|
132
|
-
} // namespace File
|
133
|
-
|
134
115
|
namespace file {
|
135
|
-
int Defaults() { }
|
116
|
+
int Defaults() { return 0; }
|
136
117
|
|
137
118
|
class DummyStatus {
|
138
119
|
public:
|
139
120
|
void CheckSuccess() { }
|
140
121
|
};
|
141
122
|
|
142
|
-
DummyStatus GetContents(
|
123
|
+
DummyStatus GetContents(
|
124
|
+
const std::string& filename, std::string* data, int unused) {
|
143
125
|
FILE* fp = fopen(filename.c_str(), "rb");
|
144
126
|
if (fp == NULL) {
|
145
127
|
perror(filename.c_str());
|
@@ -154,15 +136,16 @@ namespace file {
|
|
154
136
|
perror("fread");
|
155
137
|
exit(1);
|
156
138
|
}
|
157
|
-
data->append(string(buf, ret));
|
139
|
+
data->append(std::string(buf, ret));
|
158
140
|
}
|
159
141
|
|
160
142
|
fclose(fp);
|
143
|
+
|
144
|
+
return DummyStatus();
|
161
145
|
}
|
162
146
|
|
163
|
-
DummyStatus SetContents(
|
164
|
-
|
165
|
-
int unused) {
|
147
|
+
inline DummyStatus SetContents(
|
148
|
+
const std::string& filename, const std::string& str, int unused) {
|
166
149
|
FILE* fp = fopen(filename.c_str(), "wb");
|
167
150
|
if (fp == NULL) {
|
168
151
|
perror(filename.c_str());
|
@@ -176,6 +159,8 @@ namespace file {
|
|
176
159
|
}
|
177
160
|
|
178
161
|
fclose(fp);
|
162
|
+
|
163
|
+
return DummyStatus();
|
179
164
|
}
|
180
165
|
} // namespace file
|
181
166
|
|
@@ -193,6 +178,7 @@ void Test_Snappy_RandomData();
|
|
193
178
|
void Test_Snappy_FourByteOffset();
|
194
179
|
void Test_SnappyCorruption_TruncatedVarint();
|
195
180
|
void Test_SnappyCorruption_UnterminatedVarint();
|
181
|
+
void Test_SnappyCorruption_OverflowingVarint();
|
196
182
|
void Test_Snappy_ReadPastEndOfBuffer();
|
197
183
|
void Test_Snappy_FindMatchLength();
|
198
184
|
void Test_Snappy_FindMatchLengthRandom();
|
@@ -463,7 +449,7 @@ class ZLib {
|
|
463
449
|
|
464
450
|
DECLARE_bool(run_microbenchmarks);
|
465
451
|
|
466
|
-
static void RunSpecifiedBenchmarks() {
|
452
|
+
static inline void RunSpecifiedBenchmarks() {
|
467
453
|
if (!FLAGS_run_microbenchmarks) {
|
468
454
|
return;
|
469
455
|
}
|
@@ -497,6 +483,7 @@ static inline int RUN_ALL_TESTS() {
|
|
497
483
|
snappy::Test_Snappy_FourByteOffset();
|
498
484
|
snappy::Test_SnappyCorruption_TruncatedVarint();
|
499
485
|
snappy::Test_SnappyCorruption_UnterminatedVarint();
|
486
|
+
snappy::Test_SnappyCorruption_OverflowingVarint();
|
500
487
|
snappy::Test_Snappy_ReadPastEndOfBuffer();
|
501
488
|
snappy::Test_Snappy_FindMatchLength();
|
502
489
|
snappy::Test_Snappy_FindMatchLengthRandom();
|
@@ -510,10 +497,6 @@ static inline int RUN_ALL_TESTS() {
|
|
510
497
|
// For main().
|
511
498
|
namespace snappy {
|
512
499
|
|
513
|
-
static void CompressFile(const char* fname);
|
514
|
-
static void UncompressFile(const char* fname);
|
515
|
-
static void MeasureFile(const char* fname);
|
516
|
-
|
517
500
|
// Logging.
|
518
501
|
|
519
502
|
#define LOG(level) LogMessage()
|
@@ -524,15 +507,15 @@ class LogMessage {
|
|
524
507
|
public:
|
525
508
|
LogMessage() { }
|
526
509
|
~LogMessage() {
|
527
|
-
cerr << endl;
|
510
|
+
std::cerr << std::endl;
|
528
511
|
}
|
529
512
|
|
530
513
|
LogMessage& operator<<(const std::string& msg) {
|
531
|
-
cerr << msg;
|
514
|
+
std::cerr << msg;
|
532
515
|
return *this;
|
533
516
|
}
|
534
517
|
LogMessage& operator<<(int x) {
|
535
|
-
cerr << x;
|
518
|
+
std::cerr << x;
|
536
519
|
return *this;
|
537
520
|
}
|
538
521
|
};
|
@@ -541,18 +524,29 @@ class LogMessage {
|
|
541
524
|
// and ones that are always active.
|
542
525
|
|
543
526
|
#define CRASH_UNLESS(condition) \
|
544
|
-
|
527
|
+
SNAPPY_PREDICT_TRUE(condition) ? (void)0 : \
|
545
528
|
snappy::LogMessageVoidify() & snappy::LogMessageCrash()
|
546
529
|
|
530
|
+
#ifdef _MSC_VER
|
531
|
+
// ~LogMessageCrash calls abort() and therefore never exits. This is by design
|
532
|
+
// so temporarily disable warning C4722.
|
533
|
+
#pragma warning(push)
|
534
|
+
#pragma warning(disable:4722)
|
535
|
+
#endif
|
536
|
+
|
547
537
|
class LogMessageCrash : public LogMessage {
|
548
538
|
public:
|
549
539
|
LogMessageCrash() { }
|
550
540
|
~LogMessageCrash() {
|
551
|
-
cerr << endl;
|
541
|
+
std::cerr << std::endl;
|
552
542
|
abort();
|
553
543
|
}
|
554
544
|
};
|
555
545
|
|
546
|
+
#ifdef _MSC_VER
|
547
|
+
#pragma warning(pop)
|
548
|
+
#endif
|
549
|
+
|
556
550
|
// This class is used to explicitly ignore values in the conditional
|
557
551
|
// logging macros. This avoids compiler warnings like "value computed
|
558
552
|
// is not used" and "statement has no effect".
|
@@ -572,11 +566,8 @@ class LogMessageVoidify {
|
|
572
566
|
#define CHECK_NE(a, b) CRASH_UNLESS((a) != (b))
|
573
567
|
#define CHECK_LT(a, b) CRASH_UNLESS((a) < (b))
|
574
568
|
#define CHECK_GT(a, b) CRASH_UNLESS((a) > (b))
|
569
|
+
#define CHECK_OK(cond) (cond).CheckSuccess()
|
575
570
|
|
576
|
-
} // namespace
|
577
|
-
|
578
|
-
using snappy::CompressFile;
|
579
|
-
using snappy::UncompressFile;
|
580
|
-
using snappy::MeasureFile;
|
571
|
+
} // namespace snappy
|
581
572
|
|
582
|
-
#endif //
|
573
|
+
#endif // THIRD_PARTY_SNAPPY_OPENSOURCE_SNAPPY_TEST_H_
|