CVS update: php31/ext/standard

From: Date: Sat, 17 Oct 1998 18:19:46 +0000
Subject: CVS update: php31/ext/standard
Groups: php.dev 
Request: Send a blank email to php-dev+get-1866@lists.php.net to get a copy of this message
Date: Saturday October 17, 1998 @ 14:19 Author: zeev Update of /repository/php31/ext/standard In directory asf:/u2/tmp/cvs-serv13624/ext/standard Modified Files: basic_functions.c basic_functions.h Log Message: 3.0 patches: * mime.c leak fix * constant.c leak fix * token cache code optimization and limits * out of memory handling * token cache optimization & fixes * added uksort() Index: php31/ext/standard/basic_functions.c diff -c php31/ext/standard/basic_functions.c:2.18 php31/ext/standard/basic_functions.c:2.19 *** php31/ext/standard/basic_functions.c:2.18 Sun Oct 11 09:11:54 1998 --- php31/ext/standard/basic_functions.c Sat Oct 17 14:19:45 1998 *************** *** 103,109 **** {"sort", php3_sort, first_arg_force_ref}, {"rsort", php3_rsort, first_arg_force_ref}, {"usort", php3_user_sort, first_arg_force_ref}, ! {"uasort", php3_auser_sort, first_arg_force_ref}, {"array_walk", php3_array_walk, first_arg_force_ref}, {"sizeof", php3_count, first_arg_allow_ref}, {"count", php3_count, first_arg_allow_ref}, --- 103,110 ---- {"sort", php3_sort, first_arg_force_ref}, {"rsort", php3_rsort, first_arg_force_ref}, {"usort", php3_user_sort, first_arg_force_ref}, ! {"uasort", php3_auser_sort, first_arg_force_ref}, ! {"uksort", php3_user_key_sort, first_arg_force_ref}, {"array_walk", php3_array_walk, first_arg_force_ref}, {"sizeof", php3_count, first_arg_allow_ref}, {"count", php3_count, first_arg_allow_ref}, *************** *** 813,818 **** --- 814,888 ---- } convert_to_string(user_compare_func_name); if (_php3_hash_sort(array->value.ht, array_user_compare, 0) == FAILURE) { + user_compare_func_name = old_compare_func; + return; + } + user_compare_func_name = old_compare_func; + RETURN_TRUE; + } + + + static int array_user_key_compare(const void *a, const void *b) + { + Bucket *f; + Bucket *s; + pval key1, key2; + pval *args[2] = {&key1, &key2}; + pval retval; + int status; + + f = *((Bucket **) a); + s = *((Bucket **) b); + + if (f->arKey) { + key1.value.str.val = estrndup(f->arKey, f->nKeyLength); + key1.value.str.len = f->nKeyLength; + key1.type = IS_STRING; + } else { + key1.value.lval = f->h; + key1.type = IS_LONG; + } + if (s->arKey) { + key2.value.str.val = estrndup(s->arKey, s->nKeyLength); + key2.value.str.len = s->nKeyLength; + key2.type = IS_STRING; + } else { + key2.value.lval = s->h; + key2.type = IS_LONG; + } + + status = call_user_function(&GLOBAL(function_table), NULL, user_compare_func_name, &retval, 2, args); + + pval_destructor(&key1); + pval_destructor(&key2); + + if (status==SUCCESS) { + convert_to_long(&retval); + return retval.value.lval; + } else { + return 0; + } + } + + + void php3_user_key_sort(INTERNAL_FUNCTION_PARAMETERS) + { + pval *array; + pval *old_compare_func; + TLS_VARS; + + old_compare_func = user_compare_func_name; + if (ARG_COUNT(ht) != 2 || getParameters(ht, 2, &array, &user_compare_func_name) == FAILURE) { + user_compare_func_name = old_compare_func; + WRONG_PARAM_COUNT; + } + if (!(array->type & IS_HASH)) { + php3_error(E_WARNING, "Wrong datatype in uasort() call"); + user_compare_func_name = old_compare_func; + return; + } + convert_to_string(user_compare_func_name); + if (_php3_hash_sort(array->value.ht, array_user_key_compare, 0) == FAILURE) { user_compare_func_name = old_compare_func; return; } Index: php31/ext/standard/basic_functions.h diff -c php31/ext/standard/basic_functions.h:2.5 php31/ext/standard/basic_functions.h:2.6 *** php31/ext/standard/basic_functions.h:2.5 Sun Sep 6 17:34:30 1998 --- php31/ext/standard/basic_functions.h Sat Oct 17 14:19:46 1998 *************** *** 29,35 **** */ ! /* $Id: basic_functions.h,v 2.5 1998/09/06 21:34:30 zeev Exp $ */ #ifndef _BASIC_FUNCTIONS_H #define _BASIC_FUNCTIONS_H --- 29,35 ---- */ ! /* $Id: basic_functions.h,v 2.6 1998/10/17 18:19:46 zeev Exp $ */ #ifndef _BASIC_FUNCTIONS_H #define _BASIC_FUNCTIONS_H *************** *** 51,56 **** --- 51,57 ---- extern void php3_arsort(INTERNAL_FUNCTION_PARAMETERS); extern void php3_user_sort(INTERNAL_FUNCTION_PARAMETERS); extern void php3_auser_sort(INTERNAL_FUNCTION_PARAMETERS); + extern void php3_user_key_sort(INTERNAL_FUNCTION_PARAMETERS); extern void php3_array_walk(INTERNAL_FUNCTION_PARAMETERS); extern void php3_sort(INTERNAL_FUNCTION_PARAMETERS); extern void php3_rsort(INTERNAL_FUNCTION_PARAMETERS); -- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net For help: php-dev-help@lists.php.net

« previous php.dev (#1866) next »