From owner-p4-projects Fri May 17 1:14:58 2002 Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 8FBEA37B400; Fri, 17 May 2002 01:14:02 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id 2D90C37B408 for ; Fri, 17 May 2002 01:14:01 -0700 (PDT) Received: (from perforce@localhost) by freefall.freebsd.org (8.11.6/8.11.6) id g4H8E0U61350 for perforce@freebsd.org; Fri, 17 May 2002 01:14:00 -0700 (PDT) (envelope-from peter@freebsd.org) Date: Fri, 17 May 2002 01:14:00 -0700 (PDT) Message-Id: <200205170814.g4H8E0U61350@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: perforce set sender to peter@freebsd.org using -f From: Peter Wemm Subject: PERFORCE change 11440 for review To: Perforce Change Reviews Sender: owner-p4-projects@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG http://people.freebsd.org/~peter/p4db/chv.cgi?CH=11440 Change 11440 by peter@peter_overcee on 2002/05/17 01:13:48 IFC @11438 (gcc/csu Makefile committed to cvs) Affected files ... ... //depot/projects/ia64/gnu/lib/csu/Makefile#9 integrate ... //depot/projects/ia64/usr.bin/hexdump/conv.c#5 integrate ... //depot/projects/ia64/usr.bin/hexdump/display.c#6 integrate ... //depot/projects/ia64/usr.bin/hexdump/od.1#4 integrate ... //depot/projects/ia64/usr.bin/hexdump/odsyntax.c#4 integrate ... //depot/projects/ia64/usr.bin/hexdump/parse.c#5 integrate ... //depot/projects/ia64/usr.bin/xargs/xargs.c#13 integrate Differences ... ==== //depot/projects/ia64/gnu/lib/csu/Makefile#9 (text+ko) ==== @@ -1,23 +1,12 @@ -# $FreeBSD: src/gnu/lib/csu/Makefile,v 1.11 2002/05/17 03:04:47 obrien Exp $ +# $FreeBSD: src/gnu/lib/csu/Makefile,v 1.12 2002/05/17 07:55:08 peter Exp $ GCCDIR= ${.CURDIR}/../../../contrib/gcc -.PATH: ${GCCDIR} - CCDIR= ${.CURDIR}/../../usr.bin/cc .include "${CCDIR}/Makefile.tgt" -.PATH: ${GCCDIR}/config/${GCC_CPU} +.PATH: ${GCCDIR}/config/${GCC_CPU} ${GCCDIR} -.if ${TARGET_ARCH} == "ia64" -BEGINSRC= crtbegin.asm -ENDSRC= crtend.asm -CFLAGS+= -x assembler-with-cpp # Ugly hack -.endif -.if !defined(BEGINSRC) && !defined(ENDSRC) SRCS= crtstuff.c tconfig.h -BEGINSRC= crtstuff.c -ENDSRC= crtstuff.c -.endif OBJS= crtbegin.o crtend.o SOBJS= crtbegin.So crtend.So CFLAGS+= -DIN_GCC -DHAVE_LD_EH_FRAME_HDR @@ -28,6 +17,12 @@ CRTS_CFLAGS= -DCRTSTUFFS_O -DSHARED ${PICFLAG} MKDEPCMD= CC="${CC}" MKDEP_CPP_OPTS="-M -DCRT_BEGIN" mkdep +.if ${TARGET_ARCH} == "ia64" +BEGINSRC= crtbegin.asm +ENDSRC= crtend.asm +CFLAGS+= -x assembler-with-cpp # Ugly hack +.undef SRCS # hack for 'make depend' +.endif .if ${TARGET_ARCH} == "powerpc" TGTOBJS= crtsavres.o SRCS+= crtsavres.asm @@ -36,6 +31,8 @@ TGTOBJS= crtfastmath.o SRCS+= crtfastmath.c .endif +BEGINSRC?= crtstuff.c +ENDSRC?= crtstuff.c all: ${OBJS} ${SOBJS} ${TGTOBJS} @@ -43,19 +40,19 @@ crtbegin.o: ${BEGINSRC} ${CC} ${CFLAGS} -g0 -DCRT_BEGIN \ - -c -o ${.TARGET} ${.ALLSRC:M*.c} ${.ALLSRC:M*.asm} + -c -o ${.TARGET} ${.ALLSRC} crtbegin.So: ${BEGINSRC} ${CC} ${CFLAGS} -g0 -DCRT_BEGIN ${CRTS_CFLAGS} \ - -c -o ${.TARGET} ${.ALLSRC:M*.c} ${.ALLSRC:M*.asm} + -c -o ${.TARGET} ${.ALLSRC} crtend.o: ${ENDSRC} ${CC} ${CFLAGS} -g0 -DCRT_END \ - -c -o ${.TARGET} ${.ALLSRC:M*.c} ${.ALLSRC:M*.asm} + -c -o ${.TARGET} ${.ALLSRC} crtend.So: ${ENDSRC} ${CC} ${CFLAGS} -g0 -DCRT_END ${CRTS_CFLAGS} \ - -c -o ${.TARGET} ${.ALLSRC:M*.c} ${.ALLSRC:M*.asm} + -c -o ${.TARGET} ${.ALLSRC} CLEANFILES+= tconfig.h tconfig.h: ${CCDIR}/cc_tools/Makefile ==== //depot/projects/ia64/usr.bin/hexdump/conv.c#5 (text+ko) ==== @@ -35,7 +35,7 @@ static const char sccsid[] = "@(#)conv.c 8.1 (Berkeley) 6/6/93"; #endif /* not lint */ #include -__FBSDID("$FreeBSD: src/usr.bin/hexdump/conv.c,v 1.4 2002/05/17 05:20:30 tjr Exp $"); +__FBSDID("$FreeBSD: src/usr.bin/hexdump/conv.c,v 1.5 2002/05/17 07:14:55 tjr Exp $"); #include @@ -57,8 +57,6 @@ goto strpr; /* case '\a': */ case '\007': - if (odmode) /* od didn't know about \a */ - break; str = "\\a"; goto strpr; case '\b': @@ -77,8 +75,6 @@ str = "\\t"; goto strpr; case '\v': - if (odmode) - break; str = "\\v"; goto strpr; default: ==== //depot/projects/ia64/usr.bin/hexdump/display.c#6 (text+ko) ==== @@ -36,7 +36,7 @@ static char sccsid[] = "@(#)display.c 8.1 (Berkeley) 6/6/93"; #endif static const char rcsid[] = - "$FreeBSD: src/usr.bin/hexdump/display.c,v 1.14 2002/05/17 06:32:00 tjr Exp $"; + "$FreeBSD: src/usr.bin/hexdump/display.c,v 1.15 2002/05/17 07:14:55 tjr Exp $"; #endif /* not lint */ #include @@ -150,9 +150,11 @@ bcopy(bp, &f8, sizeof(f8)); (void)printf(pr->fmt, f8); break; - case sizeof(long double): - bcopy(bp, &ldbl, sizeof(ldbl)); - (void)printf(pr->fmt, ldbl); + default: + if (pr->bcnt == sizeof(long double)) { + bcopy(bp, &ldbl, sizeof(ldbl)); + (void)printf(pr->fmt, ldbl); + } break; } break; @@ -259,6 +261,8 @@ * block and set the end flag. */ if (!length || (ateof && !next((char **)NULL))) { + if (odmode && address < skip) + errx(1, "cannot skip past end of input"); if (need == blocksize) return((u_char *)NULL); if (vflag != ALL && ==== //depot/projects/ia64/usr.bin/hexdump/od.1#4 (text+ko) ==== @@ -30,9 +30,9 @@ .\" SUCH DAMAGE. .\" .\" @(#)od.1 8.1 (Berkeley) 6/6/93 -.\" $FreeBSD: src/usr.bin/hexdump/od.1,v 1.12 2002/05/17 05:20:30 tjr Exp $ +.\" $FreeBSD: src/usr.bin/hexdump/od.1,v 1.13 2002/05/17 07:14:55 tjr Exp $ .\" -.Dd May 27, 1994 +.Dd April 17, 2002 .Os .Dt OD 1 .Sh NAME @@ -40,7 +40,11 @@ .Nd octal, decimal, hex, ASCII dump .Sh SYNOPSIS .Nm -.Op Fl aBbcDdeFfHhIiLlOovXx +.Op Fl aBbcDdeFfHhIiLlOosvXx +.Op Fl A Ar base +.Op Fl j Ar skip +.Op Fl N Ar length +.Op Fl t Ar type .Sm off .Oo .Op Cm \&+ @@ -49,32 +53,183 @@ .Op Cm Bb .Oc .Sm on -.Ar file +.Op Ar .Sh DESCRIPTION The -.Nm hexdump -utility, if called as -.Nm , -provides compatibility for the options listed above. +.Nm +utility is a filter which displays the specified files, or standard +input if no files are specified, in a user specified format. +.Pp +The options are as follows: +.Bl -tag -width Fl +.It Fl A Ar base +Specify the input address base. +.Ar base +may be one of +.Ql d , +.Ql o , +.Ql x +or +.Ql n , +which specify decimal, octal, hexadecimal +addresses or no address, respectively. +.It Fl a +Output named characters. +Equivalent to +.Fl t Ar a . +.It Fl B , Fl o +Output octal shorts. +Equivalent to +.Fl t Ar o2 . +.It Fl b +Output octal bytes. +Equivalent to +.Fl t Ar o1 . +.It Fl c +Output C-style escaped characters. +Equivalent to +.Fl t Ar c . +.It Fl D +Output unsigned decimal ints. +Equivalent to +.Fl t Ar u4 . +.It Fl e , Fl F +Output double-precision floating point numbers. +Equivalent to +.Fl t Ar fD . +.It Fl f +Output single-precision floating point numbers. +Equivalent to +.Fl t Ar fF . +.It Fl H , Fl X +Output hexadecimal ints. +Equivalent to +.Fl t Ar x4 . +.It Fl h , Fl x +Output hexadecimal shorts. +Equivalent to +.Fl t Ar x2 . +.It Fl I , Fl L , Fl l +Output signed decimal longs. +Equivalent to +.Fl t Ar dL . +.It Fl i +Output signed decimal ints. +Equivalent to +.Fl t Ar dI . +.It Fl j Ar skip +Skip +.Ar skip +bytes of the combined input before dumping. The number may be followed by one +of +.Ql b , +.Ql k +or +.Ql m +which specify the units of the number as blocks (512 bytes), kilobytes and +megabytes, respectively. +.It Fl N Ar length +Dump at most +.Ar length +bytes of input. +.It Fl O +Output octal ints. +Equivalent to +.Fl t Ar o4 . +.It Fl s +Output signed decimal shorts. +Equivalent to +.Fl t Ar d2 . +.It Fl t Ar type +Specify the output format. +.Ar type +is a string containing one or more of the following kinds of type specifiers: +.Bl -tag -width indent +.It Cm a +Named characters +.Pq Sq ASCII . +Control characters are displayed using the following names: +.Bl -column \&000_nu \&001_so \&002_st \&003_et \&004_eo +.It "\&000\ nul\t001\ soh\t002\ stx\t003\ etx\t004\ eot\t005\ enq +.It "\&006\ ack\t007\ bel\t008\ bs\t009\ ht\t00A\ nl\t00B\ vt +.It "\&00C\ ff\t00D\ cr\t00E\ so\t00F\ si\t010\ dle\t011\ dc1 +.It "\&012\ dc2\t013\ dc3\t014\ dc4\t015\ nak\t016\ syn\t017\ etb +.It "\&018\ can\t019\ em\t01A\ sub\t01B\ esc\t01C\ fs\t01D\ gs +.It "\&01E\ rs\t01F\ us\t020\ sp\t0FF\ del +.El +.It Cm c +Characters in the default character set. Non-printing characters are +represented as 3-digit octal character codes, except the following +characters, which are represented as C escapes: +.Bl -column carriage-return \er +.It NUL Ta \e0 +.It alert Ta \ea +.It backspace Ta \eb +.It newline Ta \en +.It carriage-return Ta \er +.It tab Ta \et +.It vertical tab Ta \ev +.El +.It Cm [d|o|u|x][C|S|I|L| Ns Ar n Ns ] +Signed decimal +.Pq Ql d , +octal +.Pq Ql o , +unsigned decimal +.Pq Ql u +or +hexadecimal +.Pq Ql x . +Followed by an optional size specifier, which may be either +.Ql C +.Pq "char" , +.Ql S +.Pq "short" , +.Ql I +.Pq "int" , +.Ql L +.Pq "long" , +or a byte count as a decimal integer. +.It Cm f[F|D|L| Ns Ar n Ns ] +Floating-point number. +Followed by an optional size specifier, which may be either +.Ql F +.Pq "float" , +.Ql D +.Pq "double" +or +.Ql L +.Pq "long double" . +.El +.It Fl v +Write all input data, instead of replacing lines of duplicate values with a +.Ql * . +.El +.Pp +Multiple options that specify output format may be used; the output will +contain one line for each format. .Pp -It does not provide compatibility for the +If no output format is specified, +.Fl t Ar oS +is assumed. +.Sh DIAGNOSTICS +.Ex -std +.Sh COMPATIBILITY +The traditional .Fl s -option (see -.Xr strings 1 ) -or the -.Fl P , -.Fl p , -or -.Fl w -options, nor is compatibility provided for the ``label'' component -of the offset syntax. +option to extract string constants is not supported; consider using +.Xr strings 1 +instead. .Sh SEE ALSO .Xr hexdump 1 , .Xr strings 1 -.Sh BUGS -Quite a few. +.Sh STANDARDS +The +.Nm +utility conforms to +.St -p1003.1-2001 . .Sh HISTORY -A +An .Nm command appeared in .At v1 . ==== //depot/projects/ia64/usr.bin/hexdump/odsyntax.c#4 (text+ko) ==== @@ -36,114 +36,143 @@ static char sccsid[] = "@(#)odsyntax.c 8.2 (Berkeley) 5/4/95"; #endif static const char rcsid[] = - "$FreeBSD: src/usr.bin/hexdump/odsyntax.c,v 1.12 2002/05/17 06:32:00 tjr Exp $"; + "$FreeBSD: src/usr.bin/hexdump/odsyntax.c,v 1.13 2002/05/17 07:14:55 tjr Exp $"; #endif /* not lint */ #include #include #include +#include +#include #include #include +#include #include #include "hexdump.h" +#define PADDING " " + int odmode; +static void odadd(const char *); +static void odformat(const char *); +static const char *odformatfp(char, const char *); +static const char *odformatint(char, const char *); static void odoffset(int, char ***); -static void odprecede(void); +static void odusage(void); void oldsyntax(argc, argvp) int argc; char ***argvp; { + static char empty[] = "", padding[] = PADDING; int ch; - char **argv; + char **argv, *end; + + /* Add initial (default) address format. -A may change it later. */ +#define TYPE_OFFSET 7 + add("\"%07.7_Ao\n\""); + add("\"%07.7_ao \""); odmode = 1; argv = *argvp; - while ((ch = getopt(argc, argv, "aBbcDdeFfHhIiLlOoPpswvXx")) != -1) + while ((ch = getopt(argc, argv, "A:aBbcDdeFfHhIij:LlN:Oost:vXx")) != -1) switch (ch) { + case 'A': + switch (*optarg) { + case 'd': case 'o': case 'x': + fshead->nextfu->fmt[TYPE_OFFSET] = *optarg; + fshead->nextfs->nextfu->fmt[TYPE_OFFSET] = + *optarg; + break; + case 'n': + fshead->nextfu->fmt = empty; + fshead->nextfs->nextfu->fmt = padding; + break; + default: + errx(1, "%s: invalid address base", optarg); + } + break; case 'a': - odprecede(); - add("16/1 \"%3_u \" \"\\n\""); + odformat("a"); break; case 'B': case 'o': - odprecede(); - add("8/2 \" %06o \" \"\\n\""); + odformat("o2"); break; case 'b': - odprecede(); - add("16/1 \"%03o \" \"\\n\""); + odformat("o1"); break; case 'c': - odprecede(); - add("16/1 \"%3_c \" \"\\n\""); + odformat("c"); break; case 'd': - odprecede(); - add("8/2 \" %05u \" \"\\n\""); + odformat("u2"); break; case 'D': - odprecede(); - add("4/4 \" %010u \" \"\\n\""); + odformat("u4"); break; case 'e': /* undocumented in od */ case 'F': - odprecede(); - add("2/8 \" %21.14e \" \"\\n\""); + odformat("fD"); break; - case 'f': - odprecede(); - add("4/4 \" %14.7e \" \"\\n\""); + odformat("fF"); break; case 'H': case 'X': - odprecede(); - add("4/4 \" %08x \" \"\\n\""); + odformat("x4"); break; case 'h': case 'x': - odprecede(); - add("8/2 \" %04x \" \"\\n\""); + odformat("x2"); break; case 'I': case 'L': case 'l': - odprecede(); - add("4/4 \" %11d \" \"\\n\""); + odformat("dL"); break; case 'i': - odprecede(); - add("8/2 \" %6d \" \"\\n\""); + odformat("dI"); + break; + case 'j': + errno = 0; + skip = strtoll(optarg, &end, 0); + if (*end == 'b') + skip *= 512; + else if (*end == 'k') + skip *= 1024; + else if (*end == 'm') + skip *= 1048576L; + if (errno != 0 || skip < 0 || strlen(end) > 1) + errx(1, "%s: invalid skip amount", optarg); + break; + case 'N': + if ((length = atoi(optarg)) <= 0) + errx(1, "%s: invalid length", optarg); break; case 'O': - odprecede(); - add("4/4 \" %011o \" \"\\n\""); + odformat("o4"); + break; + case 's': + odformat("d2"); + break; + case 't': + odformat(optarg); break; case 'v': vflag = ALL; break; - case 'P': - case 'p': - case 's': - case 'w': case '?': default: - if (ch != '?') - warnx("hexdump(1) compatibility doesn't support the -%c option%s", - ch, ch == 's' ? "; see strings(1)" : ""); - usage(); + odusage(); } - if (!fshead) { - add("\"%07.7_Ao\n\""); - add("\"%07.7_ao \" 8/2 \"%06o \" \"\\n\""); - } + if (fshead->nextfs->nextfs == NULL) + odformat("oS"); argc -= optind; *argvp += optind; @@ -153,6 +182,17 @@ } static void +odusage(void) +{ + + fprintf(stderr, +"usage: od [-aBbcDdeFfHhIiLlOosvXx] [-A base] [-j skip] [-N length] [-t type]\n"); + fprintf(stderr, +" [[+]offset[.][Bb]] [file ...]\n"); + exit(1); +} + +static void odoffset(argc, argvp) int argc; char ***argvp; @@ -237,7 +277,6 @@ * If the offset uses a non-octal base, the base of the offset * is changed as well. This isn't pretty, but it's easy. */ -#define TYPE_OFFSET 7 if (base == 16) { fshead->nextfu->fmt[TYPE_OFFSET] = 'x'; fshead->nextfs->nextfu->fmt[TYPE_OFFSET] = 'x'; @@ -251,14 +290,157 @@ } static void -odprecede() +odformat(const char *fmt) +{ + char fchar; + + while (*fmt != '\0') { + switch ((fchar = *fmt++)) { + case 'a': + odadd("16/1 \"%3_u \" \"\\n\""); + break; + case 'c': + odadd("16/1 \"%3_c \" \"\\n\""); + break; + case 'o': case 'u': case 'd': case 'x': + fmt = odformatint(fchar, fmt); + break; + case 'f': + fmt = odformatfp(fchar, fmt); + break; + default: + errx(1, "%c: unrecognised format character", fchar); + } + } +} + +static const char * +odformatfp(char fchar __unused, const char *fmt) +{ + size_t isize; + int digits; + char *end, *hdfmt; + + isize = sizeof(double); + switch (*fmt) { + case 'F': + isize = sizeof(float); + fmt++; + break; + case 'D': + isize = sizeof(double); + fmt++; + break; + case 'L': + isize = sizeof(long double); + fmt++; + break; + default: + if (isdigit((unsigned char)*fmt)) { + errno = 0; + isize = (size_t)strtoul(fmt, &end, 10); + if (errno != 0 || isize == 0) + errx(1, "%s: invalid size", fmt); + fmt = (const char *)end; + } + } + switch (isize) { + case sizeof(float): + digits = FLT_DIG; + break; + case sizeof(double): + digits = DBL_DIG; + break; + default: + if (isize == sizeof(long double)) + digits = LDBL_DIG; + else + errx(1, "unsupported floating point size %lu", + (u_long)isize); + } + + asprintf(&hdfmt, "%lu/%lu \" %%%d.%de \" \"\\n\"", + 16UL / (u_long)isize, (u_long)isize, digits + 8, digits); + if (hdfmt == NULL) + err(1, NULL); + odadd(hdfmt); + free(hdfmt); + + return (fmt); +} + +static const char * +odformatint(char fchar, const char *fmt) +{ + unsigned long long n; + size_t isize; + int digits; + char *end, *hdfmt; + + isize = sizeof(int); + switch (*fmt) { + case 'C': + isize = sizeof(char); + fmt++; + break; + case 'I': + isize = sizeof(int); + fmt++; + break; + case 'L': + isize = sizeof(long); + fmt++; + break; + case 'S': + isize = sizeof(short); + fmt++; + break; + default: + if (isdigit((unsigned char)*fmt)) { + errno = 0; + isize = (size_t)strtoul(fmt, &end, 10); + if (errno != 0 || isize == 0) + errx(1, "%s: invalid size", fmt); + if (isize != sizeof(char) && isize != sizeof(short) && + isize != sizeof(int) && isize != sizeof(long)) + errx(1, "unsupported int size %lu", + (u_long)isize); + fmt = (const char *)end; + } + } + + /* + * Calculate the maximum number of digits we need to + * fit the number. Overestimate for decimal with log + * base 8. We need one extra space for signed numbers + * to store the sign. + */ + n = (1ULL << (8 * isize)) - 1; + digits = 0; + while (n != 0) { + digits++; + n >>= (fchar == 'x') ? 4 : 3; + } + if (fchar == 'd') + digits++; + asprintf(&hdfmt, "%lu/%lu \"%%%s%d%c \" \"\\n\"", + 16UL / (u_long)isize, (u_long)isize, + (fchar == 'd' || fchar == 'u') ? "" : "0", digits, fchar); + if (hdfmt == NULL) + err(1, NULL); + odadd(hdfmt); + free(hdfmt); + + return (fmt); +} + +static void +odadd(const char *fmt) { - static int first = 1; + static int needpad; - if (first) { - first = 0; - add("\"%07.7_Ao\n\""); - add("\"%07.7_ao \""); - } else - add("\" \""); + if (needpad) + add("\""PADDING"\""); + add(fmt); + needpad = 1; } ==== //depot/projects/ia64/usr.bin/hexdump/parse.c#5 (text+ko) ==== @@ -36,7 +36,7 @@ static char sccsid[] = "@(#)parse.c 8.1 (Berkeley) 6/6/93"; #endif static const char rcsid[] = - "$FreeBSD: src/usr.bin/hexdump/parse.c,v 1.8 2002/05/17 06:12:25 tjr Exp $"; + "$FreeBSD: src/usr.bin/hexdump/parse.c,v 1.9 2002/05/17 07:14:55 tjr Exp $"; #endif /* not lint */ #include @@ -313,15 +313,16 @@ case 4: pr->bcnt = 4; break; - case sizeof(long double): - cs[2] = '\0'; - cs[1] = cs[0]; - cs[0] = 'L'; - pr->bcnt = sizeof(long double); - break; default: - p1[1] = '\0'; - badcnt(p1); + if (fu->bcnt == sizeof(long double)) { + cs[2] = '\0'; + cs[1] = cs[0]; + cs[0] = 'L'; + pr->bcnt = sizeof(long double); + } else { + p1[1] = '\0'; + badcnt(p1); + } } break; case 's': ==== //depot/projects/ia64/usr.bin/xargs/xargs.c#13 (text+ko) ==== @@ -49,7 +49,7 @@ #endif #include -__FBSDID("$FreeBSD: src/usr.bin/xargs/xargs.c,v 1.35 2002/05/10 13:06:34 ru Exp $"); +__FBSDID("$FreeBSD: src/usr.bin/xargs/xargs.c,v 1.36 2002/05/17 07:55:24 jmallett Exp $"); #include #include @@ -393,7 +393,7 @@ repls = Rflag; - if (repls == 0) { + if (argc == 0 || repls == 0) { *xp = NULL; run(argv); return; To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message