<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>