On Thu, 15 Mar 2007, Otto Moerbeek wrote: > On Thu, 15 Mar 2007, Han Boetes wrote: > > > Otto Moerbeek wrote: > > > Hmm, can you instrument /usr/libexec/locate.updatedb with a > > > > > > .... tee /tmp/myflist | > > > > > > on line 101 to see the filelist it actualy builds? > > > > Sure, I just did that and examined /tmp/myflist and it looks > > perfectly normal. > > Can you send it to me so I can process it here and see if it creates a > corrupted DB?
I see the problem. The problem occurs if top bigrams contain spaces. These are not handled correctly by awk. We'll have to use a field separator that can not be in a bigram. A tab is well suited, AFAKS. Try this. -Otto Index: bigram/locate.bigram.c =================================================================== RCS file: /cvs/src/usr.bin/locate/bigram/locate.bigram.c,v retrieving revision 1.10 diff -u -p -r1.10 locate.bigram.c --- bigram/locate.bigram.c 29 Sep 2003 16:03:16 -0000 1.10 +++ bigram/locate.bigram.c 15 Mar 2007 22:39:30 -0000 @@ -106,7 +106,7 @@ main(void) for (i = ASCII_MIN; i <= ASCII_MAX; i++) for (j = ASCII_MIN; j <= ASCII_MAX; j++) if (bigram[i][j] != 0) - (void)printf("%4u %c%c\n", bigram[i][j], i, j); + (void)printf("%4u\t%c%c\n", bigram[i][j], i, j); exit(0); } Index: code/locate.code.c =================================================================== RCS file: /cvs/src/usr.bin/locate/code/locate.code.c,v retrieving revision 1.14 diff -u -p -r1.14 locate.code.c --- code/locate.code.c 19 Feb 2007 20:01:12 -0000 1.14 +++ code/locate.code.c 15 Mar 2007 09:25:18 -0000 @@ -149,6 +149,9 @@ main(int argc, char *argv[]) if (fgets(bigrams, sizeof(bigrams), fp) == NULL) err(1, "fgets"); + if (strlen(bigrams) != BGBUFSIZE) + errx(1, "bigram array too small to build db, index more files"); + if (fputs(bigrams, stdout) == EOF) err(1, "stdout"); (void)fclose(fp); Index: locate/mklocatedb.sh =================================================================== RCS file: /cvs/src/usr.bin/locate/locate/mklocatedb.sh,v retrieving revision 1.12 diff -u -p -r1.12 mklocatedb.sh --- locate/mklocatedb.sh 29 Jun 2003 21:59:28 -0000 1.12 +++ locate/mklocatedb.sh 15 Mar 2007 22:40:27 -0000 @@ -68,7 +68,7 @@ trap 'rm -f $bigrams $filelist' 0 1 2 3 if $sortcmd $sortopt > $filelist; then $bigram < $filelist | $sort -nr | - awk 'BEGIN { ORS = "" } NR <= 128 { print $2 }' > $bigrams && + awk -Ft 'BEGIN { ORS = "" } NR <= 128 { print $2 }' > $bigrams && $code $bigrams < $filelist else echo "`basename $0`: cannot build locate database" >&2