--- findutils-4.2.4/locate/updatedb.sh.orig 2004-11-08 01:41:48.000000000 +0100 +++ findutils-4.2.4/locate/updatedb.sh 2004-11-09 00:00:15.469313808 +0100 @@ -118,6 +118,12 @@ fi export TMPDIR +if test -x /bin/mktemp; then + : ${MKTEMP=/bin/mktemp} +else + : ${MKTEMP=/bin/touch} +fi + # The user to search network directories as. : ${NETUSER=daemon} @@ -161,6 +167,11 @@ if test $old = no; then +NEW_LOCATE_DB=`$MKTEMP $LOCATE_DB.n.XXXXXX` || { + echo "could not create temporary locate db" >&2 + exit 1 +} + # FIXME figure out how to sort null-terminated strings, and use -print0. if { cd "$changeto" @@ -192,7 +203,7 @@ exit $? fi fi -} | $sort -f | $frcode $frcode_options > $LOCATE_DB.n +} | $sort -f | $frcode $frcode_options > $NEW_LOCATE_DB then # OK so far true @@ -205,29 +216,29 @@ # To avoid breaking locate while this script is running, put the # results in a temp file, then rename it atomically. -if test -s $LOCATE_DB.n; then +if test -s $NEW_LOCATE_DB; then rm -f $LOCATE_DB - mv $LOCATE_DB.n $LOCATE_DB + mv $NEW_LOCATE_DB $LOCATE_DB chmod 644 $LOCATE_DB else echo "updatedb: new database would be empty" >&2 - rm -f $LOCATE_DB.n + rm -f $NEW_LOCATE_DB fi else # old -if ! bigrams=`tempfile -p updatedb`; then +if ! bigrams=`$MKTEMP $TMPDIR/f.bigrams$$XXXXXX`; then echo tempfile failed exit 1 fi -if ! filelist=`tempfile -p updatedb`; then +if ! filelist=`$MKTEMP $TMPDIR/f.list$$XXXXXX`; then echo tempfile failed exit 1 fi -rm -f $LOCATE_DB.n -trap 'rm -f $bigrams $filelist $LOCATE_DB.n; exit' HUP TERM +rm -f $NEW_LOCATE_DB +trap 'rm -f $bigrams $filelist $NEW_LOCATE_DB; exit' HUP TERM # Alphabetize subdirectories before file entries using tr. James Woods says: # "to get everything in monotonic collating sequence, to avoid some @@ -269,19 +280,19 @@ awk '{ if (NR <= 128) print $2 }' | tr -d '\012' > $bigrams # Code the file list. -$code $bigrams < $filelist > $LOCATE_DB.n +$code $bigrams < $filelist > $NEW_LOCATE_DB rm -f $bigrams $filelist # To reduce the chances of breaking locate while this script is running, # put the results in a temp file, then rename it atomically. -if test -s $LOCATE_DB.n; then +if test -s $NEW_LOCATE_DB; then rm -f $LOCATE_DB - mv $LOCATE_DB.n $LOCATE_DB + mv $NEW_LOCATE_DB $LOCATE_DB chmod 644 $LOCATE_DB else echo "updatedb: new database would be empty" >&2 - rm -f $LOCATE_DB.n + rm -f $NEW_LOCATE_DB fi fi