Fix for PR#1287. This makes sh behave sensibly in case statements in the

face of aliases.  Note, bash doesn't do aliases while running scripts, but
"real" ksh does..

Also:
  Reduce redundant .Nm macros in (unused) bltin/echo.1
  nuke error2, it's hardly used.
  More -Wall cleanups
  dont do certain history operations if NO_HISTORY defined
  handle quad_t's from resource limits

Submitted by: Steve Price <sprice@hiwaay.net>  (minor tweaks by me)
This commit is contained in:
Peter Wemm 1996-09-03 14:16:06 +00:00
parent b30b117473
commit 4417f6297d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=18018
13 changed files with 56 additions and 49 deletions

View File

@ -34,7 +34,7 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)echo.1 8.2 (Berkeley) 5/4/95
.\" $Id: echo.1,v 1.2 1994/09/24 02:58:27 davidg Exp $
.\" $Id: echo.1,v 1.3 1996/09/01 10:22:15 peter Exp $
.\"
.Dd May 4, 1995
.Dt ECHO 1
@ -43,11 +43,11 @@
.Nm echo
.Nd produce message in a shell script
.Sh SYNOPSIS
.Nm echo
.Nm
.Op Fl n | Fl e
.Ar args...
.Sh DESCRIPTION
.Nm Echo
.Nm
prints its arguments on the standard output, separated by spaces.
Unless the
.Fl n
@ -55,7 +55,7 @@ option is present, a newline is output following the arguments.
The
.Fl e
option causes
.Nm echo
.Nm
to treat the escape sequences specially, as described in the following
paragraph.
The
@ -77,7 +77,7 @@ A backspace character is output.
.It Li \ec
Subsequent output is suppressed. This is normally used at the end of the
last argument to suppress the trailing newline that
.Nm echo
.Nm
would otherwise output.
.It Li \ef
Output a form feed.
@ -107,6 +107,6 @@ differs from the
C language mechanism.
.Pp
There is no way to force
.Nm echo
.Nm
to treat its arguments literally, rather than interpreting them as
options and escape sequences.

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: error.c,v 1.3 1995/05/30 00:07:10 rgrimes Exp $
* $Id: error.c,v 1.4 1996/09/01 10:19:53 peter Exp $
*/
#ifndef lint
@ -112,14 +112,6 @@ onint() {
void
error2(a, b)
char *a, *b;
{
error("%s: %s", a, b);
}
/*
* Error is called to raise the error exception. If the first argument
* is not NULL then error prints an error message using printf style

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)error.h 8.2 (Berkeley) 5/4/95
* $Id: error.h,v 1.2 1994/09/24 02:57:28 davidg Exp $
* $Id: error.h,v 1.3 1996/09/01 10:19:55 peter Exp $
*/
/*
@ -90,7 +90,6 @@ extern char *commandname; /* name of command--printed on error */
void exraise __P((int));
void onint __P((void));
void error2 __P((char *, char *));
void error __P((char *, ...));
char *errmsg __P((int, int));

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: exec.c,v 1.4 1995/05/30 00:07:12 rgrimes Exp $
* $Id: exec.c,v 1.5 1996/09/01 10:20:02 peter Exp $
*/
#ifndef lint
@ -132,7 +132,7 @@ shellexec(argv, envp, path, index)
stunalloc(cmdname);
}
}
error2(argv[0], errmsg(e, E_EXEC));
error("%s: %s", argv[0], errmsg(e, E_EXEC));
}

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: input.c,v 1.4 1995/11/03 18:50:14 peter Exp $
* $Id: input.c,v 1.5 1996/09/01 10:20:18 peter Exp $
*/
#ifndef lint
@ -178,14 +178,13 @@ pread()
retry:
if (parsefile->fd == 0 && el) {
const char *rl_cp;
int len;
rl_cp = el_gets(el, &nr);
if (rl_cp == NULL)
nr = 0;
else {
/* XXX - BUFSIZE should redesign so not necessary */
strcpy(parsenextc, rl_cp);
(void)strcpy(parsenextc, rl_cp);
}
} else {
@ -286,13 +285,13 @@ preadbuffer() {
savec = *q;
*q = '\0';
#ifndef NO_HISTORY
if (parsefile->fd == 0 && hist && something) {
INTOFF;
history(hist, whichprompt == 1 ? H_ENTER : H_ADD, parsenextc);
INTON;
}
#endif
if (vflag) {
out2str(parsenextc);

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: jobs.c,v 1.5 1996/09/01 10:20:24 peter Exp $
* $Id: jobs.c,v 1.6 1996/09/03 13:35:09 peter Exp $
*/
#ifndef lint
@ -52,6 +52,7 @@ static char sccsid[] = "@(#)jobs.c 8.5 (Berkeley) 5/4/95";
#include <sys/time.h>
#include <sys/resource.h>
#endif
#include <sys/ioctl.h>
#include "shell.h"
#if JOBS

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: memalloc.c,v 1.2 1994/09/24 02:57:50 davidg Exp $
* $Id: memalloc.c,v 1.3 1996/09/01 10:20:42 peter Exp $
*/
#ifndef lint
@ -207,7 +207,7 @@ popstackmark(mark)
void
growstackblock() {
char *p;
int newlen = stacknleft * 2 + 100;
int newlen = ALIGN(stacknleft * 2 + 100);
char *oldspace = stacknxt;
int oldlen = stacknleft;
struct stack_block *sp;
@ -226,7 +226,7 @@ growstackblock() {
p = stalloc(newlen);
memcpy(p, oldspace, oldlen);
stacknxt = p; /* free the space */
stacknleft += ALIGN(newlen); /* we just allocated */
stacknleft += newlen; /* we just allocated */
}
}

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: miscbltin.c,v 1.5 1996/09/01 10:20:46 peter Exp $
* $Id: miscbltin.c,v 1.6 1996/09/03 13:35:10 peter Exp $
*/
#ifndef lint
@ -51,6 +51,7 @@ static char sccsid[] = "@(#)miscbltin.c 8.4 (Berkeley) 5/4/95";
#include <unistd.h>
#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include "shell.h"
#include "options.h"
@ -292,7 +293,7 @@ ulimitcmd(argc, argv)
char **argv;
{
register int c;
quad_t val;
quad_t val = 0;
enum { SOFT = 0x1, HARD = 0x2 }
how = SOFT | HARD;
const struct limits *l;
@ -365,7 +366,7 @@ ulimitcmd(argc, argv)
else
{
val /= l->factor;
out1fmt("%ld\n", (long) val);
out1fmt("%qd\n", (quad_t) val);
}
}
return 0;
@ -393,7 +394,7 @@ ulimitcmd(argc, argv)
else
{
val /= l->factor;
out1fmt("%ld\n", (long) val);
out1fmt("%qd\n", (quad_t) val);
}
}
return 0;

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: mystring.c,v 1.2 1994/09/24 02:57:59 davidg Exp $
* $Id: mystring.c,v 1.3 1996/09/01 10:21:03 peter Exp $
*/
#ifndef lint
@ -117,7 +117,7 @@ number(s)
{
if (! is_number(s))
error2("Illegal number", (char *)s);
error("Illegal number: %s", (char *)s);
return atoi(s);
}

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: output.c,v 1.2 1994/09/24 02:58:06 davidg Exp $
* $Id: output.c,v 1.3 1996/09/01 10:21:23 peter Exp $
*/
#ifndef lint
@ -52,6 +52,7 @@ static char sccsid[] = "@(#)output.c 8.2 (Berkeley) 5/4/95";
*/
#include <sys/ioctl.h>
#include <sys/types.h> /* quad_t */
#include <stdio.h> /* defines BUFSIZ */
#include <string.h>
@ -337,7 +338,7 @@ fmtstr(va_alist)
* Formatted output. This routine handles a subset of the printf formats:
* - Formats supported: d, u, o, X, s, and c.
* - The x format is also accepted but is treated like X.
* - The l modifier is accepted.
* - The l and q modifiers is accepted.
* - The - and # flags are accepted; # only works with the o format.
* - Width and precision may be specified with any format except c.
* - An * may be given for the width or precision.
@ -349,7 +350,7 @@ fmtstr(va_alist)
#define TEMPSIZE 24
#ifdef __STDC__
static const char digit[16] = "0123456789ABCDEF";
static const char digit[] = "0123456789ABCDEF";
#else
static const char digit[17] = "0123456789ABCDEF";
#endif
@ -368,10 +369,11 @@ doformat(dest, f, ap)
int width;
int prec;
int islong;
int isquad;
char *p;
int sign;
long l;
unsigned long num;
quad_t l;
u_quad_t num;
unsigned base;
int len;
int size;
@ -387,6 +389,7 @@ doformat(dest, f, ap)
width = 0;
prec = -1;
islong = 0;
isquad = 0;
for (;;) {
if (*f == '-')
flushleft++;
@ -418,11 +421,16 @@ doformat(dest, f, ap)
if (*f == 'l') {
islong++;
f++;
} else if (*f == 'q') {
isquad++;
f++;
}
switch (*f) {
case 'd':
if (islong)
l = va_arg(ap, long);
else if (isquad)
l = va_arg(ap, quad_t);
else
l = va_arg(ap, int);
sign = 0;
@ -447,6 +455,8 @@ doformat(dest, f, ap)
sign = 0;
if (islong)
num = va_arg(ap, unsigned long);
else if (isquad)
num = va_arg(ap, u_quad_t);
else
num = va_arg(ap, unsigned int);
number: /* process a number */

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: parser.c,v 1.11 1996/02/03 13:27:55 joerg Exp $
* $Id: parser.c,v 1.12 1996/09/01 10:21:31 peter Exp $
*/
#ifndef lint
@ -95,6 +95,8 @@ struct heredoc *heredoc;
int quoteflag; /* set if (part of) last token was quoted */
int startlinno; /* line # where last token started */
/* XXX When 'noaliases' is set to one, no alias expansion takes place. */
static int noaliases = 0;
#define GDB_HACK 1 /* avoid local declarations which gdb can't handle */
#ifdef GDB_HACK
@ -414,6 +416,7 @@ TRACE(("expecting DO got %s %s\n", tokname[got], got == TWORD ? wordtext : ""));
if (lasttoken != TWORD || ! equal(wordtext, "in"))
synerror("expecting \"in\"");
cpp = &n1->ncase.cases;
noaliases = 1; /* turn off alias expansion */
checkkwd = 2, readtoken();
do {
*cpp = cp = (union node *)stalloc(sizeof (struct nclist));
@ -431,18 +434,19 @@ TRACE(("expecting DO got %s %s\n", tokname[got], got == TWORD ? wordtext : ""));
}
ap->narg.next = NULL;
if (lasttoken != TRP)
synexpect(TRP);
noaliases = 0, synexpect(TRP);
cp->nclist.body = list(0);
checkkwd = 2;
if ((t = readtoken()) != TESAC) {
if (t != TENDCASE)
synexpect(TENDCASE);
noaliases = 0, synexpect(TENDCASE);
else
checkkwd = 2, readtoken();
}
cpp = &cp->nclist.next;
} while(lasttoken != TESAC);
noaliases = 0; /* reset alias expansion */
*cpp = NULL;
checkkwd = 1;
break;
@ -712,7 +716,8 @@ readtoken() {
goto out;
}
}
if ((ap = lookupalias(wordtext, 1)) != NULL) {
if (noaliases == 0 &&
(ap = lookupalias(wordtext, 1)) != NULL) {
pushstring(ap->val, strlen(ap->val), ap);
checkkwd = savecheckkwd;
goto top;

View File

@ -33,7 +33,7 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)sh.1 8.6 (Berkeley) 5/4/95
.\" $Id: sh.1,v 1.6 1996/08/29 18:06:10 wosch Exp $
.\" $Id: sh.1,v 1.7 1996/09/01 10:21:39 peter Exp $
.\"
.na
.TH SH 1
@ -1281,7 +1281,7 @@ resets trapped (but not ignored) signals to the
default action. The trap command has no effect on
signals that were ignored on entry to the shell.
.TP
ulimit [ -HSacdflmnpst ] [ limit ]
ulimit [ -HSacdflmnust ] [ limit ]
Set or display resource limits (see getrlimit(2)).
If ``limit'' is specified, the named resource will be set;
otherwise the current resource value will be displayed.

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: show.c,v 1.2 1994/09/24 02:58:16 davidg Exp $
* $Id: show.c,v 1.3 1996/09/01 10:21:43 peter Exp $
*/
#ifndef lint
@ -341,6 +341,7 @@ trputs(s)
}
#ifdef DEBUG
static void
trstring(s)
char *s;
@ -348,7 +349,6 @@ trstring(s)
register char *p;
char c;
#ifdef DEBUG
if (tracefile == NULL)
return;
putc('"', tracefile);
@ -380,8 +380,8 @@ backslash: putc('\\', tracefile);
}
}
putc('"', tracefile);
#endif
}
#endif
void
@ -405,13 +405,13 @@ trargs(ap)
void
opentrace() {
#ifdef DEBUG
char s[100];
char *getenv();
#ifdef O_APPEND
int flags;
#endif
#ifdef DEBUG
if (!debug)
return;
#ifdef not_this_way