diff --git a/usr.bin/locate/locate/updatedb.sh b/usr.bin/locate/locate/updatedb.sh index a181c227e234..62ca750047ee 100644 --- a/usr.bin/locate/locate/updatedb.sh +++ b/usr.bin/locate/locate/updatedb.sh @@ -1,6 +1,6 @@ #!/bin/sh # -# $NetBSD: updatedb.sh,v 1.7 2002/05/05 07:27:35 kim Exp $ +# $NetBSD: updatedb.sh,v 1.8 2004/02/06 14:29:51 itohy Exp $ # # Copyright (c) 1989, 1993 # The Regents of the University of California. All rights reserved. @@ -39,12 +39,93 @@ # @(#)updatedb.csh 8.4 (Berkeley) 10/27/94 # -SRCHPATHS="/" # directories to be put in the database LIBDIR="/usr/libexec" # for subprograms # for temp files +TMPDIR=/tmp FCODES="/var/db/locate.database" # the database +CONF=/etc/locate.conf # configuration file PATH="/bin:/usr/bin" + +ignorefs_default='! -fstype local -o -fstype cd9660 -o -fstype fdesc -o -fstype kernfs -o -fstype procfs' +ignorefs=unset +ignore= +SRCHPATHS= + +# read configuration file +if [ -f "$CONF" ]; then + exec 5<&0 < "$CONF" + while read com args; do + case "$com/$args" in /) continue;; esac # skip blank lines + case "$com" in + '#'*) ;; # lines start with # is comment + searchpath) + SRCHPATHS="$SRCHPATHS $args";; + ignorefs) + for i in $args; do + case "$args" in + none) ignorefs=;; + *) fs=`echo "$i" | sed -e 's/^!/! -fstype /' -e t -e 's/^/-fstype /'` + case "$ignorefs" in + ''|unset) + ignorefs="$fs";; + *) ignorefs="$ignorefs -o $fs";; + esac;; + esac + done;; + ignore) + set -f + for i in $args; do + case "$ignore" in + '') ;; + *) ignore="$ignore -o";; + esac + ignore="$ignore -path $i" + done + set +f;; + ignorecontents) + set -f + for i in $args; do + case "$ignore" in + '') ;; + *) ignore="$ignore -o";; + esac + ignore="$ignore -path $i -print" + done + set +f;; + workdir) + if [ -d "$args" ]; then + TMPDIR="$args" + else + echo "$CONF: workdir: $args nonexistent" >&2 + fi;; + *) + echo "$CONF: $com: unknown config command" >&2 + exit 1;; + esac + done + exec <&5 5>&- +fi + +# default value when "ignorefs" is absent +case "$ignorefs" in +unset) ignorefs=$ignorefs_default;; +esac + +: ${SRCHPATHS:=/} # directories to be put in the database +export TMPDIR + +case "$ignorefs/$ignore" in +/) lp= ; rp= ;; +*) lp='('; rp=') -prune -o' ;; +esac + +# insert '-o' if neither $ignorefs or $ignore are empty +case "$ignorefs $ignore" in +' '*|*' ') ;; +*) ignore="-o $ignore";; +esac + FILELIST=`mktemp -t locate.list` || exit 1 trap "rm -f '$FILELIST'" EXIT trap "rm -f '$FILELIST'; exit 1" INT QUIT TERM @@ -52,16 +133,8 @@ trap "rm -f '$FILELIST'; exit 1" INT QUIT TERM # Make a file list and compute common bigrams. # Entries of each directory shall be sorted (find -s). -# search locally or everything -# find -s $SRCHPATHS -print \ -find -s $SRCHPATHS \( \ - ! -fstype local \ - -o -fstype cd9660 \ - -o -fstype fdesc \ - -o -fstype kernfs \ - -o -fstype procfs \ - \) -a -prune -o -print \ - >> "$FILELIST" +set -f +find -s ${SRCHPATHS} $lp $ignorefs $ignore $rp -print >> "$FILELIST" BIGRAMS=`$LIBDIR/locate.bigram <"$FILELIST"`