/* this must be forced */
CG(unclean_shutdown) = 0;
} else {
- /* local client quit console */
- CG(unclean_shutdown) = 0;
-
- goto phpdbg_out;
+ /* local consoles cannot disconnect, ignore EOF */
+ PHPDBG_G(flags) &= ~PHPDBG_IS_DISCONNECTED;
}
}
#endif
phpdbg_out:
#ifndef _WIN32
- if (PHPDBG_G(flags) & PHPDBG_IS_DISCONNECTED) {
+ if ((PHPDBG_G(flags) & PHPDBG_IS_DISCONNECTED)) {
PHPDBG_G(flags) &= ~PHPDBG_IS_DISCONNECTED;
goto phpdbg_interact;
}
if (cleaning || remote) {
goto phpdbg_main;
}
-
+
#ifdef ZTS
/* bugggy */
/* tsrm_shutdown(); */
}
if (buffered == NULL) {
-#ifndef HAVE_LIBREADLINE
- char buf[PHPDBG_MAX_CMD];
- if ((!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE) && !phpdbg_write(phpdbg_get_prompt(TSRMLS_C))) ||
- !fgets(buf, PHPDBG_MAX_CMD, PHPDBG_G(io)[PHPDBG_STDIN])) {
- /* the user has gone away */
- phpdbg_error("Failed to read console!");
+disconnect:
+ if (0) {
PHPDBG_G(flags) |= (PHPDBG_IS_QUITTING|PHPDBG_IS_DISCONNECTED);
zend_bailout();
return NULL;
}
+#ifndef HAVE_LIBREADLINE
+ char buf[PHPDBG_MAX_CMD];
+ if (!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
+ if (!phpdbg_write(phpdbg_get_prompt(TSRMLS_CC))) {
+ goto disconnect;
+ }
+ }
+
+ /* note: EOF is ignored */
+readline:
+ if (!fgets(buf, PHPDBG_MAX_CMD, PHPDBG_G(io)[PHPDBG_STDIN])) {
+ /* the user has gone away */
+ if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
+ goto disconnect;
+ } else goto readline;
+ }
+
cmd = buf;
#else
+ /* note: EOF makes readline write prompt again in local console mode */
+readline:
if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
char buf[PHPDBG_MAX_CMD];
if (fgets(buf, PHPDBG_MAX_CMD, PHPDBG_G(io)[PHPDBG_STDIN])) {
cmd = buf;
- } else cmd = NULL;
+ } else goto disconnect;
} else cmd = readline(phpdbg_get_prompt(TSRMLS_C));
if (!cmd) {
- /* the user has gone away */
- phpdbg_error("Failed to read console!");
- PHPDBG_G(flags) |= (PHPDBG_IS_QUITTING|PHPDBG_IS_DISCONNECTED);
- zend_bailout();
- return NULL;
+ goto readline;
}
if (!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {