* POSIX compliance patch preventing exit on EOF without -e flag.
@ 2021-06-24 12:59 Ian Jones
0 siblings, 0 replies; only message in thread
From: Ian Jones @ 2021-06-24 12:59 UTC (permalink / raw)
To: util-linux
[-- Attachment #1: Type: text/plain, Size: 391 bytes --]
Hi,
I hope you don't mind my sending you this patch. I ran into a problem
with a piece of software that relies on POSIX compliant implementation
of more, that only exits on EOF with the addition of a -e flag.
Having checked the POSIX documentation for more this would appear to be
correct behavior:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/more.html
Best regards,
Ian
[-- Attachment #2: 0001-Implemented-e-and-changed-default-behavior-to-be-POS.patch --]
[-- Type: text/x-diff, Size: 3028 bytes --]
From 65ee6afeeb4940d7ea0a83dcb3c2c3d2d78f2503 Mon Sep 17 00:00:00 2001
From: Ian Jones <ian@contractcoder.biz>
Date: Thu, 24 Jun 2021 13:40:52 +0100
Subject: [PATCH] Implemented -e and changed default behavior to be POSIX
compliant:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/more.html
---
text-utils/more.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/text-utils/more.c b/text-utils/more.c
index 6299e8d82..a5faea286 100644
--- a/text-utils/more.c
+++ b/text-utils/more.c
@@ -207,6 +207,7 @@ struct more_control {
eat_newline:1, /* is newline ignored after 80 cols */
erase_input_ok:1, /* is erase input supported */
erase_previous_ok:1, /* is erase previous supported */
+ exit_on_eof:1, /* exit on EOF */
first_file:1, /* is the input file the first in list */
fold_long_lines:1, /* fold long lines */
hard_tabs:1, /* print spaces instead of '\t' */
@@ -243,6 +244,7 @@ static void __attribute__((__noreturn__)) usage(void)
printf("%s\n", _(" -l, --no-pause suppress pause after form feed"));
printf("%s\n", _(" -c, --print-over do not scroll, display text and clean line ends"));
printf("%s\n", _(" -p, --clean-print do not scroll, clean screen and display text"));
+ printf("%s\n", _(" -e, --exit-on-eof exit on EOF"));
printf("%s\n", _(" -s, --squeeze squeeze multiple blank lines into one"));
printf("%s\n", _(" -u, --plain suppress underlining and bold"));
printf("%s\n", _(" -n, --lines <number> the number of lines per screenful"));
@@ -264,6 +266,7 @@ static void argscan(struct more_control *ctl, int as_argc, char **as_argv)
{ "no-pause", no_argument, NULL, 'l' },
{ "print-over", no_argument, NULL, 'c' },
{ "clean-print", no_argument, NULL, 'p' },
+ { "exit-on-eof", no_argument, NULL, 'e' },
{ "squeeze", no_argument, NULL, 's' },
{ "plain", no_argument, NULL, 'u' },
{ "lines", required_argument, NULL, 'n' },
@@ -324,7 +327,8 @@ static void argscan(struct more_control *ctl, int as_argc, char **as_argv)
case 'n':
ctl->lines_per_screen = strtou16_or_err(optarg, _("argument error"));
break;
- case 'e': /* ignored silently to be posix compliant */
+ case 'e':
+ ctl->exit_on_eof = 1;
break;
case 'V':
print_version(EXIT_SUCCESS);
@@ -1809,7 +1813,7 @@ static void screen(struct more_control *ctl, int num_lines)
for (;;) {
while (num_lines > 0 && !ctl->is_paused) {
- if ((nchars = get_line(ctl, &length)) == EOF) {
+ if ((nchars = get_line(ctl, &length)) == EOF && ctl->exit_on_eof) {
if (ctl->clear_line_ends)
putp(ctl->clear_rest);
return;
@@ -1834,7 +1838,7 @@ static void screen(struct more_control *ctl, int num_lines)
num_lines--;
}
fflush(NULL);
- if ((c = more_getc(ctl)) == EOF) {
+ if ((c = more_getc(ctl)) == EOF && ctl->exit_on_eof) {
if (ctl->clear_line_ends)
putp(ctl->clear_rest);
return;
--
2.20.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2021-06-24 13:07 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-24 12:59 POSIX compliance patch preventing exit on EOF without -e flag Ian Jones
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.