Add get_num_entries command to modify, and test using it.
diff --git a/regress/CMakeLists.txt b/regress/CMakeLists.txt
index f6df6aa..d52b4ec 100644
--- a/regress/CMakeLists.txt
+++ b/regress/CMakeLists.txt
@@ -43,6 +43,7 @@
add_from_zip_stored.test
add_stored.test
add_stored_in_memory.test
+ count_entries.test
decrypt-correct-password.test
decrypt-wrong-password.test
delete_add_same.test
diff --git a/regress/Makefile.am b/regress/Makefile.am
index 5bd1aa5..9362855 100644
--- a/regress/Makefile.am
+++ b/regress/Makefile.am
@@ -145,6 +145,7 @@
add_from_zip_stored.test \
add_stored.test \
add_stored_in_memory.test \
+ count_entries.test \
decrypt-aes-correct-password.test \
decrypt-aes-wrong-password.test \
decrypt-correct-password.test \
diff --git a/regress/count_entries.test b/regress/count_entries.test
new file mode 100644
index 0000000..0849a03
--- /dev/null
+++ b/regress/count_entries.test
@@ -0,0 +1,6 @@
+# zip_open: count entries for archive with >65k entries
+program modify
+args manyfiles.zip get_num_entries 0
+return 0
+file manyfiles.zip manyfiles.zip manyfiles.zip
+stdout 70000 entries in archive
diff --git a/regress/modify.c b/regress/modify.c
index 8751fb1..4b9d376 100644
--- a/regress/modify.c
+++ b/regress/modify.c
@@ -373,6 +373,17 @@
}
static int
+get_num_entries(int argc, char *argv[]) {
+ zip_uint64_t count;
+ zip_flags_t flags;
+ /* get number of entries in archive */
+ flags = get_flags(argv[0]);
+ count = zip_get_num_entries(za, flags);
+ printf("%" PRIu64 " entr%s in archive\n", count, count == 1 ? "y" : "ies");
+ return 0;
+}
+
+static int
name_locate(int argc, char *argv[]) {
zip_flags_t flags;
zip_int64_t idx;
@@ -841,6 +852,7 @@
{ "get_extra", 3, "index extra_index flags", "show extra field", get_extra },
{ "get_extra_by_id", 4, "index extra_id extra_index flags", "show extra field of type extra_id", get_extra_by_id },
{ "get_file_comment", 1, "index", "get file comment", get_file_comment },
+ { "get_num_entries", 1, "flags", "get number of entries in archive", get_num_entries },
{ "name_locate", 2, "name flags", "find entry in archive", name_locate },
{ "rename", 2, "index name", "rename entry", zrename },
{ "replace_file_contents", 2, "index data", "replace entry with data", replace_file_contents },