summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Beaver <cellog@php.net>2008-06-15 21:15:29 +0000
committerGreg Beaver <cellog@php.net>2008-06-15 21:15:29 +0000
commitd8ed660a02460954efe2e9d6aff8bef72a182ae9 (patch)
treefe3b94733ab04e866f6a44234cba95890fc47bbf
parent639d221df3ba639f4b7f0df29c4cdf9b83c100c7 (diff)
downloadphp-git-d8ed660a02460954efe2e9d6aff8bef72a182ae9.tar.gz
minor optimization
-rw-r--r--ext/phar/phar.c17
-rwxr-xr-xext/phar/phar.pharbin15252 -> 15252 bytes
-rwxr-xr-xext/phar/phar_internal.h2
-rwxr-xr-xext/phar/phar_object.c6
4 files changed, 12 insertions, 13 deletions
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index cc0913f29e..906020a26a 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -1148,11 +1148,11 @@ int phar_open_or_create_filename(char *fname, int fname_len, char *alias, int al
}
/* first try to open an existing file */
- if (phar_detect_phar_fname_ext(fname, 1, &ext_str, &ext_len, !is_data, 0, 1 TSRMLS_CC) == SUCCESS) {
+ if (phar_detect_phar_fname_ext(fname, fname_len, &ext_str, &ext_len, !is_data, 0, 1 TSRMLS_CC) == SUCCESS) {
goto check_file;
}
/* next try to create a new file */
- if (FAILURE == phar_detect_phar_fname_ext(fname, 1, &ext_str, &ext_len, !is_data, 1, 1 TSRMLS_CC)) {
+ if (FAILURE == phar_detect_phar_fname_ext(fname, fname_len, &ext_str, &ext_len, !is_data, 1, 1 TSRMLS_CC)) {
if (error) {
spprintf(error, 0, "Cannot create phar '%s', file extension (or combination) not recognised", fname);
}
@@ -1712,10 +1712,9 @@ static int phar_check_str(const char *fname, const char *ext_str, int ext_len, i
* the last parameter should be set to tell the thing to assume that filename is the full path, and only to check the
* extension rules, not to iterate.
*/
-int phar_detect_phar_fname_ext(const char *filename, int check_length, const char **ext_str, int *ext_len, int executable, int for_create, int is_complete TSRMLS_DC) /* {{{ */
+int phar_detect_phar_fname_ext(const char *filename, int filename_len, const char **ext_str, int *ext_len, int executable, int for_create, int is_complete TSRMLS_DC) /* {{{ */
{
const char *pos, *slash;
- int filename_len = strlen(filename);
*ext_str = NULL;
@@ -1724,7 +1723,7 @@ int phar_detect_phar_fname_ext(const char *filename, int check_length, const cha
}
phar_request_initialize(TSRMLS_C);
/* first check for alias in first segment */
- pos = strchr(filename, '/');
+ pos = memchr(filename, '/', filename_len);
if (pos && pos != filename) {
if (zend_hash_exists(&(PHAR_GLOBALS->phar_alias_map), (char *) filename, pos - filename)) {
*ext_str = pos;
@@ -1783,19 +1782,19 @@ woohoo:
}
}
- pos = strchr(filename + 1, '.');
+ pos = memchr(filename + 1, '.', filename_len);
next_extension:
if (!pos) {
return FAILURE;
}
while (pos != filename && (*(pos - 1) == '/' || *(pos - 1) == '\0')) {
- pos = strchr(pos + 1, '.');
+ pos = memchr(pos + 1, '.', filename_len - (pos - filename) + 1);
if (!pos) {
return FAILURE;
}
}
- slash = strchr(pos, '/');
+ slash = memchr(pos, '/', filename_len - (pos - filename));
if (!slash) {
/* this is a url like "phar://blah.phar" with no directory */
*ext_str = pos;
@@ -1997,7 +1996,7 @@ int phar_split_fname(char *filename, int filename_len, char **arch, int *arch_le
filename = estrndup(filename, filename_len);
phar_unixify_path_separators(filename, filename_len);
#endif
- if (phar_detect_phar_fname_ext(filename, 0, &ext_str, &ext_len, executable, for_create, 0 TSRMLS_CC) == FAILURE) {
+ if (phar_detect_phar_fname_ext(filename, filename_len, &ext_str, &ext_len, executable, for_create, 0 TSRMLS_CC) == FAILURE) {
if (ext_len != -1) {
if (!ext_str) {
/* no / detected, restore arch for error message */
diff --git a/ext/phar/phar.phar b/ext/phar/phar.phar
index 7a2d36a62a..cf4484da2b 100755
--- a/ext/phar/phar.phar
+++ b/ext/phar/phar.phar
Binary files differ
diff --git a/ext/phar/phar_internal.h b/ext/phar/phar_internal.h
index ab8d6147fa..3d771f2393 100755
--- a/ext/phar/phar_internal.h
+++ b/ext/phar/phar_internal.h
@@ -472,7 +472,7 @@ phar_entry_info *phar_get_entry_info_dir(phar_archive_data *phar, char *path, in
phar_entry_data *phar_get_or_create_entry_data(char *fname, int fname_len, char *path, int path_len, char *mode, char allow_dir, char **error, int security TSRMLS_DC);
int phar_get_entry_data(phar_entry_data **ret, char *fname, int fname_len, char *path, int path_len, char *mode, char allow_dir, char **error, int security TSRMLS_DC);
int phar_flush(phar_archive_data *archive, char *user_stub, long len, int convert, char **error TSRMLS_DC);
-int phar_detect_phar_fname_ext(const char *filename, int check_length, const char **ext_str, int *ext_len, int executable, int for_create, int is_complete TSRMLS_DC);
+int phar_detect_phar_fname_ext(const char *filename, int filename_len, const char **ext_str, int *ext_len, int executable, int for_create, int is_complete TSRMLS_DC);
int phar_split_fname(char *filename, int filename_len, char **arch, int *arch_len, char **entry, int *entry_len, int executable, int for_create TSRMLS_DC);
typedef enum {
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index 7c099427db..8d3becbef3 100755
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -1064,15 +1064,15 @@ PHP_METHOD(Phar, isValidPharFilename)
{
char *fname;
const char *ext_str;
- int fname_len, ext_len;
+ int fname_len, ext_len, is_executable;
zend_bool executable = 1;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &fname, &fname_len, &executable) == FAILURE) {
return;
}
- fname_len = executable;
- RETVAL_BOOL(phar_detect_phar_fname_ext(fname, 1, &ext_str, &ext_len, fname_len, 2, 1 TSRMLS_CC) == SUCCESS);
+ is_executable = executable;
+ RETVAL_BOOL(phar_detect_phar_fname_ext(fname, fname_len, &ext_str, &ext_len, is_executable, 2, 1 TSRMLS_CC) == SUCCESS);
}
/* }}} */