]> granicus.if.org Git - php/commitdiff
implement opendir for mounted directories - much simpler to do than I initially thought
authorGreg Beaver <cellog@php.net>
Mon, 21 Apr 2008 16:29:09 +0000 (16:29 +0000)
committerGreg Beaver <cellog@php.net>
Mon, 21 Apr 2008 16:29:09 +0000 (16:29 +0000)
ext/phar/dirstream.c
ext/phar/phar_object.c
ext/phar/tests/mounteddir.phpt

index 1d372829fdcd3714aa0177a72c41bcf0eaa733d3..e7d2b7e1aabfbfba04ef5cda4de797cc4cbcb795 100644 (file)
@@ -361,11 +361,10 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, char *path, char
                php_url_free(resource);
                return NULL;
        } else if (entry && entry->is_dir) {
-               /*if (entry->is_mounted) {
-                        external directory, TODO: construct an internal dirstream based on this actual dir's dirstream
+               if (entry->is_mounted) {
                        php_url_free(resource);
                        return php_stream_opendir(entry->tmp, options, context);
-               }*/
+               }
                internal_file = estrdup(internal_file);
                php_url_free(resource);
                return phar_make_dirstream(internal_file, &phar->manifest TSRMLS_CC);
index d486a2888bc4a90db69bf230e515bde1f536b7b1..acfa4903bea697aef6536e248b499f65260b6c81 100755 (executable)
@@ -221,7 +221,6 @@ static int phar_file_action(phar_entry_data *phar, char *mime_type, int code, ch
                        efree(arch);
 #endif
                        zend_bailout();
-                       return PHAR_MIME_PHPS;
                case PHAR_MIME_OTHER:
                        /* send headers, output file contents */
                        efree(basename);
@@ -261,7 +260,6 @@ static int phar_file_action(phar_entry_data *phar, char *mime_type, int code, ch
 
                        phar_entry_delref(phar TSRMLS_CC);
                        zend_bailout();
-                       return PHAR_MIME_OTHER;
                case PHAR_MIME_PHP:
                        if (basename) {
                                phar_mung_server_vars(arch, entry, entry_len, basename, basename_len, ru, ru_len TSRMLS_CC);
index e09705bab163b7d14807edde2af402b6724e7c38..eee69da9592fa6d6ffbcc7e9dc81006b4174bc02 100644 (file)
@@ -7,6 +7,8 @@ phar.readonly=0
 --FILE--
 <?php
 $fname = dirname(__FILE__) . '/tempmanifest1.phar.php';
+$pname = 'phar://' . $fname;
+
 $a = new Phar($fname);
 $a['index.php'] = '<?php
 Phar::mount("testit", dirname(Phar::running(0)) . "/testit");
@@ -27,6 +29,24 @@ var_dump(__FILE__);
 ?>');
 include dirname(__FILE__) . '/testit/extfile.php';
 include $fname;
+
+$a = opendir($pname . '/testit');
+$out = array();
+while (false !== ($b = readdir($a))) {
+       $out[] = $b;
+}
+sort($out);
+foreach ($out as $b) {
+       echo "$b\n";
+}
+$out = array();
+foreach (new Phar($pname . '/testit') as $b) {
+       $out[] = $b->getPathName();
+}
+sort($out);
+foreach ($out as $b) {
+       echo "$b\n";
+}
 ?>
 ===DONE===
 --CLEAN--
@@ -41,4 +61,10 @@ include $fname;
 string(%d) "%sextfile.php"
 string(%d) "phar://%sextfile.php"
 string(%d) "phar://%sextfile2.php"
+.
+..
+extfile.php
+extfile2.php
+phar://%stempmanifest1.phar.php/testit%cextfile.php
+phar://%stempmanifest1.phar.php/testit%cextfile2.php
 ===DONE===
\ No newline at end of file