diff options
| author | Xinchen Hui <laruence@gmail.com> | 2014-02-23 18:08:35 +0800 |
|---|---|---|
| committer | Xinchen Hui <laruence@gmail.com> | 2014-02-23 18:08:35 +0800 |
| commit | c0aba2c641a6bfe909011d0fc25acfdd63d85525 (patch) | |
| tree | 4fc6c3d5422895be209118ddc52f707da35b5679 /ext/spl | |
| parent | 0e4cfad1e8f6d199fd396082985aa2a0bb7c716b (diff) | |
| download | php-git-c0aba2c641a6bfe909011d0fc25acfdd63d85525.tar.gz | |
Refactor basename using zend_string
Diffstat (limited to 'ext/spl')
| -rw-r--r-- | ext/spl/spl_directory.c | 45 |
1 files changed, 18 insertions, 27 deletions
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 0d2621c6ed..84ee3f823d 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -923,6 +923,7 @@ SPL_METHOD(SplFileInfo, getExtension) const char *p; size_t flen; int path_len, idx; + zend_string *ret; if (zend_parse_parameters_none() == FAILURE) { return; @@ -938,18 +939,16 @@ SPL_METHOD(SplFileInfo, getExtension) flen = intern->file_name_len; } - php_basename(fname, flen, NULL, 0, &fname, &flen TSRMLS_CC); + ret = php_basename(fname, flen, NULL, 0 TSRMLS_CC); - p = zend_memrchr(fname, '.', flen); + p = zend_memrchr(ret->val, '.', ret->len); if (p) { idx = p - fname; - RETVAL_STRINGL(fname + idx + 1, flen - idx - 1); - efree(fname); + RETVAL_STRINGL(ret->val + idx + 1, ret->len - idx - 1); + STR_RELEASE(ret); return; } else { - if (fname) { - efree(fname); - } + STR_RELEASE(ret); RETURN_EMPTY_STRING(); } } @@ -960,27 +959,23 @@ SPL_METHOD(SplFileInfo, getExtension) SPL_METHOD(DirectoryIterator, getExtension) { spl_filesystem_object *intern = (spl_filesystem_object*)Z_OBJ_P(getThis()); - char *fname = NULL; const char *p; - size_t flen; int idx; + zend_string *fname; if (zend_parse_parameters_none() == FAILURE) { return; } - php_basename(intern->u.dir.entry.d_name, strlen(intern->u.dir.entry.d_name), NULL, 0, &fname, &flen TSRMLS_CC); + fname = php_basename(intern->u.dir.entry.d_name, strlen(intern->u.dir.entry.d_name), NULL, 0 TSRMLS_CC); - p = zend_memrchr(fname, '.', flen); + p = zend_memrchr(fname->val, '.', fname->len); if (p) { - idx = p - fname; - RETVAL_STRINGL(fname + idx + 1, flen - idx - 1); - efree(fname); - return; + idx = p - fname->val; + RETVAL_STRINGL(fname->val + idx + 1, fname->len - idx - 1); + STR_RELEASE(fname); } else { - if (fname) { - efree(fname); - } + STR_RELEASE(fname); RETURN_EMPTY_STRING(); } } @@ -1009,10 +1004,7 @@ SPL_METHOD(SplFileInfo, getBasename) flen = intern->file_name_len; } - php_basename(fname, flen, suffix, slen, &fname, &flen TSRMLS_CC); - - RETVAL_STRINGL(fname, flen); - efree(fname); + RETURN_STR(php_basename(fname, flen, suffix, slen TSRMLS_CC)); } /* }}}*/ @@ -1021,18 +1013,17 @@ SPL_METHOD(SplFileInfo, getBasename) SPL_METHOD(DirectoryIterator, getBasename) { spl_filesystem_object *intern = (spl_filesystem_object*)Z_OBJ_P(getThis()); - char *suffix = 0, *fname; + char *suffix = 0; int slen = 0; - size_t flen; + zend_string *fname; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &suffix, &slen) == FAILURE) { return; } - php_basename(intern->u.dir.entry.d_name, strlen(intern->u.dir.entry.d_name), suffix, slen, &fname, &flen TSRMLS_CC); + fname = php_basename(intern->u.dir.entry.d_name, strlen(intern->u.dir.entry.d_name), suffix, slen TSRMLS_CC); - RETVAL_STRINGL(fname, flen); - efree(fname); + RETVAL_STR(fname); } /* }}} */ |
