summaryrefslogtreecommitdiffstats
path: root/src/lib-compression/iostream-zstd-private.h
blob: e430bbc5433e222e7f453ce12c10a709692e72ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#ifndef IOSTREAM_ZSTD_PRIVATE_H
#define IOSTREAM_ZSTD_PRIVATE_H 1

/* a horrible hack to fix issues when the installed libzstd is lot
   newer than what we were compiled against. */
static inline ZSTD_ErrorCode zstd_version_errcode(ZSTD_ErrorCode err)
{
#if ZSTD_VERSION_NUMBER < 10301
	if (ZSTD_versionNumber() > 10300) {
		/* reinterpret them */
		if (err == 10)
			return ZSTD_error_prefix_unknown;
		if (err == 32)
			return ZSTD_error_dictionary_wrong;
		if (err == 62)
			return ZSTD_error_init_missing;
		if (err == 64)
			return ZSTD_error_memory_allocation;
		return ZSTD_error_GENERIC;
	}
#endif
	return err;
}

static inline void zstd_version_check(void)
{
	/* error codes were pinned on 1.3.1, so we only care about
	   versions before that. */
	if (ZSTD_VERSION_NUMBER < 10301 || ZSTD_versionNumber() < 10301)
		if (ZSTD_versionNumber() / 100 != ZSTD_VERSION_NUMBER / 100)
			i_warning("zstd: Compiled against %u, but %u installed!",
				  ZSTD_VERSION_NUMBER, ZSTD_versionNumber());
}

#endif