cvs: php4 /ext/standard basic_functions.c php_string.h string.c
| From: | Sterling Hughes | 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)