From: Leonid Znamenok Date: Thu, 9 Apr 2026 12:39:40 +0000 (+0400) Subject: fdisk: fix trailing whitespace in user reply from readline completion X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=77e401e5efdfe49d801bfa9ed4b7708e72e34cb7;p=thirdparty%2Futil-linux.git fdisk: fix trailing whitespace in user reply from readline completion Readline appends a space after tab-completed filenames, which becomes part of the string returned by get_user_reply(). This causes "No such file or directory" when loading a script file via the 'I' command. Addresses: https://github.com/util-linux/util-linux/issues/2838 --- diff --git a/disk-utils/fdisk.c b/disk-utils/fdisk.c index d46a468e8..93f8948fa 100644 --- a/disk-utils/fdisk.c +++ b/disk-utils/fdisk.c @@ -111,7 +111,6 @@ int get_user_reply(const char *prompt, char *buf, size_t bufsz) struct pollfd fds[] = { { .fd = fileno(stdin), .events = POLLIN } }; - size_t sz; int ret = 0; DBG(ASK, ul_debug("asking for user reply %s", is_interactive ? "[interactive]" : "")); @@ -153,7 +152,7 @@ int get_user_reply(const char *prompt, char *buf, size_t bufsz) /* read input and copy to buf[] */ rl_callback_read_char(); if (!reply_running && reply_line) { - sz = strlen(reply_line); + size_t sz = strlen(reply_line); if (sz == 0) buf[sz++] = '\n'; else @@ -181,9 +180,8 @@ int get_user_reply(const char *prompt, char *buf, size_t bufsz) /* * cleanup the reply */ - sz = ltrim_whitespace((unsigned char *) buf); - if (sz && *(buf + sz - 1) == '\n') - *(buf + sz - 1) = '\0'; + rtrim_whitespace((unsigned char *) buf); + ltrim_whitespace((unsigned char *) buf); done: #ifdef HAVE_LIBREADLINE