summaryrefslogtreecommitdiff
path: root/main/streams/plain_wrapper.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-03-05 18:18:39 +0300
committerDmitry Stogov <dmitry@zend.com>2015-03-05 18:18:39 +0300
commit6d065a8545291a8048ef307476c4358922ca3a61 (patch)
tree00ed4a38bcc0b69729a95bd794cc171a37f3eeff /main/streams/plain_wrapper.c
parentbb91bf83f9fc60cbd6cb30e6b2a7858efe1aa4c5 (diff)
downloadphp-git-6d065a8545291a8048ef307476c4358922ca3a61.tar.gz
Avoid repeatable strlen() calls
Diffstat (limited to 'main/streams/plain_wrapper.c')
-rw-r--r--main/streams/plain_wrapper.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c
index 83bd059c34..6af8ffa964 100644
--- a/main/streams/plain_wrapper.c
+++ b/main/streams/plain_wrapper.c
@@ -1390,12 +1390,10 @@ PHPAPI php_stream *_php_stream_fopen_with_path(const char *filename, const char
/* code ripped off from fopen_wrappers.c */
char *pathbuf, *end;
const char *ptr;
- const char *exec_fname;
char trypath[MAXPATHLEN];
php_stream *stream;
- int path_length;
int filename_length;
- int exec_fname_length;
+ zend_string *exec_filename;
if (opened_path) {
*opened_path = NULL;
@@ -1471,17 +1469,18 @@ not_relative_path:
/* append the calling scripts' current working directory
* as a fall back case
*/
- if (zend_is_executing()) {
- exec_fname = zend_get_executed_filename();
- exec_fname_length = (int)strlen(exec_fname);
- path_length = (int)strlen(path);
+ if (zend_is_executing() &&
+ (exec_filename = zend_get_executed_filename_ex()) != NULL) {
+ const char *exec_fname = exec_filename->val;
+ size_t exec_fname_length = exec_filename->len;
while ((--exec_fname_length >= 0) && !IS_SLASH(exec_fname[exec_fname_length]));
- if ((exec_fname && exec_fname[0] == '[')
- || exec_fname_length<=0) {
- /* [no active file] or no path */
+ if (exec_fname_length<=0) {
+ /* no path */
pathbuf = estrdup(path);
} else {
+ size_t path_length = strlen(path);
+
pathbuf = (char *) emalloc(exec_fname_length + path_length +1 +1);
memcpy(pathbuf, path, path_length);
pathbuf[path_length] = DEFAULT_DIR_SEPARATOR;