summaryrefslogtreecommitdiff
path: root/ext/zip/lib/zip_fdopen.c
diff options
context:
space:
mode:
authorJerome Loyet <fat@php.net>2012-09-27 23:57:06 +0200
committerJerome Loyet <fat@php.net>2012-09-27 23:57:06 +0200
commit0bffdd723fb1acbc8b1ef62768fa2f33c2d02bbc (patch)
tree04bbcd1a5da16ea5246d39c1bcae45b9eb67c526 /ext/zip/lib/zip_fdopen.c
parent1fa8ecd082607858084994ad7081ef06e37db5f5 (diff)
parent6a50a8640c562a41d90c7ab46affa767b97d2621 (diff)
downloadphp-git-0bffdd723fb1acbc8b1ef62768fa2f33c2d02bbc.tar.gz
Merge branch 'PHP-5.4' of git.php.net:php-src into PHP-5.4
* 'PHP-5.4' of git.php.net:php-src: (367 commits) fix unix/win dir separators Fix bug #63173: Crash when invoking invalid array callback Correct the test summary Fixed bug #60723 (error_log error time has changed to UTC ignoring default timezo) Fixed bug #60723 (error_log error time has changed to UTC ignoring default timezo) Avoid calling select if maxfd returned by curl_multi_fdset is -1 Fixing NEWS file Fixed bug #63111 (is_callable() lies for abstract static method) updated lib versions Fix folding fix bug #63015 (Incorrect arginfo for DOMErrorHandler) Bug #63000: MCAST_JOIN_GROUP on OSX is broken Fixed bug #61442 (exception threw in __autoload can not be catched) Merging PR #116 Merged GitHub PR #190: Support for the HTTP PATCH method in CLI webserver updated libary versions split tests for the new zlib version on win Fixed Bug #63103 (ext\curl\tests\bug62839.phpt broken) update news Support building PHP with the native client toolchain. ...
Diffstat (limited to 'ext/zip/lib/zip_fdopen.c')
-rw-r--r--ext/zip/lib/zip_fdopen.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/ext/zip/lib/zip_fdopen.c b/ext/zip/lib/zip_fdopen.c
new file mode 100644
index 0000000000..df70f27561
--- /dev/null
+++ b/ext/zip/lib/zip_fdopen.c
@@ -0,0 +1,62 @@
+/*
+ zip_fdopen.c -- open read-only archive from file descriptor
+ Copyright (C) 2009-2010 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 "zipint.h"
+
+
+
+ZIP_EXTERN(struct zip *)
+zip_fdopen(int fd_orig, int flags, int *zep)
+{
+ int fd;
+ FILE *fp;
+
+ /* We dup() here to avoid messing with the passed in fd.
+ We could not restore it to the original state in case of error. */
+
+ if ((fd=dup(fd_orig)) < 0) {
+ *zep = ZIP_ER_OPEN;
+ return NULL;
+ }
+
+ if ((fp=fdopen(fd, "rb")) == NULL) {
+ close(fd);
+ *zep = ZIP_ER_OPEN;
+ return NULL;
+ }
+
+ close(fd_orig);
+ return _zip_open(NULL, fp, flags, ZIP_AFL_RDONLY, zep);
+}