Module Name: src Committed By: tls Date: Sun Aug 10 06:41:18 UTC 2014
Modified Files: src/bin/cat [tls-earlyentropy]: cat.1 src/bin/csh [tls-earlyentropy]: Makefile src/bin/csh/USD.doc [tls-earlyentropy]: Makefile src/bin/ls [tls-earlyentropy]: print.c src/bin/pax [tls-earlyentropy]: ar_io.c src/bin/ps [tls-earlyentropy]: extern.h print.c ps.c ps.h src/bin/sh [tls-earlyentropy]: Makefile alias.c alias.h eval.c eval.h histedit.c jobs.c main.c sh.1 src/bin/sh/USD.doc [tls-earlyentropy]: Makefile Added Files: src/bin/sh/USD.doc [tls-earlyentropy]: referargs Log Message: Rebase. To generate a diff of this commit: cvs rdiff -u -r1.36 -r1.36.8.1 src/bin/cat/cat.1 cvs rdiff -u -r1.39 -r1.39.4.1 src/bin/csh/Makefile cvs rdiff -u -r1.7 -r1.7.48.1 src/bin/csh/USD.doc/Makefile cvs rdiff -u -r1.54 -r1.54.2.1 src/bin/ls/print.c cvs rdiff -u -r1.54 -r1.54.10.1 src/bin/pax/ar_io.c cvs rdiff -u -r1.34 -r1.34.2.1 src/bin/ps/extern.h cvs rdiff -u -r1.121 -r1.121.2.1 src/bin/ps/print.c cvs rdiff -u -r1.80 -r1.80.2.1 src/bin/ps/ps.c cvs rdiff -u -r1.26 -r1.26.60.1 src/bin/ps/ps.h cvs rdiff -u -r1.99 -r1.99.8.1 src/bin/sh/Makefile cvs rdiff -u -r1.14 -r1.14.20.1 src/bin/sh/alias.c cvs rdiff -u -r1.7 -r1.7.20.1 src/bin/sh/alias.h cvs rdiff -u -r1.108 -r1.108.2.1 src/bin/sh/eval.c cvs rdiff -u -r1.15 -r1.15.46.1 src/bin/sh/eval.h cvs rdiff -u -r1.46 -r1.46.2.1 src/bin/sh/histedit.c cvs rdiff -u -r1.72 -r1.72.2.1 src/bin/sh/jobs.c cvs rdiff -u -r1.57 -r1.57.20.1 src/bin/sh/main.c cvs rdiff -u -r1.112 -r1.112.2.1 src/bin/sh/sh.1 cvs rdiff -u -r1.1 -r1.1.24.1 src/bin/sh/USD.doc/Makefile cvs rdiff -u -r0 -r1.1.2.2 src/bin/sh/USD.doc/referargs Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/bin/cat/cat.1 diff -u src/bin/cat/cat.1:1.36 src/bin/cat/cat.1:1.36.8.1 --- src/bin/cat/cat.1:1.36 Sat Nov 10 18:41:10 2012 +++ src/bin/cat/cat.1 Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -.\" $NetBSD: cat.1,v 1.36 2012/11/10 18:41:10 wiz Exp $ +.\" $NetBSD: cat.1,v 1.36.8.1 2014/08/10 06:41:18 tls Exp $ .\" .\" Copyright (c) 1989, 1990, 1993 .\" The Regents of the University of California. All rights reserved. @@ -32,7 +32,7 @@ .\" .\" @(#)cat.1 8.3 (Berkeley) 5/2/95 .\" -.Dd November 10, 2012 +.Dd June 15, 2014 .Dt CAT 1 .Os .Sh NAME @@ -198,7 +198,7 @@ utility is expected to conform to the specification. .Pp The flags -.Op Fl belnstv +.Op Fl Bbeflnstv are extensions to the specification. .Sh HISTORY A Index: src/bin/csh/Makefile diff -u src/bin/csh/Makefile:1.39 src/bin/csh/Makefile:1.39.4.1 --- src/bin/csh/Makefile:1.39 Tue Jul 16 17:47:43 2013 +++ src/bin/csh/Makefile Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.39 2013/07/16 17:47:43 christos Exp $ +# $NetBSD: Makefile,v 1.39.4.1 2014/08/10 06:41:18 tls Exp $ # @(#)Makefile 8.1 (Berkeley) 5/31/93 # # C Shell with process control; VM/UNIX VAX Makefile @@ -52,14 +52,8 @@ const.h: const.c ${TOOL_SED} -e 's/Char \([a-zA-Z0-9_]*\)\(.*\)/extern Char \1[];/' | \ sort >> ${.TARGET} -.if make(install) SUBDIR+=USD.doc -.endif -# XXX Only GCC 4.1 problem -.if defined(HAVE_GCC) && ${HAVE_GCC} == 4 && ${MACHINE_ARCH} == "vax" -COPTS.parse.c+= -O0 -.endif COPTS.err.c = -Wno-format-nonliteral COPTS.printf.c = -Wno-format-nonliteral COPTS.proc.c = -Wno-format-nonliteral Index: src/bin/csh/USD.doc/Makefile diff -u src/bin/csh/USD.doc/Makefile:1.7 src/bin/csh/USD.doc/Makefile:1.7.48.1 --- src/bin/csh/USD.doc/Makefile:1.7 Thu Oct 18 18:26:31 2007 +++ src/bin/csh/USD.doc/Makefile Sun Aug 10 06:41:18 2014 @@ -1,12 +1,12 @@ -# $NetBSD: Makefile,v 1.7 2007/10/18 18:26:31 tls Exp $ +# $NetBSD: Makefile,v 1.7.48.1 2014/08/10 06:41:18 tls Exp $ # @(#)Makefile 8.1 (Berkeley) 8/14/93 -DIR= usd/04.csh +SECTION=reference/ref1 +ARTICLE=csh SRCS= tabs csh.1 csh.2 csh.3 csh.4 csh.ap csh.g MACROS= -ms - -paper.ps: ${SRCS} - ${TOOL_SOELIM} -I${.CURDIR} ${.ALLSRC} | \ - ${TOOL_ROFF_PS} ${MACROS} > ${.TARGET} +EXTRAHTMLFILES=\ + csh1.png csh2.png csh3.png csh4.png csh5.png csh6.png csh7.png \ + csh8.png csh9.png .include <bsd.doc.mk> Index: src/bin/ls/print.c diff -u src/bin/ls/print.c:1.54 src/bin/ls/print.c:1.54.2.1 --- src/bin/ls/print.c:1.54 Sat Feb 22 13:11:42 2014 +++ src/bin/ls/print.c Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: print.c,v 1.54 2014/02/22 13:11:42 mlelstv Exp $ */ +/* $NetBSD: print.c,v 1.54.2.1 2014/08/10 06:41:18 tls Exp $ */ /* * Copyright (c) 1989, 1993, 1994 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)print.c 8.5 (Berkeley) 7/28/94"; #else -__RCSID("$NetBSD: print.c,v 1.54 2014/02/22 13:11:42 mlelstv Exp $"); +__RCSID("$NetBSD: print.c,v 1.54.2.1 2014/08/10 06:41:18 tls Exp $"); #endif #endif /* not lint */ @@ -46,6 +46,7 @@ __RCSID("$NetBSD: print.c,v 1.54 2014/02 #include <err.h> #include <errno.h> +#include <inttypes.h> #include <fts.h> #include <grp.h> #include <pwd.h> @@ -136,8 +137,7 @@ printlong(DISPLAY *dp) continue; sp = p->fts_statp; if (f_inode) - (void)printf("%*lu ", dp->s_inode, - (unsigned long)sp->st_ino); + (void)printf("%*"PRIu64" ", dp->s_inode, sp->st_ino); if (f_size) { if (f_humanize) { if ((humanize_number(szbuf, sizeof(szbuf), @@ -365,7 +365,7 @@ printaname(FTSENT *p, int inodefield, in sp = p->fts_statp; chcnt = 0; if (f_inode) - chcnt += printf("%*lu ", inodefield, (unsigned long)sp->st_ino); + chcnt += printf("%*"PRIu64" ", inodefield, sp->st_ino); if (f_size) { if (f_humanize) { if ((humanize_number(szbuf, sizeof(szbuf), sp->st_size, Index: src/bin/pax/ar_io.c diff -u src/bin/pax/ar_io.c:1.54 src/bin/pax/ar_io.c:1.54.10.1 --- src/bin/pax/ar_io.c:1.54 Tue Mar 20 18:42:28 2012 +++ src/bin/pax/ar_io.c Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $netbsd: ar_io.c,v 1.48 2007/04/23 18:40:22 christos Exp $ */ +/* $NetBSD: ar_io.c,v 1.54.10.1 2014/08/10 06:41:18 tls Exp $ */ /*- * Copyright (c) 1992 Keith Muller. @@ -42,7 +42,7 @@ #if 0 static char sccsid[] = "@(#)ar_io.c 8.2 (Berkeley) 4/18/94"; #else -__RCSID("$NetBSD: ar_io.c,v 1.54 2012/03/20 18:42:28 matt Exp $"); +__RCSID("$NetBSD: ar_io.c,v 1.54.10.1 2014/08/10 06:41:18 tls Exp $"); #endif #endif /* not lint */ Index: src/bin/ps/extern.h diff -u src/bin/ps/extern.h:1.34 src/bin/ps/extern.h:1.34.2.1 --- src/bin/ps/extern.h:1.34 Wed Jan 15 08:07:53 2014 +++ src/bin/ps/extern.h Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: extern.h,v 1.34 2014/01/15 08:07:53 mlelstv Exp $ */ +/* $NetBSD: extern.h,v 1.34.2.1 2014/08/10 06:41:18 tls Exp $ */ /*- * Copyright (c) 1991, 1993, 1994 @@ -46,54 +46,54 @@ extern VAR var[]; extern VARLIST displaylist; extern VARLIST sortlist; -void command(void *, VARENT *, int); -void cpuid(void *, VARENT *, int); -void cputime(void *, VARENT *, int); +void command(void *, VARENT *, enum mode); +void cpuid(void *, VARENT *, enum mode); +void cputime(void *, VARENT *, enum mode); int donlist(void); int donlist_sysctl(void); void fmt_puts(char *, int *); void fmt_putc(int, int *); -void elapsed(void *, VARENT *, int); +void elapsed(void *, VARENT *, enum mode); double getpcpu(const struct kinfo_proc2 *); double getpmem(const struct kinfo_proc2 *); -void gname(void *, VARENT *, int); -void groups(void *, VARENT *, int); -void groupnames(void *, VARENT *, int); -void lcputime(void *, VARENT *, int); -void logname(void *, VARENT *, int); -void longtname(void *, VARENT *, int); -void lname(void *, VARENT *, int); -void lstarted(void *, VARENT *, int); -void lstate(void *, VARENT *, int); -void maxrss(void *, VARENT *, int); +void gname(void *, VARENT *, enum mode); +void groups(void *, VARENT *, enum mode); +void groupnames(void *, VARENT *, enum mode); +void lcputime(void *, VARENT *, enum mode); +void logname(void *, VARENT *, enum mode); +void longtname(void *, VARENT *, enum mode); +void lname(void *, VARENT *, enum mode); +void lstarted(void *, VARENT *, enum mode); +void lstate(void *, VARENT *, enum mode); +void maxrss(void *, VARENT *, enum mode); void nlisterr(struct nlist *); -void p_rssize(void *, VARENT *, int); -void pagein(void *, VARENT *, int); +void p_rssize(void *, VARENT *, enum mode); +void pagein(void *, VARENT *, enum mode); void parsefmt(const char *); void parsefmt_insert(const char *, VARENT **); void parsesort(const char *); VARENT * varlist_find(VARLIST *, const char *); -void emul(void *, VARENT *, int); -void pcpu(void *, VARENT *, int); -void pmem(void *, VARENT *, int); -void pnice(void *, VARENT *, int); -void pri(void *, VARENT *, int); +void emul(void *, VARENT *, enum mode); +void pcpu(void *, VARENT *, enum mode); +void pmem(void *, VARENT *, enum mode); +void pnice(void *, VARENT *, enum mode); +void pri(void *, VARENT *, enum mode); void printheader(void); -void putimeval(void *, VARENT *, int); -void pvar(void *, VARENT *, int); -void rgname(void *, VARENT *, int); -void rssize(void *, VARENT *, int); -void runame(void *, VARENT *, int); +void putimeval(void *, VARENT *, enum mode); +void pvar(void *, VARENT *, enum mode); +void rgname(void *, VARENT *, enum mode); +void rssize(void *, VARENT *, enum mode); +void runame(void *, VARENT *, enum mode); void showkey(void); -void started(void *, VARENT *, int); -void state(void *, VARENT *, int); -void svgname(void *, VARENT *, int); -void svuname(void *, VARENT *, int); -void tdev(void *, VARENT *, int); -void tname(void *, VARENT *, int); -void tsize(void *, VARENT *, int); -void ucomm(void *, VARENT *, int); -void uname(void *, VARENT *, int); -void uvar(void *, VARENT *, int); -void vsize(void *, VARENT *, int); -void wchan(void *, VARENT *, int); +void started(void *, VARENT *, enum mode); +void state(void *, VARENT *, enum mode); +void svgname(void *, VARENT *, enum mode); +void svuname(void *, VARENT *, enum mode); +void tdev(void *, VARENT *, enum mode); +void tname(void *, VARENT *, enum mode); +void tsize(void *, VARENT *, enum mode); +void ucomm(void *, VARENT *, enum mode); +void uname(void *, VARENT *, enum mode); +void uvar(void *, VARENT *, enum mode); +void vsize(void *, VARENT *, enum mode); +void wchan(void *, VARENT *, enum mode); Index: src/bin/ps/print.c diff -u src/bin/ps/print.c:1.121 src/bin/ps/print.c:1.121.2.1 --- src/bin/ps/print.c:1.121 Wed Jan 15 08:07:53 2014 +++ src/bin/ps/print.c Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: print.c,v 1.121 2014/01/15 08:07:53 mlelstv Exp $ */ +/* $NetBSD: print.c,v 1.121.2.1 2014/08/10 06:41:18 tls Exp $ */ /* * Copyright (c) 2000, 2007 The NetBSD Foundation, Inc. @@ -63,7 +63,7 @@ #if 0 static char sccsid[] = "@(#)print.c 8.6 (Berkeley) 4/16/94"; #else -__RCSID("$NetBSD: print.c,v 1.121 2014/01/15 08:07:53 mlelstv Exp $"); +__RCSID("$NetBSD: print.c,v 1.121.2.1 2014/08/10 06:41:18 tls Exp $"); #endif #endif /* not lint */ @@ -93,12 +93,12 @@ __RCSID("$NetBSD: print.c,v 1.121 2014/0 #include "ps.h" static char *cmdpart(char *); -static void printval(void *, VAR *, int); +static void printval(void *, VAR *, enum mode); static int titlecmp(char *, char **); -static void doubleprintorsetwidth(VAR *, double, int, int); -static void intprintorsetwidth(VAR *, int, int); -static void strprintorsetwidth(VAR *, const char *, int); +static void doubleprintorsetwidth(VAR *, double, int, enum mode); +static void intprintorsetwidth(VAR *, int, enum mode); +static void strprintorsetwidth(VAR *, const char *, enum mode); static time_t now; @@ -218,7 +218,7 @@ titlecmp(char *name, char **argv) } static void -doubleprintorsetwidth(VAR *v, double val, int prec, int mode) +doubleprintorsetwidth(VAR *v, double val, int prec, enum mode mode) { int fmtlen; @@ -240,7 +240,7 @@ doubleprintorsetwidth(VAR *v, double val } static void -intprintorsetwidth(VAR *v, int val, int mode) +intprintorsetwidth(VAR *v, int val, enum mode mode) { int fmtlen; @@ -261,7 +261,7 @@ intprintorsetwidth(VAR *v, int val, int } static void -strprintorsetwidth(VAR *v, const char *str, int mode) +strprintorsetwidth(VAR *v, const char *str, enum mode mode) { int len; @@ -278,7 +278,7 @@ strprintorsetwidth(VAR *v, const char *s } void -command(void *arg, VARENT *ve, int mode) +command(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *ki; VAR *v; @@ -359,7 +359,7 @@ command(void *arg, VARENT *ve, int mode) } void -groups(void *arg, VARENT *ve, int mode) +groups(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *ki; VAR *v; @@ -397,7 +397,7 @@ groups(void *arg, VARENT *ve, int mode) } void -groupnames(void *arg, VARENT *ve, int mode) +groupnames(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *ki; VAR *v; @@ -434,7 +434,7 @@ groupnames(void *arg, VARENT *ve, int mo } void -ucomm(void *arg, VARENT *ve, int mode) +ucomm(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -445,7 +445,7 @@ ucomm(void *arg, VARENT *ve, int mode) } void -emul(void *arg, VARENT *ve, int mode) +emul(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -456,7 +456,7 @@ emul(void *arg, VARENT *ve, int mode) } void -logname(void *arg, VARENT *ve, int mode) +logname(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -467,7 +467,7 @@ logname(void *arg, VARENT *ve, int mode) } void -state(void *arg, VARENT *ve, int mode) +state(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; int flag, is_zombie; @@ -551,7 +551,7 @@ state(void *arg, VARENT *ve, int mode) } void -lstate(void *arg, VARENT *ve, int mode) +lstate(void *arg, VARENT *ve, enum mode mode) { struct kinfo_lwp *k; int flag; @@ -610,7 +610,7 @@ lstate(void *arg, VARENT *ve, int mode) } void -pnice(void *arg, VARENT *ve, int mode) +pnice(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -621,7 +621,7 @@ pnice(void *arg, VARENT *ve, int mode) } void -pri(void *arg, VARENT *ve, int mode) +pri(void *arg, VARENT *ve, enum mode mode) { struct kinfo_lwp *l; VAR *v; @@ -632,7 +632,7 @@ pri(void *arg, VARENT *ve, int mode) } void -uname(void *arg, VARENT *ve, int mode) +uname(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -643,7 +643,7 @@ uname(void *arg, VARENT *ve, int mode) } void -runame(void *arg, VARENT *ve, int mode) +runame(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -654,7 +654,7 @@ runame(void *arg, VARENT *ve, int mode) } void -svuname(void *arg, VARENT *ve, int mode) +svuname(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -665,7 +665,7 @@ svuname(void *arg, VARENT *ve, int mode) } void -gname(void *arg, VARENT *ve, int mode) +gname(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -676,7 +676,7 @@ gname(void *arg, VARENT *ve, int mode) } void -rgname(void *arg, VARENT *ve, int mode) +rgname(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -687,7 +687,7 @@ rgname(void *arg, VARENT *ve, int mode) } void -svgname(void *arg, VARENT *ve, int mode) +svgname(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -698,7 +698,7 @@ svgname(void *arg, VARENT *ve, int mode) } void -tdev(void *arg, VARENT *ve, int mode) +tdev(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -722,7 +722,7 @@ tdev(void *arg, VARENT *ve, int mode) } void -tname(void *arg, VARENT *ve, int mode) +tname(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -757,7 +757,7 @@ tname(void *arg, VARENT *ve, int mode) } void -longtname(void *arg, VARENT *ve, int mode) +longtname(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -779,7 +779,7 @@ longtname(void *arg, VARENT *ve, int mod } void -started(void *arg, VARENT *ve, int mode) +started(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -815,7 +815,7 @@ started(void *arg, VARENT *ve, int mode) } void -lstarted(void *arg, VARENT *ve, int mode) +lstarted(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -844,7 +844,7 @@ lstarted(void *arg, VARENT *ve, int mode } void -elapsed(void *arg, VARENT *ve, int mode) +elapsed(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -938,7 +938,7 @@ elapsed(void *arg, VARENT *ve, int mode) } void -wchan(void *arg, VARENT *ve, int mode) +wchan(void *arg, VARENT *ve, enum mode mode) { struct kinfo_lwp *l; VAR *v; @@ -968,7 +968,7 @@ wchan(void *arg, VARENT *ve, int mode) #define pgtok(a) (((a)*(size_t)getpagesize())/1024) void -vsize(void *arg, VARENT *ve, int mode) +vsize(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -979,7 +979,7 @@ vsize(void *arg, VARENT *ve, int mode) } void -rssize(void *arg, VARENT *ve, int mode) +rssize(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -991,7 +991,7 @@ rssize(void *arg, VARENT *ve, int mode) } void -p_rssize(void *arg, VARENT *ve, int mode) /* doesn't account for text */ +p_rssize(void *arg, VARENT *ve, enum mode mode) /* doesn't account for text */ { struct kinfo_proc2 *k; VAR *v; @@ -1002,7 +1002,7 @@ p_rssize(void *arg, VARENT *ve, int mode } void -cpuid(void *arg, VARENT *ve, int mode) +cpuid(void *arg, VARENT *ve, enum mode mode) { struct kinfo_lwp *l; VAR *v; @@ -1013,7 +1013,7 @@ cpuid(void *arg, VARENT *ve, int mode) } static void -cputime1(int32_t secs, int32_t psecs, VAR *v, int mode) +cputime1(int32_t secs, int32_t psecs, VAR *v, enum mode mode) { int fmtlen; @@ -1049,7 +1049,7 @@ cputime1(int32_t secs, int32_t psecs, VA } void -cputime(void *arg, VARENT *ve, int mode) +cputime(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -1075,7 +1075,7 @@ cputime(void *arg, VARENT *ve, int mode) } void -lcputime(void *arg, VARENT *ve, int mode) +lcputime(void *arg, VARENT *ve, enum mode mode) { struct kinfo_lwp *l; VAR *v; @@ -1112,7 +1112,7 @@ getpcpu(const struct kinfo_proc2 *k) } void -pcpu(void *arg, VARENT *ve, int mode) +pcpu(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -1144,7 +1144,7 @@ getpmem(const struct kinfo_proc2 *k) } void -pmem(void *arg, VARENT *ve, int mode) +pmem(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -1155,7 +1155,7 @@ pmem(void *arg, VARENT *ve, int mode) } void -pagein(void *arg, VARENT *ve, int mode) +pagein(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -1166,7 +1166,7 @@ pagein(void *arg, VARENT *ve, int mode) } void -maxrss(void *arg, VARENT *ve, int mode) +maxrss(void *arg, VARENT *ve, enum mode mode) { VAR *v; @@ -1177,7 +1177,7 @@ maxrss(void *arg, VARENT *ve, int mode) } void -tsize(void *arg, VARENT *ve, int mode) +tsize(void *arg, VARENT *ve, enum mode mode) { struct kinfo_proc2 *k; VAR *v; @@ -1192,7 +1192,7 @@ tsize(void *arg, VARENT *ve, int mode) * structures. */ static void -printval(void *bp, VAR *v, int mode) +printval(void *bp, VAR *v, enum mode mode) { static char ofmt[32] = "%"; int width, vok, fmtlen; @@ -1390,7 +1390,7 @@ printval(void *bp, VAR *v, int mode) } void -pvar(void *arg, VARENT *ve, int mode) +pvar(void *arg, VARENT *ve, enum mode mode) { VAR *v; @@ -1405,7 +1405,7 @@ pvar(void *arg, VARENT *ve, int mode) } void -putimeval(void *arg, VARENT *ve, int mode) +putimeval(void *arg, VARENT *ve, enum mode mode) { VAR *v = ve->var; struct kinfo_proc2 *k = arg; @@ -1457,7 +1457,7 @@ putimeval(void *arg, VARENT *ve, int mod } void -lname(void *arg, VARENT *ve, int mode) +lname(void *arg, VARENT *ve, enum mode mode) { struct kinfo_lwp *l; VAR *v; Index: src/bin/ps/ps.c diff -u src/bin/ps/ps.c:1.80 src/bin/ps/ps.c:1.80.2.1 --- src/bin/ps/ps.c:1.80 Wed Feb 19 20:42:14 2014 +++ src/bin/ps/ps.c Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ps.c,v 1.80 2014/02/19 20:42:14 dsl Exp $ */ +/* $NetBSD: ps.c,v 1.80.2.1 2014/08/10 06:41:18 tls Exp $ */ /* * Copyright (c) 2000-2008 The NetBSD Foundation, Inc. @@ -68,7 +68,7 @@ __COPYRIGHT("@(#) Copyright (c) 1990, 19 #if 0 static char sccsid[] = "@(#)ps.c 8.4 (Berkeley) 4/2/94"; #else -__RCSID("$NetBSD: ps.c,v 1.80 2014/02/19 20:42:14 dsl Exp $"); +__RCSID("$NetBSD: ps.c,v 1.80.2.1 2014/08/10 06:41:18 tls Exp $"); #endif #endif /* not lint */ @@ -175,8 +175,11 @@ ttyname2dev(const char *ttname, int *xfl ttypath = ttname; *what = KERN_PROC_TTY; if (stat(ttypath, &sb) == -1) { - devmajor_t pts = getdevmajor("pts", S_IFCHR); + devmajor_t pts; + int serrno; + serrno = errno; + pts = getdevmajor("pts", S_IFCHR); if (pts != NODEVMAJOR && strncmp(ttname, "pts/", 4) == 0) { int ptsminor = atoi(ttname + 4); @@ -184,6 +187,7 @@ ttyname2dev(const char *ttname, int *xfl if (strcmp(pathbuf, ttname) == 0 && ptsminor >= 0) return makedev(pts, ptsminor); } + errno = serrno; err(1, "%s", ttypath); } if (!S_ISCHR(sb.st_mode)) @@ -199,7 +203,7 @@ main(int argc, char *argv[]) struct kinfo_lwp *kl, *l; int ch, i, j, fmt, lineno, nentries, nlwps; long long flag; - int prtheader, wflag, what, xflg, mode, showlwps; + int prtheader, wflag, what, xflg, showlwps; char *nlistf, *memf, *swapf, errbuf[_POSIX2_LINE_MAX]; char *ttname; @@ -221,7 +225,7 @@ main(int argc, char *argv[]) what = KERN_PROC_UID; flag = myuid = getuid(); memf = nlistf = swapf = NULL; - mode = PRINTMODE; + while ((ch = getopt(argc, argv, GETOPTSTR)) != -1) switch((char)ch) { case 'A': @@ -421,33 +425,32 @@ main(int argc, char *argv[]) * "setwidth" mode to determine the widest element of * the column. */ - if (mode == PRINTMODE) - for (i = 0; i < nentries; i++) { - struct kinfo_proc2 *ki = &kinfo[i]; - - if (xflg == 0 && (ki->p_tdev == (uint32_t)NODEV || - (ki->p_flag & P_CONTROLT) == 0)) - continue; - - kl = kvm_getlwps(kd, ki->p_pid, ki->p_paddr, - sizeof(struct kinfo_lwp), &nlwps); - if (kl == 0) - nlwps = 0; - if (showlwps == 0) { - l = pick_representative_lwp(ki, kl, nlwps); - SIMPLEQ_FOREACH(vent, &displaylist, next) - OUTPUT(vent, ki, l, WIDTHMODE); - } else { - /* The printing is done with the loops - * reversed, but here we don't need that, - * and this improves the code locality a bit. - */ - SIMPLEQ_FOREACH(vent, &displaylist, next) - for (j = 0; j < nlwps; j++) - OUTPUT(vent, ki, &kl[j], - WIDTHMODE); - } + + for (i = 0; i < nentries; i++) { + struct kinfo_proc2 *ki = &kinfo[i]; + + if (xflg == 0 && (ki->p_tdev == (uint32_t)NODEV || + (ki->p_flag & P_CONTROLT) == 0)) + continue; + + kl = kvm_getlwps(kd, ki->p_pid, ki->p_paddr, + sizeof(struct kinfo_lwp), &nlwps); + if (kl == 0) + nlwps = 0; + if (showlwps == 0) { + l = pick_representative_lwp(ki, kl, nlwps); + SIMPLEQ_FOREACH(vent, &displaylist, next) + OUTPUT(vent, ki, l, WIDTHMODE); + } else { + /* The printing is done with the loops + * reversed, but here we don't need that, + * and this improves the code locality a bit. + */ + SIMPLEQ_FOREACH(vent, &displaylist, next) + for (j = 0; j < nlwps; j++) + OUTPUT(vent, ki, &kl[j], WIDTHMODE); } + } /* * Print header - AFTER determining process field widths. * printheader() also adds up the total width of all @@ -471,7 +474,7 @@ main(int argc, char *argv[]) if (showlwps == 0) { l = pick_representative_lwp(ki, kl, nlwps); SIMPLEQ_FOREACH(vent, &displaylist, next) { - OUTPUT(vent, ki, l, mode); + OUTPUT(vent, ki, l, PRINTMODE); if (SIMPLEQ_NEXT(vent, next) != NULL) (void)putchar(' '); } @@ -484,7 +487,7 @@ main(int argc, char *argv[]) } else { for (j = 0; j < nlwps; j++) { SIMPLEQ_FOREACH(vent, &displaylist, next) { - OUTPUT(vent, ki, &kl[j], mode); + OUTPUT(vent, ki, &kl[j], PRINTMODE); if (SIMPLEQ_NEXT(vent, next) != NULL) (void)putchar(' '); } Index: src/bin/ps/ps.h diff -u src/bin/ps/ps.h:1.26 src/bin/ps/ps.h:1.26.60.1 --- src/bin/ps/ps.h:1.26 Mon Oct 2 17:54:35 2006 +++ src/bin/ps/ps.h Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ps.h,v 1.26 2006/10/02 17:54:35 apb Exp $ */ +/* $NetBSD: ps.h,v 1.26.60.1 2014/08/10 06:41:18 tls Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -35,8 +35,10 @@ #define UNLIMITED 0 /* unlimited terminal width */ -#define PRINTMODE 0 /* print values */ -#define WIDTHMODE 1 /* determine width of column */ +enum mode { + PRINTMODE = 0, /* print values */ + WIDTHMODE = 1 /* determine width of column */ +}; enum type { UNSPECIFIED, @@ -65,7 +67,7 @@ typedef struct var { #define ALIAS 0x40 /* entry is alias for 'header' */ u_int flag; /* output routine */ - void (*oproc)(void *, struct varent *, int); + void (*oproc)(void *, struct varent *, enum mode); /* * The following (optional) elements are hooks for passing information * to the generic output routine: pvar (that which prints simple Index: src/bin/sh/Makefile diff -u src/bin/sh/Makefile:1.99 src/bin/sh/Makefile:1.99.8.1 --- src/bin/sh/Makefile:1.99 Sun Dec 2 12:55:27 2012 +++ src/bin/sh/Makefile Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.99 2012/12/02 12:55:27 apb Exp $ +# $NetBSD: Makefile,v 1.99.8.1 2014/08/10 06:41:18 tls Exp $ # @(#)Makefile 8.4 (Berkeley) 5/5/95 .include <bsd.own.mk> @@ -77,9 +77,7 @@ nodes.c nodes.h: mknodes.sh nodetypes no NBCOMPATLIB= -L${TOOLDIR}/lib -lnbcompat .endif -.if make(install) SUBDIR+=USD.doc -.endif COPTS.printf.c = -Wno-format-nonliteral COPTS.jobs.c = -Wno-format-nonliteral Index: src/bin/sh/alias.c diff -u src/bin/sh/alias.c:1.14 src/bin/sh/alias.c:1.14.20.1 --- src/bin/sh/alias.c:1.14 Sat Jun 18 21:18:46 2011 +++ src/bin/sh/alias.c Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: alias.c,v 1.14 2011/06/18 21:18:46 christos Exp $ */ +/* $NetBSD: alias.c,v 1.14.20.1 2014/08/10 06:41:18 tls Exp $ */ /*- * Copyright (c) 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)alias.c 8.3 (Berkeley) 5/4/95"; #else -__RCSID("$NetBSD: alias.c,v 1.14 2011/06/18 21:18:46 christos Exp $"); +__RCSID("$NetBSD: alias.c,v 1.14.20.1 2014/08/10 06:41:18 tls Exp $"); #endif #endif /* not lint */ @@ -59,7 +59,7 @@ struct alias *atab[ATABSIZE]; STATIC void setalias(char *, char *); STATIC int unalias(char *); -STATIC struct alias **hashalias(char *); +STATIC struct alias **hashalias(const char *); STATIC void @@ -178,7 +178,7 @@ rmaliases(void) } struct alias * -lookupalias(char *name, int check) +lookupalias(const char *name, int check) { struct alias *ap = *hashalias(name); @@ -193,8 +193,8 @@ lookupalias(char *name, int check) return (NULL); } -char * -get_alias_text(char *name) +const char * +alias_text(void *dummy __unused, const char *name) { struct alias *ap; @@ -264,7 +264,7 @@ unaliascmd(int argc, char **argv) } STATIC struct alias ** -hashalias(char *p) +hashalias(const char *p) { unsigned int hashval; Index: src/bin/sh/alias.h diff -u src/bin/sh/alias.h:1.7 src/bin/sh/alias.h:1.7.20.1 --- src/bin/sh/alias.h:1.7 Sat Jun 18 21:18:46 2011 +++ src/bin/sh/alias.h Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: alias.h,v 1.7 2011/06/18 21:18:46 christos Exp $ */ +/* $NetBSD: alias.h,v 1.7.20.1 2014/08/10 06:41:18 tls Exp $ */ /*- * Copyright (c) 1993 @@ -43,6 +43,6 @@ struct alias { int flag; }; -struct alias *lookupalias(char *, int); -char *get_alias_text(char *); +struct alias *lookupalias(const char *, int); +const char *alias_text(void *, const char *); void rmaliases(void); Index: src/bin/sh/eval.c diff -u src/bin/sh/eval.c:1.108 src/bin/sh/eval.c:1.108.2.1 --- src/bin/sh/eval.c:1.108 Sun Jan 26 22:38:20 2014 +++ src/bin/sh/eval.c Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: eval.c,v 1.108 2014/01/26 22:38:20 christos Exp $ */ +/* $NetBSD: eval.c,v 1.108.2.1 2014/08/10 06:41:18 tls Exp $ */ /*- * Copyright (c) 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)eval.c 8.9 (Berkeley) 6/8/95"; #else -__RCSID("$NetBSD: eval.c,v 1.108 2014/01/26 22:38:20 christos Exp $"); +__RCSID("$NetBSD: eval.c,v 1.108.2.1 2014/08/10 06:41:18 tls Exp $"); #endif #endif /* not lint */ @@ -89,11 +89,20 @@ __RCSID("$NetBSD: eval.c,v 1.108 2014/01 #define EV_TESTED 02 /* exit status is checked; ignore -e flag */ #define EV_BACKCMD 04 /* command executing within back quotes */ -int evalskip; /* set if we are skipping commands */ +STATIC enum skipstate evalskip; /* != SKIPNONE if we are skipping commands */ STATIC int skipcount; /* number of levels to skip */ -MKINIT int loopnest; /* current loop nesting level */ -int funcnest; /* depth of function calls */ +STATIC int loopnest; /* current loop nesting level */ +STATIC int funcnest; /* depth of function calls */ STATIC int builtin_flags; /* evalcommand flags for builtins */ +/* + * Base function nesting level inside a dot command. Set to 0 initially + * and to (funcnest + 1) before every dot command to enable + * 1) detection of being in a file sourced by a dot command and + * 2) counting of function nesting in that file for the implementation + * of the return command. + * The value is reset to its previous value after the dot command. + */ +STATIC int dot_funcnest; const char *commandname; @@ -111,6 +120,7 @@ STATIC void evalpipe(union node *); STATIC void evalcommand(union node *, int, struct backcmd *); STATIC void prehash(union node *); +STATIC char *find_dot_file(char *); /* * Called to reset things after an exception. @@ -120,9 +130,7 @@ STATIC void prehash(union node *); INCLUDE "eval.h" RESET { - evalskip = 0; - loopnest = 0; - funcnest = 0; + reset_eval(); } SHELLPROC { @@ -130,6 +138,15 @@ SHELLPROC { } #endif +void +reset_eval(void) +{ + evalskip = SKIPNONE; + dot_funcnest = 0; + loopnest = 0; + funcnest = 0; +} + static int sh_pipe(int fds[2]) { @@ -327,11 +344,11 @@ evalloop(union node *n, int flags) evaltree(n->nbinary.ch1, EV_TESTED); if (evalskip) { skipping: if (evalskip == SKIPCONT && --skipcount <= 0) { - evalskip = 0; + evalskip = SKIPNONE; continue; } if (evalskip == SKIPBREAK && --skipcount <= 0) - evalskip = 0; + evalskip = SKIPNONE; break; } if (n->type == NWHILE) { @@ -377,11 +394,11 @@ evalfor(union node *n, int flags) status = exitstatus; if (evalskip) { if (evalskip == SKIPCONT && --skipcount <= 0) { - evalskip = 0; + evalskip = SKIPNONE; continue; } if (evalskip == SKIPBREAK && --skipcount <= 0) - evalskip = 0; + evalskip = SKIPNONE; break; } } @@ -964,7 +981,7 @@ normal_fork: popredir(); INTON; if (evalskip == SKIPFUNC) { - evalskip = 0; + evalskip = SKIPNONE; skipcount = 0; } if (flags & EV_EXIT) @@ -1104,7 +1121,24 @@ prehash(union node *n) pathval()); } +STATIC int +in_function(void) +{ + return funcnest; +} +STATIC enum skipstate +current_skipstate(void) +{ + return evalskip; +} + +STATIC void +stop_skipping(void) +{ + evalskip = SKIPNONE; + skipcount = 0; +} /* * Builtin commands. Builtin commands whose functions are closely @@ -1151,9 +1185,84 @@ breakcmd(int argc, char **argv) return 0; } +int +dotcmd(int argc, char **argv) +{ + exitstatus = 0; + + if (argc >= 2) { /* That's what SVR2 does */ + char *fullname; + /* + * dot_funcnest needs to be 0 when not in a dotcmd, so it + * cannot be restored with (funcnest + 1). + */ + int dot_funcnest_old; + struct stackmark smark; + + setstackmark(&smark); + fullname = find_dot_file(argv[1]); + setinputfile(fullname, 1); + commandname = fullname; + dot_funcnest_old = dot_funcnest; + dot_funcnest = funcnest + 1; + cmdloop(0); + dot_funcnest = dot_funcnest_old; + popfile(); + popstackmark(&smark); + } + return exitstatus; +} + +/* + * Take commands from a file. To be compatible we should do a path + * search for the file, which is necessary to find sub-commands. + */ + +STATIC char * +find_dot_file(char *basename) +{ + char *fullname; + const char *path = pathval(); + struct stat statb; + + /* don't try this for absolute or relative paths */ + if (strchr(basename, '/')) + return basename; + + while ((fullname = padvance(&path, basename)) != NULL) { + if ((stat(fullname, &statb) == 0) && S_ISREG(statb.st_mode)) { + /* + * Don't bother freeing here, since it will + * be freed by the caller. + */ + return fullname; + } + stunalloc(fullname); + } + + /* not found in the PATH */ + error("%s: not found", basename); + /* NOTREACHED */ +} + + /* * The return command. + * + * Quoth the POSIX standard: + * The return utility shall cause the shell to stop executing the current + * function or dot script. If the shell is not currently executing + * a function or dot script, the results are unspecified. + * + * As for the unspecified part, there seems to be no de-facto standard: bash + * ignores the return with a warning, zsh ignores the return in interactive + * mode but seems to liken it to exit in a script. (checked May 2014) + * + * We choose to silently ignore the return. Older versions of this shell + * set evalskip to SKIPFILE causing the shell to (indirectly) exit. This + * had at least the problem of circumventing the check for stopped jobs, + * which would occur for exit or ^D. */ int @@ -1161,17 +1270,19 @@ returncmd(int argc, char **argv) { int ret = argc > 1 ? number(argv[1]) : exitstatus; - if (funcnest) { + if ((dot_funcnest == 0 && funcnest) + || (dot_funcnest > 0 && funcnest - (dot_funcnest - 1) > 0)) { evalskip = SKIPFUNC; skipcount = 1; - return ret; - } - else { - /* Do what ksh does; skip the rest of the file */ + } else if (dot_funcnest > 0) { evalskip = SKIPFILE; skipcount = 1; - return ret; + } else { + /* XXX: should a warning be issued? */ + ret = 0; } + + return ret; } Index: src/bin/sh/eval.h diff -u src/bin/sh/eval.h:1.15 src/bin/sh/eval.h:1.15.46.1 --- src/bin/sh/eval.h:1.15 Fri Feb 15 17:26:06 2008 +++ src/bin/sh/eval.h Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: eval.h,v 1.15 2008/02/15 17:26:06 matt Exp $ */ +/* $NetBSD: eval.h,v 1.15.46.1 2014/08/10 06:41:18 tls Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -53,12 +53,21 @@ void evaltree(union node *, int); void evalbackcmd(union node *, struct backcmd *); /* in_function returns nonzero if we are currently evaluating a function */ -#define in_function() funcnest -extern int funcnest; -extern int evalskip; +int in_function(void); /* return non-zero, if evaluating a function */ /* reasons for skipping commands (see comment on breakcmd routine) */ -#define SKIPBREAK 1 -#define SKIPCONT 2 -#define SKIPFUNC 3 -#define SKIPFILE 4 +enum skipstate { + SKIPNONE = 0, /* not skipping */ + SKIPBREAK, /* break */ + SKIPCONT, /* continue */ + SKIPFUNC, /* return in a function */ + SKIPFILE /* return in a dot command */ +}; + +enum skipstate current_skipstate(void); +void stop_skipping(void); /* reset internal skipping state to SKIPNONE */ + +/* + * Only for use by reset() in init.c! + */ +void reset_eval(void); Index: src/bin/sh/histedit.c diff -u src/bin/sh/histedit.c:1.46 src/bin/sh/histedit.c:1.46.2.1 --- src/bin/sh/histedit.c:1.46 Sun Mar 23 05:07:59 2014 +++ src/bin/sh/histedit.c Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: histedit.c,v 1.46 2014/03/23 05:07:59 dholland Exp $ */ +/* $NetBSD: histedit.c,v 1.46.2.1 2014/08/10 06:41:18 tls Exp $ */ /*- * Copyright (c) 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)histedit.c 8.2 (Berkeley) 5/4/95"; #else -__RCSID("$NetBSD: histedit.c,v 1.46 2014/03/23 05:07:59 dholland Exp $"); +__RCSID("$NetBSD: histedit.c,v 1.46.2.1 2014/08/10 06:41:18 tls Exp $"); #endif #endif /* not lint */ @@ -59,6 +59,7 @@ __RCSID("$NetBSD: histedit.c,v 1.46 2014 #include "mystring.h" #include "myhistedit.h" #include "error.h" +#include "alias.h" #ifndef SMALL #include "eval.h" #include "memalloc.h" @@ -135,6 +136,7 @@ histedit(void) el_set(el, EL_HIST, history, hist); el_set(el, EL_PROMPT, getprompt); el_set(el, EL_SIGNAL, 1); + el_set(el, EL_ALIAS_TEXT, alias_text, NULL); el_set(el, EL_ADDFN, "rl-complete", "ReadLine compatible completion function", _el_fn_complete); Index: src/bin/sh/jobs.c diff -u src/bin/sh/jobs.c:1.72 src/bin/sh/jobs.c:1.72.2.1 --- src/bin/sh/jobs.c:1.72 Sun Jan 26 22:38:20 2014 +++ src/bin/sh/jobs.c Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: jobs.c,v 1.72 2014/01/26 22:38:20 christos Exp $ */ +/* $NetBSD: jobs.c,v 1.72.2.1 2014/08/10 06:41:18 tls Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)jobs.c 8.5 (Berkeley) 5/4/95"; #else -__RCSID("$NetBSD: jobs.c,v 1.72 2014/01/26 22:38:20 christos Exp $"); +__RCSID("$NetBSD: jobs.c,v 1.72.2.1 2014/08/10 06:41:18 tls Exp $"); #endif #endif /* not lint */ @@ -649,7 +649,7 @@ waitcmd(int argc, char **argv) if (dowait(WBLOCK|WNOFREE, job) == -1) return 128 + SIGINT; } - status = job->ps[job->nprocs - 1].status; + status = job->ps[job->nprocs ? job->nprocs - 1 : 0].status; if (WIFEXITED(status)) retval = WEXITSTATUS(status); #if JOBS Index: src/bin/sh/main.c diff -u src/bin/sh/main.c:1.57 src/bin/sh/main.c:1.57.20.1 --- src/bin/sh/main.c:1.57 Sat Jun 18 21:18:46 2011 +++ src/bin/sh/main.c Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.57 2011/06/18 21:18:46 christos Exp $ */ +/* $NetBSD: main.c,v 1.57.20.1 2014/08/10 06:41:18 tls Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -42,7 +42,7 @@ __COPYRIGHT("@(#) Copyright (c) 1991, 19 #if 0 static char sccsid[] = "@(#)main.c 8.7 (Berkeley) 7/19/95"; #else -__RCSID("$NetBSD: main.c,v 1.57 2011/06/18 21:18:46 christos Exp $"); +__RCSID("$NetBSD: main.c,v 1.57.20.1 2014/08/10 06:41:18 tls Exp $"); #endif #endif /* not lint */ @@ -89,7 +89,6 @@ extern int etext(); #endif STATIC void read_profile(const char *); -STATIC char *find_dot_file(char *); int main(int, char **); /* @@ -239,6 +238,7 @@ cmdloop(int top) struct stackmark smark; int inter; int numeof = 0; + enum skipstate skip; TRACE(("cmdloop(%d) called\n", top)); setstackmark(&smark); @@ -270,8 +270,18 @@ cmdloop(int top) } popstackmark(&smark); setstackmark(&smark); - if (evalskip == SKIPFILE) { - evalskip = 0; + + /* + * Any SKIP* can occur here! SKIP(FUNC|BREAK|CONT) occur when + * a dotcmd is in a loop or a function body and appropriate + * built-ins occurs in file scope in the sourced file. Values + * other than SKIPFILE are reset by the appropriate eval*() + * that contained the dotcmd() call. + */ + skip = current_skipstate(); + if (skip != SKIPNONE) { + if (skip == SKIPFILE) + stop_skipping(); break; } } @@ -337,60 +347,6 @@ readcmdfile(char *name) -/* - * Take commands from a file. To be compatible we should do a path - * search for the file, which is necessary to find sub-commands. - */ - - -STATIC char * -find_dot_file(char *basename) -{ - char *fullname; - const char *path = pathval(); - struct stat statb; - - /* don't try this for absolute or relative paths */ - if (strchr(basename, '/')) - return basename; - - while ((fullname = padvance(&path, basename)) != NULL) { - if ((stat(fullname, &statb) == 0) && S_ISREG(statb.st_mode)) { - /* - * Don't bother freeing here, since it will - * be freed by the caller. - */ - return fullname; - } - stunalloc(fullname); - } - - /* not found in the PATH */ - error("%s: not found", basename); - /* NOTREACHED */ -} - -int -dotcmd(int argc, char **argv) -{ - exitstatus = 0; - - if (argc >= 2) { /* That's what SVR2 does */ - char *fullname; - struct stackmark smark; - - setstackmark(&smark); - fullname = find_dot_file(argv[1]); - setinputfile(fullname, 1); - commandname = fullname; - cmdloop(0); - popfile(); - popstackmark(&smark); - } - return exitstatus; -} - - int exitcmd(int argc, char **argv) { Index: src/bin/sh/sh.1 diff -u src/bin/sh/sh.1:1.112 src/bin/sh/sh.1:1.112.2.1 --- src/bin/sh/sh.1:1.112 Mon Jan 20 14:05:51 2014 +++ src/bin/sh/sh.1 Sun Aug 10 06:41:18 2014 @@ -1,4 +1,4 @@ -.\" $NetBSD: sh.1,v 1.112 2014/01/20 14:05:51 roy Exp $ +.\" $NetBSD: sh.1,v 1.112.2.1 2014/08/10 06:41:18 tls Exp $ .\" Copyright (c) 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" @@ -31,7 +31,7 @@ .\" .\" @(#)sh.1 8.6 (Berkeley) 5/4/95 .\" -.Dd January 20, 2014 +.Dd June 1, 2014 .Dt SH 1 .Os .Sh NAME @@ -1192,10 +1192,24 @@ be built in for efficiency (e.g. .Xr test 1 , etc). .Bl -tag -width 5n -.It : +.It : [ Ar arg ... ] A null command that returns a 0 (true) exit value. +Any arguments are ignored. .It \&. file -The commands in the specified file are read and executed by the shell. +The dot command reads and executes the commands from the specified +.Ar file +in the current shell environment. +The file does not need to be executable and is looked up from the directories +listed in the +.Ev PATH +variable if it does not contain a directory separator +.Pq Sq / . +The return command can be used for a premature return from the sourced file. +.Pp +The POSIX standard is unclear on how loop control keywords (break +and continue) behave across a dot command boundary. +This implementation allows them to control loops surrounding the dot command, +but obviously such behavior should not be relied on. .It alias Op Ar name Ns Op Ar "=string ..." If .Ar name=string @@ -1632,6 +1646,21 @@ With the .Fl p option specified the output will be formatted suitably for non-interactive use. .Pp +.It return [ Ar n ] +Stop executing the current function or a dot command with return value of +.Ar n +or the value of the last executed command, if not specified. +For portability, +.Ar n +should be in the range from 0 to 255. +.Pp +The POSIX standard says that the results of +.Sq return +outside a function or a dot command are unspecified. +This implementation treats such a return as a no-op with a return value of 0 +(success, true). +Use the exit command instead, if you want to return from a script or exit +your shell. .It set Oo { Fl options | Cm +options | Cm \-- } Oc Ar arg ... The .Ic set Index: src/bin/sh/USD.doc/Makefile diff -u src/bin/sh/USD.doc/Makefile:1.1 src/bin/sh/USD.doc/Makefile:1.1.24.1 --- src/bin/sh/USD.doc/Makefile:1.1 Sun Aug 22 01:58:16 2010 +++ src/bin/sh/USD.doc/Makefile Sun Aug 10 06:41:18 2014 @@ -1,12 +1,12 @@ -# $NetBSD: Makefile,v 1.1 2010/08/22 01:58:16 perry Exp $ +# $NetBSD: Makefile,v 1.1.24.1 2014/08/10 06:41:18 tls Exp $ # @(#)Makefile 8.1 (Berkeley) 8/14/93 -DIR= usd/03.shell -SRCS= Rv7man t.mac t1 t2 t3 t4 -MACROS= -ms - -paper.ps: ${SRCS} - ${TOOL_REFER} -e -p ${SRCS} | \ - ${TOOL_ROFF_PS} ${MACROS} > ${.TARGET} +SECTION=reference/ref1 +ARTICLE=sh +SRCS= referargs t.mac t1 t2 t3 t4 +MACROS=-ms +ROFF_REFER=yes +#REFER_ARGS=-e -p Rv7man +EXTRAHTMLFILES=sh1.png sh2.png sh3.png sh4.png sh5.png .include <bsd.doc.mk> Added files: Index: src/bin/sh/USD.doc/referargs diff -u /dev/null src/bin/sh/USD.doc/referargs:1.1.2.2 --- /dev/null Sun Aug 10 06:41:19 2014 +++ src/bin/sh/USD.doc/referargs Sun Aug 10 06:41:18 2014 @@ -0,0 +1,8 @@ +.\" $NetBSD: referargs,v 1.1.2.2 2014/08/10 06:41:18 tls Exp $ +.\" +.\" Arguments for refer; these were previously passed on the refer(1) +.\" command line: -e -p Rv7man +.R1 +accumulate +database Rv7man +.R2