From 953ffb7b975ade8b87d23fe6241340d2e3fbe364 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Sun, 9 Jun 2024 18:51:34 +0200 Subject: [PATCH 1/2] Enable erase_empty_line in ext/readline This wasn't activated due to inconsistent availability over the editline/readline versions and variants. This now checks whether the rl_erase_empty_line variable is available in library headers and enables it based on that. On Windows this is for now still disabled due to wineditline library, which doesn't have this yet. Documentation already mentions the erase_empty_line setting: https://www.php.net/manual/en/function.readline-info.php --- ext/readline/config.m4 | 10 ++++++++++ ext/readline/readline.c | 4 ++-- ext/readline/tests/libedit_info_001.phpt | 4 ++-- ext/readline/tests/readline_info_001.phpt | 4 ++-- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/ext/readline/config.m4 b/ext/readline/config.m4 index 209f92b6e0a76..54cf52e090beb 100644 --- a/ext/readline/config.m4 +++ b/ext/readline/config.m4 @@ -75,6 +75,11 @@ if test "$PHP_READLINE" && test "$PHP_READLINE" != "no"; then -L$READLINE_DIR/$PHP_LIBDIR $PHP_READLINE_LIBS ]) + AC_CHECK_DECL([rl_erase_empty_line], + [AC_DEFINE([HAVE_ERASE_EMPTY_LINE], [1], + [Define to 1 if readline library has rl_erase_empty_line variable.])],, + [#include ]) + AC_DEFINE(HAVE_HISTORY_LIST, 1, [ ]) AC_DEFINE(HAVE_LIBREADLINE, 1, [ ]) @@ -133,6 +138,11 @@ elif test "$PHP_LIBEDIT" != "no"; then $READLINE_SHARED_LIBADD ]) + AC_CHECK_DECL([rl_erase_empty_line], + [AC_DEFINE([HAVE_ERASE_EMPTY_LINE], [1], + [Define to 1 if edit library has rl_erase_empty_line variable.])],, + [#include ]) + AC_DEFINE(HAVE_LIBEDIT, 1, [ ]) fi diff --git a/ext/readline/readline.c b/ext/readline/readline.c index 1bd5e2fd6059a..3db64149f656a 100644 --- a/ext/readline/readline.c +++ b/ext/readline/readline.c @@ -171,7 +171,7 @@ PHP_FUNCTION(readline_info) : ZSTR_CHAR(rl_completion_append_character)); add_assoc_bool(return_value,"completion_suppress_append",rl_completion_suppress_append); #endif -#if HAVE_ERASE_EMPTY_LINE +#ifdef HAVE_ERASE_EMPTY_LINE add_assoc_long(return_value,"erase_empty_line",rl_erase_empty_line); #endif #ifndef PHP_WIN32 @@ -235,7 +235,7 @@ PHP_FUNCTION(readline_info) RETVAL_INTERNED_STR( oldval == 0 ? ZSTR_EMPTY_ALLOC() : ZSTR_CHAR(oldval)); #endif -#if HAVE_ERASE_EMPTY_LINE +#ifdef HAVE_ERASE_EMPTY_LINE } else if (zend_string_equals_literal_ci(what, "erase_empty_line")) { oldval = rl_erase_empty_line; if (value) { diff --git a/ext/readline/tests/libedit_info_001.phpt b/ext/readline/tests/libedit_info_001.phpt index 284a646446575..9b0de59dfdda6 100644 --- a/ext/readline/tests/libedit_info_001.phpt +++ b/ext/readline/tests/libedit_info_001.phpt @@ -24,13 +24,13 @@ var_dump(readline_info('attempted_completion_over')); ?> --EXPECTF-- -array(6) { +array(%d) { ["line_buffer"]=> string(0) "" ["point"]=> int(0) ["end"]=> - int(0) + int%a ["library_version"]=> string(%d) "%s" ["readline_name"]=> diff --git a/ext/readline/tests/readline_info_001.phpt b/ext/readline/tests/readline_info_001.phpt index fa6ea70310226..e42a135fe5895 100644 --- a/ext/readline/tests/readline_info_001.phpt +++ b/ext/readline/tests/readline_info_001.phpt @@ -25,7 +25,7 @@ var_dump(readline_info('completion_suppress_append')); ?> --EXPECTF-- -array(13) { +array(%d) { ["line_buffer"]=> string(0) "" ["point"]=> @@ -45,7 +45,7 @@ array(13) { ["completion_append_character"]=> string(1) " " ["completion_suppress_append"]=> - bool(false) + bool%a ["library_version"]=> string(%d) "%s" ["readline_name"]=> From 41a25b66a7f44eb64a5a6a93fa92a36e53f6239a Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Mon, 10 Jun 2024 11:54:24 +0200 Subject: [PATCH 2/2] Use %A for better pattern matching --- ext/readline/tests/libedit_info_001.phpt | 2 +- ext/readline/tests/readline_info_001.phpt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/readline/tests/libedit_info_001.phpt b/ext/readline/tests/libedit_info_001.phpt index 9b0de59dfdda6..cb1ac929829ba 100644 --- a/ext/readline/tests/libedit_info_001.phpt +++ b/ext/readline/tests/libedit_info_001.phpt @@ -30,7 +30,7 @@ array(%d) { ["point"]=> int(0) ["end"]=> - int%a + int(0)%A ["library_version"]=> string(%d) "%s" ["readline_name"]=> diff --git a/ext/readline/tests/readline_info_001.phpt b/ext/readline/tests/readline_info_001.phpt index e42a135fe5895..0dcd24a05c19c 100644 --- a/ext/readline/tests/readline_info_001.phpt +++ b/ext/readline/tests/readline_info_001.phpt @@ -45,7 +45,7 @@ array(%d) { ["completion_append_character"]=> string(1) " " ["completion_suppress_append"]=> - bool%a + bool(false)%A ["library_version"]=> string(%d) "%s" ["readline_name"]=>