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

Reply via email to