From 5fee10735fa87f66089effcab60ecf18d2aae283 Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Sun, 9 Jul 2006 10:22:27 +0000 Subject: [PATCH] - MFH Add spl_object_hash() --- ext/spl/php_spl.c | 28 ++++++++++++++++++++++++++++ ext/spl/tests/spl_005.phpt | 23 +++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100755 ext/spl/tests/spl_005.phpt diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 07dff83fd9..f22a30c498 100755 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -36,6 +36,7 @@ #include "spl_observer.h" #include "zend_exceptions.h" #include "zend_interfaces.h" +#include "ext/standard/md5.h" #ifdef COMPILE_DL_SPL ZEND_GET_MODULE(spl) @@ -566,6 +567,32 @@ PHP_FUNCTION(spl_autoload_functions) add_next_index_string(return_value, EG(autoload_func)->common.function_name, 1); } /* }}} */ +/* {{{ proto string spl_object_hash(object obj) + Return hash id for given object */ +PHP_FUNCTION(spl_object_hash) +{ + zval *obj; + int len; + char *hash; + char md5str[33]; + PHP_MD5_CTX context; + unsigned char digest[16]; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &obj) == FAILURE) { + return; + } + + len = spprintf(&hash, 0, "%p:%d", Z_OBJ_HT_P(obj), Z_OBJ_HANDLE_P(obj)); + + md5str[0] = '\0'; + PHP_MD5Init(&context); + PHP_MD5Update(&context, (unsigned char*)hash, len); + PHP_MD5Final(digest, &context); + make_digest(md5str, digest); + RETVAL_STRING(md5str, 1); + efree(hash); +} + int spl_build_class_list_string(zval **entry, char **list TSRMLS_DC) /* {{{ */ { char *res; @@ -632,6 +659,7 @@ zend_function_entry spl_functions[] = { PHP_FE(spl_autoload_call, NULL) PHP_FE(class_parents, NULL) PHP_FE(class_implements, NULL) + PHP_FE(spl_object_hash, NULL) #ifdef SPL_ITERATORS_H PHP_FE(iterator_to_array, arginfo_iterator) PHP_FE(iterator_count, arginfo_iterator) diff --git a/ext/spl/tests/spl_005.phpt b/ext/spl/tests/spl_005.phpt new file mode 100755 index 0000000000..bb297bb6bc --- /dev/null +++ b/ext/spl/tests/spl_005.phpt @@ -0,0 +1,23 @@ +--TEST-- +SPL: spl_object_hash() +--SKIPIF-- + +--FILE-- + +===DONE=== + +--EXPECTF-- +string(32) "%s" + +Warning: spl_object_hash() expects parameter 1 to be object, integer given in %sspl_005.php on line %d +NULL + +Warning: spl_object_hash() expects exactly 1 parameter, 0 given in %sspl_005.php on line %d +NULL +===DONE=== -- 2.40.0