From fc39ce9ee1b6fa1dc60f33487a442d5c89bbd789 Mon Sep 17 00:00:00 2001 From: "Pedro F. Giffuni" Date: Fri, 20 Jun 2014 21:41:30 +0000 Subject: [PATCH] Add -u (unbuffered output) after GNU sed. Obtained from: NetBSD MFC after: 1 week --- usr.bin/sed/main.c | 19 +++++++++++++++---- usr.bin/sed/sed.1 | 6 ++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/usr.bin/sed/main.c b/usr.bin/sed/main.c index 2062c680b3b..4724e2530e5 100644 --- a/usr.bin/sed/main.c +++ b/usr.bin/sed/main.c @@ -132,7 +132,7 @@ main(int argc, char *argv[]) fflag = 0; inplace = NULL; - while ((c = getopt(argc, argv, "EI:ae:f:i:lnr")) != -1) + while ((c = getopt(argc, argv, "EI:ae:f:i:lnru")) != -1) switch (c) { case 'r': /* Gnu sed compat */ case 'E': @@ -168,6 +168,16 @@ main(int argc, char *argv[]) case 'n': nflag = 1; break; + case 'u': +#ifdef _IONBF + c = setvbuf(stdout, NULL, _IONBF, 0); +#else + c = -1; + errno = EOPNOTSUPP; +#endif + if (c) + warnx("setting unbuffered output failed"); + break; default: case '?': usage(); @@ -199,9 +209,10 @@ main(int argc, char *argv[]) static void usage(void) { - (void)fprintf(stderr, "%s\n%s\n", - "usage: sed script [-Ealn] [-i extension] [file ...]", - " sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]"); + (void)fprintf(stderr, + "usage: %s script [-Ealnru] [-i[]] [file ...]\n" + "\t%s [-Ealnu] [-i[]] [-e script] ... [-f script_file]" + " ... [file ...]\n", getprogname(), getprogname()); exit(1); } diff --git a/usr.bin/sed/sed.1 b/usr.bin/sed/sed.1 index cf274960129..277535efdb4 100644 --- a/usr.bin/sed/sed.1 +++ b/usr.bin/sed/sed.1 @@ -31,7 +31,7 @@ .\" @(#)sed.1 8.2 (Berkeley) 12/30/93 .\" $FreeBSD$ .\" -.Dd December 9, 2013 +.Dd June 20, 2014 .Dt SED 1 .Os .Sh NAME @@ -39,7 +39,7 @@ .Nd stream editor .Sh SYNOPSIS .Nm -.Op Fl Ealnr +.Op Fl Ealnru .Ar command .Op Ar .Nm @@ -148,6 +148,8 @@ option suppresses this behavior. Same as .Fl E for compatibility with GNU sed. +.It Fl u +Make output unbuffered. .El .Pp The form of a