[PHP4BETA] CVS update: php4/ext/standard
| From: | andrey | Date: | Tue, 11 May 1999 19:31:43 +0000 |
| Subject: | [PHP4BETA] CVS update: php4/ext/standard | ||
| Groups: | php.version4 | ||
| Request: | Send a blank email to php-version4+get-773@lists.php.net to get a copy of this message | ||
Date: Tuesday May 11, 1999 @ 15:31
Author: andrey
Update of /repository/php4/ext/standard
In directory php:/tmp/cvs-serv936/ext/standard
Modified Files:
basic_functions.c basic_functions.h
Log Message:
Added compact() function.
Index: php4/ext/standard/basic_functions.c
diff -u php4/ext/standard/basic_functions.c:1.18 php4/ext/standard/basic_functions.c:1.19
--- php4/ext/standard/basic_functions.c:1.18 Mon May 10 17:14:43 1999
+++ php4/ext/standard/basic_functions.c Tue May 11 15:31:37 1999
@@ -296,6 +296,7 @@
PHP_FE(function_exists, NULL)
PHP_FE(in_array, NULL)
PHP_FE(extract, NULL)
+ PHP_FE(compact, NULL)
{NULL, NULL, NULL}
};
@@ -2215,8 +2216,6 @@
zend_hash_internal_pointer_reset(target_hash);
while(zend_hash_get_current_data(target_hash, (void **)&entry_ptr) == SUCCESS) {
entry = *entry_ptr;
- if (entry->type == IS_STRING && entry->value.str.val == undefined_variable_string)
- continue;
is_equal_function(&res, value, entry);
if (zval_is_true(&res)) {
RETURN_TRUE;
@@ -2260,9 +2259,9 @@
Imports variables into symbol table from an array */
PHP_FUNCTION(extract)
{
- pval *var_array, *etype, *prefix;
- pval **entry_ptr, *entry, *exist;
- pval *data;
+ zval *var_array, *etype, *prefix;
+ zval **entry_ptr, *entry, *exist;
+ zval *data;
char *varname, *finalname;
ulong lkey;
int res, extype;
@@ -2304,7 +2303,7 @@
return;
}
- if (!(var_array->type & IS_ARRAY)) {
+ if (var_array->type != IS_ARRAY) {
zend_error(E_WARNING, "Wrong datatype in call to extract()");
return;
}
@@ -2313,60 +2312,117 @@
while(zend_hash_get_current_data(var_array->value.ht, (void **)&entry_ptr) == SUCCESS) {
entry = *entry_ptr;
- if (!(entry->type == IS_STRING &&
- entry->value.str.val == undefined_variable_string)) {
+ if (zend_hash_get_current_key(var_array->value.ht, &varname, &lkey) ==
+ HASH_KEY_IS_STRING) {
- if (zend_hash_get_current_key(var_array->value.ht, &varname, &lkey) ==
- HASH_KEY_IS_STRING) {
+ if (_valid_var_name(varname)) {
+ finalname = NULL;
- if (_valid_var_name(varname)) {
- finalname = NULL;
-
- res = zend_hash_find(EG(active_symbol_table),
- varname, strlen(varname)+1, (void**)&exist);
- switch (extype) {
- case EXTR_OVERWRITE:
+ res = zend_hash_find(EG(active_symbol_table),
+ varname, strlen(varname)+1, (void**)&exist);
+ switch (extype) {
+ case EXTR_OVERWRITE:
+ finalname = estrdup(varname);
+ break;
+
+ case EXTR_PREFIX_SAME:
+ if (res != SUCCESS)
finalname = estrdup(varname);
- break;
+ /* break omitted intentionally */
- case EXTR_PREFIX_SAME:
- if (res != SUCCESS)
- finalname = estrdup(varname);
- /* break omitted intentionally */
-
- case EXTR_PREFIX_ALL:
- if (!finalname) {
- finalname = emalloc(strlen(varname) + prefix->value.str.len + 2);
- strcpy(finalname, prefix->value.str.val);
- strcat(finalname, "_");
- strcat(finalname, varname);
- }
- break;
-
- default:
- if (res != SUCCESS)
- finalname = estrdup(varname);
- break;
- }
-
- if (finalname) {
- data = (pval *)emalloc(sizeof(pval));
- *data = *entry;
- pval_copy_constructor(data);
- data->is_ref = 0;
- data->refcount = 1;
-
- zend_hash_update(EG(active_symbol_table), finalname,
- strlen(finalname)+1, &data, sizeof(pval *), NULL);
- efree(finalname);
- }
+ case EXTR_PREFIX_ALL:
+ if (!finalname) {
+ finalname = emalloc(strlen(varname) + prefix->value.str.len + 2);
+ strcpy(finalname, prefix->value.str.val);
+ strcat(finalname, "_");
+ strcat(finalname, varname);
+ }
+ break;
+
+ default:
+ if (res != SUCCESS)
+ finalname = estrdup(varname);
+ break;
}
- efree(varname);
+ if (finalname) {
+ data = (zval *)emalloc(sizeof(zval));
+ *data = *entry;
+ zval_copy_ctor(data);
+ data->is_ref = 0;
+ data->refcount = 1;
+
+ zend_hash_update(EG(active_symbol_table), finalname,
+ strlen(finalname)+1, &data, sizeof(zval *), NULL);
+ efree(finalname);
+ }
}
+
+ efree(varname);
}
+
zend_hash_move_forward(var_array->value.ht);
}
+}
+/* }}} */
+
+
+/* {{{ void _compact_var(HashTable *eg_active_symbol_table, zval *return_value, zval *entry) */
+static void _compact_var(HashTable *eg_active_symbol_table, zval *return_value, zval *entry)
+{
+ zval **value_ptr, *value, *data;
+
+ if (entry->type == IS_STRING) {
+ if (zend_hash_find(eg_active_symbol_table, entry->value.str.val,
+ entry->value.str.len+1, (void **)&value_ptr) != FAILURE) {
+ value = *value_ptr;
+ data = (zval *)emalloc(sizeof(zval));
+ *data = *value;
+ zval_copy_ctor(data);
+ data->is_ref = 0;
+ data->refcount = 1;
+
+ zend_hash_update(return_value->value.ht, entry->value.str.val,
+ entry->value.str.len+1, &data, sizeof(zval *), NULL);
+ }
+ }
+ else if (entry->type == IS_ARRAY) {
+ zend_hash_internal_pointer_reset(entry->value.ht);
+
+ while(zend_hash_get_current_data(entry->value.ht, (void**)&value_ptr) == SUCCESS) {
+ value = *value_ptr;
+
+ _compact_var(eg_active_symbol_table, return_value, value);
+ zend_hash_move_forward(entry->value.ht);
+ }
+ }
+}
+/* }}} */
+
+
+/* {{{ proto void compact(string var_name | array var_names [, ... ])
+ Creates a hash containing variables and their values */
+PHP_FUNCTION(compact)
+{
+ zval **args; /* function arguments array */
+ int i;
+ ELS_FETCH();
+
+ args = (zval **)emalloc(ARG_COUNT(ht) * sizeof(zval *));
+
+ if (getParametersArray(ht, ARG_COUNT(ht), args) == FAILURE) {
+ efree(args);
+ WRONG_PARAM_COUNT;
+ }
+
+ array_init(return_value);
+
+ for (i=0; i<ARG_COUNT(ht); i++)
+ {
+ _compact_var(EG(active_symbol_table), return_value, args[i]);
+ }
+
+ efree(args);
}
/* }}} */
Index: php4/ext/standard/basic_functions.h
diff -u php4/ext/standard/basic_functions.h:1.4 php4/ext/standard/basic_functions.h:1.5
--- php4/ext/standard/basic_functions.h:1.4 Mon May 10 17:10:48 1999
+++ php4/ext/standard/basic_functions.h Tue May 11 15:31:37 1999
@@ -29,7 +29,7 @@
*/
-/* $Id: basic_functions.h,v 1.4 1999/05/10 21:10:48 andrey Exp $ */
+/* $Id: basic_functions.h,v 1.5 1999/05/11 19:31:37 andrey Exp $ */
#ifndef _BASIC_FUNCTIONS_H
#define _BASIC_FUNCTIONS_H
@@ -121,6 +121,7 @@
PHP_FUNCTION(function_exists);
PHP_FUNCTION(in_array);
PHP_FUNCTION(extract);
+PHP_FUNCTION(compact);
#if HAVE_PUTENV
typedef struct {
--
PHP 4 Beta