cellog Sun Jun 15 21:42:20 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/phar phar.c phar.phar phar_internal.h phar_object.c stream.c tar.c zip.c Log: another optimization - move inode hash to initial manifest parsing, improves runtime perf of stat slightly http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.c?r1=1.370.2.17&r2=1.370.2.18&diff_format=u Index: php-src/ext/phar/phar.c diff -u php-src/ext/phar/phar.c:1.370.2.17 php-src/ext/phar/phar.c:1.370.2.18 --- php-src/ext/phar/phar.c:1.370.2.17 Sun Jun 15 21:15:29 2008 +++ php-src/ext/phar/phar.c Sun Jun 15 21:42:19 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: phar.c,v 1.370.2.17 2008/06/15 21:15:29 cellog Exp $ */ +/* $Id: phar.c,v 1.370.2.18 2008/06/15 21:42:19 cellog Exp $ */ #define PHAR_MAIN 1 #include "phar_internal.h" @@ -1070,6 +1070,7 @@ manifest_flags |= (entry.flags & PHAR_ENT_COMPRESSION_MASK); /* if signature matched, no need to check CRC32 for each file */ entry.is_crc_checked = (manifest_flags & PHAR_HDR_SIGNATURE ? 1 : 0); + phar_set_inode(&entry TSRMLS_CC); zend_hash_add(&mydata->manifest, entry.filename, entry.filename_len, (void*)&entry, sizeof(phar_entry_info), NULL); } @@ -3397,7 +3398,7 @@ php_info_print_table_header(2, "Phar: PHP Archive support", "enabled"); php_info_print_table_row(2, "Phar EXT version", PHP_PHAR_VERSION); php_info_print_table_row(2, "Phar API version", PHP_PHAR_API_VERSION); - php_info_print_table_row(2, "CVS revision", "$Revision: 1.370.2.17 $"); + php_info_print_table_row(2, "CVS revision", "$Revision: 1.370.2.18 $"); php_info_print_table_row(2, "Phar-based phar archives", "enabled"); php_info_print_table_row(2, "Tar-based phar archives", "enabled"); php_info_print_table_row(2, "ZIP-based phar archives", "enabled"); http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.phar?r1=1.7.2.16&r2=1.7.2.17&diff_format=u Index: php-src/ext/phar/phar.phar http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar_internal.h?r1=1.109.2.13&r2=1.109.2.14&diff_format=u Index: php-src/ext/phar/phar_internal.h diff -u php-src/ext/phar/phar_internal.h:1.109.2.13 php-src/ext/phar/phar_internal.h:1.109.2.14 --- php-src/ext/phar/phar_internal.h:1.109.2.13 Sun Jun 15 21:15:29 2008 +++ php-src/ext/phar/phar_internal.h Sun Jun 15 21:42:20 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: phar_internal.h,v 1.109.2.13 2008/06/15 21:15:29 cellog Exp $ */ +/* $Id: phar_internal.h,v 1.109.2.14 2008/06/15 21:42:20 cellog Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -268,6 +268,8 @@ int is_zip:1; /* for cached phar entries */ int is_persistent:1; + /* for stat */ + unsigned short inode; } phar_entry_info; /* information about a phar file (the archive itself) */ @@ -408,6 +410,17 @@ } /* }}} */ +static inline void phar_set_inode(phar_entry_info *entry TSRMLS_DC) /* {{{ */ +{ + char tmp[MAXPATHLEN]; + int tmp_len; + + tmp_len = entry->filename_len + entry->phar->fname_len; + memcpy(tmp, entry->phar->fname, entry->phar->fname_len); + memcpy(tmp + entry->phar->fname_len, entry->filename, entry->filename_len); + entry->inode = (unsigned short)zend_get_hash_value(tmp, tmp_len); +} +/* }}} */ void phar_request_initialize(TSRMLS_D); http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar_object.c?r1=1.266.2.21&r2=1.266.2.22&diff_format=u Index: php-src/ext/phar/phar_object.c diff -u php-src/ext/phar/phar_object.c:1.266.2.21 php-src/ext/phar/phar_object.c:1.266.2.22 --- php-src/ext/phar/phar_object.c:1.266.2.21 Sun Jun 15 21:15:29 2008 +++ php-src/ext/phar/phar_object.c Sun Jun 15 21:42:20 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: phar_object.c,v 1.266.2.21 2008/06/15 21:15:29 cellog Exp $ */ +/* $Id: phar_object.c,v 1.266.2.22 2008/06/15 21:42:20 cellog Exp $ */ #include "phar_internal.h" #include "func_interceptors.h" @@ -2104,6 +2104,7 @@ newentry.is_modified = 1; newentry.phar = phar; newentry.old_flags = newentry.flags & ~PHAR_ENT_COMPRESSION_MASK; /* remove compression from old_flags */ + phar_set_inode(&newentry TSRMLS_CC); zend_hash_add(&(phar->manifest), newentry.filename, newentry.filename_len, (void*)&newentry, sizeof(phar_entry_info), NULL); phar_add_virtual_dirs(phar, newentry.filename, newentry.filename_len TSRMLS_CC); } http://cvs.php.net/viewvc.cgi/php-src/ext/phar/stream.c?r1=1.27.2.4&r2=1.27.2.5&diff_format=u Index: php-src/ext/phar/stream.c diff -u php-src/ext/phar/stream.c:1.27.2.4 php-src/ext/phar/stream.c:1.27.2.5 --- php-src/ext/phar/stream.c:1.27.2.4 Sun Jun 15 18:15:48 2008 +++ php-src/ext/phar/stream.c Sun Jun 15 21:42:20 2008 @@ -402,8 +402,6 @@ void phar_dostat(phar_archive_data *phar, phar_entry_info *data, php_stream_statbuf *ssb, zend_bool is_temp_dir, char *alias, int alias_len TSRMLS_DC) { - char *tmp; - int tmp_len; memset(ssb, 0, sizeof(php_stream_statbuf)); if (!is_temp_dir && !data->is_dir) { @@ -454,23 +452,12 @@ ssb->sb.st_nlink = 1; ssb->sb.st_rdev = -1; - if (data) { - tmp_len = data->filename_len + alias_len; - } else { - tmp_len = alias_len + 1; - } - tmp = (char *) emalloc(tmp_len); - memcpy(tmp, alias, alias_len); - if (data) { - memcpy(tmp + alias_len, data->filename, data->filename_len); - } else { - *(tmp+alias_len) = '/'; - } /* this is only for APC, so use /dev/null device - no chance of conflict there! */ ssb->sb.st_dev = 0xc; /* generate unique inode number for alias/filename, so no phars will conflict */ - ssb->sb.st_ino = (unsigned short)zend_get_hash_value(tmp, tmp_len); - efree(tmp); + if (!is_temp_dir) { + ssb->sb.st_ino = data->inode; + } #ifndef PHP_WIN32 ssb->sb.st_blksize = -1; ssb->sb.st_blocks = -1; http://cvs.php.net/viewvc.cgi/php-src/ext/phar/tar.c?r1=1.55.2.8&r2=1.55.2.9&diff_format=u Index: php-src/ext/phar/tar.c diff -u php-src/ext/phar/tar.c:1.55.2.8 php-src/ext/phar/tar.c:1.55.2.9 --- php-src/ext/phar/tar.c:1.55.2.8 Sun Jun 15 18:15:48 2008 +++ php-src/ext/phar/tar.c Sun Jun 15 21:42:20 2008 @@ -413,6 +413,7 @@ } else if (entry.tar_type == TAR_SYMLINK) { entry.link = estrdup(hdr->linkname); } + phar_set_inode(&entry TSRMLS_CC); zend_hash_add(&myphar->manifest, entry.filename, entry.filename_len, (void*)&entry, sizeof(phar_entry_info), (void **) &newentry); if (entry.filename_len >= sizeof(".phar/.metadata")-1 && !memcmp(entry.filename, ".phar/.metadata", sizeof(".phar/.metadata")-1)) { if (FAILURE == phar_tar_process_metadata(newentry, fp TSRMLS_CC)) { http://cvs.php.net/viewvc.cgi/php-src/ext/phar/zip.c?r1=1.47.2.6&r2=1.47.2.7&diff_format=u Index: php-src/ext/phar/zip.c diff -u php-src/ext/phar/zip.c:1.47.2.6 php-src/ext/phar/zip.c:1.47.2.7 --- php-src/ext/phar/zip.c:1.47.2.6 Sun Jun 15 18:15:48 2008 +++ php-src/ext/phar/zip.c Sun Jun 15 21:42:20 2008 @@ -462,6 +462,7 @@ /* return to central directory parsing */ php_stream_seek(fp, saveloc, SEEK_SET); } + phar_set_inode(&entry TSRMLS_CC); zend_hash_add(&mydata->manifest, entry.filename, entry.filename_len, (void *)&entry,sizeof(phar_entry_info), NULL); } mydata->fp = fp;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php