From d077d0ac785acd35b8eafc81df1f5876edf502f2 Mon Sep 17 00:00:00 2001 From: martijn Date: Fri, 8 Dec 2017 18:41:59 +0000 Subject: [PATCH] Make the r command filename obligatory, similar to what FreeBSD and NetBSD do for several years. While here make corresponding error message for missing read and write file consistent between commands/flag, and shrink the the code of the w flag of the s command by making it use the same code as the w command. Prompted by a larger diff by kshe59 zoho eu OK millert@ --- usr.bin/sed/compile.c | 32 +++++++++----------------------- usr.bin/sed/sed.1 | 6 +++--- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/usr.bin/sed/compile.c b/usr.bin/sed/compile.c index 0671805865e..f994049ac1b 100644 --- a/usr.bin/sed/compile.c +++ b/usr.bin/sed/compile.c @@ -1,4 +1,4 @@ -/* $OpenBSD: compile.c,v 1.42 2017/08/01 18:05:53 martijn Exp $ */ +/* $OpenBSD: compile.c,v 1.43 2017/12/08 18:41:59 martijn Exp $ */ /*- * Copyright (c) 1992 Diomidis Spinellis. @@ -277,6 +277,8 @@ nonsel: /* Now parse the command */ pledge_rpath = 1; p++; EATSPACE(); + if (*p == '\0') + error(COMPILE, "filename expected"); cmd->t = duptoeol(p, "read command", NULL); break; case BRANCH: /* b t */ @@ -539,7 +541,6 @@ compile_flags(char *p, struct s_subst *s) { int gn; /* True if we have seen g or n */ long l; - char wfile[PATH_MAX], *q, *eq; s->n = 1; /* Default */ s->p = 0; @@ -577,32 +578,17 @@ compile_flags(char *p, struct s_subst *s) continue; case 'w': p++; -#ifdef HISTORIC_PRACTICE - if (*p != ' ') { - warning("space missing before w wfile"); - return (p); - } -#endif EATSPACE(); - q = wfile; - eq = wfile + sizeof(wfile) - 1; - while (*p) { - if (*p == '\n') - break; - if (q >= eq) - error(COMPILE, "wfile too long"); - *q++ = *p++; - } - *q = '\0'; - if (q == wfile) - error(COMPILE, "no wfile specified"); - s->wfile = strdup(wfile); + if (*p == '\0') + error(COMPILE, "filename expected"); + s->wfile = duptoeol(p, "s command w flag", NULL); + *p = '\0'; if (aflag) pledge_wpath = 1; - else if ((s->wfd = open(wfile, + else if ((s->wfd = open(s->wfile, O_WRONLY|O_APPEND|O_CREAT|O_TRUNC, DEFFILEMODE)) == -1) - error(FATAL, "%s: %s", wfile, strerror(errno)); + error(FATAL, "%s: %s", s->wfile, strerror(errno)); return (p); default: error(COMPILE, diff --git a/usr.bin/sed/sed.1 b/usr.bin/sed/sed.1 index aa765281bba..5e91484f217 100644 --- a/usr.bin/sed/sed.1 +++ b/usr.bin/sed/sed.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: sed.1,v 1.51 2017/12/07 09:52:26 martijn Exp $ +.\" $OpenBSD: sed.1,v 1.52 2017/12/08 18:41:59 martijn Exp $ .\" .\" Copyright (c) 1992, 1993 .\" The Regents of the University of California. All rights reserved. @@ -32,7 +32,7 @@ .\" .\" from: @(#)sed.1 8.2 (Berkeley) 12/30/93 .\" -.Dd $Mdocdate: December 7 2017 $ +.Dd $Mdocdate: December 8 2017 $ .Dt SED 1 .Os .Sh NAME @@ -255,7 +255,7 @@ as well as the flag to the .Ic s function, -take an optional +take a .Ar file parameter, which should be separated from the function or flag by whitespace. -- 2.20.1