have_compress_lib=yes
COMPRESS_LIBS="$COMPRESS_LIBS $ZSTD_LIBS"
AC_DEFINE([HAVE_ZSTD], [], [Define if you have ZSTD library])
+ AC_CHECK_DECLS([ZSTD_error_parameter_unsupported], [], [], [[#include <zstd_errors.h>]])
+ AC_CHECK_LIB([zstd], [ZSTD_getErrorCode], [
+ AC_DEFINE([HAVE_ZSTD_GETERRORCODE], [1], [Whether zstd has ZSTD_getErrorCode])
+ ], [])
])
AM_CONDITIONAL([BUILD_ZSTD], test "$have_zstd" = "yes")
#include "zstd.h"
#include "zstd_errors.h"
+#ifndef HAVE_ZSTD_GETERRORCODE
+ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult)
+{
+ ssize_t errcode = (ssize_t)functionResult;
+ if (errcode < 0)
+ return -errcode;
+ return ZSTD_error_no_error;
+}
+#endif
+
struct zstd_istream {
struct istream_private istream;
i_fatal_status(FATAL_OUTOFMEM, "zstd.read(%s): Out of memory",
i_stream_get_name(&zstream->istream.istream));
else if (errcode == ZSTD_error_prefix_unknown ||
+#if HAVE_DECL_ZSTD_ERROR_PARAMETER_UNSUPPORTED == 1
errcode == ZSTD_error_parameter_unsupported ||
+#endif
+
errcode == ZSTD_error_dictionary_wrong ||
errcode == ZSTD_error_init_missing)
zstream->istream.istream.stream_errno = EINVAL;
i_fatal_status(FATAL_OUTOFMEM, "zstd.write(%s): Out of memory",
o_stream_get_name(&zstream->ostream.ostream));
else if (errcode == ZSTD_error_prefix_unknown ||
+#if HAVE_DECL_ZSTD_ERROR_PARAMETER_UNSUPPORTED == 1
errcode == ZSTD_error_parameter_unsupported ||
+#endif
errcode == ZSTD_error_dictionary_wrong ||
errcode == ZSTD_error_init_missing)
zstream->ostream.ostream.stream_errno = EINVAL;