Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-7]: src/distrib/sets Pull up following revision(s) (requested by ...
details: https://anonhg.NetBSD.org/src/rev/1ce2a142788e
branches: netbsd-7
changeset: 799531:1ce2a142788e
user: snj <snj%NetBSD.org@localhost>
date: Tue Aug 04 17:16:33 2015 +0000
description:
Pull up following revision(s) (requested by martin in ticket #929):
distrib/sets/join.awk: revision 1.4
Add an unvis function and use it on file names in mtree specs.
This should correct the problem that ./bin/[ was missing from the
base.tgz set, despite being listed in src/distrib/sets/base/mi
and being present in METALOG. The corresponding entry in
METALOG.sanitised has ./bin/\133 instead of ./bin/[, and that made
join.awk omit it.
XXX: The unvis() implementation in join.awk handles only a subset
of the syntax, but it's probably good enough for now.
XXX: The file names should probably be canonicalised by
vis(unvis(name)), but at present none of the file names in the set
lists really need it.
XXX: It may be a bug that entries in the set lists without
corresponding entries in METALOG are silently ignored by join.awk.
diffstat:
distrib/sets/join.awk | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 46 insertions(+), 2 deletions(-)
diffs (72 lines):
diff -r b0abaf764ed6 -r 1ce2a142788e distrib/sets/join.awk
--- a/distrib/sets/join.awk Sun Aug 02 11:30:45 2015 +0000
+++ b/distrib/sets/join.awk Tue Aug 04 17:16:33 2015 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: join.awk,v 1.3.42.2 2014/10/24 23:13:22 riz Exp $
+# $NetBSD: join.awk,v 1.3.42.3 2015/08/04 17:16:33 snj Exp $
#
# Copyright (c) 2002 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -32,17 +32,61 @@
# and outputs lines in F2 with a first word that is in F1.
# Neither file needs to be sorted
+function unvis(s) \
+{
+ # XXX: We don't handle the complete range of vis encodings
+ unvis_result = ""
+ while (length(s) > 0) {
+ unvis_pos = match(s, "\\\\.")
+ if (unvis_pos == 0) {
+ unvis_result = unvis_result "" s
+ s = ""
+ break
+ }
+ # copy the part before the next backslash
+ unvis_result = unvis_result "" substr(s, 1, unvis_pos - 1)
+ s = substr(s, unvis_pos)
+ # process the backslash and next few chars
+ if (substr(s, 1, 2) == "\\\\") {
+ # double backslash -> single backslash
+ unvis_result = unvis_result "\\"
+ s = substr(s, 3)
+ } else if (match(s, "\\\\[0-7][0-7][0-7]") == 1) {
+ # \ooo with three octal digits.
+ # XXX: use strnum() is that is available
+ unvis_result = unvis_result "" sprintf("%c", \
+ 0+substr(s, 2, 1) * 64 + \
+ 0+substr(s, 3, 1) * 8 + \
+ 0+substr(s, 4, 1))
+ s = substr(s, 5)
+ } else {
+ # unrecognised escape: keep the literal backslash
+ printf "%s: %s:%s: unrecognised escape %s\n", \
+ ARGV[0], (FILENAME ? FILENAME : "stdin"), FNR, \
+ substr(s, 1, 2) \
+ >"/dev/stderr"
+ unvis_result = unvis_result "" substr(s, 1, 1)
+ s = substr(s, 2)
+ }
+ }
+ return unvis_result
+}
+
BEGIN \
{
if (ARGC != 3) {
printf("Usage: join file1 file2\n") >"/dev/stderr"
exit 1
}
- while ( (getline < ARGV[1]) > 0)
+ while ( (getline < ARGV[1]) > 0) {
+ $1 = unvis($1)
words[$1] = $0
+ }
delete ARGV[1]
}
+// { $1 = unvis($1) }
+
$1 in words \
{
f1=$1
Home |
Main Index |
Thread Index |
Old Index