pollita Mon Oct 2 02:47:34 2006 UTC Modified files: /php-src/ext/standard file.c Log: Apply simplified path encoding to copy() and give it a context param. Funnily enough, this makes the copy() implementation almost identical to what it was back in PHP5. http://cvs.php.net/viewvc.cgi/php-src/ext/standard/file.c?r1=1.458&r2=1.459&diff_format=u Index: php-src/ext/standard/file.c diff -u php-src/ext/standard/file.c:1.458 php-src/ext/standard/file.c:1.459 --- php-src/ext/standard/file.c:1.458 Mon Oct 2 02:24:29 2006 +++ php-src/ext/standard/file.c Mon Oct 2 02:47:34 2006 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: file.c,v 1.458 2006/10/02 02:24:29 pollita Exp $ */ +/* $Id: file.c,v 1.459 2006/10/02 02:47:34 pollita Exp $ */ /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */ @@ -1881,49 +1881,28 @@ } /* }}} */ -/* {{{ proto bool copy(string source_file, string destination_file) U +/* {{{ proto bool copy(string source_file, string destination_file[, resource context]) U Copy a file */ PHP_FUNCTION(copy) { - char *source, *dest; - int source_len, dest_len; - zend_uchar source_type, dest_type; - zend_uchar free_source = 0, free_dest = 0; + zval **source, **target, *zcontext = NULL; + php_stream_context *context; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "tt", &source, &source_len, &source_type, &dest, &dest_len, &dest_type) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ|r", &source, &target, &zcontext) == FAILURE) { return; } - /* Assume failure until success is known */ - RETVAL_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_check_open_basedir(source TSRMLS_CC)) { - goto copy_cleanup; - } - - if (php_copy_file(source, dest TSRMLS_CC) == SUCCESS) { - RETVAL_TRUE; + context = php_stream_context_from_zval(zcontext, 0); + if (FAILURE == php_stream_path_param_encode(source, NULL, NULL, REPORT_ERRORS, context) || + FAILURE == php_stream_path_param_encode(target, NULL, NULL, REPORT_ERRORS, context) || + 0 != php_check_open_basedir(Z_STRVAL_PP(source) TSRMLS_CC)) { + RETURN_FALSE; } -copy_cleanup: - if (free_source) { - efree(source); - } - if (free_dest) { - efree(dest); + if (php_copy_file(Z_STRVAL_PP(source), Z_STRVAL_PP(target) TSRMLS_CC)==SUCCESS) { + RETURN_TRUE; + } else { + RETURN_FALSE; } } /* }}} */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php