if (ret == -1) {
#ifdef EXDEV
if (errno == EXDEV) {
+ struct stat sb;
if (php_copy_file(url_from, url_to TSRMLS_CC) == SUCCESS) {
- VCWD_UNLINK(url_from);
- return 1;
+ if (VCWD_STAT(url_from, &sb) == 0) {
+ if (VCWD_CHMOD(url_to, sb.st_mode)) {
+ if (errno == EPERM) {
+ php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno));
+ VCWD_UNLINK(url_from);
+ return 1;
+ }
+ php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno));
+ return 0;
+ }
+ if (VCWD_CHOWN(url_to, sb.st_uid, sb.st_gid)) {
+ if (errno == EPERM) {
+ php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno));
+ VCWD_UNLINK(url_from);
+ return 1;
+ }
+ php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno));
+ return 0;
+ }
+ VCWD_UNLINK(url_from);
+ return 1;
+ }
}
+ php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno));
+ return 0;
}
#endif
php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno));