fix #46 ignore EOF

This commit is contained in:
cyanogenmod 2014-01-13 08:11:09 +00:00
parent 7d51e47eda
commit 333264fdb7
2 changed files with 27 additions and 18 deletions

View file

@ -1257,10 +1257,8 @@ phpdbg_interact:
/* this must be forced */ /* this must be forced */
CG(unclean_shutdown) = 0; CG(unclean_shutdown) = 0;
} else { } else {
/* local client quit console */ /* local consoles cannot disconnect, ignore EOF */
CG(unclean_shutdown) = 0; PHPDBG_G(flags) &= ~PHPDBG_IS_DISCONNECTED;
goto phpdbg_out;
} }
} }
#endif #endif
@ -1275,7 +1273,7 @@ phpdbg_interact:
phpdbg_out: phpdbg_out:
#ifndef _WIN32 #ifndef _WIN32
if (PHPDBG_G(flags) & PHPDBG_IS_DISCONNECTED) { if ((PHPDBG_G(flags) & PHPDBG_IS_DISCONNECTED)) {
PHPDBG_G(flags) &= ~PHPDBG_IS_DISCONNECTED; PHPDBG_G(flags) &= ~PHPDBG_IS_DISCONNECTED;
goto phpdbg_interact; goto phpdbg_interact;
} }

View file

@ -467,32 +467,43 @@ PHPDBG_API phpdbg_input_t *phpdbg_read_input(char *buffered TSRMLS_DC) /* {{{ */
} }
if (buffered == NULL) { if (buffered == NULL) {
#ifndef HAVE_LIBREADLINE disconnect:
char buf[PHPDBG_MAX_CMD]; if (0) {
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!");
PHPDBG_G(flags) |= (PHPDBG_IS_QUITTING|PHPDBG_IS_DISCONNECTED); PHPDBG_G(flags) |= (PHPDBG_IS_QUITTING|PHPDBG_IS_DISCONNECTED);
zend_bailout(); zend_bailout();
return NULL; 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; cmd = buf;
#else #else
/* note: EOF makes readline write prompt again in local console mode */
readline:
if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) { if ((PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
char buf[PHPDBG_MAX_CMD]; char buf[PHPDBG_MAX_CMD];
if (fgets(buf, PHPDBG_MAX_CMD, PHPDBG_G(io)[PHPDBG_STDIN])) { if (fgets(buf, PHPDBG_MAX_CMD, PHPDBG_G(io)[PHPDBG_STDIN])) {
cmd = buf; cmd = buf;
} else cmd = NULL; } else goto disconnect;
} else cmd = readline(phpdbg_get_prompt(TSRMLS_C)); } else cmd = readline(phpdbg_get_prompt(TSRMLS_C));
if (!cmd) { if (!cmd) {
/* the user has gone away */ goto readline;
phpdbg_error("Failed to read console!");
PHPDBG_G(flags) |= (PHPDBG_IS_QUITTING|PHPDBG_IS_DISCONNECTED);
zend_bailout();
return NULL;
} }
if (!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) { if (!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {