From: Sara Golemon Date: Fri, 22 Sep 2006 20:02:26 +0000 (+0000) Subject: Update copy() for PHP6 X-Git-Tag: RELEASE_1_0_0RC1~1579 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6905daca8e022a4359a5915f144da39db1566a8a;p=php Update copy() for PHP6 --- diff --git a/ext/standard/file.c b/ext/standard/file.c index a8b7b124a2..4d8075a4fe 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -1779,23 +1779,45 @@ PHP_NAMED_FUNCTION(php_if_fstat) Copy a file */ PHP_FUNCTION(copy) { - zval **source, **target; + char *source, *dest; + int source_len, dest_len; + zend_uchar source_type, dest_type; + zend_uchar free_source = 0, free_dest = 0; - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &source, &target) == FAILURE) { - WRONG_PARAM_COUNT; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "tt", &source, &source_len, &source_type, &dest, &dest_len, &dest_type) == FAILURE) { + return; } - convert_to_string_ex(source); - convert_to_string_ex(target); + /* Assume failure until success is known */ + RETVAL_FALSE; - if (php_check_open_basedir(Z_STRVAL_PP(source) TSRMLS_CC)) { - RETURN_FALSE; + if (source_type == IS_UNICODE) { + if (FAILURE == php_stream_path_encode(NULL, &source, &source_len, (UChar*)source, source_len, REPORT_ERRORS, FG(default_context))) { + goto copy_cleanup; + } + free_source = 1; + } + if (dest_type == IS_UNICODE) { + if (FAILURE == php_stream_path_encode(NULL, &dest, &dest_len, (UChar*)dest, dest_len, REPORT_ERRORS, FG(default_context))) { + goto copy_cleanup; + } + free_dest = 1; } - if (php_copy_file(Z_STRVAL_PP(source), Z_STRVAL_PP(target) TSRMLS_CC)==SUCCESS) { - RETURN_TRUE; - } else { - RETURN_FALSE; + if (php_check_open_basedir(source TSRMLS_CC)) { + goto copy_cleanup; + } + + if (php_copy_file(source, target TSRMLS_CC) == SUCCESS) { + RETVAL_TRUE; + } + +copy_cleanup: + if (free_source) { + efree(source); + } + if (free_dest) { + efree(dest); } } /* }}} */