summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authorLuiz Otavio O Souza <luiz@netgate.com>2016-06-30 13:24:42 -0500
committerLuiz Otavio O Souza <luiz@netgate.com>2016-06-30 13:24:42 -0500
commit9d5ffb47ff56597309eb2939cc97b1df4d616797 (patch)
treeb34fd92dce8092bb4cb58c875caabd93e1fece39 /usr.bin
parent1fc6b0207cc2f3cce33817706603caa41a9de24d (diff)
parent13295f52fb5936b237a994e75311fe18612c73c4 (diff)
downloadFreeBSD-src-9d5ffb47ff56597309eb2939cc97b1df4d616797.zip
FreeBSD-src-9d5ffb47ff56597309eb2939cc97b1df4d616797.tar.gz
Merge remote-tracking branch 'origin/stable/10' into devel
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/bsdcat/Makefile2
-rw-r--r--usr.bin/cpio/Makefile2
-rw-r--r--usr.bin/cpio/tests/Makefile1
-rw-r--r--usr.bin/sed/process.c39
-rw-r--r--usr.bin/tar/Makefile2
-rw-r--r--usr.bin/tar/tests/Makefile1
6 files changed, 28 insertions, 19 deletions
diff --git a/usr.bin/bsdcat/Makefile b/usr.bin/bsdcat/Makefile
index edbb212..93c1b71 100644
--- a/usr.bin/bsdcat/Makefile
+++ b/usr.bin/bsdcat/Makefile
@@ -6,7 +6,7 @@ _LIBARCHIVEDIR= ${.CURDIR}/../../contrib/libarchive
_LIBARCHIVECONFDIR= ${.CURDIR}/../../lib/libarchive
PROG= bsdcat
-BSDCAT_VERSION_STRING= 3.2.0
+BSDCAT_VERSION_STRING= 3.2.1
.PATH: ${_LIBARCHIVEDIR}/cat
SRCS= bsdcat.c cmdline.c
diff --git a/usr.bin/cpio/Makefile b/usr.bin/cpio/Makefile
index ed259f2..0283c5f 100644
--- a/usr.bin/cpio/Makefile
+++ b/usr.bin/cpio/Makefile
@@ -6,7 +6,7 @@ LIBARCHIVEDIR= ${.CURDIR}/../../contrib/libarchive
LIBARCHIVECONFDIR= ${.CURDIR}/../../lib/libarchive
PROG= bsdcpio
-BSDCPIO_VERSION_STRING= 3.2.0
+BSDCPIO_VERSION_STRING= 3.2.1
.PATH: ${LIBARCHIVEDIR}/cpio
SRCS= cpio.c cmdline.c
diff --git a/usr.bin/cpio/tests/Makefile b/usr.bin/cpio/tests/Makefile
index 3159cf0..38e7f20 100644
--- a/usr.bin/cpio/tests/Makefile
+++ b/usr.bin/cpio/tests/Makefile
@@ -45,6 +45,7 @@ TESTS_SRCS= \
test_extract_cpio_xz.c \
test_format_newc.c \
test_gcpio_compat.c \
+ test_missing_file.c \
test_option_0.c \
test_option_B_upper.c \
test_option_C_upper.c \
diff --git a/usr.bin/sed/process.c b/usr.bin/sed/process.c
index 950e30d..891a7ce 100644
--- a/usr.bin/sed/process.c
+++ b/usr.bin/sed/process.c
@@ -70,7 +70,8 @@ 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 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 +272,7 @@ new: if (!nflag && !pd)
* (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())
/*
@@ -371,6 +372,7 @@ substitute(struct s_command *cp)
regex_t *re;
regoff_t slen;
int lastempty, n;
+ size_t le = 0;
char *s;
s = ps;
@@ -382,7 +384,7 @@ substitute(struct s_command *cp)
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. */
@@ -392,28 +394,30 @@ substitute(struct s_command *cp)
do {
/* Copy the leading retained string. */
- if (n <= 1 && match[0].rm_so)
- cspace(&SS, s, match[0].rm_so, APPEND);
+ if (n <= 1 && (match[0].rm_so > le))
+ cspace(&SS, s, match[0].rm_so - le, APPEND);
/* Skip zero-length matches right after other matches. */
- if (lastempty || match[0].rm_so ||
+ 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, s, cp->u.s->new);
+ regsub(&SS, ps, cp->u.s->new);
if (n == 1)
n = -1;
} else {
/* Want a later match: append original. */
- if (match[0].rm_eo)
- cspace(&SS, s, match[0].rm_eo, APPEND);
+ if (match[0].rm_eo - le)
+ cspace(&SS, s, match[0].rm_eo - le,
+ APPEND);
n--;
}
}
/* Move past this match. */
- s += match[0].rm_eo;
- slen -= match[0].rm_eo;
+ 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,
@@ -424,13 +428,16 @@ substitute(struct s_command *cp)
slen = -1;
else
slen--;
- if (*s != '\0')
+ if (*s != '\0') {
cspace(&SS, s++, 1, APPEND);
+ le++;
+ }
lastempty = 1;
} else
lastempty = 0;
- } while (n >= 0 && slen >= 0 && regexec_e(re, s, REG_NOTBOL, 0, slen));
+ } while (n >= 0 && slen >= 0 &&
+ regexec_e(re, ps, REG_NOTBOL, 0, le, psl));
/* Did not find the requested number of matches. */
if (n > 1)
@@ -640,7 +647,7 @@ lputs(char *s, size_t len)
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;
@@ -651,8 +658,8 @@ regexec_e(regex_t *preg, const char *string, int eflags, int nomatch,
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);
diff --git a/usr.bin/tar/Makefile b/usr.bin/tar/Makefile
index 8b0ebc2..42a6f0c 100644
--- a/usr.bin/tar/Makefile
+++ b/usr.bin/tar/Makefile
@@ -4,7 +4,7 @@
LIBARCHIVEDIR= ${.CURDIR}/../../contrib/libarchive
PROG= bsdtar
-BSDTAR_VERSION_STRING= 3.2.0
+BSDTAR_VERSION_STRING= 3.2.1
.PATH: ${LIBARCHIVEDIR}/tar
SRCS= bsdtar.c \
diff --git a/usr.bin/tar/tests/Makefile b/usr.bin/tar/tests/Makefile
index e57cb3e..059ee50 100644
--- a/usr.bin/tar/tests/Makefile
+++ b/usr.bin/tar/tests/Makefile
@@ -38,6 +38,7 @@ TESTS_SRCS= \
test_format_newc.c \
test_help.c \
test_leading_slash.c \
+ test_missing_file.c \
test_option_C_upper.c \
test_option_H_upper.c \
test_option_L_upper.c \
OpenPOWER on IntegriCloud