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