From 7dc3b250aaa5e54527c6bb8f1feb116eca8f7fb2 Mon Sep 17 00:00:00 2001 From: stefanf Date: Thu, 4 Oct 2007 16:14:48 +0000 Subject: The exit status of a case statement where none of the patterns is matched is supposed to be 0, not the status of the previous command. Reported by: Eygene Ryabinkin PR: 116559 Approved by: re (gnn) --- bin/sh/eval.c | 1 + bin/sh/sh.1 | 4 ++++ 2 files changed, 5 insertions(+) (limited to 'bin/sh') diff --git a/bin/sh/eval.c b/bin/sh/eval.c index a26f36d..7ceaa94 100644 --- a/bin/sh/eval.c +++ b/bin/sh/eval.c @@ -367,6 +367,7 @@ evalcase(union node *n, int flags) setstackmark(&smark); arglist.lastp = &arglist.list; oexitstatus = exitstatus; + exitstatus = 0; expandarg(n->ncase.expr, &arglist, EXP_TILDE); for (cp = n->ncase.cases ; cp && evalskip == 0 ; cp = cp->nclist.next) { for (patp = cp->nclist.pattern ; patp ; patp = patp->narg.next) { diff --git a/bin/sh/sh.1 b/bin/sh/sh.1 index 75d243c..10cd607 100644 --- a/bin/sh/sh.1 +++ b/bin/sh/sh.1 @@ -861,6 +861,10 @@ described later), separated by .Dq Li \&| characters. +The exit code of the +.Ic case +command is the exit code of the last command executed in the list or +zero if no patterns were matched. .Ss Grouping Commands Together Commands may be grouped by writing either .Bd -literal -offset indent -- cgit v1.1