diff options
author | Roger A. Faulkner <Roger.Faulkner@Oracle.COM> | 2010-04-03 09:48:44 -0700 |
---|---|---|
committer | Roger A. Faulkner <Roger.Faulkner@Oracle.COM> | 2010-04-03 09:48:44 -0700 |
commit | 3e14f97f673e8a630f076077de35afdd43dc1587 (patch) | |
tree | 9828b6b676f58d7b27dd28e00202d3f3461a5cd8 /usr/src/lib/libcmd | |
parent | 4f60987df4dcaa54a88b596f861fbf4f3382c65e (diff) | |
download | illumos-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')
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) */ |