cvs: php4 /ext/standard array.c
| From: | Rasmus Lerdorf | Date: | Fri, 25 Jan 2002 09:01:04 +0000 |
| Subject: | cvs: php4 /ext/standard array.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-9176@lists.php.net to get a copy of this message | ||
rasmus Fri Jan 25 04:01:04 2002 EDT
Modified files:
/php4/ext/standard array.c
Log:
(extraxt) add EXTR_IF_EXISTS and EXTR_PREFIX_IF_EXISTS flags
@- Added EXTR_IF_EXISTS and EXTR_PREFIX_IF_EXISTS flags to extract()
@ EXTR_IF_EXISTS only extracts a variable if it already exists
@ EXTR_PREFIX_IF_EXISTS only extracts the variable if it exists and
@ then it prepends the prefix to it. ie. if $PATH exists then
@ extract($_ENV,EXTR_PREFIX_IF_EXISTS,'e') would result in $e_PATH
@ This lets you do $a = $b = $c = true; extract($_REQUEST,EXTR_IF_EXISTS);
@ and you only get the global request variables you have defined imported
@ into your symbol table. (Rasmus)
Index: php4/ext/standard/array.c
diff -u php4/ext/standard/array.c:1.153 php4/ext/standard/array.c:1.154
--- php4/ext/standard/array.c:1.153 Thu Jan 10 16:31:06 2002
+++ php4/ext/standard/array.c Fri Jan 25 04:01:02 2002
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: array.c,v 1.153 2002/01/10 21:31:06 andrei Exp $ */
+/* $Id: array.c,v 1.154 2002/01/25 09:01:02 rasmus Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -51,11 +51,13 @@
php_array_globals array_globals;
#endif
-#define EXTR_OVERWRITE 0
-#define EXTR_SKIP 1
-#define EXTR_PREFIX_SAME 2
-#define EXTR_PREFIX_ALL 3
-#define EXTR_PREFIX_INVALID 4
+#define EXTR_OVERWRITE 0
+#define EXTR_SKIP 1
+#define EXTR_PREFIX_SAME 2
+#define EXTR_PREFIX_ALL 3
+#define EXTR_PREFIX_INVALID 4
+#define EXTR_PREFIX_IF_EXISTS 5
+#define EXTR_IF_EXISTS 6
#define SORT_REGULAR 0
#define SORT_NUMERIC 1
@@ -81,6 +83,8 @@
REGISTER_LONG_CONSTANT("EXTR_PREFIX_SAME", EXTR_PREFIX_SAME, CONST_CS |
CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("EXTR_PREFIX_ALL", EXTR_PREFIX_ALL, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("EXTR_PREFIX_INVALID", EXTR_PREFIX_INVALID, CONST_CS |
CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("EXTR_PREFIX_IF_EXISTS", EXTR_PREFIX_IF_EXISTS, CONST_CS |
CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("EXTR_IF_EXISTS", EXTR_IF_EXISTS, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("SORT_ASC", SORT_ASC, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("SORT_DESC", SORT_DESC, CONST_CS | CONST_PERSISTENT);
@@ -1151,7 +1155,7 @@
}
convert_to_long_ex(z_extract_type);
extract_type = Z_LVAL_PP(z_extract_type);
- if (extract_type > EXTR_SKIP && extract_type <= EXTR_PREFIX_INVALID) {
+ if (extract_type > EXTR_SKIP && extract_type <= EXTR_PREFIX_IF_EXISTS) {
php_error(E_WARNING, "%s() expects a prefix to be specified",
get_active_function_name(TSRMLS_C));
return;
@@ -1172,7 +1176,7 @@
break;
}
- if (extract_type < EXTR_OVERWRITE || extract_type > EXTR_PREFIX_INVALID) {
+ if (extract_type < EXTR_OVERWRITE || extract_type > EXTR_IF_EXISTS) {
php_error(E_WARNING, "Unknown extract type in call to %s()",
get_active_function_name(TSRMLS_C));
return;
@@ -1202,8 +1206,21 @@
}
switch (extract_type) {
+ case EXTR_IF_EXISTS:
+ if(!var_exists) break;
+ /* break omitted intentionally */
+
case EXTR_OVERWRITE:
final_name = estrndup(var_name, var_name_len);
+ break;
+
+ case EXTR_PREFIX_IF_EXISTS:
+ if(var_exists) {
+ final_name = emalloc(var_name_len + Z_STRLEN_PP(prefix) + 2);
+ strcpy(final_name, Z_STRVAL_PP(prefix));
+ strcat(final_name, "_");
+ strcat(final_name, var_name);
+ }
break;
case EXTR_PREFIX_SAME: