summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1996-09-03 14:16:06 +0000
committerpeter <peter@FreeBSD.org>1996-09-03 14:16:06 +0000
commit0475c084c22d974adb50e049f8526e7ba3325c20 (patch)
tree813be7fe988c4549d7c49e07f8aa26f6bed0c68a /bin
parent46c0540195d8219fc18878aaf2e8f89c0c6778dc (diff)
downloadFreeBSD-src-0475c084c22d974adb50e049f8526e7ba3325c20.zip
FreeBSD-src-0475c084c22d974adb50e049f8526e7ba3325c20.tar.gz
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)
Diffstat (limited to 'bin')
-rw-r--r--bin/sh/bltin/echo.112
-rw-r--r--bin/sh/error.c10
-rw-r--r--bin/sh/error.h3
-rw-r--r--bin/sh/exec.c4
-rw-r--r--bin/sh/input.c9
-rw-r--r--bin/sh/jobs.c3
-rw-r--r--bin/sh/memalloc.c6
-rw-r--r--bin/sh/miscbltin.c9
-rw-r--r--bin/sh/mystring.c4
-rw-r--r--bin/sh/output.c20
-rw-r--r--bin/sh/parser.c13
-rw-r--r--bin/sh/sh.14
-rw-r--r--bin/sh/show.c8
13 files changed, 56 insertions, 49 deletions
diff --git a/bin/sh/bltin/echo.1 b/bin/sh/bltin/echo.1
index 39a5aa1..c5a1b42 100644
--- a/bin/sh/bltin/echo.1
+++ b/bin/sh/bltin/echo.1
@@ -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.
diff --git a/bin/sh/error.c b/bin/sh/error.c
index ca5c17b..9bd94ca 100644
--- a/bin/sh/error.c
+++ b/bin/sh/error.c
@@ -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
diff --git a/bin/sh/error.h b/bin/sh/error.h
index 261b096..fb26f1e 100644
--- a/bin/sh/error.h
+++ b/bin/sh/error.h
@@ -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));
diff --git a/bin/sh/exec.c b/bin/sh/exec.c
index 4b6b1b4..dec1eaf 100644
--- a/bin/sh/exec.c
+++ b/bin/sh/exec.c
@@ -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));
}
diff --git a/bin/sh/input.c b/bin/sh/input.c
index 1d41bb2..e1c530c 100644
--- a/bin/sh/input.c
+++ b/bin/sh/input.c
@@ -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 @@ check:
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);
diff --git a/bin/sh/jobs.c b/bin/sh/jobs.c
index 005e2fd..b9b4096 100644
--- a/bin/sh/jobs.c
+++ b/bin/sh/jobs.c
@@ -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
diff --git a/bin/sh/memalloc.c b/bin/sh/memalloc.c
index 38b32a9..adaf1fe 100644
--- a/bin/sh/memalloc.c
+++ b/bin/sh/memalloc.c
@@ -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 */
}
}
diff --git a/bin/sh/miscbltin.c b/bin/sh/miscbltin.c
index 97b2885..4122ac5 100644
--- a/bin/sh/miscbltin.c
+++ b/bin/sh/miscbltin.c
@@ -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;
diff --git a/bin/sh/mystring.c b/bin/sh/mystring.c
index 5cec9e6..ab7ea92 100644
--- a/bin/sh/mystring.c
+++ b/bin/sh/mystring.c
@@ -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);
}
diff --git a/bin/sh/output.c b/bin/sh/output.c
index a52cea9..cc0e84d 100644
--- a/bin/sh/output.c
+++ b/bin/sh/output.c
@@ -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 @@ uns_number: /* an unsigned number */
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 */
diff --git a/bin/sh/parser.c b/bin/sh/parser.c
index 64a0cd0..d24508e 100644
--- a/bin/sh/parser.c
+++ b/bin/sh/parser.c
@@ -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;
diff --git a/bin/sh/sh.1 b/bin/sh/sh.1
index 5be3e07..7be1828 100644
--- a/bin/sh/sh.1
+++ b/bin/sh/sh.1
@@ -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.
diff --git a/bin/sh/show.c b/bin/sh/show.c
index ac1992a..4f5d546 100644
--- a/bin/sh/show.c
+++ b/bin/sh/show.c
@@ -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
OpenPOWER on IntegriCloud