update
diff --git a/TODO b/TODO
index 6e92f20..1c3a842 100644
--- a/TODO
+++ b/TODO
@@ -29,6 +29,7 @@
 * function to copy file from one archive to another
 * do not compress if storing is smaller
 * set O_CLOEXEC flag after fopen and mkstemp
+* Windows specific I/O source (to be written by a Windows expert)
 
 * I/O methods
 * support streaming output (creating new archive to e.g. stdout)
@@ -36,8 +37,8 @@
   . 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
-* zip_source_seek, zip_fseek
 * zipcmp: add option for file content comparison
 * zipcmp: compare bit flags if paranoid
 * zipcmp: compare external attributes/opsys if paranoid
@@ -52,6 +53,7 @@
 
 Bugs
 ====
+* support InfoZIP encryption header extension
 * embed stripped down old zlib for torrentzip
 ! ensure that nentries is small enough not to cause overflow (size_t for entry, uint64 for CD on disk)
 * Xcode 32bit build uses 64bit config.h
@@ -61,7 +63,6 @@
 * 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
-* POSIX: fix permissions of new file to match old one
 * fix inconsistent usage of valid flags (not checked in many places)
 * cdr == NULL -> ER_NOENT vs. idx > cdir->nentry -> ER_INVAL inconsistent (still there?)
 * torrentzip broken on NetBSD/amd64 6.99
@@ -240,14 +241,37 @@
 - direct reference to source and from upper layer are equivalent: only close/free if all are gone.
 - only allow multiple upper layers for sources that support seek
 - cache supported state in struct zip_source and check in _zip_source_call before calling
+D re-implement fix for OS X sandboxing (zip_archive_set_tempdir).
+- find out FSEEK_MAX/FTELL_MAX and use it
 - adapt man pages
-  - zip_source_is_deleted
-  - zip_source_stat
-  - zip_source_open
-  - zip_source_close
-  - zip_source_read
-  - zip_source_make_command_bitmap
-  - zip_error_set
-  - zip_error_to_data
-- ask on libzip-discuss whether Windows backend will use stdio, make plan for avoiding code duplication with Unix backend
-- re-implement fix for OS X sandboxing (zip_archive_set_tempdir).
+- document ZIP_RDONLY
+- keep error codes in man pages in sync
+- document ZIP_SOURCE_GET_ARGS(type, data, len, error) ((len) < sizeof(type) ? zip_error_set((error), ZIP_ER_INVAL, 0), NULL : (type *)(data))
+- document new functions
+** zip_error_t *zip_get_error(zip_t *);
+** int zip_error_code_zip(const zip_error_t *);
+** int zip_error_code_system(const zip_error_t *);
+** void zip_error_fini(zip_error_t *);
+** void zip_error_init(zip_error_t *);
+** void zip_error_set(zip_error_t *, int, int);
+** const char *zip_error_strerror(zip_error_t *);
+** int zip_error_system_type(const zip_error_t *);
+** zip_int64_t zip_error_to_data(const zip_error_t *, void *, zip_uint64_t);
+** zip_error_t *zip_file_get_error(zip_file_t *);
+** zip_t *zip_open_from_source(zip_source_t *, int, zip_error_t *);
+** zip_source_t *zip_source_buffer_create(const void *, zip_uint64_t, int, zip_error_t *);
+** int zip_source_close(zip_source_t *);
+** zip_error_t *zip_source_error(zip_source_t *src);
+** zip_source_t *zip_source_file_create(const char *, zip_uint64_t, zip_int64_t, zip_error_t *);
+** zip_source_t *zip_source_filep_create(FILE *, zip_uint64_t, zip_int64_t, zip_error_t *);
+** zip_source_t *zip_source_function_create(zip_source_callback, void *, zip_error_t *);
+** int zip_source_is_deleted(zip_source_t *);
+** void zip_source_keep(zip_source_t *);
+** zip_int64_t zip_source_make_command_bitmap(zip_source_cmd_t, ...);
+** int zip_source_open(zip_source_t *);
+** zip_int64_t zip_source_read(zip_source_t *, void *, zip_uint64_t);
+** int zip_source_stat(zip_source_t *, zip_stat_t *);
+- document deprecations
+** int zip_error_get_sys_type(int); /* use zip_error_system_type */
+** void zip_error_get(zip_t *, int *, int *); /* use zip_get_error, zip_error_code_zip / zip_error_code_system */
+** void zip_file_error_get(zip_file_t *, int *, int *); /* use zip_file_get_error, zip_error_code_zip / zip_error_code_system */