summaryrefslogtreecommitdiff
path: root/usr/src/lib/libcmd
diff options
context:
space:
mode:
authorRoger A. Faulkner <Roger.Faulkner@Oracle.COM>2010-04-03 09:48:44 -0700
committerRoger A. Faulkner <Roger.Faulkner@Oracle.COM>2010-04-03 09:48:44 -0700
commit3e14f97f673e8a630f076077de35afdd43dc1587 (patch)
tree9828b6b676f58d7b27dd28e00202d3f3461a5cd8 /usr/src/lib/libcmd
parent4f60987df4dcaa54a88b596f861fbf4f3382c65e (diff)
downloadillumos-joyent-3e14f97f673e8a630f076077de35afdd43dc1587.tar.gz
6939349 RFE: Update ksh93 to ast-ksh.2010-03-09
6877392 ksh93 regresses 'uniq -c' performance 6887363 Korn shell 93 sometimes mishandles return value of its child process 6900314 (while true ; do true|true ; done) hang in ioctl() with SIGTTOU 6904557 wc no longer counts number of bytes correctly 6904575 cut -d with multibyte character no longer works 6904597 paste -d no longer works with multibyte characters 6904780 /usr/bin/cksum changed output in snv_128 6904870 uniq -s does not skip multibyte characters correctly 6904878 join -t no longer works with multibyte char separator 6907460 EXIT trap handlers are sometimes executed twice 6909579 libast getopt solaris compatibility broken 6920072 ksh93 tail -f, with unconditional .25s sleep and line parsing, about 37x slower than cat 6932124 mktemp in ksh93 is broken Contributed by Olga Kryzhanovska <olga.kryzhanovska@gmail.com>
Diffstat (limited to 'usr/src/lib/libcmd')
-rw-r--r--usr/src/lib/libcmd/Makefile.com9
-rw-r--r--usr/src/lib/libcmd/amd64/include/ast/cmd.h6
-rw-r--r--usr/src/lib/libcmd/amd64/include/ast/cmdext.h3
-rw-r--r--usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/ids4
-rw-r--r--usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/sockets4
-rw-r--r--usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/symlink4
-rw-r--r--usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/utsname4
-rw-r--r--usr/src/lib/libcmd/common/RELEASE16
-rw-r--r--usr/src/lib/libcmd/common/basename.c2
-rw-r--r--usr/src/lib/libcmd/common/cat.c3
-rw-r--r--usr/src/lib/libcmd/common/chgrp.c4
-rw-r--r--usr/src/lib/libcmd/common/chmod.c4
-rw-r--r--usr/src/lib/libcmd/common/chown.c2
-rw-r--r--usr/src/lib/libcmd/common/cksum.c12
-rw-r--r--usr/src/lib/libcmd/common/cmd.h6
-rw-r--r--usr/src/lib/libcmd/common/cmdinit.c2
-rw-r--r--usr/src/lib/libcmd/common/cmp.c2
-rw-r--r--usr/src/lib/libcmd/common/comm.c2
-rw-r--r--usr/src/lib/libcmd/common/cp.c19
-rw-r--r--usr/src/lib/libcmd/common/cut.c583
-rw-r--r--usr/src/lib/libcmd/common/date.c3
-rw-r--r--usr/src/lib/libcmd/common/dirname.c2
-rw-r--r--usr/src/lib/libcmd/common/expr.c2
-rw-r--r--usr/src/lib/libcmd/common/fds.c2
-rw-r--r--usr/src/lib/libcmd/common/fmt.c2
-rw-r--r--usr/src/lib/libcmd/common/fold.c2
-rw-r--r--usr/src/lib/libcmd/common/fts_fix.c56
-rw-r--r--usr/src/lib/libcmd/common/fts_fix.h48
-rw-r--r--usr/src/lib/libcmd/common/getconf.c2
-rw-r--r--usr/src/lib/libcmd/common/head.c2
-rw-r--r--usr/src/lib/libcmd/common/id.c2
-rw-r--r--usr/src/lib/libcmd/common/join.c280
-rw-r--r--usr/src/lib/libcmd/common/ln.c2
-rw-r--r--usr/src/lib/libcmd/common/logname.c2
-rw-r--r--usr/src/lib/libcmd/common/md5sum.c2
-rw-r--r--usr/src/lib/libcmd/common/mkdir.c20
-rw-r--r--usr/src/lib/libcmd/common/mkfifo.c2
-rw-r--r--usr/src/lib/libcmd/common/mktemp.c23
-rw-r--r--usr/src/lib/libcmd/common/mv.c2
-rw-r--r--usr/src/lib/libcmd/common/paste.c97
-rw-r--r--usr/src/lib/libcmd/common/pathchk.c3
-rw-r--r--usr/src/lib/libcmd/common/pids.c2
-rw-r--r--usr/src/lib/libcmd/common/rev.c2
-rw-r--r--usr/src/lib/libcmd/common/rev.h2
-rw-r--r--usr/src/lib/libcmd/common/revlib.c2
-rw-r--r--usr/src/lib/libcmd/common/rm.c4
-rw-r--r--usr/src/lib/libcmd/common/rmdir.c2
-rw-r--r--usr/src/lib/libcmd/common/stty.c2
-rw-r--r--usr/src/lib/libcmd/common/sum.c2
-rw-r--r--usr/src/lib/libcmd/common/sync.c2
-rw-r--r--usr/src/lib/libcmd/common/tail.c59
-rw-r--r--usr/src/lib/libcmd/common/tee.c4
-rw-r--r--usr/src/lib/libcmd/common/tty.c2
-rw-r--r--usr/src/lib/libcmd/common/uname.c4
-rw-r--r--usr/src/lib/libcmd/common/uniq.c52
-rw-r--r--usr/src/lib/libcmd/common/vmstate.c163
-rw-r--r--usr/src/lib/libcmd/common/wc.c4
-rw-r--r--usr/src/lib/libcmd/common/wc.h2
-rw-r--r--usr/src/lib/libcmd/common/wclib.c18
-rw-r--r--usr/src/lib/libcmd/i386/include/ast/cmd.h6
-rw-r--r--usr/src/lib/libcmd/i386/include/ast/cmdext.h3
-rw-r--r--usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/ids4
-rw-r--r--usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/sockets4
-rw-r--r--usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/symlink4
-rw-r--r--usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/utsname4
-rw-r--r--usr/src/lib/libcmd/mapfile-vers4
-rw-r--r--usr/src/lib/libcmd/sparc/include/ast/cmd.h6
-rw-r--r--usr/src/lib/libcmd/sparc/include/ast/cmdext.h3
-rw-r--r--usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/ids4
-rw-r--r--usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/sockets4
-rw-r--r--usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/symlink4
-rw-r--r--usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/utsname4
-rw-r--r--usr/src/lib/libcmd/sparcv9/include/ast/cmd.h6
-rw-r--r--usr/src/lib/libcmd/sparcv9/include/ast/cmdext.h3
-rw-r--r--usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/ids4
-rw-r--r--usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/sockets4
-rw-r--r--usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/symlink4
-rw-r--r--usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/utsname4
78 files changed, 1195 insertions, 459 deletions
diff --git a/usr/src/lib/libcmd/Makefile.com b/usr/src/lib/libcmd/Makefile.com
index c11a682638..2760d3dbdb 100644
--- a/usr/src/lib/libcmd/Makefile.com
+++ b/usr/src/lib/libcmd/Makefile.com
@@ -20,8 +20,7 @@
#
#
-# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-# Use is subject to license terms.
+# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
#
@@ -48,6 +47,7 @@ OBJECTS = \
fds.o \
fmt.o \
fold.o \
+ fts_fix.o \
getconf.o \
head.o \
id.o \
@@ -75,6 +75,7 @@ OBJECTS = \
tty.o \
uname.o \
uniq.o \
+ vmstate.o \
wc.o \
wclib.o
@@ -122,7 +123,7 @@ CPPFLAGS = \
'-DUSAGE_LICENSE=\
"[-author?Glenn Fowler <gsf@research.att.com>]"\
"[-author?David Korn <dgk@research.att.com>]"\
- "[-copyright?Copyright (c) 1992-2009 AT&T Intellectual Property]"\
+ "[-copyright?Copyright (c) 1992-2010 AT&T Intellectual Property]"\
"[-license?http://www.opensource.org/licenses/cpl1.0.txt]"\
"[--catalog?libcmd]"'
@@ -131,7 +132,9 @@ CFLAGS += \
CFLAGS64 += \
$(ASTCFLAGS64)
+pics/cut.o := CERRWARN += -erroff=E_END_OF_LOOP_CODE_NOT_REACHED
pics/sync.o := CERRWARN += -erroff=E_END_OF_LOOP_CODE_NOT_REACHED
+pics/vmstate.o := CERRWARN += -erroff=E_NO_IMPLICIT_DECL_ALLOWED
.KEEP_STATE:
diff --git a/usr/src/lib/libcmd/amd64/include/ast/cmd.h b/usr/src/lib/libcmd/amd64/include/ast/cmd.h
index f149f8d275..e064222a77 100644
--- a/usr/src/lib/libcmd/amd64/include/ast/cmd.h
+++ b/usr/src/lib/libcmd/amd64/include/ast/cmd.h
@@ -3,7 +3,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -68,8 +68,6 @@
#include <dlldefs.h>
-typedef int (*Shbltin_f) __PROTO__((int, char**, __V_*));
-
#else
extern __MANGLE__ int CMD_STANDALONE __PROTO__((int, char**, __V_*));
@@ -135,7 +133,7 @@ main __PARAM__((int argc, char** argv), (argc, argv)) __OTORP__(int argc; char**
if (fun = (Shbltin_f)dlsym(dll, buf))
break;
}
- if (dll = dllfind("cmd", NiL, RTLD_LAZY))
+ if (dll = dllplug(NiL, "cmd", NiL, RTLD_LAZY, NiL, 0))
{
if (fun = (Shbltin_f)dlsym(dll, buf + 1))
break;
diff --git a/usr/src/lib/libcmd/amd64/include/ast/cmdext.h b/usr/src/lib/libcmd/amd64/include/ast/cmdext.h
index 416a3dc5a5..978322e2d3 100644
--- a/usr/src/lib/libcmd/amd64/include/ast/cmdext.h
+++ b/usr/src/lib/libcmd/amd64/include/ast/cmdext.h
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -72,5 +72,6 @@ extern __MANGLE__ int b_tee __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_tty __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_uname __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_uniq __PROTO__((int, char**, __V_*));
+extern __MANGLE__ int b_vmstate __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_wc __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_xgrep __PROTO__((int, char**, __V_*));
diff --git a/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/ids b/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/ids
index 4b285da2a7..5c25aaedd2 100644
--- a/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/ids
+++ b/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/ids
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_i386_64bit/src/lib/libcmd/features/ids by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_i386_64bit/src/lib/libcmd/features/ids by iffe version 2009-12-04 : : */
#ifndef _def_ids_cmd
#define _def_ids_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_i386_64bit/arch/sol11.i386/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_i386_64bit/arch/sol11.i386/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_endgrent 1 /* endgrent() in default lib(s) */
#define _lib_getgrent 1 /* getgrent() in default lib(s) */
diff --git a/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/sockets b/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/sockets
index febcb42135..701f83e584 100644
--- a/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/sockets
+++ b/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/sockets
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_i386_64bit/src/lib/libcmd/features/sockets by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_i386_64bit/src/lib/libcmd/features/sockets by iffe version 2009-12-04 : : */
#ifndef _def_sockets_cmd
#define _def_sockets_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_i386_64bit/arch/sol11.i386/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_i386_64bit/arch/sol11.i386/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _sys_socket 1 /* #include <sys/socket.h> ok */
#define _hdr_arpa_inet 1 /* #include <arpa/inet.h> ok */
diff --git a/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/symlink b/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/symlink
index 3426d54558..50a4f770a0 100644
--- a/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/symlink
+++ b/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/symlink
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_i386_64bit/src/lib/libcmd/features/symlink by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_i386_64bit/src/lib/libcmd/features/symlink by iffe version 2009-12-04 : : */
#ifndef _def_symlink_cmd
#define _def_symlink_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_i386_64bit/arch/sol11.i386/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_i386_64bit/arch/sol11.i386/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_lchown 1 /* lchown implemented */
#endif
diff --git a/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/utsname b/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/utsname
index 482658f139..60fae23d03 100644
--- a/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/utsname
+++ b/usr/src/lib/libcmd/amd64/src/lib/libcmd/FEATURE/utsname
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_i386_64bit/src/lib/libcmd/features/utsname by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_i386_64bit/src/lib/libcmd/features/utsname by iffe version 2009-12-04 : : */
#ifndef _def_utsname_cmd
#define _def_utsname_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_i386_64bit/arch/sol11.i386/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_i386_64bit/arch/sol11.i386/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_getdomainname 1 /* getdomainname() in default lib(s) */
#define _lib_gethostid 1 /* gethostid() in default lib(s) */
diff --git a/usr/src/lib/libcmd/common/RELEASE b/usr/src/lib/libcmd/common/RELEASE
index ebda670177..fba77c1c29 100644
--- a/usr/src/lib/libcmd/common/RELEASE
+++ b/usr/src/lib/libcmd/common/RELEASE
@@ -1,3 +1,19 @@
+10-03-07 tail.c: sfsync(sfstdout) after all -f done, fix -f partial line
+10-03-05 mktemp.c: add --regress=seed for testing
+10-03-05 vmstate.c: add
+10-01-26 tail.c: -f sleep(1) only if no progress from last round of checks
+10-01-20 fts_fix.[ch]: use <fts_fix.h> instead of <fts.h> (see fts_fix.c)
+10-01-20 cp.c: free(state) if called from old shell
+09-12-10 join.c: <wctype.h> for iswspace()!
+09-12-04 cmd.h: fix CMD_DYNAMIC logic
+09-12-04 cut.c: handle -d mb
+09-12-03 mkdir.c: add --verbose
+09-11-30 cat.c,date.c,cksum.c: drop setlocale() call already done by optget()
+09-11-30 join.c: handle -t mb
+09-11-28 wclib.c: { -w -L } mb independent of -m
+09-11-28 paste.c: handle -d mb
+09-11-28 uniq.c: handle -s mb
+09-11-28 cksum.c: FTS_SEEDOTDIR by default
09-09-09 fds.c: add --unit=fd
09-08-25 tail.c: initialize Tail_t.fifo=0 !!
09-08-15 tail.c: fix fifo logic
diff --git a/usr/src/lib/libcmd/common/basename.c b/usr/src/lib/libcmd/common/basename.c
index 2b59030483..74da190ce8 100644
--- a/usr/src/lib/libcmd/common/basename.c
+++ b/usr/src/lib/libcmd/common/basename.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/cat.c b/usr/src/lib/libcmd/common/cat.c
index e451998cc2..dbec90c1da 100644
--- a/usr/src/lib/libcmd/common/cat.c
+++ b/usr/src/lib/libcmd/common/cat.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -406,7 +406,6 @@ b_cat(int argc, char** argv, void* context)
char states[UCHAR_MAX+1];
cmdinit(argc, argv, context, ERROR_CATALOG, 0);
- setlocale(LC_ALL, "");
att = !strcmp(astconf("UNIVERSE", NiL, NiL), "att");
mode = "r";
for (;;)
diff --git a/usr/src/lib/libcmd/common/chgrp.c b/usr/src/lib/libcmd/common/chgrp.c
index 3295f3ab24..5272171787 100644
--- a/usr/src/lib/libcmd/common/chgrp.c
+++ b/usr/src/lib/libcmd/common/chgrp.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -103,7 +103,7 @@ __STDPP__directive pragma pp:hide lchown
#include <cdt.h>
#include <ls.h>
#include <ctype.h>
-#include <fts.h>
+#include <fts_fix.h>
#include "FEATURE/symlink"
diff --git a/usr/src/lib/libcmd/common/chmod.c b/usr/src/lib/libcmd/common/chmod.c
index 4247446859..7bfcf09dc8 100644
--- a/usr/src/lib/libcmd/common/chmod.c
+++ b/usr/src/lib/libcmd/common/chmod.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -135,7 +135,7 @@ __STDPP__directive pragma pp:hide lchmod
#include <cmd.h>
#include <ls.h>
-#include <fts.h>
+#include <fts_fix.h>
#include "FEATURE/symlink"
diff --git a/usr/src/lib/libcmd/common/chown.c b/usr/src/lib/libcmd/common/chown.c
index cc80ba516f..4e0bea0a7b 100644
--- a/usr/src/lib/libcmd/common/chown.c
+++ b/usr/src/lib/libcmd/common/chown.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/cksum.c b/usr/src/lib/libcmd/common/cksum.c
index 2be23e4a93..c42e865b09 100644
--- a/usr/src/lib/libcmd/common/cksum.c
+++ b/usr/src/lib/libcmd/common/cksum.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -27,7 +27,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: sum (AT&T Research) 2009-07-02 $\n]"
+"[-?\n@(#)$Id: sum (AT&T Research) 2009-11-28 $\n]"
USAGE_LICENSE
"[+NAME?cksum,md5sum,sum - print file checksum and block count]"
"[+DESCRIPTION?\bsum\b lists the checksum, and for most methods the block"
@@ -113,7 +113,7 @@ USAGE_LICENSE
#include <sum.h>
#include <ls.h>
#include <modex.h>
-#include <fts.h>
+#include <fts_fix.h>
#include <error.h>
typedef struct State_s /* program state */
@@ -453,8 +453,7 @@ b_cksum(int argc, register char** argv, void* context)
cmdinit(argc, argv, context, ERROR_CATALOG, ERROR_NOTIFY);
memset(&state, 0, sizeof(state));
- setlocale(LC_ALL, "");
- flags = fts_flags() | FTS_TOP | FTS_NOPOSTORDER | FTS_NOSEEDOTDIR;
+ flags = fts_flags() | FTS_TOP | FTS_NOPOSTORDER;
state.flags = SUM_SIZE;
state.warn = 1;
logical = 1;
@@ -555,7 +554,10 @@ b_cksum(int argc, register char** argv, void* context)
*/
if (logical)
+ {
flags &= ~(FTS_META|FTS_PHYSICAL);
+ flags |= FTS_SEEDOTDIR;
+ }
if (state.permissions)
{
state.uid = geteuid();
diff --git a/usr/src/lib/libcmd/common/cmd.h b/usr/src/lib/libcmd/common/cmd.h
index 3b054da7dd..a78755bbc0 100644
--- a/usr/src/lib/libcmd/common/cmd.h
+++ b/usr/src/lib/libcmd/common/cmd.h
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -57,8 +57,6 @@
#include <dlldefs.h>
-typedef int (*Shbltin_f)(int, char**, void*);
-
#else
extern int CMD_STANDALONE(int, char**, void*);
@@ -126,7 +124,7 @@ main(int argc, char** argv)
if (fun = (Shbltin_f)dlsym(dll, buf))
break;
}
- if (dll = dllfind("cmd", NiL, RTLD_LAZY))
+ if (dll = dllplug(NiL, "cmd", NiL, RTLD_LAZY, NiL, 0))
{
if (fun = (Shbltin_f)dlsym(dll, buf + 1))
break;
diff --git a/usr/src/lib/libcmd/common/cmdinit.c b/usr/src/lib/libcmd/common/cmdinit.c
index e0bdfe511e..70a65cd1b2 100644
--- a/usr/src/lib/libcmd/common/cmdinit.c
+++ b/usr/src/lib/libcmd/common/cmdinit.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/cmp.c b/usr/src/lib/libcmd/common/cmp.c
index 12b69ee23b..db3f8de4b4 100644
--- a/usr/src/lib/libcmd/common/cmp.c
+++ b/usr/src/lib/libcmd/common/cmp.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/comm.c b/usr/src/lib/libcmd/common/comm.c
index f3fee9ef09..dcae3ba22e 100644
--- a/usr/src/lib/libcmd/common/comm.c
+++ b/usr/src/lib/libcmd/common/comm.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/cp.c b/usr/src/lib/libcmd/common/cp.c
index bff4430830..66b946b7f5 100644
--- a/usr/src/lib/libcmd/common/cp.c
+++ b/usr/src/lib/libcmd/common/cp.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -27,7 +27,7 @@
*/
static const char usage_head[] =
-"[-?@(#)$Id: cp (AT&T Research) 2009-06-18 $\n]"
+"[-?@(#)$Id: cp (AT&T Research) 2010-01-20 $\n]"
USAGE_LICENSE
;
@@ -123,7 +123,7 @@ static const char usage_tail[] =
#include <cmd.h>
#include <ls.h>
#include <times.h>
-#include <fts.h>
+#include <fts_fix.h>
#include <fs3d.h>
#include <hashkey.h>
#include <stk.h>
@@ -274,7 +274,7 @@ visit(State_t* state, register FTSENT* ent)
if (state->directory)
{
if ((state->postsiz + len) > state->pathsiz && !(state->path = newof(state->path, char, state->pathsiz = roundof(state->postsiz + len, PATH_CHUNK), 0)))
- error(3, "out of space");
+ error(ERROR_SYSTEM|3, "out of space");
if (state->hierarchy && ent->fts_level == 0 && strchr(base, '/'))
{
s = state->path + state->postsiz;
@@ -667,6 +667,7 @@ b_cp(int argc, register char** argv, void* context)
struct stat st;
State_t* state;
Shbltin_t* sh;
+ void* cleanup = context;
cmdinit(argc, argv, context, ERROR_CATALOG, ERROR_NOTIFY);
if (!(sh = CMD_CONTEXT(context)) || !(state = (State_t*)sh->ptr))
@@ -825,7 +826,7 @@ b_cp(int argc, register char** argv, void* context)
argv++;
}
if (!(v = (char**)stkalloc(stkstd, (argc + 2) * sizeof(char*))))
- error(3, "out of space");
+ error(ERROR_SYSTEM|3, "out of space");
memcpy(v, argv, (argc + 1) * sizeof(char*));
argv = v;
if (!standard)
@@ -906,7 +907,7 @@ b_cp(int argc, register char** argv, void* context)
state->official = 1;
state->postsiz = strlen(file);
if (state->pathsiz < roundof(state->postsiz + 2, PATH_CHUNK) && !(state->path = newof(state->path, char, state->pathsiz = roundof(state->postsiz + 2, PATH_CHUNK), 0)))
- error(3, "out of space");
+ error(ERROR_SYSTEM|3, "out of space");
memcpy(state->path, file, state->postsiz + 1);
if (state->directory && state->path[state->postsiz - 1] != '/')
state->path[state->postsiz++] = '/';
@@ -939,5 +940,11 @@ b_cp(int argc, register char** argv, void* context)
}
else if ((*state->link)(*argv, state->path))
error(ERROR_SYSTEM|2, "%s: cannot link to %s", *argv, state->path);
+ if (cleanup && !sh)
+ {
+ if (state->path)
+ free(state->path);
+ free(state);
+ }
return error_info.errors != 0;
}
diff --git a/usr/src/lib/libcmd/common/cut.c b/usr/src/lib/libcmd/common/cut.c
index 2be03c3183..abafdc5070 100644
--- a/usr/src/lib/libcmd/common/cut.c
+++ b/usr/src/lib/libcmd/common/cut.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -23,13 +23,11 @@
* David Korn
* AT&T Bell Laboratories
*
- * cut [-sN] [-f flist] [-c clist] [-d delim] [-D delim] [-r reclen] [file] ...
- *
* cut fields or columns from fields from a file
*/
static const char usage[] =
-"[-?\n@(#)$Id: cut (AT&T Research) 2008-04-01 $\n]"
+"[-?\n@(#)$Id: cut (AT&T Research) 2009-12-04 $\n]"
USAGE_LICENSE
"[+NAME?cut - cut out selected columns or fields of each line of a file]"
"[+DESCRIPTION?\bcut\b bytes, characters, or character-delimited fields "
@@ -49,13 +47,13 @@ USAGE_LICENSE
"[+?If no \afile\a is given, or if the \afile\a is \b-\b, \bcut\b "
"cuts from standard input. The start of the file is defined "
"as the current offset.]"
-"[b:bytes]:[list?\bcut\b based on a list of bytes.]"
-"[c:characters]:[list?\bcut\b based on a list of characters.]"
+"[b:bytes]:[list?\bcut\b based on a list of byte counts.]"
+"[c:characters]:[list?\bcut\b based on a list of character counts.]"
"[d:delimiter]:[delim?The field character for the \b-f\b option is set "
"to \adelim\a. The default is the \btab\b character.]"
"[f:fields]:[list?\bcut\b based on fields separated by the delimiter "
"character specified with the \b-d\b optiion.]"
-"[n:nosplit?Do not split characters. Currently ignored.]"
+"[n!:split?Split multibyte characters selected by the \b-b\b option.]"
"[R|r:reclen]#[reclen?If \areclen\a > 0, the input will be read as fixed length "
"records of length \areclen\a when used with the \b-b\b or \b-c\b "
"option.]"
@@ -65,7 +63,7 @@ USAGE_LICENSE
"[D:line-delimeter|output-delimiter]:[ldelim?The line delimiter character for "
"the \b-f\b option is set to \aldelim\a. The default is the "
"\bnewline\b character.]"
-"[N:nonewline?Do not output new-lines at end of each record when used "
+"[N!:newline?Output new-lines at end of each record when used "
"with the \b-b\b or \b-c\b option.]"
"\n"
"\n[file ...]\n"
@@ -80,79 +78,102 @@ USAGE_LICENSE
#include <cmd.h>
#include <ctype.h>
-typedef struct Last_s
+typedef struct Delim_s
{
- int seqno;
- int seq;
- int wdelim;
- int ldelim;
-} Last_t;
+ char* str;
+ int len;
+ int chr;
+} Delim_t;
typedef struct Cut_s
{
+ int mb;
+ int eob;
int cflag;
+ int nosplit;
int sflag;
int nlflag;
- int wdelim;
- int ldelim;
- int seqno;
int reclen;
- signed char space[UCHAR_MAX];
- Last_t last;
+ Delim_t wdelim;
+ Delim_t ldelim;
+ unsigned char space[UCHAR_MAX+1];
int list[2]; /* NOTE: must be last member */
} Cut_t;
-#define HUGE (1<<14)
+#define HUGE INT_MAX
#define BLOCK 8*1024
#define C_BYTES 1
#define C_CHARS 2
#define C_FIELDS 4
#define C_SUPRESS 8
-#define C_NOCHOP 16
+#define C_NOSPLIT 16
#define C_NONEWLINE 32
+#define SP_LINE 1
+#define SP_WORD 2
+#define SP_WIDE 3
+
+#define mb2wc(w,p,n) (*ast.mb_towc)(&w,(char*)p,n)
+
/*
* compare the first of an array of integers
*/
-static int mycomp(register const void *a,register const void *b)
+static int
+mycomp(register const void* a, register const void* b)
{
- return(*((int*)a) - *((int*)b));
+ if (*((int*)a) < *((int*)b))
+ return -1;
+ if (*((int*)a) > *((int*)b))
+ return 1;
+ return 0;
}
-static Cut_t *cutinit(int mode,char *str,int wdelim,int ldelim,size_t reclen)
+static Cut_t*
+cutinit(int mode, char* str, Delim_t* wdelim, Delim_t* ldelim, size_t reclen)
{
- register int *lp, c, n=0;
- register int range = 0;
- register char *cp = str;
- Cut_t *cuthdr;
- if (!(cuthdr = (Cut_t*)stakalloc(sizeof(Cut_t)+strlen(cp)*sizeof(int))))
+ register int* lp;
+ register int c;
+ register int n = 0;
+ register int range = 0;
+ register char* cp = str;
+ Cut_t* cut;
+
+ if (!(cut = (Cut_t*)stakalloc(sizeof(Cut_t) + strlen(cp) * sizeof(int))))
error(ERROR_exit(1), "out of space");
- memset(cuthdr->space, 0, sizeof(cuthdr->space));
- cuthdr->last.seqno = 0;
- cuthdr->last.seq = 0;
- cuthdr->last.wdelim = 0;
- cuthdr->last.ldelim = '\n';
- cuthdr->cflag = ((mode&C_CHARS)!=0 && mbwide());
- cuthdr->sflag = ((mode&C_SUPRESS)!=0);
- cuthdr->nlflag = ((mode&C_NONEWLINE)!=0);
- cuthdr->wdelim = wdelim;
- cuthdr->ldelim = ldelim;
- cuthdr->reclen = reclen;
- cuthdr->seqno = ++cuthdr->last.seqno;
- lp = cuthdr->list;
- while(1) switch(c= *cp++)
+ if (cut->mb = mbwide())
{
+ memset(cut->space, 0, sizeof(cut->space) / 2);
+ memset(cut->space + sizeof(cut->space) / 2, SP_WIDE, sizeof(cut->space) / 2);
+ }
+ else
+ memset(cut->space, 0, sizeof(cut->space));
+ cut->wdelim = *wdelim;
+ if (wdelim->len == 1)
+ cut->space[wdelim->chr] = SP_WORD;
+ cut->ldelim = *ldelim;
+ cut->eob = (ldelim->len == 1) ? ldelim->chr : 0;
+ cut->space[cut->eob] = SP_LINE;
+ cut->cflag = (mode&C_CHARS) && cut->mb;
+ cut->nosplit = (mode&(C_BYTES|C_NOSPLIT)) == (C_BYTES|C_NOSPLIT) && cut->mb;
+ cut->sflag = (mode&C_SUPRESS) != 0;
+ cut->nlflag = (mode&C_NONEWLINE) != 0;
+ cut->reclen = reclen;
+ lp = cut->list;
+ for (;;)
+ switch(c = *cp++)
+ {
case ' ':
case '\t':
while(*cp==' ' || *cp=='\t')
cp++;
+ /*FALLTHROUGH*/
case 0:
case ',':
if(range)
{
--range;
- if((n = (n==0?HUGE:n-range)) < 0)
+ if((n = (n ? (n-range) : (HUGE-1))) < 0)
error(ERROR_exit(1),"invalid range for c/f option");
*lp++ = range;
*lp++ = n;
@@ -166,8 +187,8 @@ static Cut_t *cutinit(int mode,char *str,int wdelim,int ldelim,size_t reclen)
{
register int *dp;
*lp = HUGE;
- n = 1 + (lp-cuthdr->list)/2;
- qsort(lp=cuthdr->list,n,2*sizeof(*lp),mycomp);
+ n = 1 + (lp-cut->list)/2;
+ qsort(lp=cut->list,n,2*sizeof(*lp),mycomp);
/* eliminate overlapping regions */
for(n=0,range= -2,dp=lp; *lp!=HUGE; lp+=2)
{
@@ -196,7 +217,7 @@ static Cut_t *cutinit(int mode,char *str,int wdelim,int ldelim,size_t reclen)
}
}
*dp = HUGE;
- lp = cuthdr->list;
+ lp = cut->list;
/* convert ranges into gaps */
for(n=0; *lp!=HUGE; lp+=2)
{
@@ -204,7 +225,7 @@ static Cut_t *cutinit(int mode,char *str,int wdelim,int ldelim,size_t reclen)
*lp -= n;
n = c+lp[1];
}
- return(cuthdr);
+ return cut;
}
n = range = 0;
break;
@@ -220,70 +241,121 @@ static Cut_t *cutinit(int mode,char *str,int wdelim,int ldelim,size_t reclen)
if(!isdigit(c))
error(ERROR_exit(1),"bad list for c/f option");
n = 10*n + (c-'0');
- }
+ break;
+ }
/* NOTREACHED */
}
/*
- * advance <cp> by <n> multi-byte characters
- */
-static int advance(const char *str, register int n, register int inlen)
-{
- register int size, len=inlen;
- register const char *cp=str;
- while(len>0 && n-->0)
- {
- size = mblen(cp, len);
- if(size<0)
- size = 1;
- cp += size;
- len -= size;
-
- }
- if(n>0)
- return(inlen+1);
- return(cp-str);
-}
-
-/*
* cut each line of file <fdin> and put results to <fdout> using list <list>
*/
-static void cutcols(Cut_t *cuthdr,Sfio_t *fdin,Sfio_t *fdout)
+static void
+cutcols(Cut_t* cut, Sfio_t* fdin, Sfio_t* fdout)
{
- register int c, ncol=0,len;
- register const int *lp = cuthdr->list;
- register char *inp;
+ register int c;
+ register int len;
+ register int ncol = 0;
+ register const int* lp = cut->list;
+ register char* bp;
register int skip; /* non-zero for don't copy */
- while(1)
+ int must;
+ char* ep;
+ const char* xx;
+
+ for (;;)
{
- if(len = cuthdr->reclen)
- inp = sfreserve(fdin, len, -1);
+ if (len = cut->reclen)
+ bp = sfreserve(fdin, len, -1);
else
- inp = sfgetr(fdin, '\n', 0);
- if(!inp && !(inp = sfgetr(fdin, 0, SF_LASTR)))
+ bp = sfgetr(fdin, '\n', 0);
+ if (!bp && !(bp = sfgetr(fdin, 0, SF_LASTR)))
break;
len = sfvalue(fdin);
- if((ncol = skip = *(lp = cuthdr->list)) == 0)
+ ep = bp + len;
+ xx = 0;
+ if (!(ncol = skip = *(lp = cut->list)))
ncol = *++lp;
- while(1)
+ must = 1;
+ do
{
- if((c=(cuthdr->cflag?advance(inp,ncol,len):ncol)) > len)
- c = len;
- else if(c==len && !skip)
- ncol++;
- ncol -= c;
- if(!skip && sfwrite(fdout,(char*)inp,c)<0)
- return;
- inp += c;
- if(ncol)
+ if (cut->nosplit)
+ {
+ register const char* s = bp;
+ register int w = len < ncol ? len : ncol;
+ register int z;
+
+ while (w > 0)
+ {
+ if (!(*s & 0x80))
+ z = 1;
+ else if ((z = mblen(s, w)) <= 0)
+ {
+ if (s == bp && xx)
+ {
+ w += s - xx;
+ bp = (char*)(s = xx);
+ xx = 0;
+ continue;
+ }
+ xx = s;
+ if (skip)
+ s += w;
+ w = 0;
+ break;
+ }
+ s += z;
+ w -= z;
+ }
+ c = s - bp;
+ ncol = !w && ncol >= len;
+ }
+ else if (cut->cflag)
+ {
+ register const char* s = bp;
+ register int w = len;
+ register int z;
+
+ while (w > 0 && ncol > 0)
+ {
+ ncol--;
+ if (!(*s & 0x80) || (z = mblen(s, w)) <= 0)
+ z = 1;
+ s += z;
+ w -= z;
+
+ }
+ c = s - bp;
+ ncol = !w && (ncol || !skip);
+ }
+ else
+ {
+ if ((c = ncol) > len)
+ c = len;
+ else if (c == len && !skip)
+ ncol++;
+ ncol -= c;
+ }
+ if (!skip && c)
+ {
+ if (sfwrite(fdout, (char*)bp, c) < 0)
+ return;
+ must = 0;
+ }
+ bp += c;
+ if (ncol)
break;
len -= c;
ncol = *++lp;
skip = !skip;
+ } while (ncol != HUGE);
+ if (!cut->nlflag && (skip || must || cut->reclen))
+ {
+ if (cut->ldelim.len > 1)
+ sfwrite(fdout, cut->ldelim.str, cut->ldelim.len);
+ else
+ sfputc(fdout, cut->ldelim.chr);
}
- if(!cuthdr->nlflag && (skip || cuthdr->reclen))
- sfputc(fdout,cuthdr->ldelim);
}
}
@@ -292,93 +364,180 @@ static void cutcols(Cut_t *cuthdr,Sfio_t *fdin,Sfio_t *fdout)
* stream <fdin> must be line buffered
*/
-#define endline(c) (((signed char)-1)<0?(c)<0:(c)==((char)-1))
-
-static void cutfields(Cut_t *cuthdr,Sfio_t *fdin,Sfio_t *fdout)
+static void
+cutfields(Cut_t* cut, Sfio_t* fdin, Sfio_t* fdout)
{
+ register unsigned char *sp = cut->space;
register unsigned char *cp;
+ register unsigned char *wp;
register int c, nfields;
- register const int *lp = cuthdr->list;
+ register const int *lp = cut->list;
register unsigned char *copy;
register int nodelim, empty, inword=0;
- register unsigned char *endbuff;
- unsigned char *inbuff, *first;
+ register unsigned char *ep;
+ unsigned char *bp, *first;
int lastchar;
+ wchar_t w;
Sfio_t *fdtmp = 0;
long offset = 0;
- if(cuthdr->seqno != cuthdr->last.seq)
- {
- cuthdr->space[cuthdr->last.ldelim] = 0;
- cuthdr->space[cuthdr->last.wdelim] = 0;
- cuthdr->space[cuthdr->last.wdelim=cuthdr->wdelim] = 1;
- cuthdr->space[cuthdr->last.ldelim=cuthdr->ldelim] = -1;
- cuthdr->last.seq = cuthdr->seqno;
- }
+ unsigned char mb[8];
/* process each buffer */
- while ((inbuff = (unsigned char*)sfreserve(fdin, SF_UNBOUND, 0)) && (c = sfvalue(fdin)) > 0)
+ while ((bp = (unsigned char*)sfreserve(fdin, SF_UNBOUND, -1)) && (c = sfvalue(fdin)) > 0)
{
- cp = inbuff;
- endbuff = cp + --c;
- if((lastchar = cp[c]) != cuthdr->ldelim)
- *endbuff = cuthdr->ldelim;
+ cp = bp;
+ ep = cp + --c;
+ if((lastchar = cp[c]) != cut->eob)
+ *ep = cut->eob;
/* process each line in the buffer */
- while(cp <= endbuff)
+ while (cp <= ep)
{
first = cp;
- if(!inword)
+ if (!inword)
{
nodelim = empty = 1;
copy = cp;
- if(nfields = *(lp = cuthdr->list))
+ if (nfields = *(lp = cut->list))
copy = 0;
else
nfields = *++lp;
}
- else if(copy)
+ else if (copy)
copy = cp;
inword = 0;
- while(!inword)
+ do
{
/* skip over non-delimiter characters */
- while(!(c=cuthdr->space[*cp++]));
+ if (cut->mb)
+ for (;;)
+ {
+ switch (c = sp[*(unsigned char*)cp++])
+ {
+ case 0:
+ continue;
+ case SP_WIDE:
+ wp = --cp;
+ while ((c = mb2wc(w, cp, ep - cp)) <= 0)
+ {
+ /* mb char possibly spanning buffer boundary -- fun stuff */
+ if ((ep - cp) < mbmax())
+ {
+ int i;
+ int j;
+ int k;
+
+ if (lastchar != cut->eob)
+ {
+ *ep = lastchar;
+ if ((c = mb2wc(w, cp, ep - cp)) > 0)
+ break;
+ }
+ if (copy)
+ {
+ empty = 0;
+ if ((c = cp - copy) > 0 && sfwrite(fdout, (char*)copy, c) < 0)
+ goto failed;
+ }
+ for (i = 0; i <= (ep - cp); i++)
+ mb[i] = cp[i];
+ if (!(bp = (unsigned char*)sfreserve(fdin, SF_UNBOUND, -1)) || (c = sfvalue(fdin)) <= 0)
+ goto failed;
+ cp = bp;
+ ep = cp + --c;
+ if ((lastchar = cp[c]) != cut->eob)
+ *ep = cut->eob;
+ j = i;
+ k = 0;
+ while (j < mbmax())
+ mb[j++] = cp[k++];
+ if ((c = mb2wc(w, (char*)mb, j)) <= 0)
+ {
+ c = i;
+ w = 0;
+ }
+ first = bp = cp += c - i;
+ if (copy)
+ {
+ copy = bp;
+ if (w == cut->ldelim.chr)
+ lastchar = cut->ldelim.chr;
+ else if (w != cut->wdelim.chr)
+ {
+ empty = 0;
+ if (sfwrite(fdout, (char*)mb, c) < 0)
+ goto failed;
+ }
+ }
+ c = 0;
+ }
+ else
+ {
+ w = *cp;
+ c = 1;
+ }
+ break;
+ }
+ cp += c;
+ c = w;
+ if (c == cut->wdelim.chr)
+ {
+ c = SP_WORD;
+ break;
+ }
+ if (c == cut->ldelim.chr)
+ {
+ c = SP_LINE;
+ break;
+ }
+ continue;
+ default:
+ wp = cp - 1;
+ break;
+ }
+ break;
+ }
+ else
+ {
+ while (!(c = sp[*cp++]));
+ wp = cp - 1;
+ }
/* check for end-of-line */
- if(endline(c))
+ if (c == SP_LINE)
{
- if(cp<=endbuff)
+ if (cp <= ep)
break;
- if((c=cuthdr->space[lastchar]),endline(c))
+ if (lastchar == cut->ldelim.chr)
break;
- /* restore cuthdr->last. character */
- if(lastchar != cuthdr->ldelim)
- *endbuff = lastchar;
+ /* restore cut->last character */
+ if (lastchar != cut->eob)
+ *ep = lastchar;
inword++;
- if(!c)
+ if (!sp[lastchar])
break;
}
nodelim = 0;
- if(--nfields >0)
+ if (--nfields > 0)
continue;
nfields = *++lp;
- if(copy)
+ if (copy)
{
empty = 0;
- if((c=(cp-1)-copy)>0 && sfwrite(fdout,(char*)copy,c)< 0)
+ if ((c = wp - copy) > 0 && sfwrite(fdout, (char*)copy, c) < 0)
goto failed;
copy = 0;
}
else
/* set to delimiter unless the first field */
- copy = cp -!empty;
- }
- if(!inword)
+ copy = empty ? cp : wp;
+ } while (!inword);
+ if (!inword)
{
- if(!copy)
+ if (!copy)
{
- if(nodelim)
+ if (nodelim)
{
- if(!cuthdr->sflag)
+ if (!cut->sflag)
{
- if(offset)
+ if (offset)
{
sfseek(fdtmp,(Sfoff_t)0,SEEK_SET);
sfmove(fdtmp,fdout,offset,-1);
@@ -389,14 +548,14 @@ static void cutfields(Cut_t *cuthdr,Sfio_t *fdin,Sfio_t *fdout)
else
sfputc(fdout,'\n');
}
- if(offset)
+ if (offset)
sfseek(fdtmp,offset=0,SEEK_SET);
}
- if(copy && (c=cp-copy)>0 && (!nodelim || !cuthdr->sflag) && sfwrite(fdout,(char*)copy,c)< 0)
+ if (copy && (c=cp-copy)>0 && (!nodelim || !cut->sflag) && sfwrite(fdout,(char*)copy,c)< 0)
goto failed;
}
/* see whether to save in tmp file */
- if(inword && nodelim && !cuthdr->sflag && (c=cp-first)>0)
+ if(inword && nodelim && !cut->sflag && (c=cp-first)>0)
{
/* copy line to tmpfile in case no fields */
if(!fdtmp)
@@ -405,73 +564,107 @@ static void cutfields(Cut_t *cuthdr,Sfio_t *fdin,Sfio_t *fdout)
offset +=c;
}
}
-failed:
+ failed:
if(fdtmp)
sfclose(fdtmp);
}
int
-b_cut(int argc,char *argv[], void* context)
+b_cut(int argc, char** argv, void* context)
{
- register char *cp = 0;
- register Sfio_t *fp;
- int n;
- Cut_t *cuthdr;
- int mode = 0;
- int wdelim = '\t';
- int ldelim = '\n';
- size_t reclen = 0;
+ register char* cp = 0;
+ register Sfio_t* fp;
+ char* s;
+ int n;
+ Cut_t* cut;
+ int mode = 0;
+ Delim_t wdelim;
+ Delim_t ldelim;
+ size_t reclen = 0;
cmdinit(argc, argv, context, ERROR_CATALOG, 0);
- while (n = optget(argv, usage)) switch (n)
+ wdelim.chr = '\t';
+ ldelim.chr = '\n';
+ wdelim.len = ldelim.len = 1;
+ for (;;)
{
- case 'b':
- case 'c':
- if(mode&C_FIELDS)
+ switch (n = optget(argv, usage))
{
- error(2, "f option already specified");
+ case 0:
break;
- }
- cp = opt_info.arg;
- if(n=='b')
- mode |= C_BYTES;
- else
- mode |= C_CHARS;
- break;
- case 'D':
- ldelim = *(unsigned char*)opt_info.arg;
- break;
- case 'd':
- wdelim = *(unsigned char*)opt_info.arg;
- break;
- case 'f':
- if(mode&(C_CHARS|C_BYTES))
- {
- error(2, "c option already specified");
+ case 'b':
+ case 'c':
+ if(mode&C_FIELDS)
+ {
+ error(2, "f option already specified");
+ continue;
+ }
+ cp = opt_info.arg;
+ if(n=='b')
+ mode |= C_BYTES;
+ else
+ mode |= C_CHARS;
+ continue;
+ case 'D':
+ ldelim.str = opt_info.arg;
+ if (mbwide())
+ {
+ s = opt_info.arg;
+ ldelim.chr = mbchar(s);
+ if ((n = s - opt_info.arg) > 1)
+ {
+ ldelim.len = n;
+ continue;
+ }
+ }
+ ldelim.chr = *(unsigned char*)opt_info.arg;
+ ldelim.len = 1;
+ continue;
+ case 'd':
+ wdelim.str = opt_info.arg;
+ if (mbwide())
+ {
+ s = opt_info.arg;
+ wdelim.chr = mbchar(s);
+ if ((n = s - opt_info.arg) > 1)
+ {
+ wdelim.len = n;
+ continue;
+ }
+ }
+ wdelim.chr = *(unsigned char*)opt_info.arg;
+ wdelim.len = 1;
+ continue;
+ case 'f':
+ if(mode&(C_CHARS|C_BYTES))
+ {
+ error(2, "c option already specified");
+ continue;
+ }
+ cp = opt_info.arg;
+ mode |= C_FIELDS;
+ continue;
+ case 'n':
+ mode |= C_NOSPLIT;
+ continue;
+ case 'N':
+ mode |= C_NONEWLINE;
+ continue;
+ case 'R':
+ case 'r':
+ if(opt_info.num>0)
+ reclen = opt_info.num;
+ continue;
+ case 's':
+ mode |= C_SUPRESS;
+ continue;
+ case ':':
+ error(2, "%s", opt_info.arg);
+ break;
+ case '?':
+ error(ERROR_usage(2), "%s", opt_info.arg);
break;
}
- cp = opt_info.arg;
- mode |= C_FIELDS;
- break;
- case 'n':
- mode |= C_NOCHOP;
- break;
- case 'N':
- mode |= C_NONEWLINE;
- break;
- case 'R':
- case 'r':
- if(opt_info.num>0)
- reclen = opt_info.num;
- break;
- case 's':
- mode |= C_SUPRESS;
- break;
- case ':':
- error(2, "%s", opt_info.arg);
- break;
- case '?':
- error(ERROR_usage(2), "%s", opt_info.arg);
break;
}
argv += opt_info.index;
@@ -486,7 +679,7 @@ b_cut(int argc,char *argv[], void* context)
error(3, "non-empty b, c or f option must be specified");
if((mode & (C_FIELDS|C_SUPRESS)) == C_SUPRESS)
error(3, "s option requires f option");
- cuthdr = cutinit(mode,cp,wdelim,ldelim,reclen);
+ cut = cutinit(mode, cp, &wdelim, &ldelim, reclen);
if(cp = *argv)
argv++;
do
@@ -499,13 +692,13 @@ b_cut(int argc,char *argv[], void* context)
continue;
}
if(mode&C_FIELDS)
- cutfields(cuthdr,fp,sfstdout);
+ cutfields(cut,fp,sfstdout);
else
- cutcols(cuthdr,fp,sfstdout);
+ cutcols(cut,fp,sfstdout);
if(fp!=sfstdin)
sfclose(fp);
} while(cp = *argv++);
if (sfsync(sfstdout))
error(ERROR_system(0), "write error");
- return(error_info.errors?1:0);
+ return error_info.errors != 0;
}
diff --git a/usr/src/lib/libcmd/common/date.c b/usr/src/lib/libcmd/common/date.c
index d7895b02d4..ce011e2960 100644
--- a/usr/src/lib/libcmd/common/date.c
+++ b/usr/src/lib/libcmd/common/date.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -294,7 +294,6 @@ b_date(int argc, register char** argv, void* context)
int unelapsed = 0; /* fmtelapsed() => strelapsed */
cmdinit(argc, argv, context, ERROR_CATALOG, 0);
- setlocale(LC_ALL, "");
tm_info.flags = TM_DATESTYLE;
fmts = &fmt;
fmt.format = "";
diff --git a/usr/src/lib/libcmd/common/dirname.c b/usr/src/lib/libcmd/common/dirname.c
index cd6076240b..076460eb97 100644
--- a/usr/src/lib/libcmd/common/dirname.c
+++ b/usr/src/lib/libcmd/common/dirname.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/expr.c b/usr/src/lib/libcmd/common/expr.c
index 78749d25ce..537408e507 100644
--- a/usr/src/lib/libcmd/common/expr.c
+++ b/usr/src/lib/libcmd/common/expr.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/fds.c b/usr/src/lib/libcmd/common/fds.c
index cca4fd22c3..0eb22bb1fd 100644
--- a/usr/src/lib/libcmd/common/fds.c
+++ b/usr/src/lib/libcmd/common/fds.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/fmt.c b/usr/src/lib/libcmd/common/fmt.c
index ab0db310ea..2830e2191b 100644
--- a/usr/src/lib/libcmd/common/fmt.c
+++ b/usr/src/lib/libcmd/common/fmt.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/fold.c b/usr/src/lib/libcmd/common/fold.c
index 01a2cadfb1..e371570095 100644
--- a/usr/src/lib/libcmd/common/fold.c
+++ b/usr/src/lib/libcmd/common/fold.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/fts_fix.c b/usr/src/lib/libcmd/common/fts_fix.c
new file mode 100644
index 0000000000..cc007e06c7
--- /dev/null
+++ b/usr/src/lib/libcmd/common/fts_fix.c
@@ -0,0 +1,56 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
+* and is licensed under the *
+* Common Public License, Version 1.0 *
+* by AT&T Intellectual Property *
+* *
+* A copy of the License is available at *
+* http://www.opensource.org/licenses/cpl1.0.txt *
+* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
+* *
+* Information and Software Systems Research *
+* AT&T Research *
+* Florham Park NJ *
+* *
+* Glenn Fowler <gsf@research.att.com> *
+* David Korn <dgk@research.att.com> *
+* *
+***********************************************************************/
+/*
+ * -lcmd specific workaround to handle
+ * fts_namelen
+ * fts_pathlen
+ * fts_level
+ * changing from [unsigned] short bit to [s]size_t
+ *
+ * ksh (or any other main application) that pulls in -lcmd
+ * at runtime may result in old -last running with new -lcmd
+ * which is not a good situation (tm)
+ *
+ * probably safe to drop after 20150101
+ */
+
+#include <ast.h>
+#include <fts_fix.h>
+
+#undef fts_read
+
+FTSENT*
+_fts_read(FTS* fts)
+{
+ FTSENT* oe;
+
+ static FTSENT* ne;
+
+ if ((oe = _ast_fts_read(fts)) && ast.version < 20100102L && (ne || (ne = newof(0, FTSENT, 1, 0))))
+ {
+ *ne = *oe;
+ oe = ne;
+ ne->fts_namelen = ne->_fts_namelen;
+ ne->fts_pathlen = ne->_fts_pathlen;
+ ne->fts_level = ne->_fts_level;
+ }
+ return oe;
+}
diff --git a/usr/src/lib/libcmd/common/fts_fix.h b/usr/src/lib/libcmd/common/fts_fix.h
new file mode 100644
index 0000000000..e4d411a82e
--- /dev/null
+++ b/usr/src/lib/libcmd/common/fts_fix.h
@@ -0,0 +1,48 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
+* and is licensed under the *
+* Common Public License, Version 1.0 *
+* by AT&T Intellectual Property *
+* *
+* A copy of the License is available at *
+* http://www.opensource.org/licenses/cpl1.0.txt *
+* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
+* *
+* Information and Software Systems Research *
+* AT&T Research *
+* Florham Park NJ *
+* *
+* Glenn Fowler <gsf@research.att.com> *
+* David Korn <dgk@research.att.com> *
+* *
+***********************************************************************/
+/*
+ * -lcmd specific workaround to handle
+ * fts_namelen
+ * fts_pathlen
+ * fts_level
+ * changing from [unsigned] short bit to [s]size_t
+ *
+ * ksh (or any other main application) that pulls in -lcmd
+ * at runtime may result in old -last running with new -lcmd
+ * which is not a good situation (tm)
+ */
+
+#ifndef _FTS_FIX_H
+#define _FTS_FIX_H 1
+
+#include <fts.h>
+
+#ifdef fts_read
+#undef fts_read
+#else
+#define _ast_fts_read fts_read
+#endif
+
+#define fts_read _fts_read
+
+extern FTSENT* fts_read(FTS*);
+
+#endif
diff --git a/usr/src/lib/libcmd/common/getconf.c b/usr/src/lib/libcmd/common/getconf.c
index a4509437ab..d7d02c98ac 100644
--- a/usr/src/lib/libcmd/common/getconf.c
+++ b/usr/src/lib/libcmd/common/getconf.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/head.c b/usr/src/lib/libcmd/common/head.c
index 98f7df8e8f..80ce196b7e 100644
--- a/usr/src/lib/libcmd/common/head.c
+++ b/usr/src/lib/libcmd/common/head.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/id.c b/usr/src/lib/libcmd/common/id.c
index 53d8cad830..1465d76b7b 100644
--- a/usr/src/lib/libcmd/common/id.c
+++ b/usr/src/lib/libcmd/common/id.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/join.c b/usr/src/lib/libcmd/common/join.c
index 909a8e8a29..4ef3c40860 100644
--- a/usr/src/lib/libcmd/common/join.c
+++ b/usr/src/lib/libcmd/common/join.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -28,7 +28,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: join (AT&T Research) 2009-08-01 $\n]"
+"[-?\n@(#)$Id: join (AT&T Research) 2009-12-10 $\n]"
USAGE_LICENSE
"[+NAME?join - relational database operator]"
"[+DESCRIPTION?\bjoin\b performs an \aequality join\a on the files \afile1\a "
@@ -93,6 +93,21 @@ USAGE_LICENSE
#include <cmd.h>
#include <sfdisc.h>
+#if _hdr_wchar && _hdr_wctype && _lib_iswctype
+
+#include <wchar.h>
+#include <wctype.h>
+
+#else
+
+#include <ctype.h>
+
+#ifndef iswspace
+#define iswspace(x) isspace(x)
+#endif
+
+#endif
+
#define C_FILE1 001
#define C_FILE2 002
#define C_COMMON 004
@@ -104,8 +119,15 @@ USAGE_LICENSE
#define S_DELIM 1
#define S_SPACE 2
#define S_NL 3
+#define S_WIDE 4
-typedef struct
+typedef struct Field_s
+{
+ char* beg;
+ char* end;
+} Field_t;
+
+typedef struct File_s
{
Sfio_t* iop;
char* name;
@@ -118,10 +140,10 @@ typedef struct
int spaces;
int hit;
int discard;
- char** fieldlist;
+ Field_t* fields;
} File_t;
-typedef struct
+typedef struct Join_s
{
unsigned char state[1<<CHAR_BIT];
Sfio_t* outfile;
@@ -129,9 +151,12 @@ typedef struct
int outmode;
int ooutmode;
char* nullfield;
+ char* delimstr;
int delim;
+ int delimlen;
int buffered;
int ignorecase;
+ int mb;
char* same;
int samesize;
void* context;
@@ -147,10 +172,10 @@ done(register Join_t* jp)
sfclose(jp->file[1].iop);
if (jp->outlist)
free(jp->outlist);
- if (jp->file[0].fieldlist)
- free(jp->file[0].fieldlist);
- if (jp->file[1].fieldlist)
- free(jp->file[1].fieldlist);
+ if (jp->file[0].fields)
+ free(jp->file[0].fields);
+ if (jp->file[1].fields)
+ free(jp->file[1].fields);
if (jp->same)
free(jp->same);
free(jp);
@@ -160,14 +185,20 @@ static Join_t*
init(void)
{
register Join_t* jp;
+ register int i;
+ setlocale(LC_ALL, "");
if (jp = newof(0, Join_t, 1, 0))
{
+ if (jp->mb = mbwide())
+ for (i = 0x80; i <= 0xff; i++)
+ jp->state[i] = S_WIDE;
jp->state[' '] = jp->state['\t'] = S_SPACE;
+ jp->state['\n'] = S_NL;
jp->delim = -1;
jp->nullfield = 0;
- if (!(jp->file[0].fieldlist = newof(0, char*, NFIELD + 1, 0)) ||
- !(jp->file[1].fieldlist = newof(0, char*, NFIELD + 1, 0)))
+ if (!(jp->file[0].fields = newof(0, Field_t, NFIELD + 1, 0)) ||
+ !(jp->file[1].fields = newof(0, Field_t, NFIELD + 1, 0)))
{
done(jp);
return 0;
@@ -265,10 +296,11 @@ getrec(Join_t* jp, int index, int discard)
{
register unsigned char* sp = jp->state;
register File_t* fp = &jp->file[index];
- register char** ptr = fp->fieldlist;
- register char** ptrmax = ptr + fp->maxfields;
+ register Field_t* field = fp->fields;
+ register Field_t* fieldmax = field + fp->maxfields;
register char* cp;
- register int n = 0;
+ register int n;
+ char* tp;
if (sh_checksig(jp->context))
return 0;
@@ -283,48 +315,148 @@ getrec(Join_t* jp, int index, int discard)
}
fp->recptr = cp;
fp->reclen = sfvalue(fp->iop);
- if (jp->delim=='\n') /* handle new-line delimiter specially */
+ if (jp->delim == '\n') /* handle new-line delimiter specially */
{
- *ptr++ = cp;
+ field->beg = cp;
cp += fp->reclen;
+ field->end = cp - 1;
+ field++;
}
- else while (n!=S_NL) /* separate into fields */
- {
- if (ptr >= ptrmax)
- {
- n = 2*fp->maxfields;
- fp->fieldlist = newof(fp->fieldlist, char*, n + 1, 0);
- ptr = fp->fieldlist + fp->maxfields;
- fp->maxfields = n;
- ptrmax = fp->fieldlist+n;
- }
- *ptr++ = cp;
- if (jp->delim<=0 && sp[*(unsigned char*)cp]==S_SPACE)
+ else
+ do /* separate into fields */
{
- fp->spaces = 1;
- while (sp[*(unsigned char*)cp++]==S_SPACE);
- cp--;
- }
- while ((n=sp[*(unsigned char*)cp++])==0);
- }
- *ptr = cp;
- fp->nfields = ptr - fp->fieldlist;
- if ((n=fp->field) < fp->nfields)
+ if (field >= fieldmax)
+ {
+ n = 2 * fp->maxfields;
+ fp->fields = newof(fp->fields, Field_t, n + 1, 0);
+ field = fp->fields + fp->maxfields;
+ fp->maxfields = n;
+ fieldmax = fp->fields + n;
+ }
+ field->beg = cp;
+ if (jp->delim == -1)
+ {
+ switch (sp[*(unsigned char*)cp])
+ {
+ case S_SPACE:
+ cp++;
+ break;
+ case S_WIDE:
+ tp = cp;
+ if (iswspace(mbchar(tp)))
+ {
+ cp = tp;
+ break;
+ }
+ /*FALLTHROUGH*/
+ default:
+ goto next;
+ }
+ fp->spaces = 1;
+ if (jp->mb)
+ for (;;)
+ {
+ switch (sp[*(unsigned char*)cp++])
+ {
+ case S_SPACE:
+ continue;
+ case S_WIDE:
+ tp = cp - 1;
+ if (iswspace(mbchar(tp)))
+ {
+ cp = tp;
+ continue;
+ }
+ break;
+ }
+ break;
+ }
+ else
+ while (sp[*(unsigned char*)cp++]==S_SPACE);
+ cp--;
+ }
+ next:
+ if (jp->mb)
+ {
+ for (;;)
+ {
+ tp = cp;
+ switch (n = sp[*(unsigned char*)cp++])
+ {
+ case 0:
+ continue;
+ case S_WIDE:
+ cp--;
+ n = mbchar(cp);
+ if (n == jp->delim)
+ {
+ n = S_DELIM;
+ break;
+ }
+ if (jp->delim == -1 && iswspace(n))
+ {
+ n = S_SPACE;
+ break;
+ }
+ continue;
+ }
+ break;
+ }
+ field->end = tp;
+ }
+ else
+ {
+ while (!(n = sp[*(unsigned char*)cp++]));
+ field->end = cp - 1;
+ }
+ field++;
+ } while (n != S_NL);
+ fp->nfields = field - fp->fields;
+ if ((n = fp->field) < fp->nfields)
{
- cp = fp->fieldlist[n];
+ cp = fp->fields[n].beg;
/* eliminate leading spaces */
if (fp->spaces)
{
- while (sp[*(unsigned char*)cp++]==S_SPACE);
+ if (jp->mb)
+ for (;;)
+ {
+ switch (sp[*(unsigned char*)cp++])
+ {
+ case S_SPACE:
+ continue;
+ case S_WIDE:
+ tp = cp - 1;
+ if (iswspace(mbchar(tp)))
+ {
+ cp = tp;
+ continue;
+ }
+ break;
+ }
+ break;
+ }
+ else
+ while (sp[*(unsigned char*)cp++]==S_SPACE);
cp--;
}
- fp->fieldlen = (fp->fieldlist[n+1]-cp)-1;
+ fp->fieldlen = fp->fields[n].end - cp;
return (unsigned char*)cp;
}
fp->fieldlen = 0;
return (unsigned char*)"";
}
+static unsigned char*
+_trace_getrec(Join_t* jp, int index, int discard)
+{
+ unsigned char* r;
+
+ r = getrec(jp, index, discard);
+ return r;
+}
+#define getrec _trace_getrec
+
#if DEBUG_TRACE
static unsigned char* u1,u2,u3;
#define getrec(p,n,d) (u1 = getrec(p, n, d), sfprintf(sfstdout, "[G%d#%d@%I*d:%-.8s]", __LINE__, n, sizeof(Sfoff_t), sftell(p->file[n].iop), u1), u1)
@@ -341,42 +473,78 @@ outfield(Join_t* jp, int index, register int n, int last)
register char* cpmax;
register int size;
register Sfio_t* iop = jp->outfile;
+ char* tp;
if (n < fp->nfields)
{
- cp = fp->fieldlist[n];
- cpmax = fp->fieldlist[n+1];
+ cp = fp->fields[n].beg;
+ cpmax = fp->fields[n].end + 1;
}
else
cp = 0;
- if ((n=jp->delim)<=0)
+ if ((n = jp->delim) == -1)
{
if (cp && fp->spaces)
{
+ register unsigned char* sp = jp->state;
+
/*eliminate leading spaces */
- while (jp->state[*(unsigned char*)cp++]==S_SPACE);
+ if (jp->mb)
+ for (;;)
+ {
+ switch (sp[*(unsigned char*)cp++])
+ {
+ case S_SPACE:
+ continue;
+ case S_WIDE:
+ tp = cp - 1;
+ if (iswspace(mbchar(tp)))
+ {
+ cp = tp;
+ continue;
+ }
+ break;
+ }
+ break;
+ }
+ else
+ while (sp[*(unsigned char*)cp++]==S_SPACE);
cp--;
}
n = ' ';
}
+ else if (jp->delimstr)
+ n = -1;
if (last)
n = '\n';
if (cp)
- size = cpmax-cp;
+ size = cpmax - cp;
else
size = 0;
- if (size<=1)
+ if (n == -1)
+ {
+ if (size<=1)
+ {
+ if (jp->nullfield && sfputr(iop, jp->nullfield, -1) < 0)
+ return -1;
+ }
+ else if (sfwrite(iop, cp, size) < 0)
+ return -1;
+ if (sfwrite(iop, jp->delimstr, jp->delimlen) < 0)
+ return -1;
+ }
+ else if (size <= 1)
{
if (!jp->nullfield)
- sfputc(iop,n);
- else if (sfputr(iop,jp->nullfield,n) < 0)
+ sfputc(iop, n);
+ else if (sfputr(iop, jp->nullfield, n) < 0)
return -1;
}
else
{
last = cp[size-1];
cp[size-1] = n;
- if (sfwrite(iop,cp,size) < 0)
+ if (sfwrite(iop, cp, size) < 0)
return -1;
cp[size-1] = last;
}
@@ -735,7 +903,18 @@ b_join(int argc, char** argv, void* context)
continue;
case 't':
jp->state[' '] = jp->state['\t'] = 0;
- n= *(unsigned char*)opt_info.arg;
+ if (jp->mb)
+ {
+ cp = opt_info.arg;
+ jp->delim = mbchar(cp);
+ if ((n = cp - opt_info.arg) > 1)
+ {
+ jp->delimlen = n;
+ jp->delimstr = opt_info.arg;
+ continue;
+ }
+ }
+ n = *(unsigned char*)opt_info.arg;
jp->state[n] = S_DELIM;
jp->delim = n;
continue;
@@ -802,7 +981,6 @@ b_join(int argc, char** argv, void* context)
sfsetbuf(jp->file[0].iop, jp->file[0].iop, SF_UNBOUND);
sfsetbuf(jp->file[1].iop, jp->file[1].iop, SF_UNBOUND);
}
- jp->state['\n'] = S_NL;
jp->outfile = sfstdout;
if (!jp->outlist)
jp->nullfield = 0;
diff --git a/usr/src/lib/libcmd/common/ln.c b/usr/src/lib/libcmd/common/ln.c
index 94da7be389..c898e7fb05 100644
--- a/usr/src/lib/libcmd/common/ln.c
+++ b/usr/src/lib/libcmd/common/ln.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/logname.c b/usr/src/lib/libcmd/common/logname.c
index 6ca5b02e0b..d23f694c7f 100644
--- a/usr/src/lib/libcmd/common/logname.c
+++ b/usr/src/lib/libcmd/common/logname.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/md5sum.c b/usr/src/lib/libcmd/common/md5sum.c
index c4cafa98c7..28a1c435e4 100644
--- a/usr/src/lib/libcmd/common/md5sum.c
+++ b/usr/src/lib/libcmd/common/md5sum.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/mkdir.c b/usr/src/lib/libcmd/common/mkdir.c
index 5ccce98221..491d990f64 100644
--- a/usr/src/lib/libcmd/common/mkdir.c
+++ b/usr/src/lib/libcmd/common/mkdir.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -27,7 +27,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: mkdir (AT&T Research) 2007-04-25 $\n]"
+"[-?\n@(#)$Id: mkdir (AT&T Research) 2009-12-03 $\n]"
USAGE_LICENSE
"[+NAME?mkdir - make directories]"
"[+DESCRIPTION?\bmkdir\b creates one or more directories. By "
@@ -43,6 +43,8 @@ USAGE_LICENSE
"dir\v where the \b-m\b mode option represents that option supplied to "
"the original invocation of \bmkdir\b, if any. Each dir operand that "
"names an existing directory shall be ignored without error.]"
+"[v:verbose?Print a message on the standard error for each created "
+ "directory.]"
"\n"
"\ndirectory ...\n"
"\n"
@@ -68,6 +70,7 @@ b_mkdir(int argc, char** argv, void* context)
register mode_t mask = 0;
register int mflag = 0;
register int pflag = 0;
+ register int vflag = 0;
char* name;
mode_t dmode;
struct stat st;
@@ -79,15 +82,18 @@ b_mkdir(int argc, char** argv, void* context)
{
case 0:
break;
- case 'p':
- pflag = 1;
- continue;
case 'm':
mflag = 1;
mode = strperm(arg = opt_info.arg, &opt_info.arg, mode);
if (*opt_info.arg)
error(ERROR_exit(0), "%s: invalid mode", arg);
continue;
+ case 'p':
+ pflag = 1;
+ continue;
+ case 'v':
+ vflag = 1;
+ continue;
case ':':
error(2, "%s", opt_info.arg);
continue;
@@ -149,6 +155,8 @@ b_mkdir(int argc, char** argv, void* context)
error(ERROR_system(0), "%s:", name);
break;
}
+ if (vflag)
+ error(0, "%s: directory created", name);
if (!(*arg = n) && (mode & (S_ISVTX|S_ISUID|S_ISGID)))
{
if (stat(name, &st))
@@ -164,6 +172,8 @@ b_mkdir(int argc, char** argv, void* context)
}
}
}
+ else if (vflag)
+ error(0, "%s: directory created", arg);
}
if (mask)
umask(mask);
diff --git a/usr/src/lib/libcmd/common/mkfifo.c b/usr/src/lib/libcmd/common/mkfifo.c
index 8692c0702d..f44e10aa01 100644
--- a/usr/src/lib/libcmd/common/mkfifo.c
+++ b/usr/src/lib/libcmd/common/mkfifo.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/mktemp.c b/usr/src/lib/libcmd/common/mktemp.c
index 2936a56e22..a9444045de 100644
--- a/usr/src/lib/libcmd/common/mktemp.c
+++ b/usr/src/lib/libcmd/common/mktemp.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -21,7 +21,7 @@
#pragma prototyped
static const char usage[] =
-"[-?\n@(#)$Id: mktemp (AT&T Research) 2009-06-19 $\n]"
+"[-?\n@(#)$Id: mktemp (AT&T Research) 2010-03-05 $\n]"
USAGE_LICENSE
"[+NAME?mktemp - make temporary file or directory]"
"[+DESCRIPTION?\bmktemp\b creates a temporary file with optional base "
@@ -34,12 +34,12 @@ USAGE_LICENSE
"{"
"[+*?Lower case to avoid clashes on case ignorant filesystems.]"
"[+*?Pseudo-random part to deter denial of service attacks.]"
- "[+*?Pseudo-random part is \a3-chars\a.\a3-chars\a to accomodate "
- "8.3 filesystems.]"
+ "[+*?Default pseudo-random part (no specific \bX...\b template) "
+ "formatted to accomodate 8.3 filesystems.]"
"}"
-"[+?A consecutive sequence of \bX\b's in \aprefix\a is replaced by the "
- "pseudo-random part. If there are no \bX\b's then the pseudo-random part "
- "is appended to the prefix.]"
+"[+?A consecutive trailing sequence of \bX\b's in \aprefix\a is replaced "
+ "by the pseudo-random part. If there are no \bX\b's then the "
+ "pseudo-random part is appended to the prefix.]"
"[d:directory?Create a directory instead of a regular file.]"
"[m:mode]:[mode?Set the mode of the created temporary to \amode\a. "
"\amode\a is symbolic or octal mode as in \bchmod\b(1). Relative modes "
@@ -47,10 +47,13 @@ USAGE_LICENSE
"[p:default?Use \adirectory\a if the \bTMPDIR\b environment variable is "
"not defined. Implies \b--tmp\b.]:[directory]"
"[q:quiet?Suppress file and directory error diagnostics.]"
+"[R:regress?The pseudo random generator is seeded with \aseed\a instead "
+ "of process/system specific transient data. Use for testing "
+ "only. A seed of \b0\b is silently changed to \b1\b.]#[seed]"
"[t:tmp|temporary-directory?Create a path rooted in a temporary "
"directory.]"
"[u:unsafe|dry-run?Check for file/directory existence but do not create. "
- "Who would want to do that.]"
+ "Use this for testing only.]"
"\n"
"\n[ prefix ]\n"
"\n"
@@ -106,6 +109,10 @@ b_mktemp(int argc, char** argv, void* context)
unsafe = 1;
fdp = 0;
continue;
+ case 'R':
+ if (!pathtemp(NiL, 0, opt_info.arg, "/seed", NiL))
+ error(2, "%s: regression test initializtion failed", opt_info.arg);
+ continue;
case ':':
error(2, "%s", opt_info.arg);
continue;
diff --git a/usr/src/lib/libcmd/common/mv.c b/usr/src/lib/libcmd/common/mv.c
index c84c1092bd..1055a9c553 100644
--- a/usr/src/lib/libcmd/common/mv.c
+++ b/usr/src/lib/libcmd/common/mv.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/paste.c b/usr/src/lib/libcmd/common/paste.c
index 71da3f472a..0c20109dda 100644
--- a/usr/src/lib/libcmd/common/paste.c
+++ b/usr/src/lib/libcmd/common/paste.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -29,7 +29,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: paste (AT&T Research) 2008-04-01 $\n]"
+"[-?\n@(#)$Id: paste (AT&T Research) 2009-11-28 $\n]"
USAGE_LICENSE
"[+NAME?paste - merge lines of files]"
"[+DESCRIPTION?\bpaste\b concatenates the corresponding lines of a "
@@ -69,18 +69,23 @@ USAGE_LICENSE
"[+SEE ALSO?\bcut\b(1), \bcat\b(1), \bjoin\b(1)]"
;
-
#include <cmd.h>
+typedef struct Delim_s
+{
+ const char* chr;
+ size_t len;
+} Delim_t;
+
/*
* paste the lines of the <nstreams> defined in <streams> and put results
* to <out>
*/
-static int paste(int nstream,Sfio_t* streams[],Sfio_t *out, register const char *delim,int dlen)
+static int paste(int nstream,Sfio_t* streams[],Sfio_t *out, register const char *delim, int dsiz, int dlen, Delim_t* mp)
{
register const char *cp;
- register int d, n, more=1;
+ register int d, n, i, z, more=1;
register Sfio_t *fp;
do
{
@@ -95,14 +100,21 @@ static int paste(int nstream,Sfio_t* streams[],Sfio_t *out, register const char
more = 1;
else if(!more) /* first stream with output */
{
- if(dlen==1)
+ if(dsiz == 1)
sfnputc(out, *delim, n);
else if(dlen>0)
{
for(d=n; d>dlen; d-=dlen)
- sfwrite(out,delim,dlen);
+ sfwrite(out,delim,dsiz);
if(d)
- sfwrite(out,delim,d);
+ {
+ if(mp)
+ for (i = z = 0; i < d; i++)
+ z += mp[i].len;
+ else
+ z = d;
+ sfwrite(out,delim,z);
+ }
}
more = n+1;
}
@@ -117,29 +129,28 @@ static int paste(int nstream,Sfio_t* streams[],Sfio_t *out, register const char
register int c;
if(d >= dlen)
d = 0;
- if(c=delim[d++])
+ if(mp)
+ sfwrite(out,mp[d].chr,mp[d].len);
+ else if(c=delim[d])
sfputc(out,c);
+ d++;
}
else if(n==nstream && !streams[n-1] && more)
sfputc(out,'\n');
}
- }
- while(more);
+ } while(more);
return(0);
}
/*
* Handles paste -s, for file <in> to file <out> using delimiters <delim>
*/
-static int spaste(Sfio_t *in,register Sfio_t* out,register const char *delim,int dlen)
+static int spaste(Sfio_t *in,register Sfio_t* out,register const char *delim,int dsiz,int dlen,Delim_t* mp)
{
register const char *cp;
register int d=0;
- if(cp = sfgetr(in,'\n',0))
- {
- if(sfwrite(out,cp,sfvalue(in)-1) < 0)
- return(-1);
- }
+ if((cp = sfgetr(in,'\n',0)) && sfwrite(out,cp,sfvalue(in)-1) < 0)
+ return(-1);
while(cp=sfgetr(in, '\n',0))
{
if(dlen)
@@ -147,8 +158,11 @@ static int spaste(Sfio_t *in,register Sfio_t* out,register const char *delim,int
register int c;
if(d >= dlen)
d = 0;
- if(c=delim[d++])
+ if(mp)
+ sfwrite(out,mp[d].chr,mp[d].len);
+ else if(c=delim[d])
sfputc(out,c);
+ d++;
}
if(sfwrite(out,cp,sfvalue(in)-1) < 0)
return(-1);
@@ -163,7 +177,9 @@ b_paste(int argc,register char *argv[], void* context)
register int n, sflag=0;
register Sfio_t *fp, **streams;
register char *cp, *delim;
- int dlen;
+ char *ep;
+ Delim_t *mp;
+ int dlen, dsiz;
char defdelim[2];
cmdinit(argc, argv, context, ERROR_CATALOG, 0);
@@ -186,12 +202,38 @@ b_paste(int argc,register char *argv[], void* context)
argv += opt_info.index;
if(error_info.errors)
error(ERROR_usage(2),"%s", optusage(NiL));
- if(delim)
- dlen = stresc(delim);
- else
+ if(!delim || !*delim)
{
- *(delim = defdelim) = '\t';
- dlen = 1;
+ delim = defdelim;
+ delim[0] = '\t';
+ delim[1] = 0;
+ }
+ dlen = dsiz = stresc(delim);
+ mp = 0;
+ if (mbwide())
+ {
+ cp = delim;
+ ep = delim + dlen;
+ dlen = 0;
+ while (cp < ep)
+ {
+ mbchar(cp);
+ dlen++;
+ }
+ if(dlen < dsiz)
+ {
+ if (!(mp = newof(0, Delim_t, dlen, 0)))
+ error(ERROR_system(1), "out of space");
+ cp = delim;
+ dlen = 0;
+ while (cp < ep)
+ {
+ mp[dlen].chr = cp;
+ mbchar(cp);
+ mp[dlen].len = cp - mp[dlen].chr;
+ dlen++;
+ }
+ }
}
if(cp = *argv)
{
@@ -214,7 +256,7 @@ b_paste(int argc,register char *argv[], void* context)
error(ERROR_system(0),"%s: cannot open",cp);
if(fp && sflag)
{
- if(spaste(fp,sfstdout,delim,dlen) < 0)
+ if(spaste(fp,sfstdout,delim,dsiz,dlen,mp) < 0)
error(ERROR_system(0),"write failed");
if(fp!=sfstdin)
sfclose(fp);
@@ -224,12 +266,13 @@ b_paste(int argc,register char *argv[], void* context)
} while(cp= *argv++);
if(!sflag)
{
- if(error_info.errors==0 && paste(n,streams,sfstdout,delim,dlen) < 0)
+ if(error_info.errors==0 && paste(n,streams,sfstdout,delim,dsiz,dlen,mp) < 0)
error(ERROR_system(0),"write failed");
while(--n>=0)
if((fp=streams[n]) && fp!=sfstdin)
sfclose(fp);
}
+ if (mp)
+ free(mp);
return(error_info.errors);
}
-
diff --git a/usr/src/lib/libcmd/common/pathchk.c b/usr/src/lib/libcmd/common/pathchk.c
index ef27bd2788..6fafac4feb 100644
--- a/usr/src/lib/libcmd/common/pathchk.c
+++ b/usr/src/lib/libcmd/common/pathchk.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -230,7 +230,6 @@ static int pathchk(char* path, int mode)
int
b_pathchk(int argc, char** argv, void* context)
{
- register int n;
register int mode = 0;
register char* s;
diff --git a/usr/src/lib/libcmd/common/pids.c b/usr/src/lib/libcmd/common/pids.c
index 432b46f345..e88ac96ce3 100644
--- a/usr/src/lib/libcmd/common/pids.c
+++ b/usr/src/lib/libcmd/common/pids.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/rev.c b/usr/src/lib/libcmd/common/rev.c
index c67a6a4c9f..5f0a98f4c7 100644
--- a/usr/src/lib/libcmd/common/rev.c
+++ b/usr/src/lib/libcmd/common/rev.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/rev.h b/usr/src/lib/libcmd/common/rev.h
index c35fbc4ead..2d37ede916 100644
--- a/usr/src/lib/libcmd/common/rev.h
+++ b/usr/src/lib/libcmd/common/rev.h
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/revlib.c b/usr/src/lib/libcmd/common/revlib.c
index a2407f122b..90b44a0128 100644
--- a/usr/src/lib/libcmd/common/revlib.c
+++ b/usr/src/lib/libcmd/common/revlib.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/rm.c b/usr/src/lib/libcmd/common/rm.c
index fbd21583fb..dfcb13f3fc 100644
--- a/usr/src/lib/libcmd/common/rm.c
+++ b/usr/src/lib/libcmd/common/rm.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -68,7 +68,7 @@ USAGE_LICENSE
#include <cmd.h>
#include <ls.h>
-#include <fts.h>
+#include <fts_fix.h>
#include <fs3d.h>
#define RM_ENTRY 1
diff --git a/usr/src/lib/libcmd/common/rmdir.c b/usr/src/lib/libcmd/common/rmdir.c
index c7acb197f9..b57eebb60b 100644
--- a/usr/src/lib/libcmd/common/rmdir.c
+++ b/usr/src/lib/libcmd/common/rmdir.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/stty.c b/usr/src/lib/libcmd/common/stty.c
index a7754f447c..1a696a78b4 100644
--- a/usr/src/lib/libcmd/common/stty.c
+++ b/usr/src/lib/libcmd/common/stty.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/sum.c b/usr/src/lib/libcmd/common/sum.c
index 8b16197863..9f26249153 100644
--- a/usr/src/lib/libcmd/common/sum.c
+++ b/usr/src/lib/libcmd/common/sum.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/sync.c b/usr/src/lib/libcmd/common/sync.c
index 863211c225..16ccfeb718 100644
--- a/usr/src/lib/libcmd/common/sync.c
+++ b/usr/src/lib/libcmd/common/sync.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/tail.c b/usr/src/lib/libcmd/common/tail.c
index ca128f2938..b65ec1a9f3 100644
--- a/usr/src/lib/libcmd/common/tail.c
+++ b/usr/src/lib/libcmd/common/tail.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -28,7 +28,7 @@
*/
static const char usage[] =
-"+[-?\n@(#)$Id: tail (AT&T Research) 2009-08-25 $\n]"
+"+[-?\n@(#)$Id: tail (AT&T Research) 2010-03-23 $\n]"
USAGE_LICENSE
"[+NAME?tail - output trailing portion of one or more files ]"
"[+DESCRIPTION?\btail\b copies one or more input files to standard output "
@@ -135,7 +135,8 @@ struct Tail_s
Tail_t* next;
char* name;
Sfio_t* sp;
- Sfoff_t last;
+ Sfoff_t cur;
+ Sfoff_t end;
unsigned long expire;
long dev;
long ino;
@@ -324,7 +325,7 @@ init(Tail_t* tp, Sfoff_t number, int delim, int flags, const char** format)
}
}
}
- tp->last = offset;
+ tp->cur = tp->end = offset;
if (flags & LOG)
{
if (fstat(sffileno(tp->sp), &st))
@@ -410,7 +411,6 @@ b_tail(int argc, char** argv, void* context)
char* s;
char* t;
char* r;
- char* e;
char* file;
Sfoff_t offset;
Sfoff_t number = DEFAULT;
@@ -418,6 +418,7 @@ b_tail(int argc, char** argv, void* context)
struct stat st;
const char* format = header_fmt+1;
ssize_t z;
+ ssize_t w;
Sfio_t* op;
register Tail_t* fp;
register Tail_t* pp;
@@ -514,7 +515,7 @@ b_tail(int argc, char** argv, void* context)
flags |= TIMEOUT;
timeout = strelapsed(opt_info.arg, &s, 1);
if (*s)
- error(ERROR_exit(1), "%s: invalid elapsed time", opt_info.arg);
+ error(ERROR_exit(1), "%s: invalid elapsed time [%s]", opt_info.arg, s);
continue;
case 'v':
flags |= VERBOSE;
@@ -632,40 +633,30 @@ b_tail(int argc, char** argv, void* context)
return error_info.errors != 0;
pp->next = 0;
hp = 0;
+ n = 1;
while (fp = files)
{
- if (sfsync(sfstdout))
- error(ERROR_system(1), "write error");
-#if 0
- sleep(1);
-#else
- {
- struct timespec rqt = { 0L, 1000000000L/4L };
- (void)nanosleep(&rqt, NULL);
- }
-#endif
- n = 0;
+ if (n)
+ n = 0;
+ else
+ sleep(1);
pp = 0;
while (fp)
{
if (fstat(sffileno(fp->sp), &st))
error(ERROR_system(0), "%s: cannot stat", fp->name);
- else if (st.st_size > fp->last || fp->fifo)
+ else if (fp->fifo || fp->end < st.st_size)
{
n = 1;
if (timeout)
fp->expire = NOW + timeout;
- z = fp->fifo ? SF_UNBOUND : st.st_size - fp->last;
+ z = fp->fifo ? SF_UNBOUND : st.st_size - fp->cur;
i = 0;
if ((s = sfreserve(fp->sp, z, SF_LOCKR)) || (z = sfvalue(fp->sp)) && (s = sfreserve(fp->sp, z, SF_LOCKR)) && (i = 1))
{
- if (fp->fifo)
- z = sfvalue(fp->sp);
- r = 0;
- for (e = (t = s) + z; t < e; t++)
- if (*t == '\n')
- r = t;
- if (r || i && (r = e))
+ z = sfvalue(fp->sp);
+ for (r = s + z; r > s && *(r - 1) != '\n'; r--);
+ if ((w = r - s) || i && (w = z))
{
if ((flags & (HEADERS|VERBOSE)) && hp != fp)
{
@@ -673,13 +664,13 @@ b_tail(int argc, char** argv, void* context)
sfprintf(sfstdout, format, fp->name);
format = header_fmt;
}
- z = r - s + 1;
- fp->last += z;
- sfwrite(sfstdout, s, z);
+ fp->cur += w;
+ sfwrite(sfstdout, s, w);
}
else
- z = 0;
- sfread(fp->sp, s, z);
+ w = 0;
+ sfread(fp->sp, s, w);
+ fp->end += w;
}
goto next;
}
@@ -707,14 +698,16 @@ b_tail(int argc, char** argv, void* context)
sfclose(fp->sp);
if (pp)
pp = pp->next = fp->next;
- else if (!(files = files->next))
- return error_info.errors != 0;
+ else
+ files = files->next;
fp = fp->next;
continue;
next:
pp = fp;
fp = fp->next;
}
+ if (sfsync(sfstdout))
+ error(ERROR_system(1), "write error");
}
}
else
diff --git a/usr/src/lib/libcmd/common/tee.c b/usr/src/lib/libcmd/common/tee.c
index 246b5af9c3..89eb57457f 100644
--- a/usr/src/lib/libcmd/common/tee.c
+++ b/usr/src/lib/libcmd/common/tee.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -111,11 +111,9 @@ b_tee(int argc, register char** argv, void* context)
{
register Tee_t* tp = 0;
register int oflag = O_WRONLY|O_TRUNC|O_CREAT|O_BINARY;
- register int n;
register int* hp;
register char* cp;
int line;
- Sfdisc_t tee_disc;
if (argc <= 0)
{
diff --git a/usr/src/lib/libcmd/common/tty.c b/usr/src/lib/libcmd/common/tty.c
index b257290e50..684838578e 100644
--- a/usr/src/lib/libcmd/common/tty.c
+++ b/usr/src/lib/libcmd/common/tty.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/uname.c b/usr/src/lib/libcmd/common/uname.c
index 74cbd39ebe..88ceec400d 100644
--- a/usr/src/lib/libcmd/common/uname.c
+++ b/usr/src/lib/libcmd/common/uname.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -34,7 +34,7 @@ USAGE_LICENSE
"[+DESCRIPTION?By default \buname\b writes the operating system name to"
" standard output. When options are specified, one or more"
" system characteristics are written to standard output, space"
-" separated, on a single line. When more than one option is specifed"
+" separated, on a single line. When more than one option is specified"
" the output is in the order specfied by the \b-A\b option below."
" Unsupported option values are listed as \a[option]]\a. If any unknown"
" options are specified then the local \b/usr/bin/uname\b is called.]"
diff --git a/usr/src/lib/libcmd/common/uniq.c b/usr/src/lib/libcmd/common/uniq.c
index bf87a2a15a..78fee1c603 100644
--- a/usr/src/lib/libcmd/common/uniq.c
+++ b/usr/src/lib/libcmd/common/uniq.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -26,7 +26,7 @@
*/
static const char usage[] =
-"[-n?\n@(#)$Id: uniq (AT&T Research) 2009-08-10 $\n]"
+"[-n?\n@(#)$Id: uniq (AT&T Research) 2009-11-28 $\n]"
USAGE_LICENSE
"[+NAME?uniq - Report or filter out repeated lines in a file]"
"[+DESCRIPTION?\buniq\b reads the input, compares adjacent lines, and "
@@ -84,8 +84,8 @@ typedef int (*Compare_f)(const char*, const char*, size_t);
static int uniq(Sfio_t *fdin, Sfio_t *fdout, int fields, int chars, int width, int mode, int* all, Compare_f compare)
{
- register int n, f, outsize=0;
- register char *cp, *ep, *bufp, *outp;
+ register int n, f, outsize=0, mb = mbwide();
+ register char *cp, *ep, *mp, *bufp, *outp;
char *orecp, *sbufp=0, *outbuff;
int reclen,oreclen= -1,count=0,cwidth=0,sep,next;
if(mode&C_FLAG)
@@ -102,30 +102,50 @@ static int uniq(Sfio_t *fdin, Sfio_t *fdout, int fields, int chars, int width, i
}
else
n = 0;
- if(n)
+ if (n)
{
cp = bufp;
ep = cp + n;
- if(f=fields)
- while(f-->0 && cp<ep) /* skip over fields */
+ if (f = fields)
+ while (f-->0 && cp<ep) /* skip over fields */
{
- while(cp<ep && *cp==' ' || *cp=='\t')
+ while (cp<ep && *cp==' ' || *cp=='\t')
cp++;
- while(cp<ep && *cp!=' ' && *cp!='\t')
+ while (cp<ep && *cp!=' ' && *cp!='\t')
cp++;
}
- if(chars)
- cp += chars;
- if((reclen = n - (cp-bufp)) <=0)
+ if (chars)
+ {
+ if (mb)
+ for (f = chars; f; f--)
+ mbchar(cp);
+ else
+ cp += chars;
+ }
+ if ((reclen = n - (cp - bufp)) <= 0)
{
reclen = 1;
- cp = bufp + sfvalue(fdin)-1;
+ cp = bufp + n - 1;
+ }
+ else if (width >= 0 && width < reclen)
+ {
+ if (mb)
+ {
+ reclen = 0;
+ mp = cp;
+ while (reclen < width && mp < ep)
+ {
+ reclen++;
+ mbchar(mp);
+ }
+ reclen = mp - cp;
+ }
+ else
+ reclen = width;
}
- else if(width >= 0 && width < reclen)
- reclen = width;
}
else
- reclen=-2;
+ reclen = -2;
if(reclen==oreclen && (!reclen || !(*compare)(cp,orecp,reclen)))
{
count++;
diff --git a/usr/src/lib/libcmd/common/vmstate.c b/usr/src/lib/libcmd/common/vmstate.c
new file mode 100644
index 0000000000..79722972d2
--- /dev/null
+++ b/usr/src/lib/libcmd/common/vmstate.c
@@ -0,0 +1,163 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
+* and is licensed under the *
+* Common Public License, Version 1.0 *
+* by AT&T Intellectual Property *
+* *
+* A copy of the License is available at *
+* http://www.opensource.org/licenses/cpl1.0.txt *
+* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
+* *
+* Information and Software Systems Research *
+* AT&T Research *
+* Florham Park NJ *
+* *
+* Glenn Fowler <gsf@research.att.com> *
+* David Korn <dgk@research.att.com> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+#define FORMAT "region=%(region)p size=%(size)d segments=%(segments)d busy=(%(busy_size)d,%(busy_blocks)d,%(busy_max)d) free=(%(free_size)d,%(free_blocks)d,%(free_max)d)"
+
+static const char usage[] =
+"[-?\n@(#)$Id: vmstate (AT&T Research) 2010-03-05 $\n]"
+USAGE_LICENSE
+"[+NAME?vmstate - list the calling process vmalloc region state]"
+"[+DESCRIPTION?When invoked as a shell builtin, \bvmstate\b lists the "
+ "calling process \bvmalloc\b(3) state for all regions.]"
+"[f:format?List the ids specified by \aformat\a. \aformat\a follows "
+ "\bprintf\b(3) conventions, except that \bsfio\b(3) inline ids are used "
+ "instead of arguments: "
+ "%[-+]][\awidth\a[.\aprecis\a[.\abase\a]]]]]](\aid\a)\achar\a. The "
+ "supported \aid\as are:]:[format:=" FORMAT "]"
+ "{"
+ "[+size?The total region size.]"
+ "[+segments?The number of segments in the region.]"
+ "[+busy_size?The total busy block size.]"
+ "[+busy_blocks?The number of busy blocks.]"
+ "[+busy_max?The maximum busy block size.]"
+ "[+free_size?The total free block size.]"
+ "[+free_blocks?The number of free blocks.]"
+ "[+free_max?The maximum free block size.]"
+ "}"
+"[+SEE ALSO?\bvmalloc\b(3)]"
+;
+
+#include <cmd.h>
+#include <vmalloc.h>
+
+typedef struct State_s
+{
+ char* format;
+ Vmalloc_t* vm;
+ Vmstat_t vs;
+ unsigned int regions;
+ Vmalloc_t* region[256];
+} State_t;
+
+/*
+ * sfkeyprintf() lookup
+ * handle==0 for heading
+ */
+
+static int
+key(void* handle, Sffmt_t* fp, const char* arg, char** ps, Sflong_t* pn)
+{
+ register State_t* state = (State_t*)handle;
+ register char* s;
+
+ if (!(s = fp->t_str) || streq(s, "size"))
+ *pn = state->vs.extent;
+ else if (streq(s, "region"))
+ *pn = integralof(state->vm);
+ else if (streq(s, "segments"))
+ *pn = state->vs.n_seg;
+ else if (streq(s, "busy_size"))
+ *pn = state->vs.s_busy;
+ else if (streq(s, "busy_blocks"))
+ *pn = state->vs.n_busy;
+ else if (streq(s, "busy_max"))
+ *pn = state->vs.m_busy;
+ else if (streq(s, "free_size"))
+ *pn = state->vs.s_free;
+ else if (streq(s, "free_blocks"))
+ *pn = state->vs.n_free;
+ else if (streq(s, "free_max"))
+ *pn = state->vs.m_free;
+ else if (streq(s, "format"))
+ *ps = (char*)state->format;
+ else
+ {
+ error(2, "%s: unknown format identifier", s);
+ return 0;
+ }
+ return 1;
+}
+
+static int
+visit(Vmalloc_t* vm, void* addr, size_t size, Vmdisc_t* disc, void* handle)
+{
+ State_t* state = (State_t*)handle;
+ Vmstat_t vs;
+
+ if (vm != state->vm)
+ {
+ state->vm = vm;
+ if (state->regions < elementsof(state->region))
+ state->region[state->regions++] = vm;
+ }
+ return 0;
+}
+
+int
+b_vmstate(int argc, char** argv, void* context)
+{
+ register int i;
+ State_t state;
+
+ memset(&state, 0, sizeof(state));
+ cmdinit(argc, argv, context, ERROR_CATALOG, 0);
+ for (;;)
+ {
+ switch (optget(argv, usage))
+ {
+ case 'f':
+ state.format = opt_info.arg;
+ continue;
+ case '?':
+ error(ERROR_USAGE|4, "%s", opt_info.arg);
+ continue;
+ case ':':
+ error(2, "%s", opt_info.arg);
+ continue;
+ }
+ break;
+ }
+ argv += opt_info.index;
+ if (error_info.errors || *argv)
+ error(ERROR_USAGE|4, "%s", optusage(NiL));
+ if (!state.format)
+ state.format = FORMAT;
+
+ /*
+ * the walk must do no allocations because it locks the regions
+ */
+
+ vmwalk(NiL, visit, &state);
+
+ /*
+ * now we can compute and list the state of each region
+ */
+
+ for (i = 0; i < state.regions; i++)
+ {
+ state.vm = state.region[i];
+ vmstat(state.vm, &state.vs);
+ sfkeyprintf(sfstdout, &state, state.format, key, NiL);
+ sfprintf(sfstdout, "\n");
+ }
+ return 0;
+}
diff --git a/usr/src/lib/libcmd/common/wc.c b/usr/src/lib/libcmd/common/wc.c
index 4203fffd3a..7c988872db 100644
--- a/usr/src/lib/libcmd/common/wc.c
+++ b/usr/src/lib/libcmd/common/wc.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -27,7 +27,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: wc (AT&T Research) 2000-08-11 $\n]"
+"[-?\n@(#)$Id: wc (AT&T Research) 2009-11-28 $\n]"
USAGE_LICENSE
"[+NAME?wc - print the number of bytes, words, and lines in files]"
"[+DESCRIPTION?\bwc\b reads one or more input files and, by default, "
diff --git a/usr/src/lib/libcmd/common/wc.h b/usr/src/lib/libcmd/common/wc.h
index e23a1ec2c4..cb2a51ed5f 100644
--- a/usr/src/lib/libcmd/common/wc.h
+++ b/usr/src/lib/libcmd/common/wc.h
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
diff --git a/usr/src/lib/libcmd/common/wclib.c b/usr/src/lib/libcmd/common/wclib.c
index c7ce5a338a..77732723ab 100644
--- a/usr/src/lib/libcmd/common/wclib.c
+++ b/usr/src/lib/libcmd/common/wclib.c
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -52,7 +52,7 @@
#define eol(c) ((c)&WC_NL)
#define mbc(c) ((c)&WC_MB)
#define spc(c) ((c)&WC_SP)
-#define mbwc(w,p,n) (*ast.mb_towc)(&w,(char*)p,n)
+#define mb2wc(w,p,n) (*ast.mb_towc)(&w,(char*)p,n)
Wc_t* wc_init(int mode)
{
@@ -163,6 +163,7 @@ int wc_count(Wc_t *wp, Sfio_t *fd, const char* file)
{
register char* type = wp->type;
register unsigned char* cp;
+ register Sfoff_t nbytes;
register Sfoff_t nchars;
register Sfoff_t nwords;
register Sfoff_t nlines;
@@ -179,14 +180,14 @@ int wc_count(Wc_t *wp, Sfio_t *fd, const char* file)
unsigned char side[32];
sfset(fd,SF_WRITE,1);
- nlines = nwords = nchars = 0;
+ nlines = nwords = nchars = nbytes = 0;
wp->longest = 0;
if (wp->mb < 0 && (wp->mode & (WC_MBYTE|WC_WORDS)))
{
cp = buff = endbuff = 0;
for (;;)
{
- if (cp >= endbuff || (n = mbwc(x, cp, endbuff-cp)) < 0)
+ if (cp >= endbuff || (n = mb2wc(x, cp, endbuff-cp)) < 0)
{
if ((o = endbuff-cp) < sizeof(side))
{
@@ -205,6 +206,7 @@ int wc_count(Wc_t *wp, Sfio_t *fd, const char* file)
wp->longest = nchars - longest;
break;
}
+ nbytes += n;
if ((c = sizeof(side) - o) > n)
c = n;
if (c)
@@ -247,6 +249,8 @@ int wc_count(Wc_t *wp, Sfio_t *fd, const char* file)
}
nchars++;
}
+ if (!(wp->mode & WC_MBYTE))
+ nchars = nbytes;
}
else if (!wp->mb && !(wp->mode & WC_LONGEST) || wp->mb > 0 && !(wp->mode & (WC_MBYTE|WC_WORDS|WC_LONGEST)))
{
@@ -343,6 +347,7 @@ int wc_count(Wc_t *wp, Sfio_t *fd, const char* file)
xspace = iswspace(0xa0) || iswspace(0x85);
while ((cp = buff = (unsigned char*)sfreserve(fd, SF_UNBOUND, 0)) && (c = sfvalue(fd)) > 0)
{
+ nbytes += c;
nchars += c;
start = cp-lineoff;
/* check to see whether first character terminates word */
@@ -487,7 +492,10 @@ int wc_count(Wc_t *wp, Sfio_t *fd, const char* file)
nlines++;
else if (!lasttype)
nwords++;
- nchars -= adjust;
+ if (wp->mode & WC_MBYTE)
+ nchars -= adjust;
+ else
+ nchars = nbytes;
}
wp->chars = nchars;
wp->words = nwords;
diff --git a/usr/src/lib/libcmd/i386/include/ast/cmd.h b/usr/src/lib/libcmd/i386/include/ast/cmd.h
index f149f8d275..e064222a77 100644
--- a/usr/src/lib/libcmd/i386/include/ast/cmd.h
+++ b/usr/src/lib/libcmd/i386/include/ast/cmd.h
@@ -3,7 +3,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -68,8 +68,6 @@
#include <dlldefs.h>
-typedef int (*Shbltin_f) __PROTO__((int, char**, __V_*));
-
#else
extern __MANGLE__ int CMD_STANDALONE __PROTO__((int, char**, __V_*));
@@ -135,7 +133,7 @@ main __PARAM__((int argc, char** argv), (argc, argv)) __OTORP__(int argc; char**
if (fun = (Shbltin_f)dlsym(dll, buf))
break;
}
- if (dll = dllfind("cmd", NiL, RTLD_LAZY))
+ if (dll = dllplug(NiL, "cmd", NiL, RTLD_LAZY, NiL, 0))
{
if (fun = (Shbltin_f)dlsym(dll, buf + 1))
break;
diff --git a/usr/src/lib/libcmd/i386/include/ast/cmdext.h b/usr/src/lib/libcmd/i386/include/ast/cmdext.h
index 416a3dc5a5..978322e2d3 100644
--- a/usr/src/lib/libcmd/i386/include/ast/cmdext.h
+++ b/usr/src/lib/libcmd/i386/include/ast/cmdext.h
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -72,5 +72,6 @@ extern __MANGLE__ int b_tee __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_tty __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_uname __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_uniq __PROTO__((int, char**, __V_*));
+extern __MANGLE__ int b_vmstate __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_wc __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_xgrep __PROTO__((int, char**, __V_*));
diff --git a/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/ids b/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/ids
index 052b939476..9ebd27114b 100644
--- a/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/ids
+++ b/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/ids
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_i386_32bit/src/lib/libcmd/features/ids by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_i386_32bit/src/lib/libcmd/features/ids by iffe version 2009-12-04 : : */
#ifndef _def_ids_cmd
#define _def_ids_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_i386_32bit/arch/sol11.i386/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_i386_32bit/arch/sol11.i386/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_endgrent 1 /* endgrent() in default lib(s) */
#define _lib_getgrent 1 /* getgrent() in default lib(s) */
diff --git a/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/sockets b/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/sockets
index e9c9c9e59e..6fb96ec2c6 100644
--- a/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/sockets
+++ b/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/sockets
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_i386_32bit/src/lib/libcmd/features/sockets by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_i386_32bit/src/lib/libcmd/features/sockets by iffe version 2009-12-04 : : */
#ifndef _def_sockets_cmd
#define _def_sockets_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_i386_32bit/arch/sol11.i386/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_i386_32bit/arch/sol11.i386/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _sys_socket 1 /* #include <sys/socket.h> ok */
#define _hdr_arpa_inet 1 /* #include <arpa/inet.h> ok */
diff --git a/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/symlink b/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/symlink
index b237c3896c..c4a03de88a 100644
--- a/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/symlink
+++ b/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/symlink
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_i386_32bit/src/lib/libcmd/features/symlink by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_i386_32bit/src/lib/libcmd/features/symlink by iffe version 2009-12-04 : : */
#ifndef _def_symlink_cmd
#define _def_symlink_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_i386_32bit/arch/sol11.i386/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_i386_32bit/arch/sol11.i386/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_lchown 1 /* lchown implemented */
#endif
diff --git a/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/utsname b/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/utsname
index 88adc91c75..f66b30e21d 100644
--- a/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/utsname
+++ b/usr/src/lib/libcmd/i386/src/lib/libcmd/FEATURE/utsname
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_i386_32bit/src/lib/libcmd/features/utsname by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_i386_32bit/src/lib/libcmd/features/utsname by iffe version 2009-12-04 : : */
#ifndef _def_utsname_cmd
#define _def_utsname_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_i386_32bit/arch/sol11.i386/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_i386_32bit/arch/sol11.i386/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_getdomainname 1 /* getdomainname() in default lib(s) */
#define _lib_gethostid 1 /* gethostid() in default lib(s) */
diff --git a/usr/src/lib/libcmd/mapfile-vers b/usr/src/lib/libcmd/mapfile-vers
index 9e59e44cad..508c396112 100644
--- a/usr/src/lib/libcmd/mapfile-vers
+++ b/usr/src/lib/libcmd/mapfile-vers
@@ -20,8 +20,7 @@
#
#
-# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
-# Use is subject to license terms.
+# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
#
#
@@ -90,6 +89,7 @@ SUNWprivate_1.1 {
b_uname;
b_uniq;
b_wc;
+ b_vmstate;
b_xgrep;
local:
*;
diff --git a/usr/src/lib/libcmd/sparc/include/ast/cmd.h b/usr/src/lib/libcmd/sparc/include/ast/cmd.h
index f149f8d275..e064222a77 100644
--- a/usr/src/lib/libcmd/sparc/include/ast/cmd.h
+++ b/usr/src/lib/libcmd/sparc/include/ast/cmd.h
@@ -3,7 +3,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -68,8 +68,6 @@
#include <dlldefs.h>
-typedef int (*Shbltin_f) __PROTO__((int, char**, __V_*));
-
#else
extern __MANGLE__ int CMD_STANDALONE __PROTO__((int, char**, __V_*));
@@ -135,7 +133,7 @@ main __PARAM__((int argc, char** argv), (argc, argv)) __OTORP__(int argc; char**
if (fun = (Shbltin_f)dlsym(dll, buf))
break;
}
- if (dll = dllfind("cmd", NiL, RTLD_LAZY))
+ if (dll = dllplug(NiL, "cmd", NiL, RTLD_LAZY, NiL, 0))
{
if (fun = (Shbltin_f)dlsym(dll, buf + 1))
break;
diff --git a/usr/src/lib/libcmd/sparc/include/ast/cmdext.h b/usr/src/lib/libcmd/sparc/include/ast/cmdext.h
index 416a3dc5a5..978322e2d3 100644
--- a/usr/src/lib/libcmd/sparc/include/ast/cmdext.h
+++ b/usr/src/lib/libcmd/sparc/include/ast/cmdext.h
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -72,5 +72,6 @@ extern __MANGLE__ int b_tee __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_tty __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_uname __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_uniq __PROTO__((int, char**, __V_*));
+extern __MANGLE__ int b_vmstate __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_wc __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_xgrep __PROTO__((int, char**, __V_*));
diff --git a/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/ids b/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/ids
index 19cfcffdf3..bd025699c4 100644
--- a/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/ids
+++ b/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/ids
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_32bit/src/lib/libcmd/features/ids by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_32bit/src/lib/libcmd/features/ids by iffe version 2009-12-04 : : */
#ifndef _def_ids_cmd
#define _def_ids_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_32bit/arch/sol11.sun4/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_32bit/arch/sol11.sun4/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_endgrent 1 /* endgrent() in default lib(s) */
#define _lib_getgrent 1 /* getgrent() in default lib(s) */
diff --git a/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/sockets b/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/sockets
index a479cee37b..b5810a47fc 100644
--- a/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/sockets
+++ b/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/sockets
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_32bit/src/lib/libcmd/features/sockets by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_32bit/src/lib/libcmd/features/sockets by iffe version 2009-12-04 : : */
#ifndef _def_sockets_cmd
#define _def_sockets_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_32bit/arch/sol11.sun4/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_32bit/arch/sol11.sun4/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _sys_socket 1 /* #include <sys/socket.h> ok */
#define _hdr_arpa_inet 1 /* #include <arpa/inet.h> ok */
diff --git a/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/symlink b/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/symlink
index 1dee0e7af3..00b254f70d 100644
--- a/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/symlink
+++ b/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/symlink
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_32bit/src/lib/libcmd/features/symlink by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_32bit/src/lib/libcmd/features/symlink by iffe version 2009-12-04 : : */
#ifndef _def_symlink_cmd
#define _def_symlink_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_32bit/arch/sol11.sun4/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_32bit/arch/sol11.sun4/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_lchown 1 /* lchown implemented */
#endif
diff --git a/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/utsname b/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/utsname
index a582177617..93df54b142 100644
--- a/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/utsname
+++ b/usr/src/lib/libcmd/sparc/src/lib/libcmd/FEATURE/utsname
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_32bit/src/lib/libcmd/features/utsname by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_32bit/src/lib/libcmd/features/utsname by iffe version 2009-12-04 : : */
#ifndef _def_utsname_cmd
#define _def_utsname_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_32bit/arch/sol11.sun4/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_32bit/arch/sol11.sun4/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_getdomainname 1 /* getdomainname() in default lib(s) */
#define _lib_gethostid 1 /* gethostid() in default lib(s) */
diff --git a/usr/src/lib/libcmd/sparcv9/include/ast/cmd.h b/usr/src/lib/libcmd/sparcv9/include/ast/cmd.h
index f149f8d275..e064222a77 100644
--- a/usr/src/lib/libcmd/sparcv9/include/ast/cmd.h
+++ b/usr/src/lib/libcmd/sparcv9/include/ast/cmd.h
@@ -3,7 +3,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -68,8 +68,6 @@
#include <dlldefs.h>
-typedef int (*Shbltin_f) __PROTO__((int, char**, __V_*));
-
#else
extern __MANGLE__ int CMD_STANDALONE __PROTO__((int, char**, __V_*));
@@ -135,7 +133,7 @@ main __PARAM__((int argc, char** argv), (argc, argv)) __OTORP__(int argc; char**
if (fun = (Shbltin_f)dlsym(dll, buf))
break;
}
- if (dll = dllfind("cmd", NiL, RTLD_LAZY))
+ if (dll = dllplug(NiL, "cmd", NiL, RTLD_LAZY, NiL, 0))
{
if (fun = (Shbltin_f)dlsym(dll, buf + 1))
break;
diff --git a/usr/src/lib/libcmd/sparcv9/include/ast/cmdext.h b/usr/src/lib/libcmd/sparcv9/include/ast/cmdext.h
index 416a3dc5a5..978322e2d3 100644
--- a/usr/src/lib/libcmd/sparcv9/include/ast/cmdext.h
+++ b/usr/src/lib/libcmd/sparcv9/include/ast/cmdext.h
@@ -1,7 +1,7 @@
/***********************************************************************
* *
* This software is part of the ast package *
-* Copyright (c) 1992-2009 AT&T Intellectual Property *
+* Copyright (c) 1992-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
@@ -72,5 +72,6 @@ extern __MANGLE__ int b_tee __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_tty __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_uname __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_uniq __PROTO__((int, char**, __V_*));
+extern __MANGLE__ int b_vmstate __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_wc __PROTO__((int, char**, __V_*));
extern __MANGLE__ int b_xgrep __PROTO__((int, char**, __V_*));
diff --git a/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/ids b/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/ids
index ce23090155..9560cee811 100644
--- a/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/ids
+++ b/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/ids
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_64bit/src/lib/libcmd/features/ids by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_64bit/src/lib/libcmd/features/ids by iffe version 2009-12-04 : : */
#ifndef _def_ids_cmd
#define _def_ids_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_64bit/arch/sol11.sun4/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_64bit/arch/sol11.sun4/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_endgrent 1 /* endgrent() in default lib(s) */
#define _lib_getgrent 1 /* getgrent() in default lib(s) */
diff --git a/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/sockets b/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/sockets
index f6681b51f8..1f7dcfa50d 100644
--- a/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/sockets
+++ b/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/sockets
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_64bit/src/lib/libcmd/features/sockets by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_64bit/src/lib/libcmd/features/sockets by iffe version 2009-12-04 : : */
#ifndef _def_sockets_cmd
#define _def_sockets_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_64bit/arch/sol11.sun4/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_64bit/arch/sol11.sun4/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _sys_socket 1 /* #include <sys/socket.h> ok */
#define _hdr_arpa_inet 1 /* #include <arpa/inet.h> ok */
diff --git a/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/symlink b/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/symlink
index c52367e2ef..bf182d7859 100644
--- a/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/symlink
+++ b/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/symlink
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_64bit/src/lib/libcmd/features/symlink by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_64bit/src/lib/libcmd/features/symlink by iffe version 2009-12-04 : : */
#ifndef _def_symlink_cmd
#define _def_symlink_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_64bit/arch/sol11.sun4/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_64bit/arch/sol11.sun4/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_lchown 1 /* lchown implemented */
#endif
diff --git a/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/utsname b/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/utsname
index ed90329740..4e3f4bcd4f 100644
--- a/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/utsname
+++ b/usr/src/lib/libcmd/sparcv9/src/lib/libcmd/FEATURE/utsname
@@ -1,8 +1,8 @@
-/* : : generated from /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_64bit/src/lib/libcmd/features/utsname by iffe version 2009-10-06 : : */
+/* : : generated from /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_64bit/src/lib/libcmd/features/utsname by iffe version 2009-12-04 : : */
#ifndef _def_utsname_cmd
#define _def_utsname_cmd 1
#define _sys_types 1 /* #include <sys/types.h> ok */
-#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20091014/build_sparc_64bit/arch/sol11.sun4/lib/libast.a is a library */
+#define _LIB_ast 1 /* /home/gisburn/ksh93/ast_ksh_20100309/build_sparc_64bit/arch/sol11.sun4/lib/libast.a is a library */
#define _LIB_m 1 /* -lm is a library */
#define _lib_getdomainname 1 /* getdomainname() in default lib(s) */
#define _lib_gethostid 1 /* gethostid() in default lib(s) */