snappy 0.0.12-java → 0.1.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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_
|