Module Name:    src
Committed By:   mlelstv
Date:           Fri Jan 11 23:49:23 UTC 2013

Modified Files:
        src/distrib/sets/lists/base: mi
        src/sbin/devpubd: Makefile devpubd.8
Added Files:
        src/sbin/devpubd/hooks: 02-wedgenames

Log Message:
Provide a script for devpubd(8) that creates symlinks for each dk(4)
device under /dev/wedges so that you can access them by name.


To generate a diff of this commit:
cvs rdiff -u -r1.1015 -r1.1016 src/distrib/sets/lists/base/mi
cvs rdiff -u -r1.2 -r1.3 src/sbin/devpubd/Makefile src/sbin/devpubd/devpubd.8
cvs rdiff -u -r0 -r1.1 src/sbin/devpubd/hooks/02-wedgenames

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/base/mi
diff -u src/distrib/sets/lists/base/mi:1.1015 src/distrib/sets/lists/base/mi:1.1016
--- src/distrib/sets/lists/base/mi:1.1015	Tue Dec  4 23:38:57 2012
+++ src/distrib/sets/lists/base/mi	Fri Jan 11 23:49:23 2013
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1015 2012/12/04 23:38:57 spz Exp $
+# $NetBSD: mi,v 1.1016 2013/01/11 23:49:23 mlelstv Exp $
 #
 # Note:	Don't delete entries from here - mark them as "obsolete" instead,
 #	unless otherwise stated below.
@@ -201,6 +201,7 @@
 ./libexec					base-sys-root
 ./libexec/devpubd-hooks				base-sysutil-root
 ./libexec/devpubd-hooks/01-makedev		base-sysutil-root
+./libexec/devpubd-hooks/02-wedgenames		base-sysutil-root
 ./libexec/devpubd-run-hooks			base-sysutil-root
 ./libexec/dhcpcd-hooks				base-dhcpcd-root
 ./libexec/dhcpcd-hooks/01-test			base-dhcpcd-root

Index: src/sbin/devpubd/Makefile
diff -u src/sbin/devpubd/Makefile:1.2 src/sbin/devpubd/Makefile:1.3
--- src/sbin/devpubd/Makefile:1.2	Tue Sep  6 21:30:12 2011
+++ src/sbin/devpubd/Makefile	Fri Jan 11 23:49:23 2013
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.2 2011/09/06 21:30:12 riz Exp $
+# $NetBSD: Makefile,v 1.3 2013/01/11 23:49:23 mlelstv Exp $
 
 PROG=		devpubd
 SRCS=		devpubd.c
@@ -13,7 +13,7 @@ SCRIPTS=	devpubd-run-hooks
 SCRIPTSDIR_devpubd-run-hooks=	/libexec
 
 .PATH: ${.CURDIR}/hooks
-HOOKS=		01-makedev
+HOOKS=		01-makedev 02-wedgenames
 SCRIPTS+=	${HOOKS:C,^,hooks/,}
 .for f in ${HOOKS}
 SCRIPTSDIR_hooks/${f}=	/libexec/devpubd-hooks
Index: src/sbin/devpubd/devpubd.8
diff -u src/sbin/devpubd/devpubd.8:1.2 src/sbin/devpubd/devpubd.8:1.3
--- src/sbin/devpubd/devpubd.8:1.2	Thu Nov 22 17:16:30 2012
+++ src/sbin/devpubd/devpubd.8	Fri Jan 11 23:49:23 2013
@@ -1,4 +1,4 @@
-.\"	$NetBSD: devpubd.8,v 1.2 2012/11/22 17:16:30 reed Exp $
+.\"	$NetBSD: devpubd.8,v 1.3 2013/01/11 23:49:23 mlelstv Exp $
 .\"
 .\" Copyright (c) 2011 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -62,7 +62,9 @@ or
 and the device file name.
 The default installation supplies the
 .Pa 01-makedev
-script for creating a device node.
+script for creating a device node and the
+.Pa 02-wedgenames
+script for creating symlinks to wedge devices under /dev/wedges.
 Additional scripts may be added for other dynamic device actions.
 .Sh SEE ALSO
 .Xr drvctl 8 ,

Added files:

Index: src/sbin/devpubd/hooks/02-wedgenames
diff -u /dev/null src/sbin/devpubd/hooks/02-wedgenames:1.1
--- /dev/null	Fri Jan 11 23:49:24 2013
+++ src/sbin/devpubd/hooks/02-wedgenames	Fri Jan 11 23:49:23 2013
@@ -0,0 +1,71 @@
+#!/bin/sh
+#
+# $NetBSD: 02-wedgenames,v 1.1 2013/01/11 23:49:23 mlelstv Exp $
+#
+# Try to maintain symlinks to wedge devices
+#
+
+event="$1"
+device="$2"
+
+wedgedir=/dev/wedges
+
+remove_wedge() {
+	find $wedgedir -print \
+	| sed -e 's# #\\ #g' \
+	| while read w; do
+		t=$(readlink "$w")
+		if [ x"$t" = x"/dev/$device" ]; then
+			rm -f "$w"
+			basedir=$(dirname "$w")
+			rmdir -p "$basedir" 2>/dev/null
+		fi
+	done
+}
+
+add_wedge() {
+	n=$(dkctl "$device" getwedgeinfo \
+		| sed -ne '1s#^[^:]*: ##p' \
+		| awk -v GOOD='._:;!^$&~()[]{}=,+-/' '
+		BEGIN {
+			for (i=0; i<256; ++i)
+				ord[sprintf("%c",i)] = i
+		}
+		{
+			n = length($0)
+			o = ""
+			for (i=1; i<=n; ++i) {
+				c = substr($0,i,1)
+				if (c ~ /^[[:alnum:]]$/ || index(GOOD,c) > 0) {
+					o = o c
+				} else {
+					o = o sprintf("%%%02x",ord[c])
+				}
+			}
+			printf "%s",o
+		}'
+	)
+	case $n in
+	"") ;;
+	*)
+		test -d $wedgedir || mkdir -m 755 $wedgedir
+		basedir=$(dirname "$wedgedir/$n")
+		test -d "$basedir" || mkdir -p -m 755 "$basedir"
+		ln -s "/dev/$device" "$wedgedir/$n"
+		;;
+	esac
+}
+
+case $device in
+dk*)
+	case $event in
+	device-attach)
+		remove_wedge
+		add_wedge
+		;;
+	device-detach)
+		remove_wedge
+		;;
+	esac
+	;;
+esac

Reply via email to