For ZIP_CM_DEFAULT: deflate stored sources, don't recompress compressed ones. Also, have zip_source_deflate handle ZIP_CM_DEFAULT in preparation of actually implementing it.
diff --git a/lib/zip_close.c b/lib/zip_close.c index 66a0895..aee16aa 100644 --- a/lib/zip_close.c +++ b/lib/zip_close.c
@@ -299,7 +299,7 @@ de->comp_method = ZIP_CM_DEFLATE; } - if (st.comp_method != de->comp_method || st.comp_method == ZIP_CM_STORE) { + if (st.comp_method == ZIP_CM_STORE || (de->comp_method != ZIP_CM_DEFAULT && st.comp_method != de->comp_method)) { struct zip_source *s_store, *s_crc; zip_compression_implementation comp_impl;
diff --git a/lib/zip_get_compression_implementation.c b/lib/zip_get_compression_implementation.c index 8d4ccb6..82128f3 100644 --- a/lib/zip_get_compression_implementation.c +++ b/lib/zip_get_compression_implementation.c
@@ -38,9 +38,9 @@ ZIP_EXTERN zip_compression_implementation -zip_get_compression_implementation(zip_uint16_t cm) +zip_get_compression_implementation(zip_int32_t cm) { - if (cm == ZIP_CM_DEFLATE) + if (cm == ZIP_CM_DEFLATE || cm == ZIP_CM_DEFAULT) return zip_source_deflate; return NULL; }
diff --git a/lib/zip_source_deflate.c b/lib/zip_source_deflate.c index 0cbcd7c..e651400 100644 --- a/lib/zip_source_deflate.c +++ b/lib/zip_source_deflate.c
@@ -62,12 +62,12 @@ ZIP_EXTERN struct zip_source * zip_source_deflate(struct zip *za, struct zip_source *src, - zip_uint16_t cm, int flags) + zip_int32_t cm, int flags) { struct deflate *ctx; struct zip_source *s2; - if (src == NULL || cm != ZIP_CM_DEFLATE) { + if (src == NULL || (cm != ZIP_CM_DEFLATE && cm != ZIP_CM_DEFAULT)) { _zip_error_set(&za->error, ZIP_ER_INVAL, 0); return NULL; }
diff --git a/lib/zipint.h b/lib/zipint.h index a03fe7c..0c334c5 100644 --- a/lib/zipint.h +++ b/lib/zipint.h
@@ -125,13 +125,13 @@ typedef struct zip_source *(*zip_compression_implementation)(struct zip *, struct zip_source *, - zip_uint16_t, int); + zip_int32_t, int); typedef struct zip_source *(*zip_encryption_implementation)(struct zip *, struct zip_source *, zip_uint16_t, int, const char *); -zip_compression_implementation zip_get_compression_implementation(zip_uint16_t); +zip_compression_implementation zip_get_compression_implementation(zip_int32_t); zip_encryption_implementation zip_get_encryption_implementation(zip_uint16_t); @@ -154,7 +154,7 @@ int); struct zip_source *zip_source_deflate(struct zip *, struct zip_source *, - zip_uint16_t, int); + zip_int32_t, int); void zip_source_error(struct zip_source *, int *, int *); struct zip_source *zip_source_layered(struct zip *, struct zip_source *,