svn commit: r231535 - in head: bin/sh
tools/regression/bin/sh/builtins
Jilles Tjoelker
jilles at FreeBSD.org
Sat Feb 11 21:06:46 UTC 2012
Author: jilles
Date: Sat Feb 11 21:06:45 2012
New Revision: 231535
URL: http://svn.freebsd.org/changeset/base/231535
Log:
sh: Make 'hash' return 1 if at least one utility is not found.
Reported by: lme
Added:
head/tools/regression/bin/sh/builtins/hash4.0 (contents, props changed)
Modified:
head/bin/sh/exec.c
Modified: head/bin/sh/exec.c
==============================================================================
--- head/bin/sh/exec.c Sat Feb 11 20:47:16 2012 (r231534)
+++ head/bin/sh/exec.c Sat Feb 11 21:06:45 2012 (r231535)
@@ -231,7 +231,9 @@ hashcmd(int argc __unused, char **argv _
int verbose;
struct cmdentry entry;
char *name;
+ int errors;
+ errors = 0;
verbose = 0;
while ((c = nextopt("rv")) != '\0') {
if (c == 'r') {
@@ -254,19 +256,21 @@ hashcmd(int argc __unused, char **argv _
&& cmdp->cmdtype == CMDNORMAL)
delete_cmd_entry();
find_command(name, &entry, DO_ERR, pathval());
- if (verbose) {
- if (entry.cmdtype != CMDUNKNOWN) { /* if no error msg */
- cmdp = cmdlookup(name, 0);
- if (cmdp != NULL)
- printentry(cmdp, verbose);
- else
- outfmt(out2, "%s: not found\n", name);
+ if (entry.cmdtype == CMDUNKNOWN)
+ errors = 1;
+ else if (verbose) {
+ cmdp = cmdlookup(name, 0);
+ if (cmdp != NULL)
+ printentry(cmdp, verbose);
+ else {
+ outfmt(out2, "%s: not found\n", name);
+ errors = 1;
}
flushall();
}
argptr++;
}
- return 0;
+ return errors;
}
Added: head/tools/regression/bin/sh/builtins/hash4.0
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/bin/sh/builtins/hash4.0 Sat Feb 11 21:06:45 2012 (r231535)
@@ -0,0 +1,6 @@
+# $FreeBSD$
+
+exec 3>&1
+m=`hash nosuchtool 2>&1 >&3`
+r=$?
+[ "$r" != 0 ] && [ -n "$m" ]
More information about the svn-src-head
mailing list