<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.
</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/13181f61aab0430b6b36bd2992dc0107509ff082">https://github.com/macports/macports-legacy-support/commit/13181f61aab0430b6b36bd2992dc0107509ff082</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 13181f61aab0430b6b36bd2992dc0107509ff082
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Fri Nov 15 19:45:09 2024 -0800
<span style='display:block; white-space:pre;color:#404040;'> Import 10.5 which.c and which.1.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> This brings in the sources for Apple's 10.5 C-based 'which' (from
</span><span style='display:block; white-space:pre;color:#404040;'> FreeBSD), verbatim @shell_cmds-116. A future commit will use them.
</span>---
tiger_only/src/.gitignore | 1 +
tiger_only/src/which.1 | 85 +++++++++++++++++++++++++++
tiger_only/src/which.c | 146 ++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 232 insertions(+)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/tiger_only/src/.gitignore b/tiger_only/src/.gitignore
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..711fb3c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/tiger_only/src/.gitignore
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+which
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/tiger_only/src/which.1 b/tiger_only/src/which.1
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..f889e09
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/tiger_only/src/which.1
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,85 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Manpage Copyright (c) 1995, Jordan Hubbard <jkh@FreeBSD.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" Redistribution and use in source and binary forms, with or without
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" modification, are permitted provided that the following conditions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" are met:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" 1. Redistributions of source code must retain the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" notice, this list of conditions and the following disclaimer.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" 2. Redistributions in binary form must reproduce the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" notice, this list of conditions and the following disclaimer in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" documentation and/or other materials provided with the distribution.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" 3. All advertising materials mentioning features or use of this software
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" must display the following acknowledgement:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" This product includes software developed by the FreeBSD Project
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" its contributors.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" 4. Neither the name of the FreeBSD Project nor the names of its contributors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" may be used to endorse or promote products derived from this software
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" without specific prior written permission.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND ANY EXPRESS OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE FOR ANY DIRECT, INDIRECT,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\" $FreeBSD: src/usr.bin/which/which.1,v 1.25 2005/02/10 16:04:22 ru Exp $
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Dd June 21, 2002
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Dt WHICH 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Os
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Sh NAME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Nm which
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Nd "locate a program file in the user's path"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Sh SYNOPSIS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Nm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Op Fl as
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Ar program ...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Sh DESCRIPTION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Nm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+utility
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+takes a list of command names and searches the path for each executable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+file that would be run had these commands actually been invoked.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Pp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The following options are available:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Bl -tag -width indent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.It Fl a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+List all instances of executables found (instead of just the first one
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+of each).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.It Fl s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+No output, just return 0 if any of the executables are found, or 1 if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+none are found.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.El
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Pp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Some shells may provide a builtin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Nm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+command which is similar or identical to this utility.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Consult the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Xr builtin 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+manual page.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Sh SEE ALSO
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Xr builtin 1 ,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Xr csh 1 ,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Xr find 1 ,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Xr locate 1 ,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Xr whereis 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Sh HISTORY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Nm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+command first appeared in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Fx 2.1 .
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Sh AUTHORS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.An -nosplit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Nm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+utility was originally written in Perl and was contributed by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.An Wolfram Schneider Aq wosch@FreeBSD.org .
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The current version of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.Nm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+was rewritten in C by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+.An Daniel Papasian Aq dpapasia@andrew.cmu.edu .
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/tiger_only/src/which.c b/tiger_only/src/which.c
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..e8ecea2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/tiger_only/src/which.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,146 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+/**
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Copyright (c) 2000 Dan Papasian. All rights reserved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Redistribution and use in source and binary forms, with or without
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * modification, are permitted provided that the following conditions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * are met:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * 1. Redistributions of source code must retain the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * notice, this list of conditions and the following disclaimer.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * 2. Redistributions in binary form must reproduce the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * notice, this list of conditions and the following disclaimer in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * documentation and/or other materials provided with the distribution.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * 3. The name of the author may not be used to endorse or promote products
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * derived from this software without specific prior written permission.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/cdefs.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+__FBSDID("$FreeBSD: src/usr.bin/which/which.c,v 1.6 2005/02/10 16:04:22 ru Exp $");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <sys/param.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <err.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <string.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#include <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static void usage(void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static int print_matches(char *, char *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int silent;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int allpaths;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+main(int argc, char **argv)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char *p, *path;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ssize_t pathlen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int opt, status;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ status = EXIT_SUCCESS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while ((opt = getopt(argc, argv, "as")) != -1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch (opt) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case 'a':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ allpaths = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case 's':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ silent = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ usage();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ argv += optind;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ argc -= optind;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (argc == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ usage();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if ((p = getenv("PATH")) == NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ exit(EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pathlen = strlen(p) + 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ path = malloc(pathlen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (path == NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ err(EXIT_FAILURE, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while (argc > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ memcpy(path, p, pathlen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (strlen(*argv) >= FILENAME_MAX ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ print_matches(path, *argv) == -1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ status = EXIT_FAILURE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ argv++;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ argc--;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ exit(status);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+usage(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (void)fprintf(stderr, "usage: which [-as] program ...\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ exit(EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+is_there(char *candidate)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct stat fin;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* XXX work around access(2) false positives for superuser */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (access(candidate, X_OK) == 0 &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ stat(candidate, &fin) == 0 &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ S_ISREG(fin.st_mode) &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (getuid() != 0 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (fin.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) != 0)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!silent)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf("%s\n", candidate);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return (1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return (0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+print_matches(char *path, char *filename)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char candidate[PATH_MAX];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char *d;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int found;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (strchr(filename, '/') != NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return (is_there(filename) ? 0 : -1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ found = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while ((d = strsep(&path, ":")) != NULL) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (*d == '\0')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ d = ".";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (snprintf(candidate, sizeof(candidate), "%s/%s", d,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ filename) >= (int)sizeof(candidate))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (is_there(candidate)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ found = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!allpaths)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return (found ? 0 : -1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span></pre><pre style='margin:0'>
</pre>