Improve internal data structures. New extra field API (read only).
Added paranoid mode to zipcmp (compare more meta data).
Keep up-to-date metadata for changed entries, avoid parallel arrays.
XXX: Modifying extra fields API functions are stubs. Old API removed.
diff --git a/lib/zip.h b/lib/zip.h
index 10e2f36..2edec7b 100644
--- a/lib/zip.h
+++ b/lib/zip.h
@@ -71,11 +71,12 @@
#define ZIP_FL_COMPRESSED 4 /* read compressed data */
#define ZIP_FL_UNCHANGED 8 /* use original data, ignoring changes */
#define ZIP_FL_RECOMPRESS 16 /* force recompression of data */
-#define ZIP_FL_ENCRYPTED 32 /* read encrypted data
- (implies ZIP_FL_COMPRESSED) */
+#define ZIP_FL_ENCRYPTED 32 /* read encrypted data (implies ZIP_FL_COMPRESSED) */
#define ZIP_FL_NAME_GUESS 0 /* guess name encoding (is default) */
#define ZIP_FL_NAME_RAW 64 /* get unmodified name */
#define ZIP_FL_NAME_STRICT 128 /* follow specification strictly */
+#define ZIP_FL_LOCAL 256 /* in local header */
+#define ZIP_FL_CENTRAL 512 /* in central directory */
/* archive global flags flags */
@@ -83,6 +84,10 @@
#define ZIP_AFL_RDONLY 2 /* read only -- cannot be cleared */
+/* create a new extra field */
+
+#define ZIP_EXTRA_FIELD_NEW ZIP_UINT16_MAX
+
/* flags for compression and encryption sources */
#define ZIP_CODEC_DECODE 0 /* decompress/decrypt (encode flag not set) */
@@ -218,6 +223,8 @@
ZIP_EXTERN int zip_close(struct zip *);
ZIP_EXTERN void zip_discard(struct zip *);
ZIP_EXTERN int zip_delete(struct zip *, zip_uint64_t);
+ZIP_EXTERN int zip_delete_file_extra_field(struct zip *, zip_uint64_t, zip_uint32_t, zip_uint16_t);
+ZIP_EXTERN int zip_delete_file_extra_field_by_id(struct zip *, zip_uint64_t, zip_uint32_t, zip_uint16_t, zip_uint16_t);
ZIP_EXTERN void zip_error_clear(struct zip *);
ZIP_EXTERN void zip_error_get(struct zip *, int *, int *);
ZIP_EXTERN int zip_error_get_sys_type(int);
@@ -239,8 +246,10 @@
ZIP_EXTERN int zip_get_archive_flag(struct zip *, int, int);
ZIP_EXTERN const char *zip_get_file_comment(struct zip *, zip_uint64_t,
int *, int);
-ZIP_EXTERN const char *zip_get_file_extra(struct zip *, zip_uint64_t,
- int *, int);
+ZIP_EXTERN const zip_uint8_t *zip_get_file_extra_field(struct zip *, zip_uint64_t, zip_uint32_t, zip_uint16_t, zip_uint16_t *, zip_uint16_t *);
+ZIP_EXTERN const zip_uint8_t *zip_get_file_extra_field_by_id(struct zip *, zip_uint64_t, zip_uint32_t, zip_uint16_t, zip_uint16_t, zip_uint16_t *);
+ZIP_EXTERN zip_int16_t zip_get_file_num_extra_fields(struct zip *, zip_uint64_t, zip_uint32_t);
+ZIP_EXTERN zip_int16_t zip_get_file_num_extra_fields_by_id(struct zip *, zip_uint64_t, zip_uint32_t, zip_uint16_t);
ZIP_EXTERN const char *zip_get_name(struct zip *, zip_uint64_t, int);
ZIP_EXTERN zip_uint64_t zip_get_num_entries(struct zip *, int);
ZIP_EXTERN int zip_get_num_files(struct zip *); /* deprecated, use zip_get_num_entries instead */
@@ -255,8 +264,7 @@
const char *, int);
ZIP_EXTERN int zip_set_file_compression(struct zip *, zip_uint64_t,
zip_int32_t, zip_uint32_t);
-ZIP_EXTERN int zip_set_file_extra(struct zip *, zip_uint64_t,
- const char *, int);
+ZIP_EXTERN int zip_set_file_extra_field(struct zip *, zip_uint64_t, zip_uint32_t, zip_uint16_t, zip_uint16_t, const zip_uint8_t *, zip_uint16_t);
ZIP_EXTERN struct zip_source *zip_source_buffer(struct zip *, const void *,
zip_uint64_t, int);
ZIP_EXTERN struct zip_source *zip_source_file(struct zip *, const char *,