[Midnightbsd-cvs] src [11426] sync sed
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Fri Jul 6 22:42:56 EDT 2018
Revision: 11426
http://svnweb.midnightbsd.org/src/?rev=11426
Author: laffer1
Date: 2018-07-06 22:42:55 -0400 (Fri, 06 Jul 2018)
Log Message:
-----------
sync sed
Modified Paths:
--------------
trunk/usr.bin/sed/Makefile
trunk/usr.bin/sed/POSIX
trunk/usr.bin/sed/compile.c
trunk/usr.bin/sed/defs.h
trunk/usr.bin/sed/extern.h
trunk/usr.bin/sed/main.c
trunk/usr.bin/sed/misc.c
trunk/usr.bin/sed/process.c
trunk/usr.bin/sed/sed.1
Property Changed:
----------------
trunk/usr.bin/sed/POSIX
trunk/usr.bin/sed/sed.1
Modified: trunk/usr.bin/sed/Makefile
===================================================================
--- trunk/usr.bin/sed/Makefile 2018-07-07 02:42:15 UTC (rev 11425)
+++ trunk/usr.bin/sed/Makefile 2018-07-07 02:42:55 UTC (rev 11426)
@@ -1,9 +1,16 @@
+# $MidnightBSD$
# @(#)Makefile 8.1 (Berkeley) 6/6/93
-# $MidnightBSD$
+# $FreeBSD: stable/10/usr.bin/sed/Makefile 264996 2014-04-27 01:15:10Z jmmv $
+.include <bsd.own.mk>
+
PROG= sed
SRCS= compile.c main.c misc.c process.c
WARNS?= 2
+.if ${MK_TESTS} != "no"
+SUBDIR+= tests
+.endif
+
.include <bsd.prog.mk>
Modified: trunk/usr.bin/sed/POSIX
===================================================================
--- trunk/usr.bin/sed/POSIX 2018-07-07 02:42:15 UTC (rev 11425)
+++ trunk/usr.bin/sed/POSIX 2018-07-07 02:42:55 UTC (rev 11426)
@@ -1,4 +1,5 @@
# @(#)POSIX 8.1 (Berkeley) 6/6/93
+# $FreeBSD: stable/10/usr.bin/sed/POSIX 168417 2007-04-06 08:43:30Z yar $
# $MidnightBSD$
Comments on the IEEE P1003.2 Draft 12
Property changes on: trunk/usr.bin/sed/POSIX
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Modified: trunk/usr.bin/sed/compile.c
===================================================================
--- trunk/usr.bin/sed/compile.c 2018-07-07 02:42:15 UTC (rev 11425)
+++ trunk/usr.bin/sed/compile.c 2018-07-07 02:42:55 UTC (rev 11426)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1992 Diomidis Spinellis.
* Copyright (c) 1992, 1993
@@ -32,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__MBSDID("$MidnightBSD$");
+__FBSDID("$FreeBSD: stable/10/usr.bin/sed/compile.c 293290 2016-01-07 00:40:51Z bdrewery $");
#ifndef lint
static const char sccsid[] = "@(#)compile.c 8.1 (Berkeley) 6/6/93";
@@ -364,7 +365,7 @@
}
/*
- * Get a delimited string. P points to the delimeter of the string; d points
+ * Get a delimited string. P points to the delimiter of the string; d points
* to a buffer area. Newline and delimiter escapes are processed; other
* escapes are ignored.
*
@@ -558,7 +559,7 @@
{
int gn; /* True if we have seen g or n */
unsigned long nval;
- char wfile[_POSIX2_LINE_MAX + 1], *q;
+ char wfile[_POSIX2_LINE_MAX + 1], *q, *eq;
s->n = 1; /* Default */
s->p = 0;
@@ -582,6 +583,7 @@
case 'p':
s->p = 1;
break;
+ case 'i':
case 'I':
s->icase = 1;
break;
@@ -610,9 +612,12 @@
#endif
EATSPACE();
q = wfile;
+ eq = wfile + sizeof(wfile) - 1;
while (*p) {
if (*p == '\n')
break;
+ if (q >= eq)
+ err(1, "wfile too long");
*q++ = *p++;
}
*q = '\0';
Modified: trunk/usr.bin/sed/defs.h
===================================================================
--- trunk/usr.bin/sed/defs.h 2018-07-07 02:42:15 UTC (rev 11425)
+++ trunk/usr.bin/sed/defs.h 2018-07-07 02:42:55 UTC (rev 11426)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1992 Diomidis Spinellis.
* Copyright (c) 1992, 1993
@@ -31,7 +32,7 @@
* SUCH DAMAGE.
*
* @(#)defs.h 8.1 (Berkeley) 6/6/93
- * $MidnightBSD$
+ * $FreeBSD: stable/10/usr.bin/sed/defs.h 192732 2009-05-25 06:45:33Z brian $
*/
/*
Modified: trunk/usr.bin/sed/extern.h
===================================================================
--- trunk/usr.bin/sed/extern.h 2018-07-07 02:42:15 UTC (rev 11425)
+++ trunk/usr.bin/sed/extern.h 2018-07-07 02:42:55 UTC (rev 11426)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1992 Diomidis Spinellis.
* Copyright (c) 1992, 1993
@@ -31,7 +32,7 @@
* SUCH DAMAGE.
*
* @(#)extern.h 8.1 (Berkeley) 6/6/93
- * $MidnightBSD$
+ * $FreeBSD: stable/10/usr.bin/sed/extern.h 170608 2007-06-12 12:05:24Z yar $
*/
extern struct s_command *prog;
Modified: trunk/usr.bin/sed/main.c
===================================================================
--- trunk/usr.bin/sed/main.c 2018-07-07 02:42:15 UTC (rev 11425)
+++ trunk/usr.bin/sed/main.c 2018-07-07 02:42:55 UTC (rev 11426)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2013 Johann 'Myrkraverk' Oskarsson.
* Copyright (c) 1992 Diomidis Spinellis.
@@ -33,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__MBSDID("$MidnightBSD: src/usr.bin/sed/main.c,v 1.2 2012/11/23 01:13:53 laffer1 Exp $");
+__FBSDID("$FreeBSD: stable/10/usr.bin/sed/main.c 316442 2017-04-03 06:14:23Z delphij $");
#ifndef lint
static const char copyright[] =
@@ -132,7 +133,7 @@
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':
@@ -162,12 +163,16 @@
ispan = 0; /* don't span across input files */
break;
case 'l':
- if(setlinebuf(stdout) != 0)
- warnx("setlinebuf() failed");
+ if(setvbuf(stdout, NULL, _IOLBF, 0) != 0)
+ warnx("setting line buffered output failed");
break;
case 'n':
nflag = 1;
break;
+ case 'u':
+ if(setvbuf(stdout, NULL, _IONBF, 0) != 0)
+ warnx("setting unbuffered output failed");
+ break;
default:
case '?':
usage();
@@ -199,9 +204,10 @@
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 extension] [file ...]\n"
+ "\t%s [-Ealnu] [-i extension] [-e script] ... [-f script_file]"
+ " ... [file ...]\n", getprogname(), getprogname());
exit(1);
}
@@ -386,7 +392,7 @@
if (inplace != NULL) {
if (lstat(fname, &sb) != 0)
err(1, "%s", fname);
- if (!(sb.st_mode & S_IFREG))
+ if (!S_ISREG(sb.st_mode))
errx(1, "%s: %s %s", fname,
"in-place editing only",
"works for regular files");
@@ -404,6 +410,8 @@
if (len >= sizeof(tmpfname))
errx(1, "%s: name too long", fname);
unlink(tmpfname);
+ if (outfile != NULL && outfile != stdout)
+ fclose(outfile);
if ((outfile = fopen(tmpfname, "w")) == NULL)
err(1, "%s", fname);
fchown(fileno(outfile), sb.st_uid, sb.st_gid);
Modified: trunk/usr.bin/sed/misc.c
===================================================================
--- trunk/usr.bin/sed/misc.c 2018-07-07 02:42:15 UTC (rev 11425)
+++ trunk/usr.bin/sed/misc.c 2018-07-07 02:42:55 UTC (rev 11426)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1992 Diomidis Spinellis.
* Copyright (c) 1992, 1993
@@ -32,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__MBSDID("$MidnightBSD$");
+__FBSDID("$FreeBSD: stable/10/usr.bin/sed/misc.c 200462 2009-12-13 03:14:06Z delphij $");
#ifndef lint
static const char sccsid[] = "@(#)misc.c 8.1 (Berkeley) 6/6/93";
Modified: trunk/usr.bin/sed/process.c
===================================================================
--- trunk/usr.bin/sed/process.c 2018-07-07 02:42:15 UTC (rev 11425)
+++ trunk/usr.bin/sed/process.c 2018-07-07 02:42:55 UTC (rev 11426)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1992 Diomidis Spinellis.
* Copyright (c) 1992, 1993, 1994
@@ -32,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__MBSDID("$MidnightBSD$");
+__FBSDID("$FreeBSD: stable/10/usr.bin/sed/process.c 303065 2016-07-20 04:49:01Z pfg $");
#ifndef lint
static const char sccsid[] = "@(#)process.c 8.6 (Berkeley) 4/20/94";
@@ -66,11 +67,12 @@
#define hs HS.space
#define hsl HS.len
-static __inline int applies(struct s_command *);
+static inline int applies(struct s_command *);
static void do_tr(struct s_tr *);
static void flush_appends(void);
static void lputs(char *, size_t);
-static __inline int regexec_e(regex_t *, const char *, int, int, size_t);
+static int regexec_e(regex_t *, const char *, int, int, size_t,
+ size_t);
static void regsub(SPACE *, char *, char *);
static int substitute(struct s_command *);
@@ -271,7 +273,7 @@
* (lastline, linenumber, ps).
*/
#define MATCH(a) \
- ((a)->type == AT_RE ? regexec_e((a)->u.r, ps, 0, 1, psl) : \
+ ((a)->type == AT_RE ? regexec_e((a)->u.r, ps, 0, 1, 0, psl) : \
(a)->type == AT_LINE ? linenum == (a)->u.l : lastline())
/*
@@ -278,7 +280,7 @@
* Return TRUE if the command applies to the current line. Sets the start
* line for process ranges. Interprets the non-select (``!'') flag.
*/
-static __inline int
+static inline int
applies(struct s_command *cp)
{
int r;
@@ -288,25 +290,33 @@
r = 1;
else if (cp->a2)
if (cp->startline > 0) {
- if (MATCH(cp->a2)) {
- cp->startline = 0;
- lastaddr = 1;
- r = 1;
- } else if (linenum - cp->startline <= cp->a2->u.l)
- r = 1;
- else if ((cp->a2->type == AT_LINE &&
- linenum > cp->a2->u.l) ||
- (cp->a2->type == AT_RELLINE &&
- linenum - cp->startline > cp->a2->u.l)) {
- /*
- * We missed the 2nd address due to a branch,
- * so just close the range and return false.
- */
- cp->startline = 0;
- r = 0;
- } else
- r = 1;
- } else if (MATCH(cp->a1)) {
+ switch (cp->a2->type) {
+ case AT_RELLINE:
+ if (linenum - cp->startline <= cp->a2->u.l)
+ r = 1;
+ else {
+ cp->startline = 0;
+ r = 0;
+ }
+ break;
+ default:
+ if (MATCH(cp->a2)) {
+ cp->startline = 0;
+ lastaddr = 1;
+ r = 1;
+ } else if (cp->a2->type == AT_LINE &&
+ linenum > cp->a2->u.l) {
+ /*
+ * We missed the 2nd address due to a
+ * branch, so just close the range and
+ * return false.
+ */
+ cp->startline = 0;
+ r = 0;
+ } else
+ r = 1;
+ }
+ } else if (cp->a1 && MATCH(cp->a1)) {
/*
* If the second address is a number less than or
* equal to the line number first selected, only
@@ -361,8 +371,9 @@
{
SPACE tspace;
regex_t *re;
- regoff_t re_off, slen;
+ regoff_t slen;
int lastempty, n;
+ size_t le = 0;
char *s;
s = ps;
@@ -374,7 +385,7 @@
linenum, fname, cp->u.s->maxbref);
}
}
- if (!regexec_e(re, s, 0, 0, psl))
+ if (!regexec_e(re, ps, 0, 0, 0, psl))
return (0);
SS.len = 0; /* Clean substitute space. */
@@ -382,61 +393,60 @@
n = cp->u.s->n;
lastempty = 1;
- switch (n) {
- case 0: /* Global */
- do {
- if (lastempty || match[0].rm_so != match[0].rm_eo) {
- /* Locate start of replaced string. */
- re_off = match[0].rm_so;
- /* Copy leading retained string. */
- cspace(&SS, s, re_off, APPEND);
- /* Add in regular expression. */
- regsub(&SS, s, cp->u.s->new);
- }
+ do {
+ /* Copy the leading retained string. */
+ if (n <= 1 && (match[0].rm_so > le))
+ cspace(&SS, s, match[0].rm_so - le, APPEND);
- /* Move past this match. */
- if (match[0].rm_so != match[0].rm_eo) {
- s += match[0].rm_eo;
- slen -= match[0].rm_eo;
- lastempty = 0;
+ /* Skip zero-length matches right after other matches. */
+ if (lastempty || (match[0].rm_so - le) ||
+ match[0].rm_so != match[0].rm_eo) {
+ if (n <= 1) {
+ /* Want this match: append replacement. */
+ regsub(&SS, ps, cp->u.s->new);
+ if (n == 1)
+ n = -1;
} else {
- if (match[0].rm_so < slen)
- cspace(&SS, s + match[0].rm_so, 1,
+ /* Want a later match: append original. */
+ if (match[0].rm_eo - le)
+ cspace(&SS, s, match[0].rm_eo - le,
APPEND);
- s += match[0].rm_so + 1;
- slen -= match[0].rm_so + 1;
- lastempty = 1;
+ n--;
}
- } while (slen >= 0 && regexec_e(re, s, REG_NOTBOL, 0, slen));
- /* Copy trailing retained string. */
- if (slen > 0)
- cspace(&SS, s, slen, APPEND);
- break;
- default: /* Nth occurrence */
- while (--n) {
- if (match[0].rm_eo == match[0].rm_so)
- match[0].rm_eo = match[0].rm_so + 1;
- s += match[0].rm_eo;
- slen -= match[0].rm_eo;
- if (slen < 0)
- return (0);
- if (!regexec_e(re, s, REG_NOTBOL, 0, slen))
- return (0);
}
- /* FALLTHROUGH */
- case 1: /* 1st occurrence */
- /* Locate start of replaced string. */
- re_off = match[0].rm_so + (s - ps);
- /* Copy leading retained string. */
- cspace(&SS, ps, re_off, APPEND);
- /* Add in regular expression. */
- regsub(&SS, s, cp->u.s->new);
- /* Copy trailing retained string. */
- s += match[0].rm_eo;
- slen -= match[0].rm_eo;
+
+ /* Move past this match. */
+ s = ps + match[0].rm_eo;
+ slen = psl - match[0].rm_eo;
+ le = match[0].rm_eo;
+
+ /*
+ * After a zero-length match, advance one byte,
+ * and at the end of the line, terminate.
+ */
+ if (match[0].rm_so == match[0].rm_eo) {
+ if (*s == '\0' || *s == '\n')
+ slen = -1;
+ else
+ slen--;
+ if (*s != '\0') {
+ cspace(&SS, s++, 1, APPEND);
+ le++;
+ }
+ lastempty = 1;
+ } else
+ lastempty = 0;
+
+ } while (n >= 0 && slen >= 0 &&
+ regexec_e(re, ps, REG_NOTBOL, 0, le, psl));
+
+ /* Did not find the requested number of matches. */
+ if (n > 0)
+ return (0);
+
+ /* Copy the trailing retained string. */
+ if (slen > 0)
cspace(&SS, s, slen, APPEND);
- break;
- }
/*
* Swap the substitute space and the pattern space, and make sure
@@ -636,9 +646,9 @@
errx(1, "%s: %s", outfname, strerror(errno ? errno : EIO));
}
-static __inline int
+static int
regexec_e(regex_t *preg, const char *string, int eflags, int nomatch,
- size_t slen)
+ size_t start, size_t stop)
{
int eval;
@@ -649,8 +659,8 @@
defpreg = preg;
/* Set anchors */
- match[0].rm_so = 0;
- match[0].rm_eo = slen;
+ match[0].rm_so = start;
+ match[0].rm_eo = stop;
eval = regexec(defpreg, string,
nomatch ? 0 : maxnsub + 1, match, eflags | REG_STARTEND);
Modified: trunk/usr.bin/sed/sed.1
===================================================================
--- trunk/usr.bin/sed/sed.1 2018-07-07 02:42:15 UTC (rev 11425)
+++ trunk/usr.bin/sed/sed.1 2018-07-07 02:42:55 UTC (rev 11426)
@@ -1,3 +1,4 @@
+.\" $MidnightBSD$
.\" Copyright (c) 1992, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
@@ -29,9 +30,9 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)sed.1 8.2 (Berkeley) 12/30/93
-.\" $MidnightBSD$
+.\" $FreeBSD: stable/10/usr.bin/sed/sed.1 300553 2016-05-24 02:57:13Z pfg $
.\"
-.Dd May 24, 2009
+.Dd May 10, 2016
.Dt SED 1
.Os
.Sh NAME
@@ -39,7 +40,7 @@
.Nd stream editor
.Sh SYNOPSIS
.Nm
-.Op Fl Ealnr
+.Op Fl Ealnru
.Ar command
.Op Ar
.Nm
@@ -148,6 +149,8 @@
Same as
.Fl E
for compatibility with GNU sed.
+.It Fl u
+Make output unbuffered.
.El
.Pp
The form of a
@@ -507,7 +510,7 @@
if a replacement was made.
If the replacement string is identical to that which it replaces, it
is still considered to have been a replacement.
-.It I
+.It i or I
Match the regular expression in a case-insensitive way.
.El
.Pp
Property changes on: trunk/usr.bin/sed/sed.1
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
More information about the Midnightbsd-cvs
mailing list