1
0
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:
Sara Golemon
2006-09-22 20:02:26 +00:00
parent 3191ed0e85
commit 6905daca8e
+33 -11
View File
@@ -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);
}
}
/* }}} */