Convert TODO to markdown.
diff --git a/TODO b/TODO deleted file mode 100644 index 3dca4ec..0000000 --- a/TODO +++ /dev/null
@@ -1,170 +0,0 @@ -API Plans -========= - -Encryption ----------- -* struct zip *zip_open_encrypted(const char *path, int flags, const char *password, int *errorp); -* int zip_set_encryption(struct zip *archive, zip_uint64_t idx, zip_uint16_t method, const char *password); -* void zip_set_archive_encryption(struct zip *archive, zip_uint16_t method, const char *password); - -Prefixes --------- -For example for adding extractors for self-extracting zip archives. -* zip_set_archive_prefix(struct zip *za, const zip_uint8_t *data, zip_uint64_t length); -* const zip_uint8_t *zip_get_archive_prefix(struct zip *za, zip_uint64_t *lengthp); - -Progress Callback ------------------ -Register callback; will be called from zip_close() after each file has been processed. -typedef void (*zip_progress_callback_t)(double); -void zip_register_progress_callback(zip_t *, zip_progress_callback_t); - -API Issues -========== -! D zip_get_archive_comment has int *lenp argument. Cleaner would be zip_uint32_t *. - rename and fix. which other functions for naming consistency? -! D rename remaining zip_XXX_{file,archive}_* to zip_{file,archive}_XXX_*? -* compression/crypt implementations: how to set error code on failure -* compression/crypt error messages a la ZIP_ER_ZLIB (no detailed info passing) -* check arguments for every entry point into libzip - - -Features -======== -* support setting extra fields from zip_source - . introduce layers of extra fields: - . original - . from zip_source - . manually set - . when querying extra fields, search all of them in reverse order - . add whiteout (deleted) flag - . allow invalid data flag, used when computing extra field size before writing data - . new command ZIP_SOURCE_EXTRA_FIELDS - . no support for multiple copies of same extra field -* delete all extra fields during zip_replace() -* function to copy file from one archive to another -* set O_CLOEXEC flag after fopen and mkstemp -* configure: use windows backends on windows -* add append-only mode writing file to disk incrementally to keep memory usage low -* zip_file_set_mtime: support InfoZIP time stamps - -* support streaming output (creating new archive to e.g. stdout) -* add functions to: - . read/set ASCII file flag? (wiz: more general options?) -* zip_commit (to finish changes without closing archive) -* add custom compression function support -* zip_fseek -* zip_source_zip: allow rewinding -* zipcmp: add option for file content comparison -* zipcmp: compare bit flags if paranoid -* zipcmp: compare external attributes/opsys if paranoid -* zipcmp: compare last_mod if paranoid (or with separate flag?) -* consistency - . for stored files, test compressed = uncompressed - . data descriptor - . local headers come before central dir - -* support for old compression methods????? - - -Bugs -==== -* support InfoZIP encryption header extension (copy data descriptor for encrypted files) -! ensure that nentries is small enough not to cause overflow (size_t for entry, uint64 for CD on disk) -* fix OpenSUSE i686 regression failures -* fix open_filename_duplicate_consistency.test to fail -* check for limits imposed by format (central dir size, file size, extra fields, ...) -* _zip_u2d_time: handle localtime(3) failure -* POSIX: zip_open: check whether file can be created and fail if not -* fix inconsistent usage of valid flags (not checked in many places) -* cdr == NULL -> ER_NOENT vs. idx > cdir->nentry -> ER_INVAL inconsistent (still there?) - - -Cleanup -======= -* use bool -* use ZIP_SOURCE_SUPPORTS_{READABLE,SEEKABLE,WRITABLE} -* use zip_source_seek_compute_offset -* move compat refs from zipint.h to own file, and include that in zipint.h and src -* get rid of zip_get_{compression,encryption}_implementation -* use zip_*int*_t internally - - -Analysis -======== -* pass through coverity - - -Infrastructure -============== -* create CMakefile.txt man page linking from links file - - -Test Case Issues -================ -* unchange on added file -* test seek in zip_source_crc -* test cases for set_extra*, delete_extra*, *extra_field* -* test cases for in memory archives - add - delete - delete all - modify -* use gcov output to increase test coverage -* merge most tools into modify -* add test case to change values for newly added files (name, compression method, comment, mtime, . . .) -* zip_open file less than EOCDLEN bytes long -* test calls against old API -* run regression tests also from CMake framework -* rename file to dir/ and vice versa (fails) -* fix comment test to be newline insensitive -* check if http://bugs.python.org/issue20078 provides ideas for new tests - -* (add, replace) - add to empty zip - add to existing zip - add w/ existing file name [E] - replace ok - replace w/ illegal index [E] - replace w/ deleted name [E] - unchange added/replaced file -* (close) - copy zip file - open copy - rename, delete, replace, add w/ new name, add w/ deleted name - close - zipcmp copy expected - remove copy -* (error_get) -* (error_get_sys_type) -* (error_to_str) -* (extra_fields) -* (file_error_get) -* (file_strerror) -* (replace) -* (source_buffer) -* (source_file) -* (source_filep) -* (source_free) -* (source_function) -* (source_zip) -* (strerror) -* (unchange) -* (unchange_all) -* open(ZIP_RDONLY) -* I/O abstraction layer - zip_open_from_source -* read two zip entries interleaved - - -Unsorted -======== -* zip_source_file: don't allow write if start/len specify a part of the file -* script to check if all exported symbols are marked with ZIP_EXTERN, add to make distcheck - -D re-implement fix for OS X sandboxing (zip_archive_set_tempdir). - -* document: zip_source_write: length can't be > ZIP_INT64_MAX -* document: ZIP_SOURCE_CLOSE implementation can't return error -* keep error codes in man pages in sync -* document error codes in new man pages
diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..cf9dce2 --- /dev/null +++ b/TODO.md
@@ -0,0 +1,170 @@ +# API Plans + +## Encryption + +````c +struct zip *zip_open_encrypted(const char *path, int flags, const char *password, int *errorp); +int zip_set_encryption(struct zip *archive, zip_uint64_t idx, zip_uint16_t method, const char *password); +void zip_set_archive_encryption(struct zip *archive, zip_uint16_t method, const char *password); +```` + +## Prefixes + +For example for adding extractors for self-extracting zip archives. +````c +zip_set_archive_prefix(struct zip *za, const zip_uint8_t *data, zip_uint64_t length); +const zip_uint8_t *zip_get_archive_prefix(struct zip *za, zip_uint64_t *lengthp); +```` + +## Progress Callback + +Register callback; will be called from `zip_close()` after each file has been processed. + +````c +typedef void (*zip_progress_callback_t)(double); +void zip_register_progress_callback(zip_t *, zip_progress_callback_t); +```` + +# API Issues + +* `zip_get_archive_comment` has `int *lenp` argument. Cleaner would be `zip_uint32_t *`. + rename and fix. which other functions for naming consistency? +* rename remaining `zip_XXX_{file,archive}_*` to `zip_{file,archive}_XXX_*`? +* compression/crypt implementations: how to set error code on failure +* compression/crypt error messages a la `ZIP_ER_ZLIB` (no detailed info passing) +* check arguments for every entry point into libzip + +# Features + +* support setting extra fields from zip_source + * introduce layers of extra fields: + * original + * from zip_source + * manually set + * when querying extra fields, search all of them in reverse order + * add whiteout (deleted) flag + * allow invalid data flag, used when computing extra field size before writing data + * new command `ZIP_SOURCE_EXTRA_FIELDS` + * no support for multiple copies of same extra field +* delete all extra fields during `zip_replace()` +* function to copy file from one archive to another +* set `O_CLOEXEC` flag after fopen and mkstemp +* configure: use windows backends on windows +* add append-only mode writing file to disk incrementally to keep memory usage low +* `zip_file_set_mtime()`: support InfoZIP time stamps + +* support streaming output (creating new archive to e.g. stdout) +* add functions to: + * read/set ASCII file flag? (more general options?) +* `zip_commit()` (to finish changes without closing archive) +* add custom compression function support +* `zip_fseek()` +* `zip_source_zip()`: allow rewinding +* zipcmp: add option for file content comparison +* zipcmp: compare bit flags if paranoid +* zipcmp: compare external attributes/opsys if paranoid +* zipcmp: compare last_mod if paranoid (or with separate flag?) +* consistency + . for stored files, test compressed = uncompressed + . data descriptor + . local headers come before central dir + +* support for old compression methods????? + +# Bugs + +* support InfoZIP encryption header extension (copy data descriptor for encrypted files) +* ensure that nentries is small enough not to cause overflow (size_t for entry, uint64 for CD on disk) +* fix OpenSUSE i686 regression failures +* fix `open_filename_duplicate_consistency.test` to fail +* check for limits imposed by format (central dir size, file size, extra fields, ...) +* `_zip_u2d_time()`: handle `localtime(3)` failure +* POSIX: `zip_open()`: check whether file can be created and fail if not +* fix inconsistent usage of valid flags (not checked in many places) +* `cdr == NULL` -> `ER_NOENT` vs. `idx > cdir->nentry` -> `ER_INVAL` inconsistent (still there?) + + +# Cleanup + +* use bool +* use `ZIP_SOURCE_SUPPORTS_{READABLE,SEEKABLE,WRITABLE}` +* use `zip_source_seek_compute_offset()` +* move compat refs from `zipint.h` to own file, and include that in `zipint.h` and `src` +* get rid of `zip_get_{compression,encryption}_implementation()` +* use `zip_*int*_t` internally + +# Analysis + +* pass through coverity + +# Infrastructure + +* create CMakefile.txt man page linking from links file + +# Test Case Issues + +* unchange on added file +* test seek in `zip_source_crc()` +* test cases for `set_extra*`, `delete_extra*`, `*extra_field*` +* test cases for in memory archives + * add + * delete + * delete all + * modify +* use gcov output to increase test coverage +* merge most tools into ziptool +* add test case to change values for newly added files (name, compression method, comment, mtime, . . .) +* `zip_open()` file less than `EOCDLEN` bytes long +* test calls against old API +* run regression tests also from CMake framework +* rename file to dir/ and vice versa (fails) +* fix comment test to be newline insensitive +* check if http://bugs.python.org/issue20078 provides ideas for new tests + +* (add, replace) + * add to empty zip + * add to existing zip + * add w/ existing file name [E] + * replace ok + * replace w/ illegal index [E] + * replace w/ deleted name [E] + * unchange added/replaced file +* (close) + * copy zip file + * open copy + * rename, delete, replace, add w/ new name, add w/ deleted name + * close + * zipcmp copy expected + * remove copy +* (error_get) +* (error_get_sys_type) +* (error_to_str) +* (extra_fields) +* (file_error_get) +* (file_strerror) +* (replace) +* (source_buffer) +* (source_file) +* (source_filep) +* (source_free) +* (source_function) +* (source_zip) +* (strerror) +* (unchange) +* (unchange_all) +* open(ZIP_RDONLY) +* I/O abstraction layer + * zip_open_from_source +* read two zip entries interleaved + +# Unsorted + +* `zip_source_file()`: don't allow write if start/len specify a part of the file +* script to check if all exported symbols are marked with `ZIP_EXTERN`, add to make distcheck + +* re-implement fix for OS X sandboxing (`zip_archive_set_tempdir()`). + +* document: `zip_source_write()`: length can't be > `ZIP_INT64_MAX` +* document: `ZIP_SOURCE_CLOSE` implementation can't return error +* keep error codes in man pages in sync +* document error codes in new man pages