Merge in my changes from vangogh, and fix the x=false
; echo $? == 0
bug.
This commit is contained in:
parent
8aa6c376b6
commit
07bae7eddd
@ -1,21 +1,19 @@
|
||||
# $NetBSD: Makefile,v 1.19 1995/03/21 09:08:36 cgd Exp $
|
||||
# @(#)Makefile 8.1 (Berkeley) 6/8/93
|
||||
# $NetBSD: Makefile,v 1.20 1995/05/11 21:28:33 christos Exp $
|
||||
# @(#)Makefile 8.4 (Berkeley) 5/5/95
|
||||
|
||||
PROG= sh
|
||||
SRCS= alias.c builtins.c cd.c echo.c error.c eval.c exec.c expand.c \
|
||||
histedit.c input.c jobs.c mail.c main.c memalloc.c miscbltin.c \
|
||||
mystring.c nodes.c options.c parser.c redir.c show.c \
|
||||
syntax.c trap.c output.c ulimit.c var.c
|
||||
mystring.c nodes.c options.c parser.c redir.c show.c syntax.c \
|
||||
trap.c output.c var.c
|
||||
OBJS+= init.o arith.o arith_lex.o
|
||||
LDADD+= -ll -ledit -ltermcap
|
||||
DPADD+= ${LIBL} ${LIBEDIT} ${LIBTERMCAP}
|
||||
LFLAGS= -8 # 8-bit lex scanner for arithmetic
|
||||
CFLAGS+=-DSHELL -I. -I${.CURDIR}
|
||||
.PATH: ${.CURDIR}/bltin ${.CURDIR}/../../usr.bin/printf
|
||||
CLEANFILES+=\
|
||||
builtins.c builtins.h init.c mkinit mknodes mksyntax \
|
||||
nodes.c nodes.h syntax.c syntax.h token.def \
|
||||
y.tab.h
|
||||
nodes.c nodes.h printf.o syntax.c syntax.h token.def y.tab.h
|
||||
|
||||
.depend parser.o: token.def
|
||||
token.def: mktokens
|
||||
|
@ -1,4 +1,4 @@
|
||||
# $NetBSD: TOUR,v 1.6 1995/03/21 09:08:38 cgd Exp $
|
||||
# $NetBSD: TOUR,v 1.7 1995/05/11 21:28:38 christos Exp $
|
||||
# @(#)TOUR 8.1 (Berkeley) 5/31/93
|
||||
|
||||
NOTE -- This is the original TOUR paper distributed with ash and
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: alias.c,v 1.5 1995/03/21 09:08:40 cgd Exp $ */
|
||||
/* $NetBSD: alias.c,v 1.6 1995/05/11 21:28:40 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1993
|
||||
@ -38,12 +38,13 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)alias.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)alias.c 8.3 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: alias.c,v 1.5 1995/03/21 09:08:40 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: alias.c,v 1.6 1995/05/11 21:28:40 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "shell.h"
|
||||
#include "input.h"
|
||||
#include "output.h"
|
||||
@ -57,6 +58,8 @@ static char rcsid[] = "$NetBSD: alias.c,v 1.5 1995/03/21 09:08:40 cgd Exp $";
|
||||
|
||||
struct alias *atab[ATABSIZE];
|
||||
|
||||
STATIC void setalias __P((char *, char *));
|
||||
STATIC int unalias __P((char *));
|
||||
STATIC struct alias **hashalias __P((char *));
|
||||
|
||||
STATIC
|
||||
@ -215,7 +218,7 @@ aliascmd(argc, argv)
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
while (n = *++argv) {
|
||||
while ((n = *++argv) != NULL) {
|
||||
if ((v = strchr(n+1, '=')) == NULL) /* n+1: funny ksh stuff */
|
||||
if ((ap = lookupalias(n, 0)) == NULL) {
|
||||
outfmt(out2, "alias: %s not found\n", n);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: alias.h,v 1.3 1995/03/21 09:08:41 cgd Exp $ */
|
||||
/* $NetBSD: alias.h,v 1.4 1995/05/11 21:28:42 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)alias.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)alias.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
#define ALIASINUSE 1
|
||||
@ -47,4 +47,7 @@ struct alias {
|
||||
int flag;
|
||||
};
|
||||
|
||||
struct alias *lookupalias();
|
||||
struct alias *lookupalias __P((char *, int));
|
||||
int aliascmd __P((int, char **));
|
||||
int unaliascmd __P((int, char **));
|
||||
void rmaliases __P((void));
|
||||
|
39
bin/sh/arith.h
Normal file
39
bin/sh/arith.h
Normal file
@ -0,0 +1,39 @@
|
||||
/* $NetBSD: arith.h,v 1.1 1995/05/11 21:28:44 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1995
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)arith.h 1.1 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
int arith __P((char *));
|
||||
int expcmd __P((int , char **));
|
@ -53,7 +53,7 @@ expr: ARITH_LPAREN expr ARITH_RPAREN = { $$ = $2; }
|
||||
| ARITH_NUM
|
||||
;
|
||||
%%
|
||||
/* $NetBSD: arith.y,v 1.5 1995/03/21 09:08:43 cgd Exp $ */
|
||||
/* $NetBSD: arith.y,v 1.6 1995/05/11 21:28:45 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1993
|
||||
@ -93,9 +93,9 @@ expr: ARITH_LPAREN expr ARITH_RPAREN = { $$ = $2; }
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)arith.y 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)arith.y 8.3 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: arith.y,v 1.5 1995/03/21 09:08:43 cgd Exp $";
|
||||
static char sccsid[] = "$NetBSD: arith.y,v 1.6 1995/05/11 21:28:45 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
@ -106,6 +106,7 @@ static char rcsid[] = "$NetBSD: arith.y,v 1.5 1995/03/21 09:08:43 cgd Exp $";
|
||||
|
||||
char *arith_buf, *arith_startbuf;
|
||||
|
||||
int
|
||||
arith(s)
|
||||
char *s;
|
||||
{
|
||||
@ -121,6 +122,7 @@ arith(s)
|
||||
return (result);
|
||||
}
|
||||
|
||||
void
|
||||
yyerror(s)
|
||||
char *s;
|
||||
{
|
||||
@ -134,7 +136,9 @@ yyerror(s)
|
||||
/*
|
||||
* The exp(1) builtin.
|
||||
*/
|
||||
int
|
||||
expcmd(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
char *p;
|
||||
|
@ -1,5 +1,5 @@
|
||||
%{
|
||||
/* $NetBSD: arith_lex.l,v 1.4 1995/03/21 09:08:45 cgd Exp $ */
|
||||
/* $NetBSD: arith_lex.l,v 1.5 1995/05/11 21:28:46 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1993
|
||||
@ -39,13 +39,15 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)arith_lex.l 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)arith_lex.l 8.3 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: arith_lex.l,v 1.4 1995/03/21 09:08:45 cgd Exp $";
|
||||
static char sccsid[] = "$NetBSD: arith_lex.l,v 1.5 1995/05/11 21:28:46 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <unistd.h>
|
||||
#include "y.tab.h"
|
||||
#include "error.h"
|
||||
|
||||
extern yylval;
|
||||
extern char *arith_buf, *arith_startbuf;
|
||||
@ -82,6 +84,7 @@ extern char *arith_buf, *arith_startbuf;
|
||||
. { error("arith: syntax error: \"%s\"\n", arith_startbuf); }
|
||||
%%
|
||||
|
||||
void
|
||||
arith_lex_reset() {
|
||||
YY_NEW_FILE;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/sh -
|
||||
# $NetBSD: builtins.def,v 1.11 1995/03/21 09:08:47 cgd Exp $
|
||||
# $NetBSD: builtins.def,v 1.12 1995/05/11 21:28:48 christos Exp $
|
||||
#
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
@ -35,7 +35,7 @@
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# @(#)builtins 8.1 (Berkeley) 5/31/93
|
||||
# @(#)builtins.def 8.4 (Berkeley) 5/4/95
|
||||
|
||||
#
|
||||
# This file lists all the builtin commands. The first column is the name
|
||||
@ -47,10 +47,6 @@
|
||||
# for bltincmd, which is run when the user does not specify a command, must
|
||||
# come first.
|
||||
#
|
||||
# Copyright (C) 1989 by Kenneth Almquist. All rights reserved.
|
||||
# This file is part of ash, which is distributed under the terms specified
|
||||
# by the Ash General Public License. See the file named LICENSE.
|
||||
#
|
||||
# NOTE: bltincmd must come first!
|
||||
|
||||
bltincmd command
|
||||
|
33
bin/sh/cd.c
33
bin/sh/cd.c
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: cd.c,v 1.12 1995/03/21 09:08:48 cgd Exp $ */
|
||||
/* $NetBSD: cd.c,v 1.13 1995/05/11 21:28:49 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,14 +38,15 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)cd.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)cd.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: cd.c,v 1.12 1995/03/21 09:08:48 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: cd.c,v 1.13 1995/05/11 21:28:49 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
@ -61,22 +62,14 @@ static char rcsid[] = "$NetBSD: cd.c,v 1.12 1995/03/21 09:08:48 cgd Exp $";
|
||||
#include "output.h"
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
#include "redir.h"
|
||||
#include "mystring.h"
|
||||
#include "extern.h"
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
STATIC int docd(char *, int);
|
||||
STATIC void updatepwd(char *);
|
||||
STATIC void getpwd(void);
|
||||
STATIC char *getcomponent(void);
|
||||
#else
|
||||
STATIC int docd();
|
||||
STATIC void updatepwd();
|
||||
STATIC void getpwd();
|
||||
STATIC char *getcomponent();
|
||||
#endif
|
||||
#include "show.h"
|
||||
|
||||
STATIC int docd __P((char *, int));
|
||||
STATIC char *getcomponent __P((void));
|
||||
STATIC void updatepwd __P((char *));
|
||||
STATIC void getpwd __P((void));
|
||||
|
||||
char *curdir; /* current working directory */
|
||||
char *prevdir; /* previous working directory */
|
||||
@ -119,6 +112,8 @@ cdcmd(argc, argv)
|
||||
}
|
||||
}
|
||||
error("can't cd to %s", dest);
|
||||
/*NOTREACHED*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -177,7 +172,7 @@ top:
|
||||
}
|
||||
first = 1;
|
||||
while ((q = getcomponent()) != NULL) {
|
||||
if (q[0] == '\0' || q[0] == '.' && q[1] == '\0')
|
||||
if (q[0] == '\0' || (q[0] == '.' && q[1] == '\0'))
|
||||
continue;
|
||||
if (! first)
|
||||
STPUTC('/', p);
|
||||
@ -370,7 +365,7 @@ getpwd() {
|
||||
pip[1] = -1;
|
||||
p = buf;
|
||||
while ((i = read(pip[0], p, buf + MAXPWD - p)) > 0
|
||||
|| i == -1 && errno == EINTR) {
|
||||
|| (i == -1 && errno == EINTR)) {
|
||||
if (i > 0)
|
||||
p += i;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: error.c,v 1.13 1995/03/23 00:01:03 mycroft Exp $ */
|
||||
/* $NetBSD: error.c,v 1.14 1995/05/11 21:28:51 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,9 +38,9 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
char sccsid[] = "@(#)error.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)error.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: error.c,v 1.13 1995/03/23 00:01:03 mycroft Exp $";
|
||||
static char rcsid[] = "$NetBSD: error.c,v 1.14 1995/05/11 21:28:51 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
@ -53,12 +53,8 @@ static char rcsid[] = "$NetBSD: error.c,v 1.13 1995/03/23 00:01:03 mycroft Exp $
|
||||
#include "options.h"
|
||||
#include "output.h"
|
||||
#include "error.h"
|
||||
#include "show.h"
|
||||
#include <signal.h>
|
||||
#ifdef __STDC__
|
||||
#include "stdarg.h"
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
@ -134,21 +130,23 @@ error2(a, b)
|
||||
* formatting. It then raises the error exception.
|
||||
*/
|
||||
|
||||
#ifdef __STDC__
|
||||
#if __STDC__
|
||||
void
|
||||
error(char *msg, ...) {
|
||||
error(char *msg, ...)
|
||||
#else
|
||||
void
|
||||
error(va_alist)
|
||||
va_dcl
|
||||
{
|
||||
#endif
|
||||
{
|
||||
#if !__STDC__
|
||||
char *msg;
|
||||
#endif
|
||||
va_list ap;
|
||||
|
||||
CLEAR_PENDING_INT;
|
||||
INTOFF;
|
||||
#ifdef __STDC__
|
||||
|
||||
#if __STDC__
|
||||
va_start(ap, msg);
|
||||
#else
|
||||
va_start(ap);
|
||||
@ -187,55 +185,57 @@ struct errname {
|
||||
#define ALL (E_OPEN|E_CREAT|E_EXEC)
|
||||
|
||||
STATIC const struct errname errormsg[] = {
|
||||
EINTR, ALL, "interrupted",
|
||||
EACCES, ALL, "permission denied",
|
||||
EIO, ALL, "I/O error",
|
||||
ENOENT, E_OPEN, "no such file",
|
||||
ENOENT, E_CREAT, "directory nonexistent",
|
||||
ENOENT, E_EXEC, "not found",
|
||||
ENOTDIR, E_OPEN, "no such file",
|
||||
ENOTDIR, E_CREAT, "directory nonexistent",
|
||||
ENOTDIR, E_EXEC, "not found",
|
||||
EISDIR, ALL, "is a directory",
|
||||
/* EMFILE, ALL, "too many open files", */
|
||||
ENFILE, ALL, "file table overflow",
|
||||
ENOSPC, ALL, "file system full",
|
||||
{ EINTR, ALL, "interrupted" },
|
||||
{ EACCES, ALL, "permission denied" },
|
||||
{ EIO, ALL, "I/O error" },
|
||||
{ ENOENT, E_OPEN, "no such file" },
|
||||
{ ENOENT, E_CREAT,"directory nonexistent" },
|
||||
{ ENOENT, E_EXEC, "not found" },
|
||||
{ ENOTDIR, E_OPEN, "no such file" },
|
||||
{ ENOTDIR, E_CREAT,"directory nonexistent" },
|
||||
{ ENOTDIR, E_EXEC, "not found" },
|
||||
{ EISDIR, ALL, "is a directory" },
|
||||
#ifdef notdef
|
||||
{ EMFILE, ALL, "too many open files" },
|
||||
#endif
|
||||
{ ENFILE, ALL, "file table overflow" },
|
||||
{ ENOSPC, ALL, "file system full" },
|
||||
#ifdef EDQUOT
|
||||
EDQUOT, ALL, "disk quota exceeded",
|
||||
{ EDQUOT, ALL, "disk quota exceeded" },
|
||||
#endif
|
||||
#ifdef ENOSR
|
||||
ENOSR, ALL, "no streams resources",
|
||||
{ ENOSR, ALL, "no streams resources" },
|
||||
#endif
|
||||
ENXIO, ALL, "no such device or address",
|
||||
EROFS, ALL, "read-only file system",
|
||||
ETXTBSY, ALL, "text busy",
|
||||
{ ENXIO, ALL, "no such device or address" },
|
||||
{ EROFS, ALL, "read-only file system" },
|
||||
{ ETXTBSY, ALL, "text busy" },
|
||||
#ifdef SYSV
|
||||
EAGAIN, E_EXEC, "not enough memory",
|
||||
{ EAGAIN, E_EXEC, "not enough memory" },
|
||||
#endif
|
||||
ENOMEM, ALL, "not enough memory",
|
||||
{ ENOMEM, ALL, "not enough memory" },
|
||||
#ifdef ENOLINK
|
||||
ENOLINK, ALL, "remote access failed",
|
||||
{ ENOLINK, ALL, "remote access failed" },
|
||||
#endif
|
||||
#ifdef EMULTIHOP
|
||||
EMULTIHOP, ALL, "remote access failed",
|
||||
{ EMULTIHOP, ALL, "remote access failed" },
|
||||
#endif
|
||||
#ifdef ECOMM
|
||||
ECOMM, ALL, "remote access failed",
|
||||
{ ECOMM, ALL, "remote access failed" },
|
||||
#endif
|
||||
#ifdef ESTALE
|
||||
ESTALE, ALL, "remote access failed",
|
||||
{ ESTALE, ALL, "remote access failed" },
|
||||
#endif
|
||||
#ifdef ETIMEDOUT
|
||||
ETIMEDOUT, ALL, "remote access failed",
|
||||
{ ETIMEDOUT, ALL, "remote access failed" },
|
||||
#endif
|
||||
#ifdef ELOOP
|
||||
ELOOP, ALL, "symbolic link loop",
|
||||
{ ELOOP, ALL, "symbolic link loop" },
|
||||
#endif
|
||||
E2BIG, E_EXEC, "argument list too long",
|
||||
{ E2BIG, E_EXEC, "argument list too long" },
|
||||
#ifdef ELIBACC
|
||||
ELIBACC, E_EXEC, "shared library missing",
|
||||
{ ELIBACC, E_EXEC, "shared library missing" },
|
||||
#endif
|
||||
0, 0, NULL
|
||||
{ 0, 0, NULL },
|
||||
};
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: error.h,v 1.7 1995/03/21 09:08:52 cgd Exp $ */
|
||||
/* $NetBSD: error.h,v 1.8 1995/05/11 21:28:53 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)error.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)error.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -84,24 +84,16 @@ extern volatile int intpending;
|
||||
extern char *commandname; /* name of command--printed on error */
|
||||
|
||||
#define INTOFF suppressint++
|
||||
#define INTON if (--suppressint == 0 && intpending) onint(); else
|
||||
#define INTON { if (--suppressint == 0 && intpending) onint(); }
|
||||
#define FORCEINTON {suppressint = 0; if (intpending) onint();}
|
||||
#define CLEAR_PENDING_INT intpending = 0
|
||||
#define int_pending() intpending
|
||||
|
||||
#ifdef __STDC__
|
||||
void exraise(int);
|
||||
void onint(void);
|
||||
void error2(char *, char *);
|
||||
void error(char *, ...);
|
||||
char *errmsg(int, int);
|
||||
#else
|
||||
void exraise();
|
||||
void onint();
|
||||
void error2();
|
||||
void error();
|
||||
char *errmsg();
|
||||
#endif
|
||||
void exraise __P((int));
|
||||
void onint __P((void));
|
||||
void error2 __P((char *, char *));
|
||||
void error __P((char *, ...));
|
||||
char *errmsg __P((int, int));
|
||||
|
||||
|
||||
/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: eval.c,v 1.20 1995/03/31 21:58:09 christos Exp $ */
|
||||
/* $NetBSD: eval.c,v 1.21 1995/05/11 21:28:56 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1993
|
||||
@ -38,12 +38,15 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)eval.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)eval.c 8.4 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: eval.c,v 1.20 1995/03/31 21:58:09 christos Exp $";
|
||||
static char rcsid[] = "$NetBSD: eval.c,v 1.21 1995/05/11 21:28:56 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/*
|
||||
* Evaluate a command.
|
||||
*/
|
||||
@ -65,13 +68,11 @@ static char rcsid[] = "$NetBSD: eval.c,v 1.20 1995/03/31 21:58:09 christos Exp $
|
||||
#include "var.h"
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
#include "show.h"
|
||||
#include "mystring.h"
|
||||
#ifndef NO_HISTORY
|
||||
#include "myhistedit.h"
|
||||
#endif
|
||||
#include "extern.h"
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
/* flags in argument to evaltree */
|
||||
@ -96,26 +97,14 @@ struct strlist *cmdenviron;
|
||||
int exitstatus; /* exit status of last command */
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
STATIC void evalloop(union node *);
|
||||
STATIC void evalfor(union node *);
|
||||
STATIC void evalcase(union node *, int);
|
||||
STATIC void evalsubshell(union node *, int);
|
||||
STATIC void expredir(union node *);
|
||||
STATIC void evalpipe(union node *);
|
||||
STATIC void evalcommand(union node *, int, struct backcmd *);
|
||||
STATIC void prehash(union node *);
|
||||
#else
|
||||
STATIC void evalloop();
|
||||
STATIC void evalfor();
|
||||
STATIC void evalcase();
|
||||
STATIC void evalsubshell();
|
||||
STATIC void expredir();
|
||||
STATIC void evalpipe();
|
||||
STATIC void evalcommand();
|
||||
STATIC void prehash();
|
||||
#endif
|
||||
|
||||
STATIC void evalloop __P((union node *));
|
||||
STATIC void evalfor __P((union node *));
|
||||
STATIC void evalcase __P((union node *, int));
|
||||
STATIC void evalsubshell __P((union node *, int));
|
||||
STATIC void expredir __P((union node *));
|
||||
STATIC void evalpipe __P((union node *));
|
||||
STATIC void evalcommand __P((union node *, int, struct backcmd *));
|
||||
STATIC void prehash __P((union node *));
|
||||
|
||||
|
||||
/*
|
||||
@ -615,6 +604,13 @@ evalcommand(cmd, flags, backcmd)
|
||||
struct localvar *volatile savelocalvars;
|
||||
volatile int e;
|
||||
char *lastarg;
|
||||
#if __GNUC__
|
||||
/* Avoid longjmp clobbering */
|
||||
(void) &argv;
|
||||
(void) &argc;
|
||||
(void) &lastarg;
|
||||
(void) &flags;
|
||||
#endif
|
||||
|
||||
/* First expand the arguments. */
|
||||
TRACE(("evalcommand(0x%lx, %d) called\n", (long)cmd, flags));
|
||||
@ -700,11 +696,11 @@ evalcommand(cmd, flags, backcmd)
|
||||
|
||||
/* Fork off a child process if necessary. */
|
||||
if (cmd->ncmd.backgnd
|
||||
|| cmdentry.cmdtype == CMDNORMAL && (flags & EV_EXIT) == 0
|
||||
|| (flags & EV_BACKCMD) != 0
|
||||
|| (cmdentry.cmdtype == CMDNORMAL && (flags & EV_EXIT) == 0)
|
||||
|| ((flags & EV_BACKCMD) != 0
|
||||
&& (cmdentry.cmdtype != CMDBUILTIN
|
||||
|| cmdentry.u.index == DOTCMD
|
||||
|| cmdentry.u.index == EVALCMD)) {
|
||||
|| cmdentry.u.index == EVALCMD))) {
|
||||
jp = makejob(cmd, 1);
|
||||
mode = cmd->ncmd.backgnd;
|
||||
if (flags & EV_BACKCMD) {
|
||||
@ -894,7 +890,8 @@ bltincmd(argc, argv)
|
||||
char **argv;
|
||||
{
|
||||
listsetvar(cmdenviron);
|
||||
return 0;
|
||||
/* Preserve the exitstatus as POSIX.2 mandates */
|
||||
return exitstatus;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: eval.h,v 1.7 1995/03/21 09:08:57 cgd Exp $ */
|
||||
/* $NetBSD: eval.h,v 1.8 1995/05/11 21:28:58 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)eval.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)eval.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
extern char *commandname; /* currently executing command */
|
||||
@ -50,17 +50,17 @@ struct backcmd { /* result of evalbackcmd */
|
||||
struct job *jp; /* job structure for command */
|
||||
};
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
void evalstring(char *);
|
||||
int evalcmd __P((int, char **));
|
||||
void evalstring __P((char *));
|
||||
union node; /* BLETCH for ansi C */
|
||||
void evaltree(union node *, int);
|
||||
void evalbackcmd(union node *, struct backcmd *);
|
||||
#else
|
||||
void evalstring();
|
||||
void evaltree();
|
||||
void evalbackcmd();
|
||||
#endif
|
||||
void evaltree __P((union node *, int));
|
||||
void evalbackcmd __P((union node *, struct backcmd *));
|
||||
int bltincmd __P((int, char **));
|
||||
int breakcmd __P((int, char **));
|
||||
int returncmd __P((int, char **));
|
||||
int falsecmd __P((int, char **));
|
||||
int truecmd __P((int, char **));
|
||||
int execcmd __P((int, char **));
|
||||
|
||||
/* in_function returns nonzero if we are currently evaluating a function */
|
||||
#define in_function() funcnest
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: exec.c,v 1.15 1995/03/21 09:08:59 cgd Exp $ */
|
||||
/* $NetBSD: exec.c,v 1.16 1995/05/11 21:29:02 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,12 +38,19 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)exec.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)exec.c 8.3 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: exec.c,v 1.15 1995/03/21 09:08:59 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: exec.c,v 1.16 1995/05/11 21:29:02 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* When commands are first encountered, they are entered in a hash table.
|
||||
* This ensures that a full path search will not have to be done for them
|
||||
@ -70,12 +77,8 @@ static char rcsid[] = "$NetBSD: exec.c,v 1.15 1995/03/21 09:08:59 cgd Exp $";
|
||||
#include "error.h"
|
||||
#include "init.h"
|
||||
#include "mystring.h"
|
||||
#include "show.h"
|
||||
#include "jobs.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
||||
|
||||
#define CMDTABLESIZE 31 /* should be prime */
|
||||
@ -96,21 +99,12 @@ STATIC struct tblentry *cmdtable[CMDTABLESIZE];
|
||||
STATIC int builtinloc = -1; /* index in path of %builtin, or -1 */
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
STATIC void tryexec(char *, char **, char **);
|
||||
STATIC void execinterp(char **, char **);
|
||||
STATIC void printentry(struct tblentry *, int);
|
||||
STATIC void clearcmdentry(int);
|
||||
STATIC struct tblentry *cmdlookup(char *, int);
|
||||
STATIC void delete_cmd_entry(void);
|
||||
#else
|
||||
STATIC void tryexec();
|
||||
STATIC void execinterp();
|
||||
STATIC void printentry();
|
||||
STATIC void clearcmdentry();
|
||||
STATIC struct tblentry *cmdlookup();
|
||||
STATIC void delete_cmd_entry();
|
||||
#endif
|
||||
STATIC void tryexec __P((char *, char **, char **));
|
||||
STATIC void execinterp __P((char **, char **));
|
||||
STATIC void printentry __P((struct tblentry *, int));
|
||||
STATIC void clearcmdentry __P((int));
|
||||
STATIC struct tblentry *cmdlookup __P((char *, int));
|
||||
STATIC void delete_cmd_entry __P((void));
|
||||
|
||||
|
||||
|
||||
@ -153,7 +147,9 @@ tryexec(cmd, argv, envp)
|
||||
char **envp;
|
||||
{
|
||||
int e;
|
||||
#ifndef BSD
|
||||
char *p;
|
||||
#endif
|
||||
|
||||
#ifdef SYSV
|
||||
do {
|
||||
@ -345,7 +341,7 @@ hashcmd(argc, argv)
|
||||
while ((name = *argptr) != NULL) {
|
||||
if ((cmdp = cmdlookup(name, 0)) != NULL
|
||||
&& (cmdp->cmdtype == CMDNORMAL
|
||||
|| cmdp->cmdtype == CMDBUILTIN && builtinloc >= 0))
|
||||
|| (cmdp->cmdtype == CMDBUILTIN && builtinloc >= 0)))
|
||||
delete_cmd_entry();
|
||||
find_command(name, &entry, 1);
|
||||
if (verbose) {
|
||||
@ -571,7 +567,7 @@ hashcd() {
|
||||
for (pp = cmdtable ; pp < &cmdtable[CMDTABLESIZE] ; pp++) {
|
||||
for (cmdp = *pp ; cmdp ; cmdp = cmdp->next) {
|
||||
if (cmdp->cmdtype == CMDNORMAL
|
||||
|| cmdp->cmdtype == CMDBUILTIN && builtinloc >= 0)
|
||||
|| (cmdp->cmdtype == CMDBUILTIN && builtinloc >= 0))
|
||||
cmdp->rehash = 1;
|
||||
}
|
||||
}
|
||||
@ -602,8 +598,8 @@ changepath(newval)
|
||||
for (;;) {
|
||||
if (*old != *new) {
|
||||
firstchange = index;
|
||||
if (*old == '\0' && *new == ':'
|
||||
|| *old == ':' && *new == '\0')
|
||||
if ((*old == '\0' && *new == ':')
|
||||
|| (*old == ':' && *new == '\0'))
|
||||
firstchange++;
|
||||
old = new; /* ignore subsequent differences */
|
||||
}
|
||||
@ -612,8 +608,6 @@ changepath(newval)
|
||||
if (*new == '%' && bltin < 0 && prefix("builtin", new + 1))
|
||||
bltin = index;
|
||||
if (*new == ':') {
|
||||
char c = *(new+1);
|
||||
|
||||
index++;
|
||||
}
|
||||
new++, old++;
|
||||
@ -644,8 +638,10 @@ clearcmdentry(firstchange)
|
||||
for (tblp = cmdtable ; tblp < &cmdtable[CMDTABLESIZE] ; tblp++) {
|
||||
pp = tblp;
|
||||
while ((cmdp = *pp) != NULL) {
|
||||
if (cmdp->cmdtype == CMDNORMAL && cmdp->param.index >= firstchange
|
||||
|| cmdp->cmdtype == CMDBUILTIN && builtinloc >= firstchange) {
|
||||
if ((cmdp->cmdtype == CMDNORMAL &&
|
||||
cmdp->param.index >= firstchange)
|
||||
|| (cmdp->cmdtype == CMDBUILTIN &&
|
||||
builtinloc >= firstchange)) {
|
||||
*pp = cmdp->next;
|
||||
ckfree(cmdp);
|
||||
} else {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: exec.h,v 1.7 1995/03/21 09:09:02 cgd Exp $ */
|
||||
/* $NetBSD: exec.h,v 1.8 1995/05/11 21:29:05 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)exec.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)exec.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
/* values of cmdtype */
|
||||
@ -56,22 +56,15 @@ struct cmdentry {
|
||||
|
||||
extern char *pathopt; /* set by padvance */
|
||||
|
||||
#ifdef __STDC__
|
||||
void shellexec(char **, char **, char *, int);
|
||||
char *padvance(char **, char *);
|
||||
void find_command(char *, struct cmdentry *, int);
|
||||
int find_builtin(char *);
|
||||
void hashcd(void);
|
||||
void changepath(char *);
|
||||
void defun(char *, union node *);
|
||||
int unsetfunc(char *);
|
||||
#else
|
||||
void shellexec();
|
||||
char *padvance();
|
||||
void find_command();
|
||||
int find_builtin();
|
||||
void hashcd();
|
||||
void changepath();
|
||||
void defun();
|
||||
int unsetfunc();
|
||||
#endif
|
||||
void shellexec __P((char **, char **, char *, int));
|
||||
char *padvance __P((char **, char *));
|
||||
int hashcmd __P((int, char **));
|
||||
void find_command __P((char *, struct cmdentry *, int));
|
||||
int find_builtin __P((char *));
|
||||
void hashcd __P((void));
|
||||
void changepath __P((char *));
|
||||
void deletefuncs __P((void));
|
||||
void getcmdentry __P((char *, struct cmdentry *));
|
||||
void addcmdentry __P((char *, struct cmdentry *));
|
||||
void defun __P((char *, union node *));
|
||||
int unsetfunc __P((char *));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: expand.c,v 1.17 1995/03/21 09:09:04 cgd Exp $ */
|
||||
/* $NetBSD: expand.c,v 1.18 1995/05/11 21:29:06 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,12 +38,21 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)expand.c 8.2 (Berkeley) 10/22/93";
|
||||
static char sccsid[] = "@(#)expand.c 8.4 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: expand.c,v 1.17 1995/03/21 09:09:04 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: expand.c,v 1.18 1995/05/11 21:29:06 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
#include <pwd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* Routines to expand arguments to commands. We have to deal with
|
||||
* backquotes, shell variables, and file metacharacters.
|
||||
@ -64,13 +73,8 @@ static char rcsid[] = "$NetBSD: expand.c,v 1.17 1995/03/21 09:09:04 cgd Exp $";
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
#include "mystring.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
#include <pwd.h>
|
||||
#include "arith.h"
|
||||
#include "show.h"
|
||||
|
||||
/*
|
||||
* Structure specifying which parts of the string should be searched
|
||||
@ -91,43 +95,22 @@ struct ifsregion ifsfirst; /* first struct in list of ifs regions */
|
||||
struct ifsregion *ifslastp; /* last struct in list */
|
||||
struct arglist exparg; /* holds expanded arg list */
|
||||
|
||||
#ifdef __STDC__
|
||||
STATIC void argstr(char *, int);
|
||||
STATIC void expbackq(union node *, int, int);
|
||||
STATIC int subevalvar(char *, char *, int, int, int);
|
||||
STATIC char *evalvar(char *, int);
|
||||
STATIC int varisset(int);
|
||||
STATIC void varvalue(int, int, int);
|
||||
STATIC void recordregion(int, int, int);
|
||||
STATIC void ifsbreakup(char *, struct arglist *);
|
||||
STATIC void expandmeta(struct strlist *, int);
|
||||
STATIC void expmeta(char *, char *);
|
||||
STATIC void expari(int);
|
||||
STATIC void addfname(char *);
|
||||
STATIC struct strlist *expsort(struct strlist *);
|
||||
STATIC struct strlist *msort(struct strlist *, int);
|
||||
STATIC int pmatch(char *, char *);
|
||||
STATIC char *exptilde(char *, int);
|
||||
STATIC char *cvtnum(int, char *);
|
||||
#else
|
||||
STATIC void argstr();
|
||||
STATIC void expbackq();
|
||||
STATIC int subevalvar();
|
||||
STATIC char *evalvar();
|
||||
STATIC int varisset();
|
||||
STATIC void varvalue();
|
||||
STATIC void recordregion();
|
||||
STATIC void ifsbreakup();
|
||||
STATIC void expandmeta();
|
||||
STATIC void expmeta();
|
||||
STATIC void expari();
|
||||
STATIC void addfname();
|
||||
STATIC struct strlist *expsort();
|
||||
STATIC struct strlist *msort();
|
||||
STATIC int pmatch();
|
||||
STATIC char *exptilde();
|
||||
STATIC char *cvtnum();
|
||||
#endif
|
||||
STATIC void argstr __P((char *, int));
|
||||
STATIC char *exptilde __P((char *, int));
|
||||
STATIC void expbackq __P((union node *, int, int));
|
||||
STATIC int subevalvar __P((char *, char *, int, int, int));
|
||||
STATIC char *evalvar __P((char *, int));
|
||||
STATIC int varisset __P((int));
|
||||
STATIC void varvalue __P((int, int, int));
|
||||
STATIC void recordregion __P((int, int, int));
|
||||
STATIC void ifsbreakup __P((char *, struct arglist *));
|
||||
STATIC void expandmeta __P((struct strlist *, int));
|
||||
STATIC void expmeta __P((char *, char *));
|
||||
STATIC void addfname __P((char *));
|
||||
STATIC struct strlist *expsort __P((struct strlist *));
|
||||
STATIC struct strlist *msort __P((struct strlist *, int));
|
||||
STATIC int pmatch __P((char *, char *));
|
||||
STATIC char *cvtnum __P((int, char *));
|
||||
|
||||
/*
|
||||
* Expand shell variables and backquotes inside a here document.
|
||||
@ -277,7 +260,7 @@ exptilde(p, flag)
|
||||
char *home;
|
||||
int quotes = flag & (EXP_FULL | EXP_CASE);
|
||||
|
||||
while (c = *p) {
|
||||
while ((c = *p) != '\0') {
|
||||
switch(c) {
|
||||
case CTLESC:
|
||||
return (startp);
|
||||
@ -303,7 +286,7 @@ done:
|
||||
if (*home == '\0')
|
||||
goto lose;
|
||||
*p = c;
|
||||
while (c = *home++) {
|
||||
while ((c = *home++) != '\0') {
|
||||
if (quotes && SQSYNTAX[c] == CCTL)
|
||||
STPUTC(CTLESC, expdest);
|
||||
STPUTC(c, expdest);
|
||||
@ -571,7 +554,7 @@ again: /* jump here after setting a variable with ${var=text} */
|
||||
val = NULL;
|
||||
} else {
|
||||
val = lookupvar(var);
|
||||
if (val == NULL || (varflags & VSNUL) && val[0] == '\0') {
|
||||
if (val == NULL || ((varflags & VSNUL) && val[0] == '\0')) {
|
||||
val = NULL;
|
||||
set = 0;
|
||||
} else
|
||||
@ -1055,7 +1038,7 @@ expmeta(enddir, name)
|
||||
*endname++ = '\0';
|
||||
}
|
||||
matchdot = 0;
|
||||
if (start[0] == '.' || start[0] == CTLESC && start[1] == '.')
|
||||
if (start[0] == '.' || (start[0] == CTLESC && start[1] == '.'))
|
||||
matchdot++;
|
||||
while (! int_pending() && (dp = readdir(dirp)) != NULL) {
|
||||
if (dp->d_name[0] == '.' && ! matchdot)
|
||||
@ -1066,7 +1049,9 @@ expmeta(enddir, name)
|
||||
addfname(expdir);
|
||||
} else {
|
||||
char *q;
|
||||
for (p = enddir, q = dp->d_name ; *p++ = *q++ ;);
|
||||
for (p = enddir, q = dp->d_name;
|
||||
(*p++ = *q++) != '\0';)
|
||||
continue;
|
||||
p[-1] = '/';
|
||||
expmeta(p, endname);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: expand.h,v 1.7 1995/03/21 09:09:06 cgd Exp $ */
|
||||
/* $NetBSD: expand.h,v 1.8 1995/05/11 21:29:08 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)expand.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)expand.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
struct strlist {
|
||||
@ -59,17 +59,10 @@ struct arglist {
|
||||
#define EXP_CASE 0x10 /* keeps quotes around for CASE pattern */
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
union node;
|
||||
void expandarg(union node *, struct arglist *, int);
|
||||
void expandhere(union node *, int);
|
||||
int patmatch(char *, char *);
|
||||
void rmescapes(char *);
|
||||
int casematch(union node *, char *);
|
||||
#else
|
||||
void expandarg();
|
||||
void expandhere();
|
||||
int patmatch();
|
||||
void rmescapes();
|
||||
int casematch();
|
||||
#endif
|
||||
void expandhere __P((union node *, int));
|
||||
void expandarg __P((union node *, struct arglist *, int));
|
||||
void expari __P((int));
|
||||
int patmatch __P((char *, char *));
|
||||
void rmescapes __P((char *));
|
||||
int casematch __P((union node *, char *));
|
||||
|
@ -1,36 +0,0 @@
|
||||
/* $NetBSD: extern.h,v 1.3 1995/03/21 09:09:08 cgd Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 James A. Jegers
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
int copyfd __P((int, int));
|
||||
int fd0_redirected_p();
|
||||
void histedit();
|
||||
void opentrace();
|
||||
void optschanged();
|
||||
void sethistsize();
|
||||
void readcmdfile __P((char *));
|
||||
void trargs __P((char **));
|
||||
void trputs __P((char *));
|
||||
|
@ -1,5 +1,4 @@
|
||||
# $NetBSD: cmv,v 1.6 1995/03/21 09:10:52 cgd Exp $
|
||||
#
|
||||
# $NetBSD: cmv,v 1.7 1995/05/11 21:31:05 christos Exp $
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
#
|
||||
@ -34,7 +33,7 @@
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# @(#)cmv 8.1 (Berkeley) 5/31/93
|
||||
# @(#)cmv 8.2 (Berkeley) 5/4/95
|
||||
|
||||
# Conditional move--don't replace an existing file.
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
# $NetBSD: dirs,v 1.6 1995/03/21 09:10:54 cgd Exp $
|
||||
#
|
||||
# $NetBSD: dirs,v 1.7 1995/05/11 21:31:08 christos Exp $
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
#
|
||||
@ -34,7 +33,7 @@
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# @(#)dirs 8.1 (Berkeley) 5/31/93
|
||||
# @(#)dirs 8.2 (Berkeley) 5/4/95
|
||||
|
||||
# pushd, popd, and dirs --- written by Chris Bertin
|
||||
# Pixel Computer Inc. ...!wjh12!pixel!pixutl!chris
|
||||
|
@ -1,5 +1,4 @@
|
||||
# $NetBSD: kill,v 1.6 1995/03/21 09:10:57 cgd Exp $
|
||||
#
|
||||
# $NetBSD: kill,v 1.7 1995/05/11 21:31:10 christos Exp $
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
#
|
||||
@ -34,7 +33,7 @@
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# @(#)kill 8.1 (Berkeley) 5/31/93
|
||||
# @(#)kill 8.2 (Berkeley) 5/4/95
|
||||
|
||||
# Convert job names to process ids and then run /bin/kill.
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
# $NetBSD: login,v 1.6 1995/03/21 09:10:59 cgd Exp $
|
||||
#
|
||||
# $NetBSD: login,v 1.7 1995/05/11 21:31:11 christos Exp $
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
#
|
||||
@ -34,7 +33,7 @@
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# @(#)login 8.1 (Berkeley) 5/31/93
|
||||
# @(#)login 8.2 (Berkeley) 5/4/95
|
||||
|
||||
# replaces the login builtin in the BSD shell
|
||||
login () exec login "$@"
|
||||
|
@ -1,5 +1,4 @@
|
||||
# $NetBSD: newgrp,v 1.6 1995/03/21 09:11:01 cgd Exp $
|
||||
#
|
||||
# $NetBSD: newgrp,v 1.7 1995/05/11 21:31:12 christos Exp $
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
#
|
||||
@ -34,6 +33,6 @@
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# @(#)newgrp 8.1 (Berkeley) 5/31/93
|
||||
# @(#)newgrp 8.2 (Berkeley) 5/4/95
|
||||
|
||||
newgrp() exec newgrp "$@"
|
||||
|
@ -1,5 +1,4 @@
|
||||
# $NetBSD: popd,v 1.6 1995/03/21 09:11:03 cgd Exp $
|
||||
#
|
||||
# $NetBSD: popd,v 1.7 1995/05/11 21:31:13 christos Exp $
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
#
|
||||
@ -34,7 +33,7 @@
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# @(#)popd 8.1 (Berkeley) 5/31/93
|
||||
# @(#)popd 8.2 (Berkeley) 5/4/95
|
||||
|
||||
# pushd, popd, and dirs --- written by Chris Bertin
|
||||
# Pixel Computer Inc. ...!wjh12!pixel!pixutl!chris
|
||||
|
@ -1,5 +1,4 @@
|
||||
# $NetBSD: pushd,v 1.6 1995/03/21 09:11:04 cgd Exp $
|
||||
#
|
||||
# $NetBSD: pushd,v 1.7 1995/05/11 21:31:15 christos Exp $
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
#
|
||||
@ -34,7 +33,7 @@
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# @(#)pushd 8.1 (Berkeley) 5/31/93
|
||||
# @(#)pushd 8.2 (Berkeley) 5/4/95
|
||||
|
||||
# pushd, popd, and dirs --- written by Chris Bertin
|
||||
# Pixel Computer Inc. ...!wjh12!pixel!pixutl!chris
|
||||
|
@ -1,5 +1,4 @@
|
||||
# $NetBSD: suspend,v 1.6 1995/03/21 09:11:05 cgd Exp $
|
||||
#
|
||||
# $NetBSD: suspend,v 1.7 1995/05/11 21:31:17 christos Exp $
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
#
|
||||
@ -34,7 +33,7 @@
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# @(#)suspend 8.1 (Berkeley) 5/31/93
|
||||
# @(#)suspend 8.2 (Berkeley) 5/4/95
|
||||
|
||||
suspend() {
|
||||
local -
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: histedit.c,v 1.7 1995/03/31 21:58:13 christos Exp $ */
|
||||
/* $NetBSD: histedit.c,v 1.8 1995/05/11 21:29:12 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1993
|
||||
@ -38,31 +38,33 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)histedit.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)histedit.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: histedit.c,v 1.7 1995/03/31 21:58:13 christos Exp $";
|
||||
static char rcsid[] = "$NetBSD: histedit.c,v 1.8 1995/05/11 21:29:12 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
* Editline and history functions (and glue).
|
||||
*/
|
||||
#include <sys/param.h>
|
||||
#include <paths.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
/*
|
||||
* Editline and history functions (and glue).
|
||||
*/
|
||||
#include "shell.h"
|
||||
#include "parser.h"
|
||||
#include "var.h"
|
||||
#include "options.h"
|
||||
#include "main.h"
|
||||
#include "output.h"
|
||||
#include "mystring.h"
|
||||
#ifndef NO_HISTORY
|
||||
#include "myhistedit.h"
|
||||
#endif
|
||||
#include "error.h"
|
||||
#include "eval.h"
|
||||
#include "histedit.h"
|
||||
#include "memalloc.h"
|
||||
#include "extern.h"
|
||||
|
||||
#define MAXHISTLOOPS 4 /* max recursions through fc */
|
||||
#define DEFEDITOR "ed" /* default editor *should* be $EDITOR */
|
||||
@ -73,8 +75,6 @@ int displayhist;
|
||||
static FILE *el_in, *el_out;
|
||||
|
||||
STATIC char *fc_replace __P((const char *, char *, char *));
|
||||
int not_fcnumber __P((char *));
|
||||
int str_to_event __P((char *, int));
|
||||
|
||||
/*
|
||||
* Set history and editing status. Called whenever the status may
|
||||
@ -149,7 +149,8 @@ bad:
|
||||
|
||||
|
||||
void
|
||||
sethistsize() {
|
||||
sethistsize()
|
||||
{
|
||||
char *cp;
|
||||
int histsize;
|
||||
|
||||
@ -169,7 +170,7 @@ sethistsize() {
|
||||
int
|
||||
histcmd(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
char **argv;
|
||||
{
|
||||
extern char *optarg;
|
||||
extern int optind, optopt, optreset;
|
||||
@ -186,6 +187,21 @@ histcmd(argc, argv)
|
||||
struct jmploc *volatile savehandler;
|
||||
char editfile[MAXPATHLEN + 1];
|
||||
FILE *efp;
|
||||
#ifdef __GNUC__
|
||||
/* Avoid longjmp clobbering */
|
||||
(void) &editor;
|
||||
(void) &lflg;
|
||||
(void) &nflg;
|
||||
(void) &rflg;
|
||||
(void) &sflg;
|
||||
(void) &firststr;
|
||||
(void) &laststr;
|
||||
(void) &pat;
|
||||
(void) &repl;
|
||||
(void) &efp;
|
||||
(void) &argc;
|
||||
(void) &argv;
|
||||
#endif
|
||||
|
||||
if (hist == NULL)
|
||||
error("history not active");
|
||||
@ -377,6 +393,7 @@ histcmd(argc, argv)
|
||||
--active;
|
||||
if (displayhist)
|
||||
displayhist = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
STATIC char *
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: init.h,v 1.7 1995/03/21 09:09:11 cgd Exp $ */
|
||||
/* $NetBSD: init.h,v 1.8 1995/05/11 21:29:14 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,15 +35,9 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)init.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)init.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
#ifdef __STDC__
|
||||
void init(void);
|
||||
void reset(void);
|
||||
void initshellproc(void);
|
||||
#else
|
||||
void init();
|
||||
void reset();
|
||||
void initshellproc();
|
||||
#endif
|
||||
void init __P((void));
|
||||
void reset __P((void));
|
||||
void initshellproc __P((void));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: input.c,v 1.13 1995/03/21 09:09:13 cgd Exp $ */
|
||||
/* $NetBSD: input.c,v 1.14 1995/05/11 21:29:15 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,22 +38,24 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)input.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)input.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: input.c,v 1.13 1995/03/21 09:09:13 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: input.c,v 1.14 1995/05/11 21:29:15 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <stdio.h> /* defines BUFSIZ */
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* This file implements the input routines used by the parser.
|
||||
*/
|
||||
|
||||
#include <stdio.h> /* defines BUFSIZ */
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include "shell.h"
|
||||
#include "redir.h"
|
||||
#include "syntax.h"
|
||||
#include "input.h"
|
||||
#include "output.h"
|
||||
@ -62,10 +64,7 @@ static char rcsid[] = "$NetBSD: input.c,v 1.13 1995/03/21 09:09:13 cgd Exp $";
|
||||
#include "error.h"
|
||||
#include "alias.h"
|
||||
#include "parser.h"
|
||||
#include "extern.h"
|
||||
#ifndef NO_HISTORY
|
||||
#include "myhistedit.h"
|
||||
#endif
|
||||
|
||||
#define EOF_NLEFT -99 /* value of parsenleft when EOF pushed back */
|
||||
|
||||
@ -106,19 +105,9 @@ int pushednleft; /* copy of parsenleft when text pushed back */
|
||||
int init_editline = 0; /* editline library initialized? */
|
||||
int whichprompt; /* 1 == PS1, 2 == PS2 */
|
||||
|
||||
#ifndef NO_HISTORY
|
||||
EditLine *el; /* cookie for editline package */
|
||||
#endif
|
||||
|
||||
#ifdef __STDC__
|
||||
STATIC void pushfile(void);
|
||||
#else
|
||||
STATIC void pushfile();
|
||||
#endif
|
||||
|
||||
void popstring();
|
||||
|
||||
|
||||
STATIC void pushfile __P((void));
|
||||
|
||||
#ifdef mkinit
|
||||
INCLUDE "input.h"
|
||||
@ -198,9 +187,7 @@ preadbuffer() {
|
||||
register char *p, *q;
|
||||
register int i;
|
||||
register int something;
|
||||
#ifndef NO_HISTORY
|
||||
extern EditLine *el;
|
||||
#endif
|
||||
|
||||
if (parsefile->strpush) {
|
||||
popstring();
|
||||
@ -213,7 +200,6 @@ preadbuffer() {
|
||||
flushout(&errout);
|
||||
retry:
|
||||
p = parsenextc = parsefile->buf;
|
||||
#ifndef NO_HISTORY
|
||||
if (parsefile->fd == 0 && el) {
|
||||
const char *rl_cp;
|
||||
int len;
|
||||
@ -227,12 +213,8 @@ retry:
|
||||
i = len;
|
||||
|
||||
} else {
|
||||
#endif
|
||||
regular_read:
|
||||
i = read(parsefile->fd, p, BUFSIZ - 1);
|
||||
#ifndef NO_HISTORY
|
||||
}
|
||||
#endif
|
||||
eof:
|
||||
if (i <= 0) {
|
||||
if (i < 0) {
|
||||
@ -282,14 +264,12 @@ eof:
|
||||
parsenleft = q - parsefile->buf - 1;
|
||||
|
||||
done:
|
||||
#ifndef NO_HISTORY
|
||||
if (parsefile->fd == 0 && hist && something) {
|
||||
INTOFF;
|
||||
history(hist, whichprompt == 1 ? H_ENTER : H_ADD,
|
||||
parsefile->buf);
|
||||
INTON;
|
||||
}
|
||||
#endif
|
||||
if (vflag) {
|
||||
/*
|
||||
* This isn't right. Most shells coordinate it with
|
||||
@ -398,8 +378,7 @@ setinputfile(fname, push)
|
||||
|
||||
void
|
||||
setinputfd(fd, push)
|
||||
int fd;
|
||||
int push;
|
||||
int fd, push;
|
||||
{
|
||||
if (push) {
|
||||
pushfile();
|
||||
@ -423,7 +402,7 @@ void
|
||||
setinputstring(string, push)
|
||||
char *string;
|
||||
int push;
|
||||
{
|
||||
{
|
||||
INTOFF;
|
||||
if (push)
|
||||
pushfile();
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: input.h,v 1.7 1995/03/21 09:09:15 cgd Exp $ */
|
||||
/* $NetBSD: input.h,v 1.8 1995/05/11 21:29:16 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)input.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)input.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
/* PEOF (the end of file marker) is defined in syntax.h */
|
||||
@ -50,31 +50,17 @@ extern int parsenleft; /* number of characters left in input buffer */
|
||||
extern char *parsenextc; /* next character in input buffer */
|
||||
extern int init_editline; /* 0 == not setup, 1 == OK, -1 == failed */
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
char *pfgets(char *, int);
|
||||
int pgetc(void);
|
||||
int preadbuffer(void);
|
||||
void pungetc(void);
|
||||
void pushstring(char *, int, void *);
|
||||
void setinputfile(char *, int);
|
||||
void setinputfd(int, int);
|
||||
void setinputstring(char *, int);
|
||||
void popfile(void);
|
||||
void popallfiles(void);
|
||||
void closescript(void);
|
||||
#else
|
||||
char *pfgets();
|
||||
int pgetc();
|
||||
int preadbuffer();
|
||||
void pungetc();
|
||||
void setinputfile();
|
||||
void setinputfd();
|
||||
void setinputstring();
|
||||
void popfile();
|
||||
void popallfiles();
|
||||
void pushstring();
|
||||
void closescript();
|
||||
#endif
|
||||
char *pfgets __P((char *, int));
|
||||
int pgetc __P((void));
|
||||
int preadbuffer __P((void));
|
||||
void pungetc __P((void));
|
||||
void pushstring __P((char *, int, void *));
|
||||
void popstring __P((void));
|
||||
void setinputfile __P((char *, int));
|
||||
void setinputfd __P((int, int));
|
||||
void setinputstring __P((char *, int));
|
||||
void popfile __P((void));
|
||||
void popallfiles __P((void));
|
||||
void closescript __P((void));
|
||||
|
||||
#define pgetc_macro() (--parsenleft >= 0? *parsenextc++ : preadbuffer())
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: jobs.c,v 1.15 1995/03/21 09:09:17 cgd Exp $ */
|
||||
/* $NetBSD: jobs.c,v 1.16 1995/05/11 21:29:18 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,17 +38,32 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)jobs.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)jobs.c 8.5 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: jobs.c,v 1.15 1995/03/21 09:09:17 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: jobs.c,v 1.16 1995/05/11 21:29:18 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#ifdef BSD
|
||||
#include <sys/wait.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#endif
|
||||
|
||||
#include "shell.h"
|
||||
#if JOBS
|
||||
#include "sgtty.h"
|
||||
#undef CEOF /* syntax.h redefines this */
|
||||
#endif
|
||||
#include "redir.h"
|
||||
#include "show.h"
|
||||
#include "main.h"
|
||||
#include "parser.h"
|
||||
#include "nodes.h"
|
||||
@ -61,18 +76,6 @@ static char rcsid[] = "$NetBSD: jobs.c,v 1.15 1995/03/21 09:09:17 cgd Exp $";
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
#include "mystring.h"
|
||||
#include "extern.h"
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#ifdef BSD
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
struct job *jobtab; /* array of jobs */
|
||||
@ -83,22 +86,14 @@ int initialpgrp; /* pgrp of shell on invocation */
|
||||
short curjob; /* current job */
|
||||
#endif
|
||||
|
||||
#ifdef __STDC__
|
||||
STATIC void restartjob(struct job *);
|
||||
STATIC struct job *getjob(char *);
|
||||
STATIC void freejob(struct job *);
|
||||
STATIC int procrunning(int);
|
||||
STATIC int dowait(int, struct job *);
|
||||
STATIC int waitproc(int, int *);
|
||||
#else
|
||||
STATIC void restartjob();
|
||||
STATIC struct job *getjob();
|
||||
STATIC void freejob();
|
||||
STATIC int procrunning();
|
||||
STATIC int dowait();
|
||||
STATIC int waitproc();
|
||||
#endif
|
||||
|
||||
STATIC void restartjob __P((struct job *));
|
||||
STATIC void freejob __P((struct job *));
|
||||
STATIC struct job *getjob __P((char *));
|
||||
STATIC int dowait __P((int, struct job *));
|
||||
STATIC int onsigchild __P((void));
|
||||
STATIC int waitproc __P((int, int *));
|
||||
STATIC void cmdtxt __P((union node *));
|
||||
STATIC void cmdputs __P((char *));
|
||||
|
||||
|
||||
/*
|
||||
@ -159,6 +154,7 @@ setjobctl(on)
|
||||
|
||||
|
||||
#ifdef mkinit
|
||||
INCLUDE <stdlib.h>
|
||||
|
||||
SHELLPROC {
|
||||
backgndpid = -1;
|
||||
@ -465,6 +461,8 @@ currentjob:
|
||||
}
|
||||
}
|
||||
error("No such job: %s", name);
|
||||
/*NOTREACHED*/
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: jobs.h,v 1.7 1995/03/21 09:09:19 cgd Exp $ */
|
||||
/* $NetBSD: jobs.h,v 1.8 1995/05/11 21:29:19 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)jobs.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)jobs.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
/* Mode argument to forkshell. Don't change FORK_FG or FORK_BG. */
|
||||
@ -79,22 +79,18 @@ struct job {
|
||||
extern short backgndpid; /* pid of last background process */
|
||||
extern int job_warning; /* user was warned about stopped jobs */
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
void setjobctl(int);
|
||||
void showjobs(int);
|
||||
struct job *makejob(union node *, int);
|
||||
int forkshell(struct job *, union node *, int);
|
||||
int waitforjob(struct job *);
|
||||
char *commandtext(union node *);
|
||||
#else
|
||||
void setjobctl();
|
||||
void showjobs();
|
||||
struct job *makejob();
|
||||
int forkshell();
|
||||
int waitforjob();
|
||||
char *commandtext();
|
||||
#endif
|
||||
void setjobctl __P((int));
|
||||
int fgcmd __P((int, char **));
|
||||
int bgcmd __P((int, char **));
|
||||
int jobscmd __P((int, char **));
|
||||
void showjobs __P((int));
|
||||
int waitcmd __P((int, char **));
|
||||
int jobidcmd __P((int, char **));
|
||||
struct job *makejob __P((union node *, int));
|
||||
int forkshell __P((struct job *, union node *, int));
|
||||
int waitforjob __P((struct job *));
|
||||
int stoppedjobs __P((void));
|
||||
char *commandtext __P((union node *));
|
||||
|
||||
#if ! JOBS
|
||||
#define setjobctl(on) /* do nothing */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: machdep.h,v 1.7 1995/03/21 09:09:20 cgd Exp $ */
|
||||
/* $NetBSD: machdep.h,v 1.8 1995/05/11 21:29:21 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)machdep.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)machdep.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -49,5 +49,5 @@ union align {
|
||||
char *cp;
|
||||
};
|
||||
|
||||
#define ALIGN(nbytes) ((nbytes) + sizeof(union align) - 1 &~ (sizeof(union align) - 1))
|
||||
#define ALIGN(nbytes) (((nbytes) + sizeof(union align) - 1) & ~(sizeof(union align) - 1))
|
||||
#endif
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: mail.c,v 1.8 1995/03/21 09:09:22 cgd Exp $ */
|
||||
/* $NetBSD: mail.c,v 1.9 1995/05/11 21:29:22 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,9 +38,9 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)mail.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)mail.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: mail.c,v 1.8 1995/03/21 09:09:22 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: mail.c,v 1.9 1995/05/11 21:29:22 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: mail.h,v 1.7 1995/03/21 09:09:23 cgd Exp $ */
|
||||
/* $NetBSD: mail.h,v 1.8 1995/05/11 21:29:23 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,11 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)mail.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)mail.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
#ifdef __STDC__
|
||||
void chkmail(int);
|
||||
#else
|
||||
void chkmail();
|
||||
#endif
|
||||
void chkmail __P((int));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: main.c,v 1.17 1995/03/21 09:09:26 cgd Exp $ */
|
||||
/* $NetBSD: main.c,v 1.18 1995/05/11 21:29:25 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -44,9 +44,9 @@ static char copyright[] =
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)main.c 8.4 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: main.c,v 1.17 1995/03/21 09:09:26 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: main.c,v 1.18 1995/05/11 21:29:25 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
@ -55,6 +55,8 @@ static char rcsid[] = "$NetBSD: main.c,v 1.17 1995/03/21 09:09:26 cgd Exp $";
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
|
||||
#include "shell.h"
|
||||
#include "main.h"
|
||||
#include "mail.h"
|
||||
@ -67,12 +69,12 @@ static char rcsid[] = "$NetBSD: main.c,v 1.17 1995/03/21 09:09:26 cgd Exp $";
|
||||
#include "input.h"
|
||||
#include "trap.h"
|
||||
#include "var.h"
|
||||
#include "show.h"
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
#include "init.h"
|
||||
#include "mystring.h"
|
||||
#include "exec.h"
|
||||
#include "extern.h"
|
||||
|
||||
#define PROFILE 0
|
||||
|
||||
@ -86,14 +88,8 @@ short profile_buf[16384];
|
||||
extern int etext();
|
||||
#endif
|
||||
|
||||
#ifdef __STDC__
|
||||
STATIC void read_profile(char *);
|
||||
char *getenv(char *);
|
||||
#else
|
||||
STATIC void read_profile();
|
||||
char *getenv();
|
||||
#endif
|
||||
|
||||
STATIC void read_profile __P((char *));
|
||||
STATIC char *find_dot_file __P((char *));
|
||||
|
||||
/*
|
||||
* Main routine. We initialize things, parse the arguments, execute
|
||||
@ -188,6 +184,8 @@ state4: /* XXX ??? - why isn't this before the "if" statement */
|
||||
monitor(0);
|
||||
#endif
|
||||
exitshell(exitstatus);
|
||||
/*NOTREACHED*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -290,8 +288,10 @@ readcmdfile(name)
|
||||
*/
|
||||
|
||||
|
||||
static char *
|
||||
find_dot_file(basename) char *basename; {
|
||||
STATIC char *
|
||||
find_dot_file(basename)
|
||||
char *basename;
|
||||
{
|
||||
static char localname[FILENAME_MAX+1];
|
||||
char *fullname;
|
||||
char *path = pathval();
|
||||
@ -333,10 +333,12 @@ exitcmd(argc, argv)
|
||||
char **argv;
|
||||
{
|
||||
if (stoppedjobs())
|
||||
return;
|
||||
return 0;
|
||||
if (argc > 1)
|
||||
exitstatus = number(argv[1]);
|
||||
exitshell(exitstatus);
|
||||
/*NOTREACHED*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: main.h,v 1.7 1995/03/21 09:09:28 cgd Exp $ */
|
||||
/* $NetBSD: main.h,v 1.8 1995/05/11 21:29:27 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,16 +35,13 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)main.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)main.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
extern int rootpid; /* pid of main shell */
|
||||
extern int rootshell; /* true if we aren't a child of the main shell */
|
||||
|
||||
#ifdef __STDC__
|
||||
void readcmdfile(char *);
|
||||
void cmdloop(int);
|
||||
#else
|
||||
void readcmdfile();
|
||||
void cmdloop();
|
||||
#endif
|
||||
void readcmdfile __P((char *));
|
||||
void cmdloop __P((int));
|
||||
int dotcmd __P((int, char **));
|
||||
int exitcmd __P((int, char **));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: memalloc.c,v 1.15 1995/03/21 09:09:29 cgd Exp $ */
|
||||
/* $NetBSD: memalloc.c,v 1.16 1995/05/11 21:29:29 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,9 +38,9 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)memalloc.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)memalloc.c 8.3 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: memalloc.c,v 1.15 1995/03/21 09:09:29 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: memalloc.c,v 1.16 1995/05/11 21:29:29 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: memalloc.h,v 1.9 1995/03/21 09:09:31 cgd Exp $ */
|
||||
/* $NetBSD: memalloc.h,v 1.10 1995/05/11 21:29:31 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)memalloc.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)memalloc.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
struct stackmark {
|
||||
@ -50,35 +50,18 @@ extern int stacknleft;
|
||||
extern int sstrnleft;
|
||||
extern int herefd;
|
||||
|
||||
#ifdef __STDC__
|
||||
pointer ckmalloc(int);
|
||||
pointer ckrealloc(pointer, int);
|
||||
void free(pointer); /* defined in C library */
|
||||
char *savestr(char *);
|
||||
pointer stalloc(int);
|
||||
void stunalloc(pointer);
|
||||
void setstackmark(struct stackmark *);
|
||||
void popstackmark(struct stackmark *);
|
||||
void growstackblock(void);
|
||||
void grabstackblock(int);
|
||||
char *growstackstr(void);
|
||||
char *makestrspace(void);
|
||||
void ungrabstackstr(char *, char *);
|
||||
#else
|
||||
pointer ckmalloc();
|
||||
pointer ckrealloc();
|
||||
void free(); /* defined in C library */
|
||||
char *savestr();
|
||||
pointer stalloc();
|
||||
void stunalloc();
|
||||
void setstackmark();
|
||||
void popstackmark();
|
||||
void growstackblock();
|
||||
void grabstackblock();
|
||||
char *growstackstr();
|
||||
char *makestrspace();
|
||||
void ungrabstackstr();
|
||||
#endif
|
||||
pointer ckmalloc __P((int));
|
||||
pointer ckrealloc __P((pointer, int));
|
||||
char *savestr __P((char *));
|
||||
pointer stalloc __P((int));
|
||||
void stunalloc __P((pointer));
|
||||
void setstackmark __P((struct stackmark *));
|
||||
void popstackmark __P((struct stackmark *));
|
||||
void growstackblock __P((void));
|
||||
void grabstackblock __P((int));
|
||||
char *growstackstr __P((void));
|
||||
char *makestrspace __P((void));
|
||||
void ungrabstackstr __P((char *, char *));
|
||||
|
||||
|
||||
|
||||
@ -86,7 +69,7 @@ void ungrabstackstr();
|
||||
#define stackblocksize() stacknleft
|
||||
#define STARTSTACKSTR(p) p = stackblock(), sstrnleft = stackblocksize()
|
||||
#define STPUTC(c, p) (--sstrnleft >= 0? (*p++ = (c)) : (p = growstackstr(), *p++ = (c)))
|
||||
#define CHECKSTRSPACE(n, p) if (sstrnleft < n) p = makestrspace(); else
|
||||
#define CHECKSTRSPACE(n, p) { if (sstrnleft < n) p = makestrspace(); }
|
||||
#define USTPUTC(c, p) (--sstrnleft, *p++ = (c))
|
||||
#define STACKSTRNUL(p) (sstrnleft == 0? (p = growstackstr(), *p = '\0') : (*p = '\0'))
|
||||
#define STUNPUTC(p) (++sstrnleft, --p)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: miscbltin.c,v 1.13 1995/03/21 09:09:33 cgd Exp $ */
|
||||
/* $NetBSD: miscbltin.c,v 1.14 1995/05/11 21:29:32 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,9 +38,9 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)miscbltin.c 8.2 (Berkeley) 4/16/94";
|
||||
static char sccsid[] = "@(#)miscbltin.c 8.4 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: miscbltin.c,v 1.13 1995/03/21 09:09:33 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: miscbltin.c,v 1.14 1995/05/11 21:29:32 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
@ -50,8 +50,11 @@ static char rcsid[] = "$NetBSD: miscbltin.c,v 1.13 1995/03/21 09:09:33 cgd Exp $
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <unistd.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "shell.h"
|
||||
#include "options.h"
|
||||
#include "var.h"
|
||||
@ -230,3 +233,161 @@ umaskcmd(argc, argv)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* ulimit builtin
|
||||
*
|
||||
* This code, originally by Doug Gwyn, Doug Kingston, Eric Gisin, and
|
||||
* Michael Rendell was ripped from pdksh 5.0.8 and hacked for use with
|
||||
* ash by J.T. Conklin.
|
||||
*
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
struct limits {
|
||||
const char *name;
|
||||
int cmd;
|
||||
int factor; /* multiply by to get rlim_{cur,max} values */
|
||||
char option;
|
||||
};
|
||||
|
||||
static const struct limits limits[] = {
|
||||
#ifdef RLIMIT_CPU
|
||||
{ "time(seconds)", RLIMIT_CPU, 1, 't' },
|
||||
#endif
|
||||
#ifdef RLIMIT_FSIZE
|
||||
{ "file(blocks)", RLIMIT_FSIZE, 512, 'f' },
|
||||
#endif
|
||||
#ifdef RLIMIT_DATA
|
||||
{ "data(kbytes)", RLIMIT_DATA, 1024, 'd' },
|
||||
#endif
|
||||
#ifdef RLIMIT_STACK
|
||||
{ "stack(kbytes)", RLIMIT_STACK, 1024, 's' },
|
||||
#endif
|
||||
#ifdef RLIMIT_CORE
|
||||
{ "coredump(blocks)", RLIMIT_CORE, 512, 'c' },
|
||||
#endif
|
||||
#ifdef RLIMIT_RSS
|
||||
{ "memory(kbytes)", RLIMIT_RSS, 1024, 'm' },
|
||||
#endif
|
||||
#ifdef RLIMIT_MEMLOCK
|
||||
{ "locked memory(kbytes)", RLIMIT_MEMLOCK, 1024, 'l' },
|
||||
#endif
|
||||
#ifdef RLIMIT_NPROC
|
||||
{ "process(processes)", RLIMIT_NPROC, 1, 'p' },
|
||||
#endif
|
||||
#ifdef RLIMIT_NOFILE
|
||||
{ "nofiles(descriptors)", RLIMIT_NOFILE, 1, 'n' },
|
||||
#endif
|
||||
#ifdef RLIMIT_VMEM
|
||||
{ "vmemory(kbytes)", RLIMIT_VMEM, 1024, 'v' },
|
||||
#endif
|
||||
#ifdef RLIMIT_SWAP
|
||||
{ "swap(kbytes)", RLIMIT_SWAP, 1024, 'w' },
|
||||
#endif
|
||||
{ (char *) 0, 0, 0, '\0' }
|
||||
};
|
||||
|
||||
int
|
||||
ulimitcmd(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
register int c;
|
||||
quad_t val;
|
||||
enum { SOFT = 0x1, HARD = 0x2 }
|
||||
how = SOFT | HARD;
|
||||
const struct limits *l;
|
||||
int set, all = 0;
|
||||
int optc, what;
|
||||
struct rlimit limit;
|
||||
|
||||
what = 'f';
|
||||
while ((optc = nextopt("HSatfdsmcnpl")) != '\0')
|
||||
switch (optc) {
|
||||
case 'H':
|
||||
how = HARD;
|
||||
break;
|
||||
case 'S':
|
||||
how = SOFT;
|
||||
break;
|
||||
case 'a':
|
||||
all = 1;
|
||||
break;
|
||||
default:
|
||||
what = optc;
|
||||
}
|
||||
|
||||
for (l = limits; l->name && l->option != what; l++)
|
||||
;
|
||||
if (!l->name)
|
||||
error("ulimit: internal error (%c)\n", what);
|
||||
|
||||
set = *argptr ? 1 : 0;
|
||||
if (set) {
|
||||
char *p = *argptr;
|
||||
|
||||
if (all || argptr[1])
|
||||
error("ulimit: too many arguments\n");
|
||||
if (strcmp(p, "unlimited") == 0)
|
||||
val = RLIM_INFINITY;
|
||||
else {
|
||||
val = (quad_t) 0;
|
||||
|
||||
while ((c = *p++) >= '0' && c <= '9')
|
||||
{
|
||||
val = (val * 10) + (long)(c - '0');
|
||||
if (val < (quad_t) 0)
|
||||
break;
|
||||
}
|
||||
if (c)
|
||||
error("ulimit: bad number\n");
|
||||
val *= l->factor;
|
||||
}
|
||||
}
|
||||
if (all) {
|
||||
for (l = limits; l->name; l++) {
|
||||
getrlimit(l->cmd, &limit);
|
||||
if (how & SOFT)
|
||||
val = limit.rlim_cur;
|
||||
else if (how & HARD)
|
||||
val = limit.rlim_max;
|
||||
|
||||
out1fmt("%-20s ", l->name);
|
||||
if (val == RLIM_INFINITY)
|
||||
out1fmt("unlimited\n");
|
||||
else
|
||||
{
|
||||
val /= l->factor;
|
||||
out1fmt("%ld\n", (long) val);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
getrlimit(l->cmd, &limit);
|
||||
if (set) {
|
||||
if (how & SOFT)
|
||||
limit.rlim_cur = val;
|
||||
if (how & HARD)
|
||||
limit.rlim_max = val;
|
||||
if (setrlimit(l->cmd, &limit) < 0)
|
||||
error("ulimit: bad limit\n");
|
||||
} else {
|
||||
if (how & SOFT)
|
||||
val = limit.rlim_cur;
|
||||
else if (how & HARD)
|
||||
val = limit.rlim_max;
|
||||
}
|
||||
|
||||
if (!set) {
|
||||
if (val == RLIM_INFINITY)
|
||||
out1fmt("unlimited\n");
|
||||
else
|
||||
{
|
||||
val /= l->factor;
|
||||
out1fmt("%ld\n", (long) val);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/sh -
|
||||
# $NetBSD: mkbuiltins,v 1.11 1995/03/21 09:09:34 cgd Exp $
|
||||
# $NetBSD: mkbuiltins,v 1.12 1995/05/11 21:29:33 christos Exp $
|
||||
#
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
@ -35,7 +35,7 @@
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# @(#)mkbuiltins 8.1 (Berkeley) 5/31/93
|
||||
# @(#)mkbuiltins 8.2 (Berkeley) 5/4/95
|
||||
|
||||
temp=/tmp/ka$$
|
||||
havejobs=0
|
||||
@ -68,9 +68,9 @@ echo '};
|
||||
|
||||
const struct builtincmd builtincmd[] = {'
|
||||
awk '{ for (i = 2 ; i <= NF ; i++) {
|
||||
printf "\t\"%s\", %d,\n", $i, NR-1
|
||||
printf "\t{ \"%s\", %d },\n", $i, NR-1
|
||||
}}' $temp
|
||||
echo ' NULL, 0
|
||||
echo ' { NULL, 0 }
|
||||
};'
|
||||
|
||||
exec > ${objdir}/builtins.h
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: mkinit.c,v 1.12 1995/03/21 09:09:36 cgd Exp $ */
|
||||
/* $NetBSD: mkinit.c,v 1.13 1995/05/11 21:29:34 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -44,9 +44,9 @@ static char copyright[] =
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)mkinit.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)mkinit.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: mkinit.c,v 1.12 1995/03/21 09:09:36 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: mkinit.c,v 1.13 1995/05/11 21:29:34 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
@ -156,16 +156,22 @@ struct text decls; /* declarations */
|
||||
int amiddecls; /* for formatting */
|
||||
|
||||
|
||||
void readfile(), doevent(), doinclude(), dodecl(), output();
|
||||
void addstr(), addchar(), writetext();
|
||||
FILE *ckfopen();
|
||||
void *ckmalloc __P((int));
|
||||
void error();
|
||||
int file_changed();
|
||||
void readfile __P((char *));
|
||||
int match __P((char *, char *));
|
||||
int gooddefine __P((char *));
|
||||
char *savestr();
|
||||
void doevent __P((struct event *, FILE *, char *));
|
||||
void doinclude __P((char *));
|
||||
void dodecl __P((char *, FILE *));
|
||||
void output __P((void));
|
||||
int file_changed __P((void));
|
||||
int touch __P((char *));
|
||||
void addstr __P((char *, struct text *));
|
||||
void addchar __P((int, struct text *));
|
||||
void writetext __P((struct text *, FILE *));
|
||||
FILE *ckfopen __P((char *, char *));
|
||||
void *ckmalloc __P((int));
|
||||
char *savestr __P((char *));
|
||||
void error __P((char *));
|
||||
|
||||
#define equal(s1, s2) (strcmp(s1, s2) == 0)
|
||||
|
||||
|
138
bin/sh/mknodes.c
138
bin/sh/mknodes.c
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: mknodes.c,v 1.10 1995/03/21 09:09:38 cgd Exp $ */
|
||||
/* $NetBSD: mknodes.c,v 1.11 1995/05/11 21:29:36 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -44,9 +44,9 @@ static char copyright[] =
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)mknodes.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)mknodes.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: mknodes.c,v 1.10 1995/03/21 09:09:38 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: mknodes.c,v 1.11 1995/05/11 21:29:36 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
@ -58,6 +58,11 @@ static char rcsid[] = "$NetBSD: mknodes.c,v 1.10 1995/03/21 09:09:38 cgd Exp $";
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#if __STDC__
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
|
||||
|
||||
#define MAXTYPES 50 /* max number of node types */
|
||||
@ -88,28 +93,28 @@ struct str { /* struct representing a node structure */
|
||||
};
|
||||
|
||||
|
||||
int ntypes; /* number of node types */
|
||||
char *nodename[MAXTYPES]; /* names of the nodes */
|
||||
struct str *nodestr[MAXTYPES]; /* type of structure used by the node */
|
||||
int nstr; /* number of structures */
|
||||
struct str str[MAXTYPES]; /* the structures */
|
||||
struct str *curstr; /* current structure */
|
||||
FILE *infp = stdin;
|
||||
char line[1024];
|
||||
int linno;
|
||||
char *linep;
|
||||
static int ntypes; /* number of node types */
|
||||
static char *nodename[MAXTYPES]; /* names of the nodes */
|
||||
static struct str *nodestr[MAXTYPES]; /* type of structure used by the node */
|
||||
static int nstr; /* number of structures */
|
||||
static struct str str[MAXTYPES]; /* the structures */
|
||||
static struct str *curstr; /* current structure */
|
||||
static FILE *infp = stdin;
|
||||
static char line[1024];
|
||||
static int linno;
|
||||
static char *linep;
|
||||
|
||||
void indent __P((int, FILE *));
|
||||
int nextfield __P((char *));
|
||||
void outfunc __P((FILE *, int));
|
||||
void output __P((char *));
|
||||
void outsizes __P((FILE *));
|
||||
void parsefield();
|
||||
void parsenode();
|
||||
int readline();
|
||||
char *savestr();
|
||||
void skipbl();
|
||||
#define equal(s1, s2) (strcmp(s1, s2) == 0)
|
||||
static void parsenode __P((void));
|
||||
static void parsefield __P((void));
|
||||
static void output __P((char *));
|
||||
static void outsizes __P((FILE *));
|
||||
static void outfunc __P((FILE *, int));
|
||||
static void indent __P((int, FILE *));
|
||||
static int nextfield __P((char *));
|
||||
static void skipbl __P((void));
|
||||
static int readline __P((void));
|
||||
static void error __P((const char *, ...));
|
||||
static char *savestr __P((const char *));
|
||||
|
||||
|
||||
int
|
||||
@ -133,8 +138,9 @@ main(argc, argv)
|
||||
|
||||
|
||||
|
||||
void
|
||||
parsenode() {
|
||||
static void
|
||||
parsenode()
|
||||
{
|
||||
char name[BUFLEN];
|
||||
char tag[BUFLEN];
|
||||
struct str *sp;
|
||||
@ -148,7 +154,7 @@ parsenode() {
|
||||
error("Garbage at end of line");
|
||||
nodename[ntypes] = savestr(name);
|
||||
for (sp = str ; sp < str + nstr ; sp++) {
|
||||
if (equal(sp->tag, tag))
|
||||
if (strcmp(sp->tag, tag) == 0)
|
||||
break;
|
||||
}
|
||||
if (sp >= str + nstr) {
|
||||
@ -162,8 +168,9 @@ parsenode() {
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
parsefield() {
|
||||
static void
|
||||
parsefield()
|
||||
{
|
||||
char name[BUFLEN];
|
||||
char type[BUFLEN];
|
||||
char decl[2 * BUFLEN];
|
||||
@ -177,21 +184,21 @@ parsefield() {
|
||||
error("No field type");
|
||||
fp = &curstr->field[curstr->nfields];
|
||||
fp->name = savestr(name);
|
||||
if (equal(type, "nodeptr")) {
|
||||
if (strcmp(type, "nodeptr") == 0) {
|
||||
fp->type = T_NODE;
|
||||
sprintf(decl, "union node *%s", name);
|
||||
} else if (equal(type, "nodelist")) {
|
||||
} else if (strcmp(type, "nodelist") == 0) {
|
||||
fp->type = T_NODELIST;
|
||||
sprintf(decl, "struct nodelist *%s", name);
|
||||
} else if (equal(type, "string")) {
|
||||
} else if (strcmp(type, "string") == 0) {
|
||||
fp->type = T_STRING;
|
||||
sprintf(decl, "char *%s", name);
|
||||
} else if (equal(type, "int")) {
|
||||
} else if (strcmp(type, "int") == 0) {
|
||||
fp->type = T_INT;
|
||||
sprintf(decl, "int %s", name);
|
||||
} else if (equal(type, "other")) {
|
||||
} else if (strcmp(type, "other") == 0) {
|
||||
fp->type = T_OTHER;
|
||||
} else if (equal(type, "temp")) {
|
||||
} else if (strcmp(type, "temp") == 0) {
|
||||
fp->type = T_TEMP;
|
||||
} else {
|
||||
error("Unknown type %s", type);
|
||||
@ -214,7 +221,7 @@ char writer[] = "\
|
||||
*/\n\
|
||||
\n";
|
||||
|
||||
void
|
||||
static void
|
||||
output(file)
|
||||
char *file;
|
||||
{
|
||||
@ -264,11 +271,11 @@ output(file)
|
||||
fputs(writer, cfile);
|
||||
while (fgets(line, sizeof line, patfile) != NULL) {
|
||||
for (p = line ; *p == ' ' || *p == '\t' ; p++);
|
||||
if (equal(p, "%SIZES\n"))
|
||||
if (strcmp(p, "%SIZES\n") == 0)
|
||||
outsizes(cfile);
|
||||
else if (equal(p, "%CALCSIZE\n"))
|
||||
else if (strcmp(p, "%CALCSIZE\n") == 0)
|
||||
outfunc(cfile, 1);
|
||||
else if (equal(p, "%COPY\n"))
|
||||
else if (strcmp(p, "%COPY\n") == 0)
|
||||
outfunc(cfile, 0);
|
||||
else
|
||||
fputs(line, cfile);
|
||||
@ -277,7 +284,7 @@ output(file)
|
||||
|
||||
|
||||
|
||||
void
|
||||
static void
|
||||
outsizes(cfile)
|
||||
FILE *cfile;
|
||||
{
|
||||
@ -291,7 +298,7 @@ outsizes(cfile)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
static void
|
||||
outfunc(cfile, calcsize)
|
||||
FILE *cfile;
|
||||
int calcsize;
|
||||
@ -372,7 +379,7 @@ outfunc(cfile, calcsize)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
static void
|
||||
indent(amount, fp)
|
||||
int amount;
|
||||
FILE *fp;
|
||||
@ -387,7 +394,7 @@ indent(amount, fp)
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
static int
|
||||
nextfield(buf)
|
||||
char *buf;
|
||||
{
|
||||
@ -405,15 +412,17 @@ nextfield(buf)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
skipbl() {
|
||||
static void
|
||||
skipbl()
|
||||
{
|
||||
while (*linep == ' ' || *linep == '\t')
|
||||
linep++;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
readline() {
|
||||
static int
|
||||
readline()
|
||||
{
|
||||
register char *p;
|
||||
|
||||
if (fgets(line, 1024, infp) == NULL)
|
||||
@ -431,25 +440,42 @@ readline() {
|
||||
|
||||
|
||||
|
||||
error(msg, a1, a2, a3, a4, a5, a6)
|
||||
char *msg;
|
||||
static void
|
||||
#if __STDC__
|
||||
error(const char *msg, ...)
|
||||
#else
|
||||
error(va_alist)
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
fprintf(stderr, "line %d: ", linno);
|
||||
fprintf(stderr, msg, a1, a2, a3, a4, a5, a6);
|
||||
putc('\n', stderr);
|
||||
va_list va;
|
||||
#if __STDC__
|
||||
va_start(va, msg);
|
||||
#else
|
||||
char *msg;
|
||||
va_start(va);
|
||||
msg = va_arg(va, char *);
|
||||
#endif
|
||||
|
||||
(void) fprintf(stderr, "line %d: ", linno);
|
||||
(void) vfprintf(stderr, msg, va);
|
||||
(void) fputc('\n', stderr);
|
||||
|
||||
va_end(va);
|
||||
|
||||
exit(2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
char *
|
||||
static char *
|
||||
savestr(s)
|
||||
char *s;
|
||||
{
|
||||
const char *s;
|
||||
{
|
||||
register char *p;
|
||||
|
||||
if ((p = malloc(strlen(s) + 1)) == NULL)
|
||||
error("Out of space");
|
||||
strcpy(p, s);
|
||||
(void) strcpy(p, s);
|
||||
return p;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: mksyntax.c,v 1.10 1995/03/21 09:09:40 cgd Exp $ */
|
||||
/* $NetBSD: mksyntax.c,v 1.11 1995/05/11 21:29:37 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -44,9 +44,9 @@ static char copyright[] =
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)mksyntax.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)mksyntax.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: mksyntax.c,v 1.10 1995/03/21 09:09:40 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: mksyntax.c,v 1.11 1995/05/11 21:29:37 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
@ -66,21 +66,21 @@ struct synclass {
|
||||
|
||||
/* Syntax classes */
|
||||
struct synclass synclass[] = {
|
||||
"CWORD", "character is nothing special",
|
||||
"CNL", "newline character",
|
||||
"CBACK", "a backslash character",
|
||||
"CSQUOTE", "single quote",
|
||||
"CDQUOTE", "double quote",
|
||||
"CENDQUOTE", "a terminating quote",
|
||||
"CBQUOTE", "backwards single quote",
|
||||
"CVAR", "a dollar sign",
|
||||
"CENDVAR", "a '}' character",
|
||||
"CLP", "a left paren in arithmetic",
|
||||
"CRP", "a right paren in arithmetic",
|
||||
"CEOF", "end of file",
|
||||
"CCTL", "like CWORD, except it must be escaped",
|
||||
"CSPCL", "these terminate a word",
|
||||
NULL, NULL
|
||||
{ "CWORD", "character is nothing special" },
|
||||
{ "CNL", "newline character" },
|
||||
{ "CBACK", "a backslash character" },
|
||||
{ "CSQUOTE", "single quote" },
|
||||
{ "CDQUOTE", "double quote" },
|
||||
{ "CENDQUOTE", "a terminating quote" },
|
||||
{ "CBQUOTE", "backwards single quote" },
|
||||
{ "CVAR", "a dollar sign" },
|
||||
{ "CENDVAR", "a '}' character" },
|
||||
{ "CLP", "a left paren in arithmetic" },
|
||||
{ "CRP", "a right paren in arithmetic" },
|
||||
{ "CEOF", "end of file" },
|
||||
{ "CCTL", "like CWORD, except it must be escaped" },
|
||||
{ "CSPCL", "these terminate a word" },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
@ -89,40 +89,40 @@ struct synclass synclass[] = {
|
||||
* you may have to change the definition of the is_in_name macro.
|
||||
*/
|
||||
struct synclass is_entry[] = {
|
||||
"ISDIGIT", "a digit",
|
||||
"ISUPPER", "an upper case letter",
|
||||
"ISLOWER", "a lower case letter",
|
||||
"ISUNDER", "an underscore",
|
||||
"ISSPECL", "the name of a special parameter",
|
||||
NULL, NULL,
|
||||
{ "ISDIGIT", "a digit" },
|
||||
{ "ISUPPER", "an upper case letter" },
|
||||
{ "ISLOWER", "a lower case letter" },
|
||||
{ "ISUNDER", "an underscore" },
|
||||
{ "ISSPECL", "the name of a special parameter" },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
char writer[] = "\
|
||||
static char writer[] = "\
|
||||
/*\n\
|
||||
* This file was generated by the mksyntax program.\n\
|
||||
*/\n\
|
||||
\n";
|
||||
|
||||
|
||||
FILE *cfile;
|
||||
FILE *hfile;
|
||||
char *syntax[513];
|
||||
int base;
|
||||
int size; /* number of values which a char variable can have */
|
||||
int nbits; /* number of bits in a character */
|
||||
int digit_contig; /* true if digits are contiguous */
|
||||
static FILE *cfile;
|
||||
static FILE *hfile;
|
||||
static char *syntax[513];
|
||||
static int base;
|
||||
static int size; /* number of values which a char variable can have */
|
||||
static int nbits; /* number of bits in a character */
|
||||
static int digit_contig;/* true if digits are contiguous */
|
||||
|
||||
void add __P((char *, char *));
|
||||
void digit_convert();
|
||||
void filltable __P((char *));
|
||||
void init();
|
||||
void output_type_macros();
|
||||
void print __P((char *));
|
||||
static void filltable __P((char *));
|
||||
static void init __P((void));
|
||||
static void add __P((char *, char *));
|
||||
static void print __P((char *));
|
||||
static void output_type_macros __P((void));
|
||||
static void digit_convert __P((void));
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
char **argv;
|
||||
{
|
||||
char c;
|
||||
char d;
|
||||
@ -177,7 +177,7 @@ main(argc, argv)
|
||||
for (i = 0 ; synclass[i].name ; i++) {
|
||||
sprintf(buf, "#define %s %d", synclass[i].name, i);
|
||||
fputs(buf, hfile);
|
||||
for (pos = strlen(buf) ; pos < 32 ; pos = pos + 8 &~ 07)
|
||||
for (pos = strlen(buf) ; pos < 32 ; pos = (pos + 8) & ~07)
|
||||
putc('\t', hfile);
|
||||
fprintf(hfile, "/* %s */\n", synclass[i].comment);
|
||||
}
|
||||
@ -186,7 +186,7 @@ main(argc, argv)
|
||||
for (i = 0 ; is_entry[i].name ; i++) {
|
||||
sprintf(buf, "#define %s %#o", is_entry[i].name, 1 << i);
|
||||
fputs(buf, hfile);
|
||||
for (pos = strlen(buf) ; pos < 32 ; pos = pos + 8 &~ 07)
|
||||
for (pos = strlen(buf) ; pos < 32 ; pos = (pos + 8) & ~07)
|
||||
putc('\t', hfile);
|
||||
fprintf(hfile, "/* %s */\n", is_entry[i].comment);
|
||||
}
|
||||
@ -265,7 +265,7 @@ main(argc, argv)
|
||||
* Clear the syntax table.
|
||||
*/
|
||||
|
||||
void
|
||||
static void
|
||||
filltable(dftval)
|
||||
char *dftval;
|
||||
{
|
||||
@ -280,8 +280,9 @@ filltable(dftval)
|
||||
* Initialize the syntax table with default values.
|
||||
*/
|
||||
|
||||
void
|
||||
init() {
|
||||
static void
|
||||
init()
|
||||
{
|
||||
filltable("CWORD");
|
||||
syntax[0] = "CEOF";
|
||||
syntax[base + CTLESC] = "CCTL";
|
||||
@ -298,7 +299,7 @@ init() {
|
||||
* Add entries to the syntax table.
|
||||
*/
|
||||
|
||||
void
|
||||
static void
|
||||
add(p, type)
|
||||
char *p, *type;
|
||||
{
|
||||
@ -312,7 +313,7 @@ add(p, type)
|
||||
* Output the syntax table.
|
||||
*/
|
||||
|
||||
void
|
||||
static void
|
||||
print(name)
|
||||
char *name;
|
||||
{
|
||||
@ -346,7 +347,7 @@ print(name)
|
||||
* contiguous, we can test for them quickly.
|
||||
*/
|
||||
|
||||
char *macro[] = {
|
||||
static char *macro[] = {
|
||||
"#define is_digit(c)\t((is_type+SYNBASE)[c] & ISDIGIT)",
|
||||
"#define is_alpha(c)\t((is_type+SYNBASE)[c] & (ISUPPER|ISLOWER))",
|
||||
"#define is_name(c)\t((is_type+SYNBASE)[c] & (ISUPPER|ISLOWER|ISUNDER))",
|
||||
@ -355,7 +356,7 @@ char *macro[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
void
|
||||
static void
|
||||
output_type_macros()
|
||||
{
|
||||
char **pp;
|
||||
@ -376,7 +377,7 @@ output_type_macros()
|
||||
* Output digit conversion table (if digits are not contiguous).
|
||||
*/
|
||||
|
||||
void
|
||||
static void
|
||||
digit_convert()
|
||||
{
|
||||
int maxdigit;
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/sh -
|
||||
# $NetBSD: mktokens,v 1.6 1995/03/21 09:09:42 cgd Exp $
|
||||
# $NetBSD: mktokens,v 1.7 1995/05/11 21:29:38 christos Exp $
|
||||
#
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: myhistedit.h,v 1.3 1995/03/21 09:09:43 cgd Exp $ */
|
||||
/* $NetBSD: myhistedit.h,v 1.4 1995/05/11 21:29:40 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1993
|
||||
@ -32,7 +32,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)myhistedit.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)myhistedit.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
#include <histedit.h>
|
||||
@ -40,3 +40,10 @@
|
||||
extern History *hist;
|
||||
extern EditLine *el;
|
||||
extern int displayhist;
|
||||
|
||||
void histedit __P((void));
|
||||
void sethistsize __P((void));
|
||||
int histcmd __P((int, char **));
|
||||
int not_fcnumber __P((char *));
|
||||
int str_to_event __P((char *, int));
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: mystring.c,v 1.9 1995/03/21 09:09:45 cgd Exp $ */
|
||||
/* $NetBSD: mystring.c,v 1.10 1995/05/11 21:29:41 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,9 +38,9 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)mystring.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)mystring.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: mystring.c,v 1.9 1995/03/21 09:09:45 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: mystring.c,v 1.10 1995/05/11 21:29:41 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: mystring.h,v 1.8 1995/03/21 09:09:46 cgd Exp $ */
|
||||
/* $NetBSD: mystring.h,v 1.9 1995/05/11 21:29:42 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,22 +35,15 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)mystring.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)mystring.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#ifdef __STDC__
|
||||
void scopyn(const char *, char *, int);
|
||||
int prefix(const char *, const char *);
|
||||
int number(const char *);
|
||||
int is_number(const char *);
|
||||
#else
|
||||
void scopyn();
|
||||
int prefix();
|
||||
int number();
|
||||
int is_number();
|
||||
#endif
|
||||
void scopyn __P((const char *, char *, int));
|
||||
int prefix __P((const char *, const char *));
|
||||
int number __P((const char *));
|
||||
int is_number __P((const char *));
|
||||
|
||||
#define equal(s1, s2) (strcmp(s1, s2) == 0)
|
||||
#define scopy(s1, s2) ((void)strcpy(s2, s1))
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: nodes.c.pat,v 1.6 1995/03/21 09:09:47 cgd Exp $ */
|
||||
/* $NetBSD: nodes.c.pat,v 1.7 1995/05/11 21:29:43 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,9 +35,10 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)nodes.c.pat 8.1 (Berkeley) 5/31/93
|
||||
* @(#)nodes.c.pat 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
/*
|
||||
* Routine for dealing with parsed shell commands.
|
||||
*/
|
||||
@ -49,31 +50,19 @@
|
||||
#include "mystring.h"
|
||||
|
||||
|
||||
int funcblocksize; /* size of structures in function */
|
||||
int funcstringsize; /* size of strings in node */
|
||||
#ifdef __STDC__
|
||||
int funcblocksize; /* size of structures in function */
|
||||
int funcstringsize; /* size of strings in node */
|
||||
pointer funcblock; /* block to allocate function from */
|
||||
#else
|
||||
char *funcblock; /* block to allocate function from */
|
||||
#endif
|
||||
char *funcstring; /* block to allocate strings from */
|
||||
char *funcstring; /* block to allocate strings from */
|
||||
|
||||
%SIZES
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
STATIC void calcsize(union node *);
|
||||
STATIC void sizenodelist(struct nodelist *);
|
||||
STATIC union node *copynode(union node *);
|
||||
STATIC struct nodelist *copynodelist(struct nodelist *);
|
||||
STATIC char *nodesavestr(char *);
|
||||
#else
|
||||
STATIC void calcsize();
|
||||
STATIC void sizenodelist();
|
||||
STATIC union node *copynode();
|
||||
STATIC struct nodelist *copynodelist();
|
||||
STATIC char *nodesavestr();
|
||||
#endif
|
||||
STATIC void calcsize __P((union node *));
|
||||
STATIC void sizenodelist __P((struct nodelist *));
|
||||
STATIC union node *copynode __P((union node *));
|
||||
STATIC struct nodelist *copynodelist __P((struct nodelist *));
|
||||
STATIC char *nodesavestr __P((char *));
|
||||
|
||||
|
||||
|
||||
@ -83,85 +72,86 @@ STATIC char *nodesavestr();
|
||||
|
||||
union node *
|
||||
copyfunc(n)
|
||||
union node *n;
|
||||
{
|
||||
if (n == NULL)
|
||||
return NULL;
|
||||
funcblocksize = 0;
|
||||
funcstringsize = 0;
|
||||
calcsize(n);
|
||||
funcblock = ckmalloc(funcblocksize + funcstringsize);
|
||||
funcstring = funcblock + funcblocksize;
|
||||
return copynode(n);
|
||||
union node *n;
|
||||
{
|
||||
if (n == NULL)
|
||||
return NULL;
|
||||
funcblocksize = 0;
|
||||
funcstringsize = 0;
|
||||
calcsize(n);
|
||||
funcblock = ckmalloc(funcblocksize + funcstringsize);
|
||||
funcstring = funcblock + funcblocksize;
|
||||
return copynode(n);
|
||||
}
|
||||
|
||||
|
||||
|
||||
STATIC void
|
||||
calcsize(n)
|
||||
union node *n;
|
||||
{
|
||||
%CALCSIZE
|
||||
union node *n;
|
||||
{
|
||||
%CALCSIZE
|
||||
}
|
||||
|
||||
|
||||
|
||||
STATIC void
|
||||
sizenodelist(lp)
|
||||
struct nodelist *lp;
|
||||
{
|
||||
while (lp) {
|
||||
funcblocksize += ALIGN(sizeof (struct nodelist));
|
||||
calcsize(lp->n);
|
||||
lp = lp->next;
|
||||
}
|
||||
struct nodelist *lp;
|
||||
{
|
||||
while (lp) {
|
||||
funcblocksize += ALIGN(sizeof(struct nodelist));
|
||||
calcsize(lp->n);
|
||||
lp = lp->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
STATIC union node *
|
||||
copynode(n)
|
||||
union node *n;
|
||||
{
|
||||
union node *new;
|
||||
union node *n;
|
||||
{
|
||||
union node *new;
|
||||
|
||||
%COPY
|
||||
return new;
|
||||
%COPY
|
||||
return new;
|
||||
}
|
||||
|
||||
|
||||
STATIC struct nodelist *
|
||||
copynodelist(lp)
|
||||
struct nodelist *lp;
|
||||
{
|
||||
struct nodelist *start;
|
||||
struct nodelist **lpp;
|
||||
struct nodelist *lp;
|
||||
{
|
||||
struct nodelist *start;
|
||||
struct nodelist **lpp;
|
||||
|
||||
lpp = &start;
|
||||
while (lp) {
|
||||
*lpp = funcblock;
|
||||
funcblock += ALIGN(sizeof (struct nodelist));
|
||||
(*lpp)->n = copynode(lp->n);
|
||||
lp = lp->next;
|
||||
lpp = &(*lpp)->next;
|
||||
}
|
||||
*lpp = NULL;
|
||||
return start;
|
||||
lpp = &start;
|
||||
while (lp) {
|
||||
*lpp = funcblock;
|
||||
funcblock += ALIGN(sizeof(struct nodelist));
|
||||
(*lpp)->n = copynode(lp->n);
|
||||
lp = lp->next;
|
||||
lpp = &(*lpp)->next;
|
||||
}
|
||||
*lpp = NULL;
|
||||
return start;
|
||||
}
|
||||
|
||||
|
||||
|
||||
STATIC char *
|
||||
nodesavestr(s)
|
||||
char *s;
|
||||
{
|
||||
register char *p = s;
|
||||
register char *q = funcstring;
|
||||
char *rtn = funcstring;
|
||||
char *s;
|
||||
{
|
||||
register char *p = s;
|
||||
register char *q = funcstring;
|
||||
char *rtn = funcstring;
|
||||
|
||||
while (*q++ = *p++);
|
||||
funcstring = q;
|
||||
return rtn;
|
||||
while ((*q++ = *p++) != '\0')
|
||||
continue;
|
||||
funcstring = q;
|
||||
return rtn;
|
||||
}
|
||||
|
||||
|
||||
@ -172,8 +162,8 @@ nodesavestr(s)
|
||||
|
||||
void
|
||||
freefunc(n)
|
||||
union node *n;
|
||||
{
|
||||
if (n)
|
||||
ckfree(n);
|
||||
union node *n;
|
||||
{
|
||||
if (n)
|
||||
ckfree(n);
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
# $NetBSD: nodetypes,v 1.7 1995/03/21 09:09:49 cgd Exp $
|
||||
#
|
||||
# $NetBSD: nodetypes,v 1.8 1995/05/11 21:29:44 christos Exp $
|
||||
# Copyright (c) 1991, 1993
|
||||
# The Regents of the University of California. All rights reserved.
|
||||
#
|
||||
@ -34,7 +33,7 @@
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# @(#)nodetypes 8.1 (Berkeley) 5/31/93
|
||||
# @(#)nodetypes 8.2 (Berkeley) 5/4/95
|
||||
|
||||
# This file describes the nodes used in parse trees. Unindented lines
|
||||
# contain a node type followed by a structure tag. Subsequent indented
|
||||
@ -133,6 +132,7 @@ NFROMFD ndup # fd>&dupfd
|
||||
dupfd int # file descriptor to duplicate
|
||||
vname nodeptr # file name if fd>&$var
|
||||
|
||||
|
||||
NHERE nhere # fd<<\!
|
||||
NXHERE nhere # fd<<!
|
||||
type int
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: options.c,v 1.13 1995/03/26 17:25:10 christos Exp $ */
|
||||
/* $NetBSD: options.c,v 1.14 1995/05/11 21:29:46 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,12 +38,16 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)options.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)options.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: options.c,v 1.13 1995/03/26 17:25:10 christos Exp $";
|
||||
static char rcsid[] = "$NetBSD: options.c,v 1.14 1995/05/11 21:29:46 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "shell.h"
|
||||
#define DEFINE_OPTIONS
|
||||
#include "options.h"
|
||||
@ -58,8 +62,9 @@ static char rcsid[] = "$NetBSD: options.c,v 1.13 1995/03/26 17:25:10 christos Ex
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
#include "mystring.h"
|
||||
#include "extern.h"
|
||||
#include <unistd.h>
|
||||
#ifndef NO_HISTORY
|
||||
#include "myhistedit.h"
|
||||
#endif
|
||||
|
||||
char *arg0; /* value of $0 */
|
||||
struct shparam shellparam; /* current positional parameters */
|
||||
@ -70,16 +75,9 @@ char *optptr; /* used by nextopt */
|
||||
char *minusc; /* argument to -c option */
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
STATIC void options(int);
|
||||
STATIC void setoption(int, int);
|
||||
STATIC void minus_o(char *, int);
|
||||
#else
|
||||
STATIC void options();
|
||||
STATIC void setoption();
|
||||
STATIC void minus_o();
|
||||
#endif
|
||||
|
||||
STATIC void options __P((int));
|
||||
STATIC void minus_o __P((char *, int));
|
||||
STATIC void setoption __P((int, int));
|
||||
|
||||
|
||||
/*
|
||||
@ -152,7 +150,7 @@ options(cmdline)
|
||||
argptr++;
|
||||
if ((c = *p++) == '-') {
|
||||
val = 1;
|
||||
if (p[0] == '\0' || p[0] == '-' && p[1] == '\0') {
|
||||
if (p[0] == '\0' || (p[0] == '-' && p[1] == '\0')) {
|
||||
if (!cmdline) {
|
||||
/* "-" means turn off -x and -v */
|
||||
if (p[0] == '\0')
|
||||
@ -242,7 +240,6 @@ setoption(flag, val)
|
||||
|
||||
#ifdef mkinit
|
||||
INCLUDE "options.h"
|
||||
INCLUDE "extern.h"
|
||||
|
||||
SHELLPROC {
|
||||
int i;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: options.h,v 1.7 1995/03/21 09:09:53 cgd Exp $ */
|
||||
/* $NetBSD: options.h,v 1.8 1995/05/11 21:29:48 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)options.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)options.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
struct shparam {
|
||||
@ -74,21 +74,21 @@ struct optent {
|
||||
|
||||
#ifdef DEFINE_OPTIONS
|
||||
struct optent optlist[NOPTS] = {
|
||||
"errexit", 'e', 0,
|
||||
"noglob", 'f', 0,
|
||||
"ignoreeof", 'I', 0,
|
||||
"interactive", 'i', 0,
|
||||
"monitor", 'm', 0,
|
||||
"noexec", 'n', 0,
|
||||
"stdin", 's', 0,
|
||||
"xtrace", 'x', 0,
|
||||
"verbose", 'v', 0,
|
||||
"vi", 'V', 0,
|
||||
"emacs", 'E', 0,
|
||||
"noclobber", 'C', 0,
|
||||
"allexport", 'a', 0,
|
||||
"notify", 'b', 0,
|
||||
"nounset", 'u', 0,
|
||||
{ "errexit", 'e', 0 },
|
||||
{ "noglob", 'f', 0 },
|
||||
{ "ignoreeof", 'I', 0 },
|
||||
{ "interactive",'i', 0 },
|
||||
{ "monitor", 'm', 0 },
|
||||
{ "noexec", 'n', 0 },
|
||||
{ "stdin", 's', 0 },
|
||||
{ "xtrace", 'x', 0 },
|
||||
{ "verbose", 'v', 0 },
|
||||
{ "vi", 'V', 0 },
|
||||
{ "emacs", 'E', 0 },
|
||||
{ "noclobber", 'C', 0 },
|
||||
{ "allexport", 'a', 0 },
|
||||
{ "notify", 'b', 0 },
|
||||
{ "nounset", 'u', 0 },
|
||||
};
|
||||
#else
|
||||
extern struct optent optlist[NOPTS];
|
||||
@ -102,15 +102,11 @@ extern char **argptr; /* argument list for builtin commands */
|
||||
extern char *optarg; /* set by nextopt */
|
||||
extern char *optptr; /* used by nextopt */
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
void procargs(int, char **);
|
||||
void setparam(char **);
|
||||
void freeparam(struct shparam *);
|
||||
int nextopt(char *);
|
||||
#else
|
||||
void procargs();
|
||||
void setparam();
|
||||
void freeparam();
|
||||
int nextopt();
|
||||
#endif
|
||||
void procargs __P((int, char **));
|
||||
void optschanged __P((void));
|
||||
void setparam __P((char **));
|
||||
void freeparam __P((struct shparam *));
|
||||
int shiftcmd __P((int, char **));
|
||||
int setcmd __P((int, char **));
|
||||
int getoptscmd __P((int, char **));
|
||||
int nextopt __P((char *));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: output.c,v 1.13 1995/03/21 09:09:55 cgd Exp $ */
|
||||
/* $NetBSD: output.c,v 1.14 1995/05/11 21:29:50 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,9 +38,9 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)output.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)output.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: output.c,v 1.13 1995/03/21 09:09:55 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: output.c,v 1.14 1995/05/11 21:29:50 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
@ -59,18 +59,20 @@ static char rcsid[] = "$NetBSD: output.c,v 1.13 1995/03/21 09:09:55 cgd Exp $";
|
||||
|
||||
#include <stdio.h> /* defines BUFSIZ */
|
||||
#include <string.h>
|
||||
#include "shell.h"
|
||||
#include "syntax.h"
|
||||
#include "output.h"
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
#ifdef __STDC__
|
||||
#include "stdarg.h"
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "shell.h"
|
||||
#include "syntax.h"
|
||||
#include "output.h"
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
|
||||
|
||||
#define OUTBUFSIZ BUFSIZ
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: output.h,v 1.10 1995/03/21 09:09:57 cgd Exp $ */
|
||||
/* $NetBSD: output.h,v 1.11 1995/05/11 21:29:53 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,11 +35,17 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)output.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)output.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
#ifndef OUTPUT_INCL
|
||||
|
||||
#if __STDC__
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
|
||||
struct output {
|
||||
char *nextc;
|
||||
int nleft;
|
||||
@ -55,38 +61,21 @@ extern struct output memout;
|
||||
extern struct output *out1;
|
||||
extern struct output *out2;
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
void outstr(const char *, struct output *);
|
||||
void out1str(const char *);
|
||||
void out2str(const char *);
|
||||
void outfmt(struct output *, char *, ...);
|
||||
void out1fmt(char *, ...);
|
||||
void fmtstr(char *, int, char *, ...);
|
||||
/* void doformat(struct output *, char *, va_list); */
|
||||
void doformat();
|
||||
void emptyoutbuf(struct output *);
|
||||
void flushall(void);
|
||||
void flushout(struct output *);
|
||||
void freestdout(void);
|
||||
int xwrite(int, char *, int);
|
||||
int xioctl(int, unsigned long, char *);
|
||||
#else
|
||||
void outstr();
|
||||
void out1str();
|
||||
void out2str();
|
||||
void outfmt();
|
||||
void out1fmt();
|
||||
void fmtstr();
|
||||
/* void doformat(); */
|
||||
void doformat();
|
||||
void emptyoutbuf();
|
||||
void flushall();
|
||||
void flushout();
|
||||
void freestdout();
|
||||
int xwrite();
|
||||
int xioctl();
|
||||
#endif
|
||||
void open_mem __P((char *, int, struct output *));
|
||||
void out1str __P((const char *));
|
||||
void out2str __P((const char *));
|
||||
void outstr __P((const char *, struct output *));
|
||||
void emptyoutbuf __P((struct output *));
|
||||
void flushall __P((void));
|
||||
void flushout __P((struct output *));
|
||||
void freestdout __P((void));
|
||||
void outfmt __P((struct output *, char *, ...));
|
||||
void out1fmt __P((char *, ...));
|
||||
void dprintf __P((char *, ...));
|
||||
void fmtstr __P((char *, int, char *, ...));
|
||||
void doformat __P((struct output *, char *, va_list));
|
||||
int xwrite __P((int, char *, int));
|
||||
int xioctl __P((int, unsigned long, char *));
|
||||
|
||||
#define outc(c, file) (--(file)->nleft < 0? (emptyoutbuf(file), *(file)->nextc++ = (c)) : (*(file)->nextc++ = (c)))
|
||||
#define out1c(c) outc(c, out1);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: parser.c,v 1.24 1995/03/21 09:09:59 cgd Exp $ */
|
||||
/* $NetBSD: parser.c,v 1.25 1995/05/11 21:29:55 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,12 +38,14 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)parser.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)parser.c 8.6 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: parser.c,v 1.24 1995/03/21 09:09:59 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: parser.c,v 1.25 1995/05/11 21:29:55 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "shell.h"
|
||||
#include "parser.h"
|
||||
#include "nodes.h"
|
||||
@ -58,6 +60,7 @@ static char rcsid[] = "$NetBSD: parser.c,v 1.24 1995/03/21 09:09:59 cgd Exp $";
|
||||
#include "memalloc.h"
|
||||
#include "mystring.h"
|
||||
#include "alias.h"
|
||||
#include "show.h"
|
||||
#ifndef NO_HISTORY
|
||||
#include "myhistedit.h"
|
||||
#endif
|
||||
@ -112,11 +115,11 @@ STATIC union node *simplecmd __P((union node **, union node *));
|
||||
STATIC union node *makename __P((void));
|
||||
STATIC void parsefname __P((void));
|
||||
STATIC void parseheredoc __P((void));
|
||||
STATIC int readtoken __P((void));
|
||||
STATIC int readtoken1 __P((int, char const *, char *, int));
|
||||
STATIC void attyline __P((void));
|
||||
STATIC int noexpand __P((char *));
|
||||
STATIC int peektoken __P((void));
|
||||
STATIC int readtoken __P((void));
|
||||
STATIC int xxreadtoken __P((void));
|
||||
STATIC int readtoken1 __P((int, char const *, char *, int));
|
||||
STATIC int noexpand __P((char *));
|
||||
STATIC void synexpect __P((int));
|
||||
STATIC void synerror __P((char *));
|
||||
STATIC void setprompt __P((int));
|
||||
@ -296,7 +299,8 @@ command() {
|
||||
int t;
|
||||
|
||||
checkkwd = 2;
|
||||
redir = 0;
|
||||
redir = NULL;
|
||||
n1 = NULL;
|
||||
rpp = &redir;
|
||||
/* Check for redirection which may precede command */
|
||||
while (readtoken() == TREDIR) {
|
||||
@ -710,7 +714,7 @@ readtoken() {
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
if (ap = lookupalias(wordtext, 1)) {
|
||||
if ((ap = lookupalias(wordtext, 1)) != NULL) {
|
||||
pushstring(ap->val, strlen(ap->val), ap);
|
||||
checkkwd = savecheckkwd;
|
||||
goto top;
|
||||
@ -846,8 +850,8 @@ readtoken1(firstc, syntax, eofmark, striptabs)
|
||||
char *eofmark;
|
||||
int striptabs;
|
||||
{
|
||||
register c = firstc;
|
||||
register char *out;
|
||||
int c = firstc;
|
||||
char *out;
|
||||
int len;
|
||||
char line[EOFMARKLEN + 1];
|
||||
struct nodelist *bqlist;
|
||||
@ -858,6 +862,18 @@ readtoken1(firstc, syntax, eofmark, striptabs)
|
||||
int parenlevel; /* levels of parens in arithmetic */
|
||||
int oldstyle;
|
||||
char const *prevsyntax; /* syntax before arithmetic */
|
||||
#if __GNUC__
|
||||
/* Avoid longjmp clobbering */
|
||||
(void) &out;
|
||||
(void) "ef;
|
||||
(void) &dblquote;
|
||||
(void) &varnest;
|
||||
(void) &arinest;
|
||||
(void) &parenlevel;
|
||||
(void) &oldstyle;
|
||||
(void) &prevsyntax;
|
||||
(void) &syntax;
|
||||
#endif
|
||||
|
||||
startlinno = plinno;
|
||||
dblquote = 0;
|
||||
@ -1258,8 +1274,8 @@ parsebackq: {
|
||||
if (savelen > 0) {
|
||||
str = ckmalloc(savelen);
|
||||
memcpy(str, stackblock(), savelen);
|
||||
setinputstring(str, 1);
|
||||
}
|
||||
setinputstring(str, 1);
|
||||
}
|
||||
nlpp = &bqlist;
|
||||
while (*nlpp)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: parser.h,v 1.9 1995/03/21 09:10:01 cgd Exp $ */
|
||||
/* $NetBSD: parser.h,v 1.10 1995/05/11 21:30:02 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)parser.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)parser.h 8.3 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
/* control characters in argument strings */
|
||||
@ -76,14 +76,7 @@ extern int tokpushback;
|
||||
extern int whichprompt; /* 1 == PS1, 2 == PS2 */
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
union node *parsecmd(int);
|
||||
int goodname(char *);
|
||||
char *getprompt(void *);
|
||||
void fixredir(union node *, const char *, int);
|
||||
#else
|
||||
union node *parsecmd();
|
||||
int goodname();
|
||||
char *getprompt();
|
||||
void fixredir();
|
||||
#endif
|
||||
union node *parsecmd __P((int));
|
||||
void fixredir __P((union node *, const char *, int));
|
||||
int goodname __P((char *));
|
||||
char *getprompt __P((void *));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: redir.c,v 1.11 1995/03/21 09:10:04 cgd Exp $ */
|
||||
/* $NetBSD: redir.c,v 1.12 1995/05/11 21:30:10 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,12 +38,20 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)redir.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)redir.c 8.2 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: redir.c,v 1.11 1995/03/21 09:10:04 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: redir.c,v 1.12 1995/05/11 21:30:10 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* Code for dealing with input/output redirection.
|
||||
*/
|
||||
@ -56,12 +64,6 @@ static char rcsid[] = "$NetBSD: redir.c,v 1.11 1995/03/21 09:10:04 cgd Exp $";
|
||||
#include "output.h"
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
#define EMPTY -2 /* marks an unused slot in redirtab */
|
||||
@ -84,14 +86,8 @@ MKINIT struct redirtab *redirlist;
|
||||
*/
|
||||
int fd0_redirected = 0;
|
||||
|
||||
#ifdef __STDC__
|
||||
STATIC void openredirect(union node *, char *);
|
||||
STATIC int openhere(union node *);
|
||||
#else
|
||||
STATIC void openredirect();
|
||||
STATIC int openhere();
|
||||
#endif
|
||||
|
||||
STATIC void openredirect __P((union node *, char[10 ]));
|
||||
STATIC int openhere __P((union node *));
|
||||
|
||||
|
||||
/*
|
||||
@ -228,7 +224,7 @@ openhere(redir)
|
||||
union node *redir;
|
||||
{
|
||||
int pip[2];
|
||||
int len;
|
||||
int len = 0;
|
||||
|
||||
if (pipe(pip) < 0)
|
||||
error("Pipe call failed");
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: redir.h,v 1.8 1995/03/21 09:10:07 cgd Exp $ */
|
||||
/* $NetBSD: redir.h,v 1.9 1995/05/11 21:30:13 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,24 +35,17 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)redir.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)redir.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
/* flags passed to redirect */
|
||||
#define REDIR_PUSH 01 /* save previous values of file descriptors */
|
||||
#define REDIR_BACKQ 02 /* save the command output in memory */
|
||||
|
||||
#ifdef __STDC__
|
||||
union node;
|
||||
void redirect(union node *, int);
|
||||
void popredir(void);
|
||||
void clearredir(void);
|
||||
int copyfd(int, int);
|
||||
int fd0_redirected_p(void);
|
||||
#else
|
||||
void redirect();
|
||||
void popredir();
|
||||
void clearredir();
|
||||
int copyfd();
|
||||
int fd0_redirected_p();
|
||||
#endif
|
||||
void redirect __P((union node *, int));
|
||||
void popredir __P((void));
|
||||
int fd0_redirected_p __P((void));
|
||||
void clearredir __P((void));
|
||||
int copyfd __P((int, int));
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
.\" $NetBSD: sh.1,v 1.14 1995/03/21 09:10:12 cgd Exp $
|
||||
.\"
|
||||
.\" $NetBSD: sh.1,v 1.15 1995/05/11 21:30:18 christos Exp $
|
||||
.\" Copyright (c) 1991, 1993
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
.\"
|
||||
@ -34,7 +33,7 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)sh.1 8.4 (Berkeley) 4/18/94
|
||||
.\" @(#)sh.1 8.6 (Berkeley) 5/4/95
|
||||
.\"
|
||||
.na
|
||||
.TH SH 1
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: shell.h,v 1.7 1995/03/21 09:10:17 cgd Exp $ */
|
||||
/* $NetBSD: shell.h,v 1.8 1995/05/11 21:30:22 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)shell.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)shell.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: show.c,v 1.10 1995/03/21 09:10:22 cgd Exp $ */
|
||||
/* $NetBSD: show.c,v 1.11 1995/05/11 21:30:24 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,26 +38,35 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)show.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)show.c 8.3 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: show.c,v 1.10 1995/03/21 09:10:22 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: show.c,v 1.11 1995/05/11 21:30:24 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#if __STDC__
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
|
||||
#include "shell.h"
|
||||
#include "parser.h"
|
||||
#include "nodes.h"
|
||||
#include "mystring.h"
|
||||
#include "extern.h"
|
||||
#include "show.h"
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
static void shtree(), shcmd(), sharg(), indent();
|
||||
static void shtree __P((union node *, int, char *, FILE*));
|
||||
static void shcmd __P((union node *, FILE *));
|
||||
static void sharg __P((union node *, FILE *));
|
||||
static void indent __P((int, char *, FILE *));
|
||||
static void trstring __P((char *));
|
||||
|
||||
|
||||
int
|
||||
void
|
||||
showtree(n)
|
||||
union node *n;
|
||||
{
|
||||
@ -125,7 +134,7 @@ static void
|
||||
shcmd(cmd, fp)
|
||||
union node *cmd;
|
||||
FILE *fp;
|
||||
{
|
||||
{
|
||||
union node *np;
|
||||
int first;
|
||||
char *s;
|
||||
@ -147,6 +156,7 @@ shcmd(cmd, fp)
|
||||
case NTOFD: s = ">&"; dftfd = 1; break;
|
||||
case NFROM: s = "<"; dftfd = 0; break;
|
||||
case NFROMFD: s = "<&"; dftfd = 0; break;
|
||||
default: s = "*error*"; dftfd = 0; break;
|
||||
}
|
||||
if (np->nfile.fd != dftfd)
|
||||
fprintf(fp, "%d", np->nfile.fd);
|
||||
@ -294,16 +304,29 @@ trputc(c)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
trace(fmt, a1, a2, a3, a4, a5, a6, a7, a8)
|
||||
char *fmt;
|
||||
{
|
||||
void
|
||||
#if __STDC__
|
||||
trace(const char *fmt, ...)
|
||||
#else
|
||||
trace(va_alist)
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
#ifdef DEBUG
|
||||
if (tracefile == NULL)
|
||||
return;
|
||||
fprintf(tracefile, fmt, a1, a2, a3, a4, a5, a6, a7, a8);
|
||||
if (strchr(fmt, '\n'))
|
||||
fflush(tracefile);
|
||||
va_list va;
|
||||
#if __STDC__
|
||||
va_start(va, fmt);
|
||||
#else
|
||||
char *fmt;
|
||||
va_start(va);
|
||||
fmt = va_arg(va, char *);
|
||||
#endif
|
||||
if (tracefile != NULL) {
|
||||
(void) vfprintf(tracefile, fmt, va);
|
||||
if (strchr(fmt, '\n'))
|
||||
(void) fflush(tracefile);
|
||||
}
|
||||
va_end(va);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -387,22 +410,26 @@ trargs(ap)
|
||||
void
|
||||
opentrace() {
|
||||
char s[100];
|
||||
char *p;
|
||||
char *getenv();
|
||||
#ifdef O_APPEND
|
||||
int flags;
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
if (!debug)
|
||||
return;
|
||||
#ifdef not_this_way
|
||||
if ((p = getenv("HOME")) == NULL) {
|
||||
if (geteuid() == 0)
|
||||
p = "/";
|
||||
else
|
||||
p = "/tmp";
|
||||
{
|
||||
char *p;
|
||||
if ((p = getenv("HOME")) == NULL) {
|
||||
if (geteuid() == 0)
|
||||
p = "/";
|
||||
else
|
||||
p = "/tmp";
|
||||
}
|
||||
scopy(p, s);
|
||||
strcat(s, "/trace");
|
||||
}
|
||||
scopy(p, s);
|
||||
strcat(s, "/trace");
|
||||
#else
|
||||
scopy("./trace", s);
|
||||
#endif /* not_this_way */
|
||||
|
43
bin/sh/show.h
Normal file
43
bin/sh/show.h
Normal file
@ -0,0 +1,43 @@
|
||||
/* $NetBSD: show.h,v 1.1 1995/05/11 21:30:27 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1995
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)show.h 1.1 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
void showtree __P((union node *));
|
||||
void trputc __P((int));
|
||||
void trace __P((const char *, ...));
|
||||
void trputs __P((char *));
|
||||
void trargs __P((char **));
|
||||
void opentrace __P((void));
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: trap.c,v 1.12 1995/03/21 09:10:25 cgd Exp $ */
|
||||
/* $NetBSD: trap.c,v 1.13 1995/05/11 21:30:28 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,17 +38,22 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)trap.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)trap.c 8.3 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: trap.c,v 1.12 1995/03/21 09:10:25 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: trap.c,v 1.13 1995/05/11 21:30:28 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "shell.h"
|
||||
#include "main.h"
|
||||
#include "nodes.h" /* for other headers */
|
||||
#include "eval.h"
|
||||
#include "jobs.h"
|
||||
#include "show.h"
|
||||
#include "options.h"
|
||||
#include "syntax.h"
|
||||
#include "output.h"
|
||||
@ -56,8 +61,6 @@ static char rcsid[] = "$NetBSD: trap.c,v 1.12 1995/03/21 09:10:25 cgd Exp $";
|
||||
#include "error.h"
|
||||
#include "trap.h"
|
||||
#include "mystring.h"
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
/*
|
||||
@ -156,7 +159,7 @@ setsignal(signo)
|
||||
int signo;
|
||||
{
|
||||
int action;
|
||||
sig_t sigact;
|
||||
sig_t sigact = SIG_DFL;
|
||||
char *t;
|
||||
extern void onsig();
|
||||
extern sig_t getsigaction();
|
||||
@ -235,7 +238,7 @@ getsigaction(signo)
|
||||
if (sigaction(signo, (struct sigaction *)0, &sa) == -1)
|
||||
error("Sigaction system call failed");
|
||||
|
||||
return sa.sa_handler;
|
||||
return (sig_t) sa.sa_handler;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: trap.h,v 1.8 1995/03/21 09:10:29 cgd Exp $ */
|
||||
/* $NetBSD: trap.h,v 1.9 1995/05/11 21:30:32 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,23 +35,17 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)trap.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)trap.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
extern int pendingsigs;
|
||||
|
||||
#ifdef __STDC__
|
||||
void clear_traps(void);
|
||||
long setsignal(int);
|
||||
void ignoresig(int);
|
||||
void dotrap(void);
|
||||
void setinteractive(int);
|
||||
void exitshell(int);
|
||||
#else
|
||||
void clear_traps();
|
||||
long setsignal();
|
||||
void ignoresig();
|
||||
void dotrap();
|
||||
void setinteractive();
|
||||
void exitshell();
|
||||
#endif
|
||||
int trapcmd __P((int, char **));
|
||||
void clear_traps __P((void));
|
||||
long setsignal __P((int));
|
||||
sig_t getsigaction __P((int));
|
||||
void ignoresig __P((int));
|
||||
void onsig __P((int));
|
||||
void dotrap __P((void));
|
||||
void setinteractive __P((int));
|
||||
void exitshell __P((int));
|
||||
|
167
bin/sh/ulimit.c
167
bin/sh/ulimit.c
@ -1,167 +0,0 @@
|
||||
/* $NetBSD: ulimit.c,v 1.3 1995/04/11 03:17:45 christos Exp $ */
|
||||
|
||||
/*
|
||||
* ulimit builtin
|
||||
*
|
||||
* This code, originally by Doug Gwyn, Doug Kingston, Eric Gisin, and
|
||||
* Michael Rendell was ripped from pdksh 5.0.8 and hacked for use with
|
||||
* ash by J.T. Conklin.
|
||||
*
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
|
||||
#include "shell.h"
|
||||
#include "options.h"
|
||||
#include "output.h"
|
||||
|
||||
struct limits {
|
||||
const char *name;
|
||||
int cmd;
|
||||
int factor; /* multiply by to get rlim_{cur,max} values */
|
||||
char option;
|
||||
};
|
||||
|
||||
static const struct limits limits[] = {
|
||||
#ifdef RLIMIT_CPU
|
||||
{ "time(seconds)", RLIMIT_CPU, 1, 't' },
|
||||
#endif
|
||||
#ifdef RLIMIT_FSIZE
|
||||
{ "file(blocks)", RLIMIT_FSIZE, 512, 'f' },
|
||||
#endif
|
||||
#ifdef RLIMIT_DATA
|
||||
{ "data(kbytes)", RLIMIT_DATA, 1024, 'd' },
|
||||
#endif
|
||||
#ifdef RLIMIT_STACK
|
||||
{ "stack(kbytes)", RLIMIT_STACK, 1024, 's' },
|
||||
#endif
|
||||
#ifdef RLIMIT_CORE
|
||||
{ "coredump(blocks)", RLIMIT_CORE, 512, 'c' },
|
||||
#endif
|
||||
#ifdef RLIMIT_RSS
|
||||
{ "memory(kbytes)", RLIMIT_RSS, 1024, 'm' },
|
||||
#endif
|
||||
#ifdef RLIMIT_MEMLOCK
|
||||
{ "locked memory(kbytes)", RLIMIT_MEMLOCK, 1024, 'l' },
|
||||
#endif
|
||||
#ifdef RLIMIT_NPROC
|
||||
{ "process(processes)", RLIMIT_NPROC, 1, 'p' },
|
||||
#endif
|
||||
#ifdef RLIMIT_NOFILE
|
||||
{ "nofiles(descriptors)", RLIMIT_NOFILE, 1, 'n' },
|
||||
#endif
|
||||
#ifdef RLIMIT_VMEM
|
||||
{ "vmemory(kbytes)", RLIMIT_VMEM, 1024, 'v' },
|
||||
#endif
|
||||
#ifdef RLIMIT_SWAP
|
||||
{ "swap(kbytes)", RLIMIT_SWAP, 1024, 'w' },
|
||||
#endif
|
||||
{ (char *) 0, 0, 0, '\0' }
|
||||
};
|
||||
|
||||
int
|
||||
ulimitcmd(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
register int c;
|
||||
quad_t val;
|
||||
enum { SOFT = 0x1, HARD = 0x2 }
|
||||
how = SOFT | HARD;
|
||||
const struct limits *l;
|
||||
int set, all = 0;
|
||||
int optc, what;
|
||||
struct rlimit limit;
|
||||
|
||||
what = 'f';
|
||||
while ((optc = nextopt("HSatfdsmcnpl")) != '\0')
|
||||
switch (optc) {
|
||||
case 'H':
|
||||
how = HARD;
|
||||
break;
|
||||
case 'S':
|
||||
how = SOFT;
|
||||
break;
|
||||
case 'a':
|
||||
all = 1;
|
||||
break;
|
||||
default:
|
||||
what = optc;
|
||||
}
|
||||
|
||||
for (l = limits; l->name && l->option != what; l++)
|
||||
;
|
||||
if (!l->name)
|
||||
error("ulimit: internal error (%c)\n", what);
|
||||
|
||||
set = *argptr ? 1 : 0;
|
||||
if (set) {
|
||||
char *p = *argptr;
|
||||
|
||||
if (all || argptr[1])
|
||||
error("ulimit: too many arguments\n");
|
||||
if (strcmp(p, "unlimited") == 0)
|
||||
val = RLIM_INFINITY;
|
||||
else {
|
||||
val = (quad_t) 0;
|
||||
|
||||
while ((c = *p++) >= '0' && c <= '9')
|
||||
{
|
||||
val = (val * 10) + (long)(c - '0');
|
||||
if (val < (quad_t) 0)
|
||||
break;
|
||||
}
|
||||
if (c)
|
||||
error("ulimit: bad number\n");
|
||||
val *= l->factor;
|
||||
}
|
||||
}
|
||||
if (all) {
|
||||
for (l = limits; l->name; l++) {
|
||||
getrlimit(l->cmd, &limit);
|
||||
if (how & SOFT)
|
||||
val = limit.rlim_cur;
|
||||
else if (how & HARD)
|
||||
val = limit.rlim_max;
|
||||
|
||||
out1fmt("%-20s ", l->name);
|
||||
if (val == RLIM_INFINITY)
|
||||
out1fmt("unlimited\n");
|
||||
else
|
||||
{
|
||||
val /= l->factor;
|
||||
out1fmt("%ld\n", (long) val);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
getrlimit(l->cmd, &limit);
|
||||
if (set) {
|
||||
if (how & SOFT)
|
||||
limit.rlim_cur = val;
|
||||
if (how & HARD)
|
||||
limit.rlim_max = val;
|
||||
if (setrlimit(l->cmd, &limit) < 0)
|
||||
error("ulimit: bad limit\n");
|
||||
} else {
|
||||
if (how & SOFT)
|
||||
val = limit.rlim_cur;
|
||||
else if (how & HARD)
|
||||
val = limit.rlim_max;
|
||||
}
|
||||
|
||||
if (!set) {
|
||||
if (val == RLIM_INFINITY)
|
||||
out1fmt("unlimited\n");
|
||||
else
|
||||
{
|
||||
val /= l->factor;
|
||||
out1fmt("%ld\n", (long) val);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
19
bin/sh/var.c
19
bin/sh/var.c
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: var.c,v 1.12 1995/03/21 09:10:35 cgd Exp $ */
|
||||
/* $NetBSD: var.c,v 1.13 1995/05/11 21:30:39 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -38,18 +38,19 @@
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)var.c 8.1 (Berkeley) 5/31/93";
|
||||
static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 5/4/95";
|
||||
#else
|
||||
static char rcsid[] = "$NetBSD: var.c,v 1.12 1995/03/21 09:10:35 cgd Exp $";
|
||||
static char rcsid[] = "$NetBSD: var.c,v 1.13 1995/05/11 21:30:39 christos Exp $";
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* Shell variables.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include "shell.h"
|
||||
#include "output.h"
|
||||
#include "expand.h"
|
||||
@ -63,7 +64,9 @@ static char rcsid[] = "$NetBSD: var.c,v 1.12 1995/03/21 09:10:35 cgd Exp $";
|
||||
#include "memalloc.h"
|
||||
#include "error.h"
|
||||
#include "mystring.h"
|
||||
#include "extern.h"
|
||||
#ifndef NO_HISTORY
|
||||
#include "myhistedit.h"
|
||||
#endif
|
||||
|
||||
|
||||
#define VTABSIZE 39
|
||||
@ -332,8 +335,8 @@ bltinlookup(name, doall)
|
||||
}
|
||||
for (v = *hashvar(name) ; v ; v = v->next) {
|
||||
if (varequal(v->text, name)) {
|
||||
if (v->flags & VUNSET
|
||||
|| ! doall && (v->flags & VEXPORT) == 0)
|
||||
if ((v->flags & VUNSET)
|
||||
|| (!doall && (v->flags & VEXPORT) == 0))
|
||||
return NULL;
|
||||
return strchr(v->text, '=') + 1;
|
||||
}
|
||||
|
45
bin/sh/var.h
45
bin/sh/var.h
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: var.h,v 1.8 1995/03/21 09:10:38 cgd Exp $ */
|
||||
/* $NetBSD: var.h,v 1.9 1995/05/11 21:30:44 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)var.h 8.1 (Berkeley) 5/31/93
|
||||
* @(#)var.h 8.2 (Berkeley) 5/4/95
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -102,30 +102,19 @@ extern struct var vterm;
|
||||
#endif
|
||||
#define mpathset() ((vmpath.flags & VUNSET) == 0)
|
||||
|
||||
|
||||
#ifdef __STDC__
|
||||
void initvar();
|
||||
void setvar(char *, char *, int);
|
||||
void setvareq(char *, int);
|
||||
void initvar __P((void));
|
||||
void setvar __P((char *, char *, int));
|
||||
void setvareq __P((char *, int));
|
||||
struct strlist;
|
||||
void listsetvar(struct strlist *);
|
||||
char *lookupvar(char *);
|
||||
char *bltinlookup(char *, int);
|
||||
char **environment();
|
||||
int showvarscmd(int, char **);
|
||||
void mklocal(char *);
|
||||
void poplocalvars(void);
|
||||
int unsetcmd(int, char **);
|
||||
#else
|
||||
void initvar();
|
||||
void setvar();
|
||||
void setvareq();
|
||||
void listsetvar();
|
||||
char *lookupvar();
|
||||
char *bltinlookup();
|
||||
char **environment();
|
||||
int showvarscmd();
|
||||
void mklocal();
|
||||
void poplocalvars();
|
||||
int unsetcmd();
|
||||
#endif
|
||||
void listsetvar __P((struct strlist *));
|
||||
char *lookupvar __P((char *));
|
||||
char *bltinlookup __P((char *, int));
|
||||
char **environment __P((void));
|
||||
void shprocvar __P((void));
|
||||
int showvarscmd __P((int, char **));
|
||||
int exportcmd __P((int, char **));
|
||||
int localcmd __P((int, char **));
|
||||
void mklocal __P((char *));
|
||||
void poplocalvars __P((void));
|
||||
int setvarcmd __P((int, char **));
|
||||
int unsetcmd __P((int, char **));
|
||||
|
Loading…
Reference in New Issue
Block a user