Add test requested by dillo:
Add file to zip file, then try reading unchanged data from it.

--HG--
branch : HEAD
diff --git a/.hgignore b/.hgignore
index 3c67d71..b7fa7f5 100644
--- a/.hgignore
+++ b/.hgignore
@@ -25,6 +25,7 @@
 ^regress/cp437$
 ^regress/encoding$
 ^regress/encrypt$
+^regress/fopen_unchanged$
 ^regress/fread$
 ^regress/get_comment$
 ^regress/name_locate$
diff --git a/regress/CMakeLists.txt b/regress/CMakeLists.txt
index 7ee229f..f7c1c6e 100644
--- a/regress/CMakeLists.txt
+++ b/regress/CMakeLists.txt
@@ -7,6 +7,7 @@
   add_from_zip
 #  encoding # uses internal function, which doesn't work on Windows
   encrypt
+  fopen_unchanged
   fread
   get_comment
   name_locate
diff --git a/regress/Makefile.am b/regress/Makefile.am
index e32b3dc..2457383 100644
--- a/regress/Makefile.am
+++ b/regress/Makefile.am
@@ -7,6 +7,7 @@
 	cp437 \
 	encoding \
 	encrypt \
+	fopen_unchanged \
 	fread \
 	get_comment \
 	name_locate \
@@ -57,6 +58,7 @@
 	encoding-cp437-all.test \
 	encoding-utf-8.test \
 	encrypt.test \
+	fopen_unchanged.test \
 	fread.test \
 	get_comment.test \
 	name_locate.test \
diff --git a/regress/fopen_unchanged.c b/regress/fopen_unchanged.c
new file mode 100644
index 0000000..05b4646
--- /dev/null
+++ b/regress/fopen_unchanged.c
@@ -0,0 +1,99 @@
+/*
+  fopen_unchanged.c -- test case for adding file and reading from unchanged
+  Copyright (C) 2012 Dieter Baron and Thomas Klausner
+
+  This file is part of libzip, a library to manipulate ZIP archives.
+  The authors can be contacted at <libzip@nih.at>
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+  3. The names of the authors may not be used to endorse or promote
+     products derived from this software without specific prior
+     written permission.
+ 
+  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "zip.h"
+
+const char *teststr="This is a test.\n";
+const char *file="teststring.txt";
+const char *prg;
+
+int
+main(int argc, char *argv[])
+{
+    const char *archive;
+    struct zip *za;
+    struct zip_source *zs;
+    char buf[100];
+    int err;
+
+    prg = argv[0];
+
+    if (argc != 2) {
+	fprintf(stderr, "usage: %s archive\n", prg);
+	return 1;
+    }
+
+    archive = argv[1];
+    
+    if ((za=zip_open(archive, ZIP_CREATE, &err)) == NULL) {
+	zip_error_to_str(buf, sizeof(buf), err, errno);
+	fprintf(stderr, "%s: can't open zip archive %s: %s\n", prg,
+		archive, buf);
+	return 1;
+    }
+
+    if ((zs=zip_source_buffer(za, teststr, strlen(teststr), 0)) == NULL) {
+	fprintf(stderr, "%s: can't create zip_source from buffer: %s\n", prg,
+		zip_strerror(za));
+	exit(1);
+    }
+
+    if (zip_add(za, file, zs) == -1) {
+	zip_source_free(zs);
+	fprintf(stderr, "%s: can't add file `%s': %s\n", prg,
+		file, zip_strerror(za));
+	return 1;
+    }
+
+    if (zip_fopen(za, file, ZIP_FL_UNCHANGED) == NULL) {
+	/* expected error, don't pollute with prg */
+	fprintf(stderr, "can't zip_fopen file `%s': %s\n",
+		file, zip_strerror(za));
+	return 1;
+    }
+
+    if (zip_close(za) == -1) {
+	fprintf(stderr, "%s: can't close zip archive %s\n", prg,
+		archive);
+	return 1;
+    }
+
+    return 0;
+}
diff --git a/regress/fopen_unchanged.test b/regress/fopen_unchanged.test
new file mode 100644
index 0000000..5e55d0c
--- /dev/null
+++ b/regress/fopen_unchanged.test
@@ -0,0 +1,5 @@
+# add buffer contents as file to zip, then read unchanged from it
+program fopen_unchanged
+return 1
+args testbuffer.zip
+stderr can't zip_fopen file `teststring.txt': No such file