Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/distrib/sets Add an unvis function and use it on file names ...
details: https://anonhg.NetBSD.org/src/rev/84a3607c785a
branches: trunk
changeset: 333169:84a3607c785a
user: apb <apb%NetBSD.org@localhost>
date: Tue Oct 21 23:15:38 2014 +0000
description:
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 b77d843e903d -r 84a3607c785a distrib/sets/join.awk
--- a/distrib/sets/join.awk Tue Oct 21 18:19:17 2014 +0000
+++ b/distrib/sets/join.awk Tue Oct 21 23:15:38 2014 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: join.awk,v 1.3 2008/04/30 13:10:49 martin Exp $
+# $NetBSD: join.awk,v 1.4 2014/10/21 23:15:38 apb 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