Util-Linux Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH] chfn: Make readline prompt for each field on a separate line
@ 2020-06-27 18:58 Damien Goutte-Gattat
  2020-06-29 10:02 ` Karel Zak
  0 siblings, 1 reply; 2+ messages in thread
From: Damien Goutte-Gattat @ 2020-06-27 18:58 UTC (permalink / raw)
  To: util-linux

When readline is called to get user input, it is called without
a prompt argument. As a result, if the user does not enter anything
for a given field, then the next field is displayed on the same
line, yielding the following output:

  $ chfn
  Changing finger information for user.
  Password:
  Name []: Office []: Office Phone []: Home Phone []:

instead of the expected:

  $ chfn
  Changing finger information for user.
  Password:
  Full Name []:
  Room Number []:
  Work Phone []:
  Home Phone []:

This patch restores the expected behavior by feeding readline with
a character to display as "prompt".

Signed-off-by: Damien Goutte-Gattat <dgouttegattat@incenp.org>
---
 login-utils/chfn.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/login-utils/chfn.c b/login-utils/chfn.c
index 1b203a83e..b2aadb0d9 100644
--- a/login-utils/chfn.c
+++ b/login-utils/chfn.c
@@ -235,12 +235,13 @@ static char *ask_new_field(struct chfn_control *ctl, const char *question,
 	if (!def_val)
 		def_val = "";
 	while (true) {
-		printf("%s [%s]: ", question, def_val);
+		printf("%s [%s]:", question, def_val);
 		__fpurge(stdin);
 #ifdef HAVE_LIBREADLINE
 		rl_bind_key('\t', rl_insert);
-		if ((buf = readline(NULL)) == NULL)
+		if ((buf = readline(" ")) == NULL)
 #else
+		putchar('\n');
 		if (getline(&buf, &dummy, stdin) < 0)
 #endif
 			errx(EXIT_FAILURE, _("Aborted."));
-- 
2.27.0


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] chfn: Make readline prompt for each field on a separate line
  2020-06-27 18:58 [PATCH] chfn: Make readline prompt for each field on a separate line Damien Goutte-Gattat
@ 2020-06-29 10:02 ` Karel Zak
  0 siblings, 0 replies; 2+ messages in thread
From: Karel Zak @ 2020-06-29 10:02 UTC (permalink / raw)
  To: Damien Goutte-Gattat; +Cc: util-linux

On Sat, Jun 27, 2020 at 07:58:13PM +0100, Damien Goutte-Gattat wrote:
>   $ chfn
>   Changing finger information for user.
>   Password:
>   Name []: Office []: Office Phone []: Home Phone []:

Good catch. Applied, thanks!

> --- a/login-utils/chfn.c
> +++ b/login-utils/chfn.c
> @@ -235,12 +235,13 @@ static char *ask_new_field(struct chfn_control *ctl, const char *question,
>  	if (!def_val)
>  		def_val = "";
>  	while (true) {
> -		printf("%s [%s]: ", question, def_val);
> +		printf("%s [%s]:", question, def_val);
>  		__fpurge(stdin);
>  #ifdef HAVE_LIBREADLINE
>  		rl_bind_key('\t', rl_insert);
> -		if ((buf = readline(NULL)) == NULL)
> +		if ((buf = readline(" ")) == NULL)
>  #else
> +		putchar('\n');

I have replaced '\n with ' ', otherwise for non-readline version it
it prints extra line.

I have also applied your change also to chsh.
https://github.com/karelzak/util-linux/commit/49848aa53ae3a599277e8ceb50feda565f140b45


    Karel


-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, back to index

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-27 18:58 [PATCH] chfn: Make readline prompt for each field on a separate line Damien Goutte-Gattat
2020-06-29 10:02 ` Karel Zak

Util-Linux Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/util-linux/0 util-linux/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 util-linux util-linux/ https://lore.kernel.org/util-linux \
		util-linux@vger.kernel.org
	public-inbox-index util-linux

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.util-linux


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git