mirror of
https://github.com/php/php-src.git
synced 2026-04-26 17:38:14 +02:00
Update copy() for PHP6
This commit is contained in:
+33
-11
@@ -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);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
Reference in New Issue
Block a user