1 # $NetBSD: getdirs.awk,v 1.6 2013/03/12 13:08:00 njoly Exp $ 2 # 3 # Copyright (c) 2002 The NetBSD Foundation, Inc. 4 # All rights reserved. 5 # 6 # This code is derived from software contributed to The NetBSD Foundation 7 # by Luke Mewburn of Wasabi Systems. 8 # 9 # Redistribution and use in source and binary forms, with or without 10 # modification, are permitted provided that the following conditions 11 # are met: 12 # 1. Redistributions of source code must retain the above copyright 13 # notice, this list of conditions and the following disclaimer. 14 # 2. Redistributions in binary form must reproduce the above copyright 15 # notice, this list of conditions and the following disclaimer in the 16 # documentation and/or other materials provided with the distribution. 17 # 18 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 19 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 # POSSIBILITY OF SUCH DAMAGE. 29 # 30 31 32 function dirname(file) \ 33 { 34 # no need to worry about args that do not contain at least one "/" 35 gsub(/\/[^\/]+$/, "", file) 36 return file 37 } 38 39 # skip empty or whitespace-only lines, or lines with comments 40 # 41 /^[ ]*(#|$)/ \ 42 { 43 next 44 } 45 46 # skip mtree config lines 47 # 48 /^\/(un)?set/ \ 49 { 50 next 51 } 52 53 # error if consecutive slashes are found 54 # 55 /\/\// \ 56 { 57 print "Unsupported consecutive slashes in path:" >"/dev/stderr" 58 print >"/dev/stderr" 59 exit 1 60 } 61 62 # error if path has a trailing slash 63 # 64 /\/$/ \ 65 { 66 print "Unsupported path with trailing slash:" >"/dev/stderr" 67 print >"/dev/stderr" 68 exit 1 69 } 70 71 # all other lines are parsed 72 # 73 { 74 print 75 file = $1 76 items[file]++ 77 do { 78 file = dirname(file) 79 dirs[file]++ 80 } while (file ~ /\//) 81 } 82 83 END \ 84 { 85 for (file in dirs) { 86 if (! (file in items)) 87 print file " optional type=dir" 88 } 89 } 90