Browse Source

- Fix readline loop-condition

- Fix cli_is_valid_code detection
PHP-5.1
Johannes Schlüter 22 years ago
parent
commit
bb6f4dfc7d
  1. 3
      sapi/cli/php_cli.c
  2. 9
      sapi/cli/php_cli_readline.c

3
sapi/cli/php_cli.c

@ -978,12 +978,11 @@ int main(int argc, char *argv[])
history_file = tilde_expand("~/.php_history");
rl_attempted_completion_function = cli_code_completion;
/*rl_completion_append_character = '(';*/
rl_special_prefixes = "$";
read_history(history_file);
EG(exit_status) = 0;
while ((line = readline(pos ? prompt : "php > ")) != NULL) {
while ((line = readline(prompt)) != NULL) {
if (strcmp(line, "exit") == 0 || strcmp(line, "quit") == 0) {
free(line);
break;

9
sapi/cli/php_cli_readline.c

@ -73,7 +73,7 @@ typedef enum {
int cli_is_valid_code(char *code, int len, char **prompt TSRMLS_DC)
{
int valid_end = 1;
int valid_end = 1, last_valid_end;
int brackets_count = 0;
int brace_count = 0;
int i;
@ -109,6 +109,7 @@ int cli_is_valid_code(char *code, int len, char **prompt TSRMLS_DC)
valid_end = brace_count == 0 && brackets_count == 0;
break;
case ' ':
case '\r':
case '\n':
case '\t':
break;
@ -118,6 +119,9 @@ int cli_is_valid_code(char *code, int len, char **prompt TSRMLS_DC)
case '"':
code_type = dstring;
break;
case '#':
code_type = comment_line;
break;
case '/':
if (code[i+1] == '/') {
i++;
@ -125,6 +129,8 @@ int cli_is_valid_code(char *code, int len, char **prompt TSRMLS_DC)
break;
}
if (code[i+1] == '*') {
last_valid_end = valid_end;
valid_end = 0;
code_type = comment_block;
i++;
break;
@ -190,6 +196,7 @@ int cli_is_valid_code(char *code, int len, char **prompt TSRMLS_DC)
case comment_block:
if (code[i-1] == '*' && code[i] == '/') {
code_type = body;
valid_end = last_valid_end;
}
break;
case heredoc_start:

Loading…
Cancel
Save