Backed out changeset 1952bbad86fb, committed too much.
diff --git a/lib/zip_hash.c b/lib/zip_hash.c
index 2918f69..ec6e336 100644
--- a/lib/zip_hash.c
+++ b/lib/zip_hash.c
@@ -245,17 +245,13 @@
 	entry = hash->table[i];
 	while (entry) {
 	    if (entry->orig_index == -1) {
-		zip_hash_entry_t *p;
 		if (previous) {
 		    previous->next = entry->next;
 		}
 		else {
 		    hash->table[i] = entry->next;
 		}
-		p = entry;
-		entry = entry->next;
-		free(p);
-		continue;
+		free(entry);
 	    }
 	    else {
 		entry->current_index = entry->orig_index;
diff --git a/lib/zip_source_win32a.c b/lib/zip_source_win32a.c
index a7cfacd..ac1f256 100644
--- a/lib/zip_source_win32a.c
+++ b/lib/zip_source_win32a.c
@@ -43,15 +43,6 @@
 static int _win32_rename_temp_a(_zip_source_win32_read_file_t *ctx);
 static int _win32_remove_a(const void *fname);
 
-#ifdef __BORLANDC__
-static _zip_source_win32_file_ops_t win32_ops_a = {
-    _win32_strdup_a,
-    _win32_open_a,
-    _win32_create_temp_a,
-    _win32_rename_temp_a,
-    _win32_remove_a
-};
-#else
 static _zip_source_win32_file_ops_t win32_ops_a = {
     .op_strdup         = _win32_strdup_a,
     .op_open           = _win32_open_a,
@@ -59,7 +50,6 @@
     .op_rename_temp    = _win32_rename_temp_a,
     .op_remove         = _win32_remove_a
 };
-#endif
 
 ZIP_EXTERN zip_source_t *
 zip_source_win32a(zip_t *za, const char *fname, zip_uint64_t start, zip_int64_t len)
diff --git a/lib/zip_source_win32w.c b/lib/zip_source_win32w.c
index 754cd76..cf0801e 100644
--- a/lib/zip_source_win32w.c
+++ b/lib/zip_source_win32w.c
@@ -43,15 +43,6 @@
 static int _win32_rename_temp_w(_zip_source_win32_read_file_t *ctx);
 static int _win32_remove_w(const void *fname);
 
-#ifdef __BORLANDC__
-static _zip_source_win32_file_ops_t win32_ops_w = {
-    _win32_strdup_w,
-    _win32_open_w,
-    _win32_create_temp_w,
-    _win32_rename_temp_w,
-    _win32_remove_w
-};
-#else
 static _zip_source_win32_file_ops_t win32_ops_w = {
     .op_strdup       = _win32_strdup_w,
     .op_open         = _win32_open_w,
@@ -59,7 +50,6 @@
     .op_rename_temp  = _win32_rename_temp_w,
     .op_remove       = _win32_remove_w
 };
-#endif
 
 ZIP_EXTERN zip_source_t *
 zip_source_win32w(zip_t *za, const wchar_t *fname, zip_uint64_t start, zip_int64_t len)
diff --git a/lib/zipint.h b/lib/zipint.h
index 2548da9..c0242cc 100644
--- a/lib/zipint.h
+++ b/lib/zipint.h
@@ -129,6 +129,8 @@
 #define strcasecmp	_stricmp
 #elif defined(HAVE_STRICMP)
 #define strcasecmp	stricmp
+#else
+#error no case-insensitive string comparison operation found
 #endif
 #endif
 
diff --git a/regress/modify.c b/regress/modify.c
index 3926460..3fb8eda 100644
--- a/regress/modify.c
+++ b/regress/modify.c
@@ -40,7 +40,7 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#include <zipconf.h>
+#include <inttypes.h>
 #ifdef _WIN32
 /* WIN32 needs <fcntl.h> for _O_BINARY */
 #include <fcntl.h>
@@ -51,7 +51,6 @@
 #endif
 
 #include "zip.h"
-#include "compat.h"
 
 zip_source_t *source_hole_create(const char *, int flags, zip_error_t *);