From 0ec9711525940fa0e2a966d61cbce54fdaed9be7 Mon Sep 17 00:00:00 2001 From: des Date: Wed, 7 Dec 2005 12:22:46 +0000 Subject: Add a -0 option for interoperability with xargs -0. PR: bin/56558 Submitted by: Eugene Grosbein MFC after: 2 weeks --- usr.bin/locate/locate/fastfind.c | 5 +++-- usr.bin/locate/locate/locate.1 | 7 ++++++- usr.bin/locate/locate/locate.c | 6 +++++- 3 files changed, 14 insertions(+), 4 deletions(-) (limited to 'usr.bin/locate') diff --git a/usr.bin/locate/locate/fastfind.c b/usr.bin/locate/locate/fastfind.c index 8e29355..e132dbd 100644 --- a/usr.bin/locate/locate/fastfind.c +++ b/usr.bin/locate/locate/fastfind.c @@ -103,6 +103,7 @@ statistic (fp, path_fcodes) } #endif /* _LOCATE_STATISTIC_ */ +extern char separator; void #ifdef FF_MMAP @@ -315,11 +316,11 @@ fastfind else if (f_limit) { counter++; if (f_limit >= counter) - (void)puts(path); + (void)printf("%s%c",path,separator); else errx(0, "[show only %d lines]", counter - 1); } else - (void)puts(path); + (void)printf("%s%c",path,separator); } break; } diff --git a/usr.bin/locate/locate/locate.1 b/usr.bin/locate/locate/locate.1 index 27b750e..dca91bb 100644 --- a/usr.bin/locate/locate/locate.1 +++ b/usr.bin/locate/locate/locate.1 @@ -41,7 +41,7 @@ .Nd find filenames quickly .Sh SYNOPSIS .Nm -.Op Fl Scims +.Op Fl 0Scims .Op Fl l Ar limit .Op Fl d Ar database .Ar pattern ... @@ -90,6 +90,11 @@ are stored in 2 bytes. .Pp The following options are available: .Bl -tag -width 10n +.It Fl 0 +Print pathnames separated by an +.Tn ASCII NUL +character (character code 0) instead of default NL +(newline, character code 10). .It Fl S Print some statistic about the database and exit. .It Fl c diff --git a/usr.bin/locate/locate/locate.c b/usr.bin/locate/locate/locate.c index 9283599..a1883f2 100644 --- a/usr.bin/locate/locate/locate.c +++ b/usr.bin/locate/locate/locate.c @@ -112,6 +112,7 @@ 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] */ +char separator='\n'; /* line separator */ void usage(void); @@ -145,8 +146,11 @@ main(argc, argv) #endif (void) setlocale(LC_ALL, ""); - while ((ch = getopt(argc, argv, "Scd:il:ms")) != -1) + while ((ch = getopt(argc, argv, "0Scd:il:ms")) != -1) switch(ch) { + case '0': /* 'find -print0' style */ + separator = '\0'; + break; case 'S': /* statistic lines */ f_statistic = 1; break; -- cgit v1.1