diff --git a/Utilities/cmlibarchive/libarchive/archive_write_add_filter_zstd.c b/Utilities/cmlibarchive/libarchive/archive_write_add_filter_zstd.c index b45af8b580..05286e135d 100644 --- a/Utilities/cmlibarchive/libarchive/archive_write_add_filter_zstd.c +++ b/Utilities/cmlibarchive/libarchive/archive_write_add_filter_zstd.c @@ -265,6 +265,11 @@ archive_compressor_zstd_options(struct archive_write_filter *f, const char *key, if (level < minimum || level > maximum) { return (ARCHIVE_WARN); } +#ifdef _AIX + if (level > 6) { + level = 6; + } +#endif data->compression_level = (int)level; return (ARCHIVE_OK); } else if (strcmp(key, "threads") == 0) { diff --git a/Utilities/cmlibarchive/libarchive/archive_write_set_format_7zip.c b/Utilities/cmlibarchive/libarchive/archive_write_set_format_7zip.c index 3415766cf0..f02e07f480 100644 --- a/Utilities/cmlibarchive/libarchive/archive_write_set_format_7zip.c +++ b/Utilities/cmlibarchive/libarchive/archive_write_set_format_7zip.c @@ -511,6 +511,11 @@ _7z_options(struct archive_write *a, const char *key, const char *value) "compression-level option value `%ld' out of range", lvl); return (ARCHIVE_FAILED); } +#ifdef _AIX + if (lvl > 6) { + lvl = 6; + } +#endif // Note: we don't know here if this value is for zstd (negative to ~22), // or zlib-style 0-9. If zstd is enabled but not in use, we will need to diff --git a/Utilities/cmlibarchive/libarchive/archive_write_set_format_zip.c b/Utilities/cmlibarchive/libarchive/archive_write_set_format_zip.c index bb4cb444c0..3c6af19069 100644 --- a/Utilities/cmlibarchive/libarchive/archive_write_set_format_zip.c +++ b/Utilities/cmlibarchive/libarchive/archive_write_set_format_zip.c @@ -1365,6 +1365,11 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry) int zstd_compression_level = zip->compression_level == 1 ? ZSTD_minCLevel() // ZSTD_minCLevel is negative ! : (zip->compression_level - 1) * ZSTD_maxCLevel() / 8; +#ifdef _AIX + if (zstd_compression_level > 6) { + zstd_compression_level = 6; + } +#endif zip->stream.zstd.context = ZSTD_createCStream(); size_t zret = ZSTD_initCStream(zip->stream.zstd.context, zstd_compression_level); if (ZSTD_isError(zret)) {