cvs: php4 /ext/standard basic_functions.c php_string.h string.c

From: Date: Sun, 10 Sep 2000 05:59:16 +0000
Subject: cvs: php4 /ext/standard basic_functions.c php_string.h string.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-1679@lists.php.net to get a copy of this message
sterling Sat Sep 9 22:59:16 2000 EDT Modified files: /php4/ext/standard string.c php_string.h basic_functions.c Log: @- Added the pathinfo() function. (Sterling) Index: php4/ext/standard/string.c diff -u php4/ext/standard/string.c:1.147 php4/ext/standard/string.c:1.148 --- php4/ext/standard/string.c:1.147 Tue Sep 5 11:25:58 2000 +++ php4/ext/standard/string.c Sat Sep 9 22:59:16 2000 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: string.c,v 1.147 2000/09/05 18:25:58 cmv Exp $ */ +/* $Id: string.c,v 1.148 2000/09/10 05:59:16 sterling Exp $ */ /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */ @@ -39,12 +39,18 @@ #define STR_PAD_LEFT 0 #define STR_PAD_RIGHT 1 #define STR_PAD_BOTH 2 +#define PHP_PATHINFO_BASENAME 0 +#define PHP_PATHINFO_DIRNAME 1 +#define PHP_PATHINFO_EXTENSION 2 void register_string_constants(INIT_FUNC_ARGS) { - REGISTER_LONG_CONSTANT("STR_PAD_LEFT", STR_PAD_LEFT, CONST_PERSISTENT|CONST_CS); - REGISTER_LONG_CONSTANT("STR_PAD_RIGHT", STR_PAD_RIGHT, CONST_PERSISTENT|CONST_CS); - REGISTER_LONG_CONSTANT("STR_PAD_BOTH", STR_PAD_BOTH, CONST_PERSISTENT|CONST_CS); + REGISTER_LONG_CONSTANT("STR_PAD_LEFT", STR_PAD_LEFT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("STR_PAD_RIGHT", STR_PAD_RIGHT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("STR_PAD_BOTH", STR_PAD_BOTH, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("PATHINFO_BASENAME", PHP_PATHINFO_BASENAME, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("PATHINFO_DIRNAME", PHP_PATHINFO_DIRNAME, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("PATHINFO_EXTENSION", PHP_PATHINFO_EXTENSION, CONST_CS | CONST_PERSISTENT); } int php_tag_find(char *tag, int len, char *set); @@ -702,7 +708,7 @@ zval **str; char *ret; - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str)) { + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(str); @@ -717,6 +723,67 @@ } /* }}} */ +/* {{{ proto array pathinfo(string path) + Return information about a certain string */ +PHP_FUNCTION(pathinfo) +{ + zval **str, **uopt, *tmp; + char *ret; + int argc = ZEND_NUM_ARGS(), opt, len; + + if (argc < 1 || argc > 2 || + zend_get_parameters_ex(argc, &str, &uopt) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(str); + len = Z_STRLEN_PP(str); + + if (argc > 1) { + convert_to_long_ex(uopt); + opt = Z_LVAL_PP(uopt); + } + + MAKE_STD_ZVAL(tmp); + array_init(tmp); + + if (opt == PHP_PATHINFO_BASENAME || argc < 2) { + ret = estrndup(Z_STRVAL_PP(str), len); + php_dirname(ret, len); + if (*ret) + add_assoc_string(tmp, "basename", ret, 1); + efree(ret); + } + + if (opt == PHP_PATHINFO_EXTENSION || argc < 2) { + char *p; + int idx; + + ret = estrndup(Z_STRVAL_PP(str), len); + p = strrchr(ret, '.'); + if (*p) { + idx = p - ret; + add_assoc_stringl(tmp, "extension", ret + idx + 1, len - idx - 1, 1); + } + efree(ret); + } + + if (opt == PHP_PATHINFO_DIRNAME || argc < 2) { + ret = php_basename(Z_STRVAL_PP(str), len); + add_assoc_string(tmp, "dirname", ret, 1); + } + + if (zend_hash_num_elements(Z_ARRVAL_P(tmp)) == 1) { + zval **element; + zend_hash_get_current_data(Z_ARRVAL_P(tmp), (void **)&element); + *return_value = **element; + } else { + array_init(return_value); + *return_value = *tmp; + } + + zval_copy_ctor(return_value); +} +/* }}} */ /* case insensitve strstr */ PHPAPI char *php_stristr(unsigned char *s, unsigned char *t, Index: php4/ext/standard/php_string.h diff -u php4/ext/standard/php_string.h:1.25 php4/ext/standard/php_string.h:1.26 --- php4/ext/standard/php_string.h:1.25 Sun Jul 23 18:39:49 2000 +++ php4/ext/standard/php_string.h Sat Sep 9 22:59:16 2000 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_string.h,v 1.25 2000/07/24 01:39:49 david Exp $ */ +/* $Id: php_string.h,v 1.26 2000/09/10 05:59:16 sterling Exp $ */ /* Synced with php 3.0 revision 1.43 1999-06-16 [ssb] */ @@ -42,6 +42,7 @@ PHP_FUNCTION(strtolower); PHP_FUNCTION(basename); PHP_FUNCTION(dirname); +PHP_FUNCTION(pathinfo); PHP_FUNCTION(strstr); PHP_FUNCTION(strpos); PHP_FUNCTION(strrpos); Index: php4/ext/standard/basic_functions.c diff -u php4/ext/standard/basic_functions.c:1.253 php4/ext/standard/basic_functions.c:1.254 --- php4/ext/standard/basic_functions.c:1.253 Sat Sep 9 04:41:14 2000 +++ php4/ext/standard/basic_functions.c Sat Sep 9 22:59:16 2000 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.253 2000/09/09 11:41:14 zeev Exp $ */ +/* $Id: basic_functions.c,v 1.254 2000/09/10 05:59:16 sterling Exp $ */ #include "php.h" #include "php_main.h" @@ -152,6 +152,7 @@ PHP_FE(nl2br, NULL) PHP_FE(basename, NULL) PHP_FE(dirname, NULL) + PHP_FE(pathinfo, NULL) PHP_FE(stripslashes, NULL) PHP_FE(stripcslashes, NULL) PHP_FE(strstr, NULL)

« previous php.cvs (#1679) next »