tony2001                Wed Oct 27 08:01:20 2004 EDT

  Modified files:              (Branch: PHP_4_3)
    /php-src/ext/standard       file.c 
  Log:
  MFH: fix bug #30388 (rename across filesystems loses ownership and permission info)
  
  
http://cvs.php.net/diff.php/php-src/ext/standard/file.c?r1=1.279.2.62&r2=1.279.2.63&ty=u
Index: php-src/ext/standard/file.c
diff -u php-src/ext/standard/file.c:1.279.2.62 php-src/ext/standard/file.c:1.279.2.63
--- php-src/ext/standard/file.c:1.279.2.62      Fri Sep 24 09:07:18 2004
+++ php-src/ext/standard/file.c Wed Oct 27 08:01:20 2004
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: file.c,v 1.279.2.62 2004/09/24 13:07:18 derick Exp $ */
+/* $Id: file.c,v 1.279.2.63 2004/10/27 12:01:20 tony2001 Exp $ */
 
 /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
 
@@ -1914,9 +1914,30 @@
        if (ret == -1) {
 #ifdef EXDEV
                if (errno == EXDEV) {
-                       if (php_copy_file(old_name, new_name TSRMLS_CC) == SUCCESS) {
-                               VCWD_UNLINK(old_name);
-                               RETURN_TRUE;
+                       struct stat sb;
+                       if (php_copy_file(old_name, new_name TSRMLS_CC) == SUCCESS) {
+                               if (VCWD_STAT(old_name, &sb) == 0) {
+                                       if (VCWD_CHMOD(new_name, sb.st_mode)) {
+                                               if (errno == EPERM) {
+                                                       php_error_docref2(NULL 
TSRMLS_CC, old_name, new_name, E_WARNING, "%s", strerror(errno));
+                                                       VCWD_UNLINK(old_name);
+                                                       RETURN_TRUE;
+                                               }
+                                               php_error_docref2(NULL TSRMLS_CC, 
old_name, new_name, E_WARNING, "%s", strerror(errno));
+                                               RETURN_FALSE;
+                                       }
+                                       if (VCWD_CHOWN(new_name, sb.st_uid, 
sb.st_gid)) {
+                                               if (errno == EPERM) {
+                                                       php_error_docref2(NULL 
TSRMLS_CC, old_name, new_name, E_WARNING, "%s", strerror(errno));
+                                                       VCWD_UNLINK(old_name);
+                                                       RETURN_TRUE;
+                                               }
+                                               php_error_docref2(NULL TSRMLS_CC, 
old_name, new_name, E_WARNING, "%s", strerror(errno));
+                                               RETURN_FALSE;
+                                       }
+                                       VCWD_UNLINK(old_name);
+                                       RETURN_TRUE;
+                               }
                        }
                }
 #endif

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to