switch to 64 bit integers for counting bigrams
This fixes an integer overflow for very large partitions around 35 billion filenames (>2PB). However, in an artificially worst case it may occurs by only 17 mio filenames on a partition.
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*
|
*
|
||||||
* Copyright (c) 1995 Wolfram Schneider <wosch@FreeBSD.org>. Berlin.
|
* Copyright (c) 1995-2022 Wolfram Schneider <wosch@FreeBSD.org>
|
||||||
* Copyright (c) 1989, 1993
|
* Copyright (c) 1989, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -64,7 +64,7 @@ static char sccsid[] = "@(#)locate.bigram.c 8.1 (Berkeley) 6/6/93";
|
|||||||
|
|
||||||
u_char buf1[MAXPATHLEN] = " ";
|
u_char buf1[MAXPATHLEN] = " ";
|
||||||
u_char buf2[MAXPATHLEN];
|
u_char buf2[MAXPATHLEN];
|
||||||
u_int bigram[UCHAR_MAX + 1][UCHAR_MAX + 1];
|
unsigned long bigram[UCHAR_MAX + 1][UCHAR_MAX + 1];
|
||||||
|
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
@@ -109,7 +109,7 @@ main(void)
|
|||||||
for (i = ASCII_MIN; i <= ASCII_MAX; i++)
|
for (i = ASCII_MIN; i <= ASCII_MAX; i++)
|
||||||
for (j = ASCII_MIN; j <= ASCII_MAX; j++)
|
for (j = ASCII_MIN; j <= ASCII_MAX; j++)
|
||||||
if (bigram[i][j] != 0)
|
if (bigram[i][j] != 0)
|
||||||
(void)printf("%4u %c%c\n", bigram[i][j], i, j);
|
printf("%lu %c%c\n", bigram[i][j], i, j);
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user