Allow multiple zip_source_open calls on the same src.
diff --git a/lib/zip_source_free.c b/lib/zip_source_free.c
index 715efb5..b990c20 100644
--- a/lib/zip_source_free.c
+++ b/lib/zip_source_free.c
@@ -58,6 +58,7 @@
     }
     
     if (ZIP_SOURCE_IS_OPEN_READING(src)) {
+	src->open_count = 1; /* force close */
 	zip_source_close(src);
     }
     if (ZIP_SOURCE_IS_OPEN_WRITING(src)) {
diff --git a/lib/zip_source_open.c b/lib/zip_source_open.c
index 31f22bc..e0d845a 100644
--- a/lib/zip_source_open.c
+++ b/lib/zip_source_open.c
@@ -34,8 +34,7 @@
 
 #include "zipint.h"
 
-
-int
+ZIP_EXTERN int
 zip_source_open(zip_source_t *src)
 {
     if (src->source_closed) {
@@ -45,13 +44,10 @@
         zip_error_set(&src->error, ZIP_ER_DELETED, 0);
 	return -1;
     }
-    if (ZIP_SOURCE_IS_OPEN_READING(src)) {
-        zip_error_set(&src->error, ZIP_ER_INVAL, 0);
-	return -1;
-    }
  
     if (ZIP_SOURCE_IS_LAYERED(src)) {
         if (ZIP_SOURCE_IS_OPEN_READING(src->src)) {
+	    /* TODO: check that src->src supports seeking */
             src->src->open_count++;
         }
         else {