git: 0c178a2a645d - main - support more than 2 billion file names for counting (-c) or limits (-l limit)

From: Wolfram Schneider <wosch_at_FreeBSD.org>
Date: Wed, 26 Jan 2022 16:17:26 UTC
The branch main has been updated by wosch:

URL: https://cgit.FreeBSD.org/src/commit/?id=0c178a2a645d8b0cd311cc872af1fd184c6e6663

commit 0c178a2a645d8b0cd311cc872af1fd184c6e6663
Author:     Wolfram Schneider <wosch@FreeBSD.org>
AuthorDate: 2022-01-26 16:15:23 +0000
Commit:     Wolfram Schneider <wosch@FreeBSD.org>
CommitDate: 2022-01-26 16:15:23 +0000

    support more than 2 billion file names for counting (-c) or limits (-l limit)
    
    - this fix (harmless) integer overflows for very large partitions (>1PB)
    - code cleanup
---
 usr.bin/locate/locate/fastfind.c |  2 +-
 usr.bin/locate/locate/locate.c   | 11 ++++++-----
 usr.bin/locate/locate/util.c     | 11 +----------
 3 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/usr.bin/locate/locate/fastfind.c b/usr.bin/locate/locate/fastfind.c
index 7340ce156675..fdbbb1c3db18 100644
--- a/usr.bin/locate/locate/fastfind.c
+++ b/usr.bin/locate/locate/fastfind.c
@@ -326,7 +326,7 @@ fastfind
 							if (f_limit >= counter)
 								(void)printf("%s%c",path,separator);
 							else 
-								errx(0, "[show only %d lines]", counter - 1);
+								errx(0, "[show only %ld lines]", counter - 1);
 						} else
 							(void)printf("%s%c",path,separator);
 					}
diff --git a/usr.bin/locate/locate/locate.c b/usr.bin/locate/locate/locate.c
index d339037c2003..40e183f8d45a 100644
--- a/usr.bin/locate/locate/locate.c
+++ b/usr.bin/locate/locate/locate.c
@@ -102,8 +102,8 @@ int f_icase;            /* ignore case */
 int f_stdin;            /* read database from stdin */
 int f_statistic;        /* print statistic */
 int f_silent;           /* suppress output, show only count of matches */
-int f_limit;            /* limit number of output lines, 0 == infinite */
-u_int counter;          /* counter for matches [-c] */
+long f_limit;           /* limit number of output lines, 0 == infinite */
+long counter;           /* counter for matches [-c] */
 char separator='\n';	/* line separator */
 
 u_char myctype[UCHAR_MAX + 1];
@@ -119,7 +119,6 @@ void	search_fopen(char *, char **);
 unsigned long cputime(void);
 
 extern char     **colon(char **, char*, char*);
-extern void     print_matches(u_int);
 extern int      getwm(caddr_t);
 extern int      getwf(FILE *);
 extern u_char   *tolower_word(u_char *);
@@ -146,7 +145,9 @@ main(int argc, char **argv)
                         f_statistic = 1;
                         break;
                 case 'l': /* limit number of output lines, 0 == infinite */
-                        f_limit = atoi(optarg);
+                        f_limit = atol(optarg);
+			if (f_limit < 0 ) 
+				errx(1, "invalid argument for -l: '%s'", optarg);
                         break;
                 case 'd':	/* database */
                         dbv = colon(dbv, optarg, _PATH_FCODES);
@@ -211,7 +212,7 @@ main(int argc, char **argv)
         }
 
         if (f_silent)
-                print_matches(counter);
+		printf("%ld\n", counter);
         exit(0);
 }
 
diff --git a/usr.bin/locate/locate/util.c b/usr.bin/locate/locate/util.c
index 42710de9490a..ff64b5a952d3 100644
--- a/usr.bin/locate/locate/util.c
+++ b/usr.bin/locate/locate/util.c
@@ -1,7 +1,7 @@
 /*
  * 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
  *	The Regents of the University of California.  All rights reserved.
  *
@@ -47,7 +47,6 @@
 
 char 	**colon(char **, char*, char*);
 char 	*patprep(char *);
-void print_matches(u_int);
 u_char 	*tolower_word(u_char *);
 int 	getwm(caddr_t);
 int 	getwf(FILE *);
@@ -131,14 +130,6 @@ colon(char **dbv, char *path, char *dot)
 	return (dbv);
 }
 
-void 
-print_matches(counter)
-	u_int counter;
-{
-	(void)printf("%d\n", counter);
-}
-
-
 /*
  * extract last glob-free subpattern in name for fast pre-match; prepend
  * '\0' for backwards match; return end of new pattern