From: Greg Beaver Date: Sun, 15 Jun 2008 21:15:29 +0000 (+0000) Subject: minor optimization X-Git-Tag: php-5.3.0alpha1~741 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d8ed660a02460954efe2e9d6aff8bef72a182ae9;p=php minor optimization --- 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 Binary files a/ext/phar/phar.phar and b/ext/phar/phar.phar 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); } /* }}} */