const char *p;
size_t flen;
int path_len, idx;
+ zend_string *ret;
if (zend_parse_parameters_none() == FAILURE) {
return;
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();
}
}
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();
}
}
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));
}
/* }}}*/
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);
}
/* }}} */
{
char *dir, *prefix;
int dir_len, prefix_len;
- size_t p_len;
char *opened_path;
- char *p;
int fd;
+ zend_string *p;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ps", &dir, &dir_len, &prefix, &prefix_len) == FAILURE) {
return;
RETURN_FALSE;
}
- php_basename(prefix, prefix_len, NULL, 0, &p, &p_len TSRMLS_CC);
- if (p_len > 64) {
- p[63] = '\0';
+ p = php_basename(prefix, prefix_len, NULL, 0 TSRMLS_CC);
+ if (p->len > 64) {
+ p->val[63] = '\0';
}
RETVAL_FALSE;
- if ((fd = php_open_temporary_fd_ex(dir, p, &opened_path, 1 TSRMLS_CC)) >= 0) {
+ if ((fd = php_open_temporary_fd_ex(dir, p->val, &opened_path, 1 TSRMLS_CC)) >= 0) {
close(fd);
//??? RETVAL_STRING(opened_path, 0);
RETVAL_STRING(opened_path);
}
- efree(p);
+ STR_RELEASE(p);
}
/* }}} */
php_stream_dirent *ent = (php_stream_dirent *)buf;
php_stream *innerstream;
size_t tmp_len;
- char *basename;
- size_t basename_len;
+ zend_string *basename;
innerstream = ((php_ftp_dirstream_data *)stream->abstract)->datastream;
return 0;
}
- php_basename(ent->d_name, tmp_len, NULL, 0, &basename, &basename_len TSRMLS_CC);
- if (!basename) {
- return 0;
- }
-
- if (!basename_len) {
- efree(basename);
- return 0;
- }
+ basename = php_basename(ent->d_name, tmp_len, NULL, 0 TSRMLS_CC);
- tmp_len = MIN(sizeof(ent->d_name), basename_len - 1);
- memcpy(ent->d_name, basename, tmp_len);
+ tmp_len = MIN(sizeof(ent->d_name), basename->len - 1);
+ memcpy(ent->d_name, basename->val, tmp_len);
ent->d_name[tmp_len - 1] = '\0';
- efree(basename);
+ STR_RELEASE(basename);
/* Trim off trailing whitespace characters */
tmp_len--;
}
if (PG(mail_x_header)) {
const char *tmp = zend_get_executed_filename(TSRMLS_C);
- char *f;
- size_t f_len;
+ zend_string *f;
- php_basename(tmp, strlen(tmp), NULL, 0,&f, &f_len TSRMLS_CC);
+ f = php_basename(tmp, strlen(tmp), NULL, 0 TSRMLS_CC);
if (headers != NULL) {
- spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n%s", php_getuid(TSRMLS_C), f, headers);
+ spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n%s", php_getuid(TSRMLS_C), f->val, headers);
} else {
- spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n", php_getuid(TSRMLS_C), f);
+ spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n", php_getuid(TSRMLS_C), f->val);
}
- efree(f);
+ STR_RELEASE(f);
}
if (!sendmail_path) {
PHPAPI zend_string *php_addcslashes(const char *str, int length, int freeit, char *what, int wlength TSRMLS_DC);
PHPAPI void php_stripslashes(char *str, int *len TSRMLS_DC);
PHPAPI void php_stripcslashes(char *str, int *len);
-PHPAPI void php_basename(const char *s, size_t len, char *suffix, size_t sufflen, char **p_ret, size_t *p_len TSRMLS_DC);
+PHPAPI zend_string *php_basename(const char *s, size_t len, char *suffix, size_t sufflen TSRMLS_DC);
PHPAPI size_t php_dirname(char *str, size_t len);
PHPAPI char *php_stristr(char *s, char *t, size_t s_len, size_t t_len);
PHPAPI char *php_str_to_str_ex(char *haystack, int length, char *needle,
/* {{{ php_basename
*/
-PHPAPI void php_basename(const char *s, size_t len, char *suffix, size_t sufflen, char **p_ret, size_t *p_len TSRMLS_DC)
+PHPAPI zend_string *php_basename(const char *s, size_t len, char *suffix, size_t sufflen TSRMLS_DC)
{
- char *ret = NULL, *c, *comp, *cend;
+ char *c, *comp, *cend;
size_t inc_len, cnt;
int state;
+ zend_string *ret;
c = comp = cend = (char*)s;
cnt = len;
len = cend - comp;
- if (p_ret) {
- ret = emalloc(len + 1);
- memcpy(ret, comp, len);
- ret[len] = '\0';
- *p_ret = ret;
- }
- if (p_len) {
- *p_len = len;
- }
+ ret = STR_INIT(comp, len, 0);
+ return ret;
}
/* }}} */
Returns the filename component of the path */
PHP_FUNCTION(basename)
{
- char *string, *suffix = NULL, *ret;
+ char *string, *suffix = NULL;
int string_len, suffix_len = 0;
- size_t ret_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &string, &string_len, &suffix, &suffix_len) == FAILURE) {
return;
}
- php_basename(string, string_len, suffix, suffix_len, &ret, &ret_len TSRMLS_CC);
-//??? RETURN_STRINGL(ret, (int)ret_len, 0);
- RETURN_STRINGL(ret, (int)ret_len);
+ RETURN_STR(php_basename(string, string_len, suffix, suffix_len TSRMLS_CC));
}
/* }}} */
PHP_FUNCTION(pathinfo)
{
zval tmp;
- char *path, *ret = NULL;
+ char *path, *dirname;
int path_len, have_basename;
- size_t ret_len;
long opt = PHP_PATHINFO_ALL;
+ zend_string *ret;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &path, &path_len, &opt) == FAILURE) {
return;
array_init(&tmp);
if ((opt & PHP_PATHINFO_DIRNAME) == PHP_PATHINFO_DIRNAME) {
- ret = estrndup(path, path_len);
- php_dirname(ret, path_len);
- if (*ret) {
- add_assoc_string(&tmp, "dirname", ret, 1);
+ dirname = estrndup(path, path_len);
+ php_dirname(dirname, path_len);
+ if (*dirname) {
+ add_assoc_string(&tmp, "dirname", dirname, 1);
}
- efree(ret);
- ret = NULL;
+ efree(dirname);
}
if (have_basename) {
- php_basename(path, path_len, NULL, 0, &ret, &ret_len TSRMLS_CC);
- add_assoc_stringl(&tmp, "basename", ret, ret_len, 0);
+ ret = php_basename(path, path_len, NULL, 0 TSRMLS_CC);
+ add_assoc_str(&tmp, "basename", ret);
}
if ((opt & PHP_PATHINFO_EXTENSION) == PHP_PATHINFO_EXTENSION) {
int idx;
if (!have_basename) {
- php_basename(path, path_len, NULL, 0, &ret, &ret_len TSRMLS_CC);
+ ret = php_basename(path, path_len, NULL, 0 TSRMLS_CC);
}
- p = zend_memrchr(ret, '.', ret_len);
+ p = zend_memrchr(ret->val, '.', ret->len);
if (p) {
- idx = p - ret;
- add_assoc_stringl(&tmp, "extension", ret + idx + 1, ret_len - idx - 1, 1);
+ idx = p - ret->val;
+ add_assoc_stringl(&tmp, "extension", ret->val + idx + 1, ret->len - idx - 1, 1);
}
}
/* Have we already looked up the basename? */
if (!have_basename && !ret) {
- php_basename(path, path_len, NULL, 0, &ret, &ret_len TSRMLS_CC);
+ ret = php_basename(path, path_len, NULL, 0 TSRMLS_CC);
}
- p = zend_memrchr(ret, '.', ret_len);
+ p = zend_memrchr(ret->val, '.', ret->len);
- idx = p ? (p - ret) : ret_len;
- add_assoc_stringl(&tmp, "filename", ret, idx, 1);
+ idx = p ? (p - ret->val) : ret->len;
+ add_assoc_stringl(&tmp, "filename", ret->val, idx, 1);
}
if (!have_basename && ret) {
- efree(ret);
+ STR_RELEASE(ret);
}
if (opt == PHP_PATHINFO_ALL) {
char *file_dirname_fullpath;
char file_dirname[MAXPATHLEN];
size_t dir_len;
- char *file_basename;
- size_t file_basename_len;
int is_dir_only = 0;
char *path_cleaned;
size_t path_cleaned_len;
cwd_state new_state;
+ zend_string *file_basename;
new_state.cwd = CWD_STATE_ALLOC(1);
new_state.cwd[0] = '\0';
len = spprintf(&file_dirname_fullpath, 0, "%s/%s", dest, file_dirname);
}
- php_basename(path_cleaned, path_cleaned_len, NULL, 0, &file_basename, (size_t *)&file_basename_len TSRMLS_CC);
+ file_basename = php_basename(path_cleaned, path_cleaned_len, NULL, 0 TSRMLS_CC);
if (ZIP_OPENBASEDIR_CHECKPATH(file_dirname_fullpath)) {
efree(file_dirname_fullpath);
- efree(file_basename);
+ STR_RELEASE(file_basename);
CWD_STATE_FREE(new_state.cwd);
return 0;
}
if (!ret) {
efree(file_dirname_fullpath);
if (!is_dir_only) {
- efree(file_basename);
+ STR_RELEASE(file_basename);
CWD_STATE_FREE(new_state.cwd);
}
return 0;
return 1;
}
- len = spprintf(&fullpath, 0, "%s/%s", file_dirname_fullpath, file_basename);
+ len = spprintf(&fullpath, 0, "%s/%s", file_dirname_fullpath, file_basename->val);
if (!len) {
efree(file_dirname_fullpath);
- efree(file_basename);
+ STR_RELEASE(file_basename);
CWD_STATE_FREE(new_state.cwd);
return 0;
} else if (len > MAXPATHLEN) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN);
efree(file_dirname_fullpath);
- efree(file_basename);
+ STR_RELEASE(file_basename);
CWD_STATE_FREE(new_state.cwd);
return 0;
}
if (ZIP_OPENBASEDIR_CHECKPATH(fullpath)) {
efree(fullpath);
efree(file_dirname_fullpath);
- efree(file_basename);
+ STR_RELEASE(file_basename);
CWD_STATE_FREE(new_state.cwd);
return 0;
}
done:
efree(fullpath);
- efree(file_basename);
+ STR_RELEASE(file_basename);
efree(file_dirname_fullpath);
CWD_STATE_FREE(new_state.cwd);
char *file_stripped, *entry_name;
size_t entry_name_len, file_stripped_len;
char entry_name_buf[MAXPATHLEN];
- char *basename = NULL;
+ zend_string *basename = NULL;
if (zend_hash_index_find(Z_ARRVAL_P(return_value), i, (void **) &zval_file) == SUCCESS) {
if (remove_all_path) {
- php_basename(Z_STRVAL_PP(zval_file), Z_STRLEN_PP(zval_file), NULL, 0,
- &basename, (size_t *)&file_stripped_len TSRMLS_CC);
- file_stripped = basename;
+ basename = php_basename(Z_STRVAL_PP(zval_file), Z_STRLEN_PP(zval_file), NULL, 0,
+ &basename TSRMLS_CC);
+ file_stripped = basename->val;
+ file_stripped_len = basename->len;
} else if (remove_path && strstr(Z_STRVAL_PP(zval_file), remove_path) != NULL) {
file_stripped = Z_STRVAL_PP(zval_file) + remove_path_len + 1;
file_stripped_len = Z_STRLEN_PP(zval_file) - remove_path_len - 1;
entry_name_len = Z_STRLEN_PP(zval_file);
}
if (basename) {
- efree(basename);
+ STR_RELEASE(basename);
basename = NULL;
}
if (php_zip_add_file(intern, Z_STRVAL_PP(zval_file), Z_STRLEN_PP(zval_file),
struct zip_stat sb;
const char *path = stream->orig_path;
int path_len = strlen(stream->orig_path);
- char *file_basename;
- size_t file_basename_len;
char file_dirname[MAXPATHLEN];
struct zip *za;
char *fragment;
int fragment_len;
int err;
+ zend_string *file_basename;
fragment = strchr(path, '#');
if (!fragment) {
memcpy(file_dirname, path, path_len - fragment_len);
file_dirname[path_len - fragment_len] = '\0';
- php_basename((char *)path, path_len - fragment_len, NULL, 0, &file_basename, &file_basename_len TSRMLS_CC);
+ file_basename = php_basename((char *)path, path_len - fragment_len, NULL, 0 TSRMLS_CC);
fragment++;
if (ZIP_OPENBASEDIR_CHECKPATH(file_dirname)) {
- efree(file_basename);
+ STR_RELEASE(file_basename);
return -1;
}
if (za) {
memset(ssb, 0, sizeof(php_stream_statbuf));
if (zip_stat(za, fragment, ZIP_FL_NOCASE, &sb) != 0) {
- efree(file_basename);
+ STR_RELEASE(file_basename);
return -1;
}
zip_close(za);
#endif
ssb->sb.st_ino = -1;
}
- efree(file_basename);
+ STR_RELEASE(file_basename);
return 0;
}
/* }}} */