lbarnaud Tue Apr 7 16:11:19 2009 UTC Modified files: (Branch: PHP_5_3) /php-src/sapi/cli php_cli.c Log: MFH: Fixed bug #47893 (CLI aborts on non blocking stdout) http://cvs.php.net/viewvc.cgi/php-src/sapi/cli/php_cli.c?r1=1.129.2.13.2.22.2.21&r2=1.129.2.13.2.22.2.22&diff_format=u Index: php-src/sapi/cli/php_cli.c diff -u php-src/sapi/cli/php_cli.c:1.129.2.13.2.22.2.21 php-src/sapi/cli/php_cli.c:1.129.2.13.2.22.2.22 --- php-src/sapi/cli/php_cli.c:1.129.2.13.2.22.2.21 Fri Jan 9 17:21:11 2009 +++ php-src/sapi/cli/php_cli.c Tue Apr 7 16:11:19 2009 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_cli.c,v 1.129.2.13.2.22.2.21 2009/01/09 17:21:11 iliaa Exp $ */ +/* $Id: php_cli.c,v 1.129.2.13.2.22.2.22 2009/04/07 16:11:19 lbarnaud Exp $ */ #include "php.h" #include "php_globals.h" @@ -91,6 +91,12 @@ #include "php_getopt.h" +#ifndef PHP_WIN32 +# define php_select(m, r, w, e, t) select(m, r, w, e, t) +#else +# include "win32/select.h" +#endif + PHPAPI extern char *php_ini_opened_path; PHPAPI extern char *php_ini_scanned_files; @@ -224,15 +230,38 @@ #define STDOUT_FILENO 1 #endif +static inline int sapi_cli_select(int fd) +{ + fd_set wfd, dfd; + struct timeval tv; + int ret; + + FD_ZERO(&wfd); + FD_ZERO(&dfd); + + PHP_SAFE_FD_SET(fd, &wfd); + + tv.tv_sec = FG(default_socket_timeout); + tv.tv_usec = 0; + + ret = php_select(fd+1, &dfd, &wfd, &dfd, &tv); + + return ret != -1; +} + static inline size_t sapi_cli_single_write(const char *str, uint str_length) /* {{{ */ { #ifdef PHP_WRITE_STDOUT long ret; - ret = write(STDOUT_FILENO, str, str_length); + do { + ret = write(STDOUT_FILENO, str, str_length); + } while (ret <= 0 && errno == EAGAIN && sapi_cli_select(STDOUT_FILENO)); + if (ret <= 0) { return 0; } + return ret; #else size_t ret;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php