svn: /php/php-src/ branches/PHP_5_3/main/main.c branches/PHP_5_3/main/php.h branches/PHP_5_3/main/streams/plain_wrapper.c trunk/main/main.c
trunk/main/php.h trunk/main/streams/plain_wrapper.c
| From: | Pierre Joye | Date: | Tue, 26 Jan 2010 20:04:03 +0000 |
| Subject: | svn: /php/php-src/ branches/PHP_5_3/main/main.c branches/PHP_5_3/main/php.h branches/PHP_5_3/main/streams/plain_wrapper.c trunk/main/main.c trunk/main/php.h trunk/main/streams/plain_wrapper.c |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-61637@lists.php.net to get a copy of this message | ||
pajoye Tue, 26 Jan 2010 20:04:03 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=294053
Log:
- [DOC] #45986, bad file descriptor warning when rename is used with invalid path, add
php_win32_docref2_from_error to display system error for non posix api
Bug: http://bugs.php.net/45986 (Assigned) rename() generates
Bad file descriptor
Changed paths:
U php/php-src/branches/PHP_5_3/main/main.c
U php/php-src/branches/PHP_5_3/main/php.h
U php/php-src/branches/PHP_5_3/main/streams/plain_wrapper.c
U php/php-src/trunk/main/main.c
U php/php-src/trunk/main/php.h
U php/php-src/trunk/main/streams/plain_wrapper.c
Modified: php/php-src/branches/PHP_5_3/main/main.c
===================================================================
--- php/php-src/branches/PHP_5_3/main/main.c 2010-01-26 20:00:22 UTC (rev 294052)
+++ php/php-src/branches/PHP_5_3/main/main.c 2010-01-26 20:04:03 UTC (rev 294053)
@@ -848,6 +848,27 @@
}
/* }}} */
+#ifdef PHP_WIN32
+#define PHP_WIN32_ERROR_MSG_BUFFER_SIZE 512
+PHPAPI void php_win32_docref2_from_error(DWORD error, const char *param1, const char *param2
TSRMLS_DC) {
+ if (error == 0) {
+ php_error_docref2(NULL TSRMLS_CC, param1, param2, E_WARNING, "%s", strerror(errno));
+ } else {
+ char buf[PHP_WIN32_ERROR_MSG_BUFFER_SIZE + 1];
+ int buf_len;
+
+ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, buf, PHP_WIN32_ERROR_MSG_BUFFER_SIZE,
NULL);
+ buf_len = strlen(buf);
+ if (buf_len >= 2) {
+ buf[buf_len - 1] = '\0';
+ buf[buf_len - 2] = '\0';
+ }
+ php_error_docref2(NULL TSRMLS_CC, param1, param2, E_WARNING, "%s (code: %lu)", (char
*)buf, error);
+ }
+}
+#undef PHP_WIN32_ERROR_MSG_BUFFER_SIZE
+#endif
+
/* {{{ php_html_puts */
PHPAPI void php_html_puts(const char *str, uint size TSRMLS_DC)
{
Modified: php/php-src/branches/PHP_5_3/main/php.h
===================================================================
--- php/php-src/branches/PHP_5_3/main/php.h 2010-01-26 20:00:22 UTC (rev 294052)
+++ php/php-src/branches/PHP_5_3/main/php.h 2010-01-26 20:04:03 UTC (rev 294053)
@@ -309,6 +309,8 @@
PHP_ATTRIBUTE_FORMAT(printf, PHP_ATTR_FMT_OFFSET + 4, PHP_ATTR_FMT_OFFSET + 5);
PHPAPI void php_error_docref2(const char *docref TSRMLS_DC, const char *param1, const char *param2,
int type, const char *format, ...)
PHP_ATTRIBUTE_FORMAT(printf, PHP_ATTR_FMT_OFFSET + 5, PHP_ATTR_FMT_OFFSET + 6);
+PHPAPI void php_win32_docref2_from_error(DWORD error, const char *param1, const char *param2
TSRMLS_DC);
+
END_EXTERN_C()
#define php_error_docref php_error_docref0
Modified: php/php-src/branches/PHP_5_3/main/streams/plain_wrapper.c
===================================================================
--- php/php-src/branches/PHP_5_3/main/streams/plain_wrapper.c 2010-01-26 20:00:22 UTC (rev 294052)
+++ php/php-src/branches/PHP_5_3/main/streams/plain_wrapper.c 2010-01-26 20:04:03 UTC (rev 294053)
@@ -1080,12 +1080,13 @@
ret = VCWD_RENAME(url_from, url_to);
if (ret == -1) {
-#ifdef EXDEV
+#ifndef PHP_WIN32
+# ifdef EXDEV
if (errno == EXDEV) {
struct stat sb;
if (php_copy_file(url_from, url_to TSRMLS_CC) == SUCCESS) {
if (VCWD_STAT(url_from, &sb) == 0) {
-#if !defined(TSRM_WIN32) && !defined(NETWARE)
+# if !defined(TSRM_WIN32) && !defined(NETWARE)
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));
@@ -1104,7 +1105,7 @@
php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s",
strerror(errno));
return 0;
}
-#endif
+# endif
VCWD_UNLINK(url_from);
return 1;
}
@@ -1112,8 +1113,14 @@
php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno));
return 0;
}
+# endif
#endif
+
+#ifdef PHP_WIN32
+ php_win32_docref2_from_error(GetLastError(), url_from, url_to TSRMLS_CC);
+#else
php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno));
+#endif
return 0;
}
Modified: php/php-src/trunk/main/main.c
===================================================================
--- php/php-src/trunk/main/main.c 2010-01-26 20:00:22 UTC (rev 294052)
+++ php/php-src/trunk/main/main.c 2010-01-26 20:04:03 UTC (rev 294053)
@@ -944,6 +944,27 @@
}
/* }}} */
+#ifdef PHP_WIN32
+#define PHP_WIN32_ERROR_MSG_BUFFER_SIZE 512
+PHPAPI void php_win32_docref2_from_error(DWORD error, const char *param1, const char *param2
TSRMLS_DC) {
+ if (error == 0) {
+ php_error_docref2(NULL TSRMLS_CC, param1, param2, E_WARNING, "%s", strerror(errno));
+ } else {
+ char buf[PHP_WIN32_ERROR_MSG_BUFFER_SIZE + 1];
+ int buf_len;
+
+ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, buf, PHP_WIN32_ERROR_MSG_BUFFER_SIZE,
NULL);
+ buf_len = strlen(buf);
+ if (buf_len >= 2) {
+ buf[buf_len - 1] = '\0';
+ buf[buf_len - 2] = '\0';
+ }
+ php_error_docref2(NULL TSRMLS_CC, param1, param2, E_WARNING, "%s (code: %lu)", (char
*)buf, error);
+ }
+}
+#undef PHP_WIN32_ERROR_MSG_BUFFER_SIZE
+#endif
+
/* {{{ php_html_puts */
PHPAPI void php_html_puts(const char *str, uint size TSRMLS_DC)
{
Modified: php/php-src/trunk/main/php.h
===================================================================
--- php/php-src/trunk/main/php.h 2010-01-26 20:00:22 UTC (rev 294052)
+++ php/php-src/trunk/main/php.h 2010-01-26 20:04:03 UTC (rev 294053)
@@ -306,6 +306,7 @@
PHPAPI void php_error_docref0(const char *docref TSRMLS_DC, int type, const char *format, ...);
PHPAPI void php_error_docref1(const char *docref TSRMLS_DC, const char *param1, int type, const
char *format, ...);
PHPAPI void php_error_docref2(const char *docref TSRMLS_DC, const char *param1, const char *param2,
int type, const char *format, ...);
+PHPAPI void php_win32_docref2_from_error(DWORD error, const char *param1, const char *param2
TSRMLS_DC);
END_EXTERN_C()
#define php_error_docref php_error_docref0
Modified: php/php-src/trunk/main/streams/plain_wrapper.c
===================================================================
--- php/php-src/trunk/main/streams/plain_wrapper.c 2010-01-26 20:00:22 UTC (rev 294052)
+++ php/php-src/trunk/main/streams/plain_wrapper.c 2010-01-26 20:04:03 UTC (rev 294053)
@@ -1057,12 +1057,13 @@
ret = VCWD_RENAME(url_from, url_to);
if (ret == -1) {
-#ifdef EXDEV
+#ifndef PHP_WIN32
+# ifdef EXDEV
if (errno == EXDEV) {
struct stat sb;
if (php_copy_file(url_from, url_to TSRMLS_CC) == SUCCESS) {
if (VCWD_STAT(url_from, &sb) == 0) {
-#if !defined(TSRM_WIN32) && !defined(NETWARE)
+# if !defined(TSRM_WIN32) && !defined(NETWARE)
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));
@@ -1081,7 +1082,7 @@
php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s",
strerror(errno));
return 0;
}
-#endif
+# endif
VCWD_UNLINK(url_from);
return 1;
}
@@ -1089,8 +1090,14 @@
php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno));
return 0;
}
+# endif
#endif
+
+#ifdef PHP_WIN32
+ php_win32_docref2_from_error(GetLastError(), url_from, url_to TSRMLS_CC);
+#else
php_error_docref2(NULL TSRMLS_CC, url_from, url_to, E_WARNING, "%s", strerror(errno));
+#endif
return 0;
}