]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-compression: Fix support for older libzstd
authorAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 31 Jul 2020 06:51:35 +0000 (09:51 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 31 Jul 2020 06:51:35 +0000 (09:51 +0300)
m4/want_zstd.m4
src/lib-compression/istream-zstd.c
src/lib-compression/ostream-zstd.c

index 4ed262cb6b357b89cee10975a4ca7a6d8556a032..b85a81268aa7e6bfe908dc98718f83e339b5395b 100644 (file)
@@ -12,6 +12,10 @@ AC_DEFUN([DOVECOT_WANT_ZSTD], [
     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")
index b35859cbcc4610a0e5c8799d78c403319cb1421f..61113da364f765314a9f97fb7423ade3ac216aac 100644 (file)
 #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;
 
@@ -89,7 +99,10 @@ static void i_stream_zstd_read_error(struct zstd_istream *zstream, size_t err)
                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;
index 69c6ea2e50040ef71e511ba316b431a894bb6fba..870a7b499186073a499e7619a431a65e5d7c8e51 100644 (file)
@@ -33,7 +33,9 @@ static void o_stream_zstd_write_error(struct zstd_ostream *zstream, size_t err)
                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;