From 087c33b97bf40d27570dba0fde28b5a1e3f26c43 Mon Sep 17 00:00:00 2001 From: otto <> Date: Thu, 6 Oct 2005 06:43:19 +0000 Subject: [PATCH] Greatly speedup MAKEDEV by using arrays instead of very long strings that get copied around a lot. Needs sh(1) max array index bump I committed earlier. ok todd@ deraadt@ --- src/etc/MAKEDEV.common | 24 ++++++++--------- src/etc/MAKEDEV.mi | 61 +++++++++++++++++------------------------- 2 files changed, 36 insertions(+), 49 deletions(-) diff --git a/src/etc/MAKEDEV.common b/src/etc/MAKEDEV.common index 1101fa80..aa562624 100644 --- a/src/etc/MAKEDEV.common +++ b/src/etc/MAKEDEV.common @@ -1,4 +1,4 @@ -vers(a, {-$OpenBSD: MAKEDEV.common,v 1.20 2005/08/01 22:22:12 deraadt Exp $-})dnl +vers(a, {-$OpenBSD: MAKEDEV.common,v 1.21 2005/10/06 06:43:19 otto Exp $-})dnl divert(1)dnl dnl dnl Common device definitions. @@ -226,8 +226,8 @@ __devitem(ss, ss*, SCSI scanners)dnl _mkdev(ss, ss*, {-M ss$U c major_ss_c Mult($U,16) 640 operator M nss$U c major_ss_c Add(Mult($U,16),1) 640 operator M enss$U c major_ss_c Add(Mult($U,16),3) 640 operator - RMlist="$RMlist scan$U" - MKlist="$MKlist;umask 77;ln -s ss$U scan$U"-})dnl + RMlist[${#RMlist[*]}]="scan$U" + MKlist[${#MKlist[*]}]=";umask 77;ln -s ss$U scan$U"-})dnl dnl XXX see ramdisk above __devitem(ramd, ramdisk, Ramdisk kernel devices,nothing)dnl _mkdev(ramd, ramdisk, {-dnl @@ -450,10 +450,10 @@ _mkdev(au, audio*, {-M sound$U c major_au_c $U M mixer$U c major_au_c Add($U, 16) M audio$U c major_au_c Add($U, 128) M audioctl$U c major_au_c Add($U, 192) - MKlist="$MKlist;[ -e audio ] || ln -s audio$U audio" - MKlist="$MKlist;[ -e mixer ] || ln -s mixer$U mixer" - MKlist="$MKlist;[ -e sound ] || ln -s sound$U sound" - MKlist="$MKlist;[ -e audioctl ] || ln -s audioctl$U audioctl"-})dnl + MKlist[${#MKlist[*]}]=";[ -e audio ] || ln -s audio$U audio" + MKlist[${#MKlist[*]}]=";[ -e mixer ] || ln -s mixer$U mixer" + MKlist[${#MKlist[*]}]=";[ -e sound ] || ln -s sound$U sound" + MKlist[${#MKlist[*]}]=";[ -e audioctl ] || ln -s audioctl$U audioctl"-})dnl __devitem(asc, asc*, ASC Audio device)dnl _mkdev(asc, asc*, {-M asc$U major_asc_c 0-})dnl __devitem(bio, bio, {-ioctl tunnel pseudo-device-})dnl @@ -461,15 +461,15 @@ _mkdev(bio, bio, {-M bio c major_bio_c 0 600-})dnl __devitem(music, music*, MIDI devices,midi)dnl _mkdev(music, music*, {-M music$U c major_music_c $U M sequencer$U c major_music_c Add($U, 128) - MKlist="$MKlist;[ -e music ] || ln -s music$U music" - MKlist="$MKlist;[ -e sequencer ] || ln -s sequencer$U sequencer"-})dnl + MKlist[${#MKlist[*]}]=";[ -e music ] || ln -s music$U music" + MKlist[${#MKlist[*]}]=";[ -e sequencer ] || ln -s sequencer$U sequencer"-})dnl __devitem(radio, radio*, FM tuner devices)dnl _mkdev(radio, radio*, {-M radio$U c major_radio_c $U - MKlist="$MKlist;[ -e radio ] || ln -s radio$U radio"-})dnl + MKlist[${#MKlist[*]}]=";[ -e radio ] || ln -s radio$U radio"-})dnl __devitem(fdesc, fd, fd/* nodes for fdescfs,mount_fdesc 8)dnl -_mkdev(fdesc, fd, {-RMlist="mkdir -p fd;$RMlist" n=0 +_mkdev(fdesc, fd, {-RMlist[${#RMlist[*]}]=";mkdir -p fd;rm -f" n=0 while [ $n -lt 64 ];do M fd/$n c major_fdesc_c $n;n=Add($n, 1);done - MKlist="$MKlist;chmod 555 fd"-})dnl + MKlist[${#MKlist[*]}]=";chmod 555 fd"-})dnl __devitem(grf_mac, grf*, Raw interface to the mac68k graphics devices,grf)dnl __devitem(oppr, openprom,PROM settings,openprom)dnl _cdev(oppr, openprom, 70, 0)dnl diff --git a/src/etc/MAKEDEV.mi b/src/etc/MAKEDEV.mi index 982564c6..e971c769 100644 --- a/src/etc/MAKEDEV.mi +++ b/src/etc/MAKEDEV.mi @@ -1,7 +1,7 @@ define(COMM,`#')dnl include(MAKEDEV.sub)dnl dnl -vers(a, {-$OpenBSD: MAKEDEV.mi,v 1.76 2005/10/04 18:33:52 otto Exp $-})dnl +vers(a, {-$OpenBSD: MAKEDEV.mi,v 1.77 2005/10/06 06:43:19 otto Exp $-})dnl dnl divert(1)dnl {-#-} @@ -169,45 +169,34 @@ dodisk2() } # M name b/c major minor [mode] [group] -RMlist="rm -f" -MKlist=":" +RMlist[0]="rm -f" mkl() { dnl -dnl uncomment if multi mknod happens -dnl -ifelse(1, 0, -[ "${mklist[{-$-}1]}" ] && mklist[{-$-}1]="${mklist[{-$-}1]} {-$-}2 {-$-}3 {-$-}4 {-$-}5" || { - mklist[{-$-}1]="mknod -m {-$-}1 {-$-}2 {-$-}3 {-$-}4 {-$-}5" - modes="$modes {-$-}1" - }, -dnl dnl non multi mknod dnl - [ "${mklist[{-$-}1]}" ] && { - mklist[{-$-}1]="${mklist[{-$-}1]};mknod -m {-$-}1 {-$-}2 {-$-}3 {-$-}4 {-$-}5" - } || { - mklist[{-$-}1]="mknod -m {-$-}1 {-$-}2 {-$-}3 {-$-}4 {-$-}5" - modes="$modes {-$-}1" - }) + mklist[{-$-}{#mklist[*]}]=";mknod -m {-$-}1 {-$-}2 {-$-}3 {-$-}4 {-$-}5" } M() { - RMlist="$RMlist {-$-}1" + RMlist[{-$-}{#RMlist[*]}]={-$-}1 mkl ${5-666} {-$-}1 {-$-}2 {-$-}3 {-$-}4 G={-$-}{6:-wheel} [ "{-$-}7" ] && { - MKlist="$MKlist;chown {-$-}7:{-$-}G {-$-}1" + MKlist[{-$-}{#MKlist[*]}]=";chown {-$-}7:{-$-}G {-$-}1" } || { case $G in - wheel)g=0;;kmem)g=2;;operator)g=5;;tty)g=4;;dialer)g=117;;_lkm)g=61;; + wheel) + [ {-$-}{#whlist[*]} = 0 ] && whlist[0]=";chgrp wheel" + whlist[{-$-}{#whlist[*]}]="$1" + ;; + operator) + [ {-$-}{#oplist[*]} = 0 ] && oplist[0]=";chgrp operator" + oplist[{-$-}{#oplist[*]}]="$1" + ;; + *) + MKlist[{-$-}{#MKlist[*]}]=";chgrp $G $1"; esac - [ "${grplist[$g]}" ] && { - grplist[$g]="${grplist[$g]} {-$-}1" - } || { - groups="$groups $g" - grplist[$g]="chgrp $G {-$-}1" - } } return 0 } @@ -226,18 +215,16 @@ esac done } _recurse "$@" -list="$RMlist" -for mode in $modes; do - list="$list;${mklist[$mode]}" -done -for group in $groups; do - list="$list;${grplist[$group]}" -done -list="$list;$MKlist" -if [ "$eo" = "echo" ]; then - $eo "$list" +{ +echo -n ${RMlist[*]} +echo -n ${mklist[*]} +echo -n ${MKlist[*]} +echo -n ${whlist[*]} +echo ${oplist[*]} +} | if [ "$eo" = "echo" ]; then + cat else - echo "$list" | sh + sh fi divert(3)dnl dnl