Use common defines instead of static variables to check source supports all required operations.

Also, always mark ZIP_SOURCE_SUPPORTS as supported.

Fixes issue #289.
diff --git a/THANKS b/THANKS
index 89cc524..53f985e 100644
--- a/THANKS
+++ b/THANKS
@@ -41,6 +41,7 @@
 Erwin Haid <erwin.haid@gmx.de>
 Eun-cheol Joo
 Fabrice Fontaine
+Filip Niksic
 Florian Delizy <florian.delizy@gmail.com>
 Force Charlie <charlieio@outlook.com>
 François Simon <AT.GFI.Francois.SIMON@sesam-vitale.fr>
diff --git a/lib/zip_open.c b/lib/zip_open.c
index 1d2f69a..59b8238 100644
--- a/lib/zip_open.c
+++ b/lib/zip_open.c
@@ -77,9 +77,6 @@
 
 ZIP_EXTERN zip_t *
 zip_open_from_source(zip_source_t *src, int _flags, zip_error_t *error) {
-    static zip_int64_t needed_support_read = -1;
-    static zip_int64_t needed_support_write = -1;
-
     unsigned int flags;
     zip_int64_t supported;
     exists_t exists;
@@ -91,15 +88,11 @@
     flags = (unsigned int)_flags;
 
     supported = zip_source_supports(src);
-    if (needed_support_read == -1) {
-        needed_support_read = zip_source_make_command_bitmap(ZIP_SOURCE_OPEN, ZIP_SOURCE_READ, ZIP_SOURCE_CLOSE, ZIP_SOURCE_SEEK, ZIP_SOURCE_TELL, ZIP_SOURCE_STAT, -1);
-        needed_support_write = zip_source_make_command_bitmap(ZIP_SOURCE_BEGIN_WRITE, ZIP_SOURCE_COMMIT_WRITE, ZIP_SOURCE_ROLLBACK_WRITE, ZIP_SOURCE_SEEK_WRITE, ZIP_SOURCE_TELL_WRITE, ZIP_SOURCE_REMOVE, -1);
-    }
-    if ((supported & needed_support_read) != needed_support_read) {
+    if ((supported & ZIP_SOURCE_SUPPORTS_SEEKABLE) != ZIP_SOURCE_SUPPORTS_SEEKABLE) {
         zip_error_set(error, ZIP_ER_OPNOTSUPP, 0);
         return NULL;
     }
-    if ((supported & needed_support_write) != needed_support_write) {
+    if ((supported & ZIP_SOURCE_SUPPORTS_WRITABLE) != ZIP_SOURCE_SUPPORTS_WRITABLE) {
         flags |= ZIP_RDONLY;
     }
 
diff --git a/lib/zip_source_function.c b/lib/zip_source_function.c
index 44db947..ea22405 100644
--- a/lib/zip_source_function.c
+++ b/lib/zip_source_function.c
@@ -57,7 +57,7 @@
     zs->cb.f = zcb;
     zs->ud = ud;
 
-    zs->supports = zcb(ud, NULL, 0, ZIP_SOURCE_SUPPORTS);
+    zs->supports = zcb(ud, NULL, 0, ZIP_SOURCE_SUPPORTS) | zip_source_make_command_bitmap(ZIP_SOURCE_SUPPORTS, -1);
     if (zs->supports < 0) {
         zs->supports = ZIP_SOURCE_SUPPORTS_READABLE;
     }