mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-15 04:32:24 +00:00
Fix more compiler warnings, typos and other minor issues (#260)
Many of these changes are minor typo fixes. The other changes (which are mostly compiler warning fixes) are: NEWS: - The --globcasedetect shell option works on older Linux kernels when used with FAT32/VFAT file systems, so remove the note about it only working with 5.2+ kernels. src/cmd/ksh93/COMPATIBILITY: - Update the documentation on function scoping with an addition from ksh93v- (this does apply to ksh93u+). src/cmd/ksh93/edit/emacs.c: - Check for '_AST_ksh_release', not 'AST_ksh_release'. src/cmd/INIT/mamake.c, src/cmd/INIT/ratz.c, src/cmd/INIT/release.c, src/cmd/builtin/pty.c: - Add more uses of UNREACHABLE() and noreturn, this time for the build system and pty. src/cmd/builtin/pty.c, src/cmd/builtin/array.c, src/cmd/ksh93/sh/name.c, src/cmd/ksh93/sh/nvtype.c, src/cmd/ksh93/sh/suid_exec.c: - Fix six -Wunused-variable warnings (the name.c nv_arrayptr() fixes are also in ksh93v-). - Remove the unused 'tableval' function to fix a -Wunused-function warning. src/cmd/ksh93/sh/lex.c: - Remove unused 'SHOPT_DOS' code, which isn't enabled anywhere. https://github.com/att/ast/issues/272#issuecomment-354363112 src/cmd/ksh93/bltins/misc.c, src/cmd/ksh93/bltins/trap.c, src/cmd/ksh93/bltins/typeset.c: - Add dictionary generator function declarations for former aliases that are now builtins (re:1fbbeaa1
,ef1621c1
,3ba4900e
). - For consistency with the rest of the codebase, use '(void)' instead of '()' for print_cpu_times. src/cmd/ksh93/sh/init.c, src/lib/libast/path/pathshell.c: - Move the otherwise unused EXE macro to pathshell() and only search for 'sh.exe' on Windows. src/cmd/ksh93/sh/xec.c, src/lib/libast/include/ast.h: - Add an empty definition for inline when compiling with C89. This allows the timeval_to_double() function to be inlined. src/cmd/ksh93/include/shlex.h: - Remove the unused 'PIPESYM2' macro. src/cmd/ksh93/tests/pty.sh: - Add '# err_exit #' to count the regression test added in commit113a9392
. src/lib/libast/disc/sfdcdio.c: - Move diordwr, dioread, diowrite and dioexcept behind '#ifdef F_DIOINFO' to fix one -Wunused-variable warning and multiple -Wunused-function warnings (sfdcdio() only uses these functions when F_DIOINFO is defined). src/lib/libast/string/fmtdev.c: - Fix two -Wimplicit-function-declaration warnings on Linux by including sys/sysmacros.h in fmtdev().
This commit is contained in:
parent
ecf260c282
commit
a065558291
96 changed files with 299 additions and 282 deletions
2
NEWS
2
NEWS
|
@ -72,7 +72,7 @@ Any uppercase BUG_* names are modernish shell bug IDs.
|
|||
|
||||
- A new --globcasedetect shell option is added to ksh on OSs where we can check
|
||||
for a case-insensitive file system (currently macOS, Windows/Cygwin, Linux
|
||||
5.2+, and QNX 7.0+). When this option is turned on, file name generation
|
||||
and QNX 7.0+). When this option is turned on, file name generation
|
||||
(globbing), as well as file name tab completion on interactive shells,
|
||||
automatically become case-insensitive on file systems where the difference
|
||||
between upper- and lowercase is ignored for file names. This is transparently
|
||||
|
|
|
@ -31,7 +31,7 @@ To see what's left to fix, see [the issue tracker](https://github.com/ksh93/ksh/
|
|||
7. Code style varies somewhat in this historic code base.
|
||||
Your changes should match the style of the code surrounding it.
|
||||
Indent with tabs, assuming an 8-space tab width.
|
||||
Opening braces are on a line of their own, at the same identation level
|
||||
Opening braces are on a line of their own, at the same indentation level
|
||||
as their corresponding closing brace.
|
||||
Comments always use `/*`...`*/`.
|
||||
8. Good judgment may override this policy.
|
||||
|
|
|
@ -771,7 +771,7 @@ or indexed, use ${!var[@]}.
|
|||
<DT>How do I do global substitutions on the contents of shell variables?<DD>
|
||||
|
||||
Use // instead of / for global substitution, ${var//aa/bb} will
|
||||
expand to the value of with each "aa" replace by "bb".
|
||||
expand to the value of var with each "aa" replaced by "bb".
|
||||
|
||||
<DT>How can I convert %XX values to ascii?<DD>
|
||||
|
||||
|
|
|
@ -450,7 +450,7 @@ All recorded changes follow.
|
|||
regress.sh: INPUT and OUTPUT handle -f for printf instead of print
|
||||
04-06-11 package.sh: make sure $INSTALLROOT/bin is in front of $PATH
|
||||
package.sh: skip nmake if older than 2000-10-31
|
||||
04-05-20 package.sh: fix arg vs. package parse with - or '' to disambuguate
|
||||
04-05-20 package.sh: fix arg vs. package parse with - or '' to disambiguate
|
||||
04-05-11 package.sh: package verbose update lists closure for package setup
|
||||
package.sh: add src/lib/libardir to nmake proto bootstrap
|
||||
regress.sh: probe for rm -u vs. chmod -R u+rwx
|
||||
|
@ -518,7 +518,7 @@ All recorded changes follow.
|
|||
03-09-23 ratz.c: fix tar header number parse bug that skipped to next number
|
||||
regress.sh: rm cleanup now handles files matching -*
|
||||
03-09-11 iffe.sh: add unnamed { ... } blocks
|
||||
regress.sh: add COPY from to, like MOVE but comprison still done
|
||||
regress.sh: add COPY from to, like MOVE but comparison still done
|
||||
regress.sh: rm -rfu to handle test dirs w/o u+rwx
|
||||
03-08-14 Makefile: add hello.c to the manifest
|
||||
03-08-11 package.sh: fix `html binary' generation
|
||||
|
@ -617,7 +617,7 @@ All recorded changes follow.
|
|||
make.probe: add CC.LD.STRIP for link time a.out strip
|
||||
package.sh: fix package_use vs. PACKAGE_USE check
|
||||
02-10-24 WWW.mk: fix bug that required a :WWWBIN: assertion to post
|
||||
02-10-23 mamake.c: fix unuinitialized time in make()
|
||||
02-10-23 mamake.c: fix uninitialized time in make()
|
||||
ratz.c: fix meter buffer overflow
|
||||
02-10-20 package.sh: fix lib/probe/C/make/probe update test
|
||||
02-10-18 probe.win32: update for mingw
|
||||
|
@ -699,7 +699,7 @@ All recorded changes follow.
|
|||
package.sh: add check for { cc ar nm yacc/bison } before make
|
||||
ratz.c: fix "rb" vs. "r" macro tests
|
||||
iffe.sh: add nxt, similar to lcl but defines _nxt_foo for #include
|
||||
iffe.sh,package.sh: remove vaibale from sccs,cvs ident strings -- duh
|
||||
iffe.sh,package.sh: remove variable from sccs,cvs ident strings -- duh
|
||||
02-01-24 C+probe: check CC.DYNAMIC to handle cc that accept but ignore -B*
|
||||
iffe.sh: handle 'mem struct.a.b'
|
||||
02-01-22 iffe.sh: cache (internal) `foo vs. struct foo' test results
|
||||
|
@ -950,7 +950,7 @@ All recorded changes follow.
|
|||
98-05-01 regress: fix bug sometimes didn't list last test
|
||||
98-04-01 hostinfo: add cc path arg
|
||||
hostinfo: now works with /bin/sh
|
||||
Makefile: strengthed -lm probe
|
||||
Makefile: strengthen -lm probe
|
||||
98-01-23 Makefile: check for -ldl -lm
|
||||
C.probe: handle gcc -v -E phony include dirs
|
||||
iffe: fix lcl by dropping sort -u -- we need the real first
|
||||
|
|
|
@ -412,7 +412,7 @@ All recorded changes follow.
|
|||
regress.sh: INPUT and OUTPUT handle -f for printf instead of print
|
||||
04-06-11 package.sh: make sure $INSTALLROOT/bin is in front of $PATH
|
||||
package.sh: skip nmake if older than 2000-10-31
|
||||
04-05-20 package.sh: fix arg vs. package parse with - or '' to disambuguate
|
||||
04-05-20 package.sh: fix arg vs. package parse with - or '' to disambiguate
|
||||
04-05-11 package.sh: package verbose update lists closure for package setup
|
||||
package.sh: add src/lib/libardir to nmake proto bootstrap
|
||||
regress.sh: probe for rm -u vs. chmod -R u+rwx
|
||||
|
@ -480,7 +480,7 @@ All recorded changes follow.
|
|||
03-09-23 ratz.c: fix tar header number parse bug that skipped to next number
|
||||
regress.sh: rm cleanup now handles files matching -*
|
||||
03-09-11 iffe.sh: add unnamed { ... } blocks
|
||||
regress.sh: add COPY from to, like MOVE but comprison still done
|
||||
regress.sh: add COPY from to, like MOVE but comparison still done
|
||||
regress.sh: rm -rfu to handle test dirs w/o u+rwx
|
||||
03-08-14 Makefile: add hello.c to the manifest
|
||||
03-08-11 package.sh: fix `html binary' generation
|
||||
|
@ -579,7 +579,7 @@ All recorded changes follow.
|
|||
make.probe: add CC.LD.STRIP for link time a.out strip
|
||||
package.sh: fix package_use vs. PACKAGE_USE check
|
||||
02-10-24 WWW.mk: fix bug that required a :WWWBIN: assertion to post
|
||||
02-10-23 mamake.c: fix unuinitialized time in make()
|
||||
02-10-23 mamake.c: fix uninitialized time in make()
|
||||
ratz.c: fix meter buffer overflow
|
||||
02-10-20 package.sh: fix lib/probe/C/make/probe update test
|
||||
02-10-18 probe.win32: update for mingw
|
||||
|
@ -661,7 +661,7 @@ All recorded changes follow.
|
|||
package.sh: add check for { cc ar nm yacc/bison } before make
|
||||
ratz.c: fix "rb" vs. "r" macro tests
|
||||
iffe.sh: add nxt, similar to lcl but defines _nxt_foo for #include
|
||||
iffe.sh,package.sh: remove vaibale from sccs,cvs ident strings -- duh
|
||||
iffe.sh,package.sh: remove variable from sccs,cvs ident strings -- duh
|
||||
02-01-24 C+probe: check CC.DYNAMIC to handle cc that accept but ignore -B*
|
||||
iffe.sh: handle 'mem struct.a.b'
|
||||
02-01-22 iffe.sh: cache (internal) `foo vs. struct foo' test results
|
||||
|
@ -912,7 +912,7 @@ All recorded changes follow.
|
|||
98-05-01 regress: fix bug sometimes didn't list last test
|
||||
98-04-01 hostinfo: add cc path arg
|
||||
hostinfo: now works with /bin/sh
|
||||
Makefile: strengthed -lm probe
|
||||
Makefile: strengthen -lm probe
|
||||
98-01-23 Makefile: check for -ldl -lm
|
||||
C.probe: handle gcc -v -E phony include dirs
|
||||
iffe: fix lcl by dropping sort -u -- we need the real first
|
||||
|
|
|
@ -20,17 +20,17 @@ ast-ksh :PACKAGE: ksh93 libast libcmd libcoshell libsum libdll
|
|||
these symlinks
|
||||
/bin/ksh.exe => ksh93.exe
|
||||
/usr/share/man/man1/ksh93.1 => ksh.1
|
||||
are created. This allows alternative ksh impelementations,
|
||||
are created. This allows alternative ksh implementations,
|
||||
e.g., /bin/pdksh.exe, to be selected by changing the ksh.exe
|
||||
and ksh.1 symbolic links. In addition, ksh and ksh93 paths are
|
||||
added to /etc/shells if not already present.
|
||||
$()
|
||||
Each builtin or special command accepts the --man and --html
|
||||
options to list the man page on the standard error. The --???
|
||||
options to show the man page on the standard error. The --???
|
||||
option describes the self documenting options available to all
|
||||
builtin and special commands.
|
||||
$()
|
||||
The stanadlone ksh is statically linked with the ast libcmd
|
||||
The standlone ksh is statically linked with the ast libcmd
|
||||
library which provides several builtin versions of /bin
|
||||
commands. "builtin | grep /opt/ast/bin" lists the libcmd
|
||||
builtins on the standard output. /opt/ast/bin/FOO accesses
|
||||
|
@ -55,12 +55,12 @@ ast-ksh :PACKAGE: ksh93 libast libcmd libcoshell libsum libdll
|
|||
variables to convert. PATH is handled by cygwin so it is not
|
||||
converted by the ast library.
|
||||
$()
|
||||
The astksh cygwin source package provides a bootstrap build
|
||||
The ast-ksh cygwin source package provides a bootstrap build
|
||||
environment that is not suited for an edit/build/debug cycle.
|
||||
If you want to explore and modify the source then you should
|
||||
install the (non-cygwinized) ast-base package which includes
|
||||
AT&T nmake. With ast-base you will also be able to regenerate
|
||||
the astksh cygwin source and binary packages.
|
||||
the ast-ksh cygwin source and binary packages.
|
||||
$()
|
||||
For more information on ksh and other AT&T ast tools see
|
||||
http://www.research.att.com/sw/download/
|
||||
|
|
|
@ -423,7 +423,7 @@
|
|||
03-09-23 ratz.c: fix tar header number parse bug that skipped to next number
|
||||
regress.sh: rm cleanup now handles files matching -*
|
||||
03-09-11 iffe.sh: add unnamed { ... } blocks
|
||||
regress.sh: add COPY from to, like MOVE but comprison still done
|
||||
regress.sh: add COPY from to, like MOVE but comparison still done
|
||||
regress.sh: rm -rfu to handle test dirs w/o u+rwx
|
||||
03-08-14 Makefile: add hello.c to the manifest
|
||||
03-08-11 package.sh: fix `html binary' generation
|
||||
|
@ -522,7 +522,7 @@
|
|||
make.probe: add CC.LD.STRIP for link time a.out strip
|
||||
package.sh: fix package_use vs. PACKAGE_USE check
|
||||
02-10-24 WWW.mk: fix bug that required a :WWWBIN: assertion to post
|
||||
02-10-23 mamake.c: fix unuinitialized time in make()
|
||||
02-10-23 mamake.c: fix uninitialized time in make()
|
||||
ratz.c: fix meter buffer overflow
|
||||
02-10-20 package.sh: fix lib/probe/C/make/probe update test
|
||||
02-10-18 probe.win32: update for mingw
|
||||
|
@ -604,7 +604,7 @@
|
|||
package.sh: add check for { cc ar nm yacc/bison } before make
|
||||
ratz.c: fix "rb" vs. "r" macro tests
|
||||
iffe.sh: add nxt, similar to lcl but defines _nxt_foo for #include
|
||||
iffe.sh,package.sh: remove vaibale from sccs,cvs ident strings -- duh
|
||||
iffe.sh,package.sh: remove variable from sccs,cvs ident strings -- duh
|
||||
02-01-24 C+probe: check CC.DYNAMIC to handle cc that accept but ignore -B*
|
||||
iffe.sh: handle 'mem struct.a.b'
|
||||
02-01-22 iffe.sh: cache (internal) `foo vs. struct foo' test results
|
||||
|
@ -855,7 +855,7 @@
|
|||
98-05-01 regress: fix bug sometimes didn't list last test
|
||||
98-04-01 hostinfo: add cc path arg
|
||||
hostinfo: now works with /bin/sh
|
||||
Makefile: strengthed -lm probe
|
||||
Makefile: strengthen -lm probe
|
||||
98-01-23 Makefile: check for -ldl -lm
|
||||
C.probe: handle gcc -v -E phony include dirs
|
||||
iffe: fix lcl by dropping sort -u -- we need the real first
|
||||
|
|
|
@ -2157,8 +2157,8 @@ main(int argc, char** argv)
|
|||
search(state.vars, "-strip-symbols", "1");
|
||||
continue;
|
||||
case '?':
|
||||
error(ERROR_USAGE|4, "%s", opt_info.arg);
|
||||
continue;
|
||||
error(ERROR_usage(2), "%s", opt_info.arg);
|
||||
UNREACHABLE();
|
||||
case ':':
|
||||
error(2, "%s", opt_info.arg);
|
||||
continue;
|
||||
|
@ -2166,7 +2166,10 @@ main(int argc, char** argv)
|
|||
break;
|
||||
}
|
||||
if (error_info.errors)
|
||||
error(ERROR_USAGE|4, "%s", optusage(NiL));
|
||||
{
|
||||
error(ERROR_usage(2), "%s", optusage(NiL));
|
||||
UNREACHABLE();
|
||||
}
|
||||
argv += opt_info.index;
|
||||
#else
|
||||
while ((s = *++argv) && *s == '-')
|
||||
|
|
|
@ -4813,8 +4813,8 @@ char** argv;
|
|||
sfprintf(sfstdout, "%s\n", id + 10);
|
||||
return 0;
|
||||
case '?':
|
||||
error(ERROR_USAGE|4, "%s", opt_info.arg);
|
||||
continue;
|
||||
error(ERROR_usage(2), "%s", opt_info.arg);
|
||||
UNREACHABLE();
|
||||
case ':':
|
||||
error(2, "%s", opt_info.arg);
|
||||
continue;
|
||||
|
@ -4822,7 +4822,10 @@ char** argv;
|
|||
break;
|
||||
}
|
||||
if (error_info.errors)
|
||||
error(ERROR_USAGE|4, "%s", optusage(NiL));
|
||||
{
|
||||
error(ERROR_usage(2), "%s", optusage(NiL));
|
||||
UNREACHABLE();
|
||||
}
|
||||
argv += opt_info.index;
|
||||
#else
|
||||
while ((s = *++argv) && *s == '-' && *(s + 1))
|
||||
|
|
|
@ -238,8 +238,8 @@ main(int argc, char** argv)
|
|||
sfprintf(sfstdout, "%s\n", id + 10);
|
||||
return 0;
|
||||
case '?':
|
||||
error(ERROR_USAGE|4, "%s", opt_info.arg);
|
||||
continue;
|
||||
error(ERROR_usage(2), "%s", opt_info.arg);
|
||||
UNREACHABLE();
|
||||
case ':':
|
||||
error(2, "%s", opt_info.arg);
|
||||
continue;
|
||||
|
@ -247,7 +247,10 @@ main(int argc, char** argv)
|
|||
break;
|
||||
}
|
||||
if (error_info.errors)
|
||||
error(ERROR_USAGE|4, "%s", optusage(NiL));
|
||||
{
|
||||
error(ERROR_usage(2), "%s", optusage(NiL));
|
||||
UNREACHABLE();
|
||||
}
|
||||
argv += opt_info.index;
|
||||
#else
|
||||
while ((s = *++argv) && *s == '-' && *(s + 1))
|
||||
|
|
|
@ -125,9 +125,10 @@ static const char usage[] =
|
|||
#define CMIN 1
|
||||
#endif
|
||||
|
||||
static void outofmemory(void)
|
||||
static noreturn void outofmemory(void)
|
||||
{
|
||||
error(ERROR_SYSTEM|ERROR_PANIC, "out of memory");
|
||||
UNREACHABLE();
|
||||
}
|
||||
|
||||
#if !_lib_openpty && !_lib__getpty && !defined(_pty_clone)
|
||||
|
@ -221,7 +222,6 @@ static int
|
|||
mkpty(int* master, int* minion)
|
||||
{
|
||||
struct termios tty;
|
||||
struct termios tst;
|
||||
struct termios* ttyp;
|
||||
#ifdef TIOCGWINSZ
|
||||
struct winsize win;
|
||||
|
@ -316,6 +316,7 @@ mkpty(int* master, int* minion)
|
|||
return -1;
|
||||
#endif
|
||||
#ifdef I_PUSH
|
||||
struct termios tst;
|
||||
if (tcgetattr(*minion, &tst) < 0 && (ioctl(*minion, I_PUSH, "ptem") < 0 || ioctl(*minion, I_PUSH, "ldterm") < 0))
|
||||
{
|
||||
close(*minion);
|
||||
|
@ -1057,17 +1058,26 @@ b_pty(int argc, char** argv, Shbltin_t* context)
|
|||
break;
|
||||
case '?':
|
||||
error(ERROR_usage(2), "%s", opt_info.arg);
|
||||
break;
|
||||
UNREACHABLE();
|
||||
}
|
||||
break;
|
||||
}
|
||||
argv += opt_info.index;
|
||||
if (!argv[0])
|
||||
{
|
||||
error(ERROR_exit(1), "command must be specified");
|
||||
UNREACHABLE();
|
||||
}
|
||||
if (mkpty(&master, &minion) < 0)
|
||||
{
|
||||
error(ERROR_system(1), "unable to create pty");
|
||||
UNREACHABLE();
|
||||
}
|
||||
if (!(mp = sfnew(NiL, 0, SF_UNBOUND, master, SF_READ|SF_WRITE)))
|
||||
{
|
||||
error(ERROR_system(1), "cannot open master stream");
|
||||
UNREACHABLE();
|
||||
}
|
||||
if (stty)
|
||||
{
|
||||
n = 2;
|
||||
|
@ -1095,9 +1105,15 @@ b_pty(int argc, char** argv, Shbltin_t* context)
|
|||
if (!log)
|
||||
lp = 0;
|
||||
else if (!(lp = sfopen(NiL, log, "w")))
|
||||
{
|
||||
error(ERROR_system(1), "%s: cannot write", log);
|
||||
UNREACHABLE();
|
||||
}
|
||||
if (!(proc = runcmd(argv, minion, session)))
|
||||
{
|
||||
error(ERROR_system(1), "unable run %s", argv[0]);
|
||||
UNREACHABLE();
|
||||
}
|
||||
close(minion);
|
||||
if (messages)
|
||||
{
|
||||
|
@ -1109,7 +1125,10 @@ b_pty(int argc, char** argv, Shbltin_t* context)
|
|||
else if ((fd = open(messages, O_CREAT|O_WRONLY, MODE_666)) >= 0)
|
||||
drop = 0;
|
||||
else
|
||||
{
|
||||
error(ERROR_system(1), "%s: cannot redirect messages", messages);
|
||||
UNREACHABLE();
|
||||
}
|
||||
close(2);
|
||||
dup(fd);
|
||||
if (drop)
|
||||
|
@ -1118,6 +1137,9 @@ b_pty(int argc, char** argv, Shbltin_t* context)
|
|||
minion = (*fun)(mp, lp, delay, timeout);
|
||||
master = procclose(proc);
|
||||
if (lp && sfclose(lp))
|
||||
{
|
||||
error(ERROR_system(1), "%s: write error", log);
|
||||
UNREACHABLE();
|
||||
}
|
||||
return minion ? minion : master;
|
||||
}
|
||||
|
|
|
@ -128,8 +128,10 @@ omitted features that are completely upward compatible.
|
|||
1. Functions, defined with name() with ksh-93 are compatible with
|
||||
the POSIX standard, not with ksh-88. No local variables are
|
||||
permitted, and there is no separate scope. Functions defined
|
||||
with the function name syntax, maintain compatibility.
|
||||
This also affects function traces.
|
||||
with the function name syntax have local variables as in ksh-88,
|
||||
but are statically scoped as in C so that a function does not
|
||||
automatically have access to local variables of the caller.
|
||||
This change also affects function traces.
|
||||
|
||||
2. ! is now a reserved word. As a result, any command by that
|
||||
name will no longer work with ksh-93.
|
||||
|
|
|
@ -46,7 +46,7 @@ Directory layout:
|
|||
Include directory:
|
||||
1. argnod.h contains the type definitions for command
|
||||
nodes, io nodes, argument nodes, and for positional
|
||||
parameters.a It defines the prototypes for
|
||||
parameters. It defines the prototypes for
|
||||
all the positional parameters functions.
|
||||
2. builtins.h contains prototypes for builtins as well
|
||||
as symbolic constants that refer to the name-pairs
|
||||
|
|
|
@ -243,7 +243,7 @@
|
|||
that caused a core dump has been fixed.
|
||||
12-02-08 A bug in which .sh.fun disciplines could be cleared after a
|
||||
function completes has been fixed.
|
||||
12-02-08 A bug in job control in which the foregroup process group was not
|
||||
12-02-08 A bug in job control in which the foreground process group was not
|
||||
set correctly after restarting a stopped pipeline has been fixed.
|
||||
12-02-07 A bug in which numbers with leading zeros could be treated as
|
||||
octal constants outside of ((...)) has been fixed.
|
||||
|
@ -297,7 +297,7 @@
|
|||
quote argument in a form suitable for a field in a .csv format file.
|
||||
11-12-02 +A -S option was added to read to be able to read .csv format files.
|
||||
11-11-28 A bug in which redirection of standard error in a function called from
|
||||
command substitution caused standard error to be lost has ben fixed.
|
||||
command substitution caused standard error to be lost has been fixed.
|
||||
11-11-21 [[ (-n foo) ]] no longer requires a space before (.
|
||||
11-11-11 The readonly attribute for a variable now applies to compound
|
||||
assignments to that variable.
|
||||
|
@ -711,7 +711,7 @@
|
|||
was invoked on a two dimensional array, i.e., arr[5][9].discipline.
|
||||
10-07-19 Fixed a buffering problem which occurred when running a script with
|
||||
ssh and the parent ssh process is killed.
|
||||
10-07-14 Modified the parser to treat ((...)) inside [[...]] as ( (...) ) to
|
||||
10-07-14 Modified the parser to treat ((...)) inside [[ ... ]] as ( (...) ) so
|
||||
that it is a nested (...).
|
||||
10-07-09 A bug in the handling of process substitution inside command
|
||||
substitution as part of a pipeline has been fixed.
|
||||
|
@ -1580,7 +1580,7 @@
|
|||
name+=([sub]=value) could cause the array to become an associative
|
||||
array has been fixed.
|
||||
07-11-14 A bug in which typeset without arguments could coredump if a
|
||||
variable is declared as in indexed array and has no elements has
|
||||
variable is declared as an indexed array and has no elements has
|
||||
been fixed.
|
||||
07-11-14 A bug in which creating a local SECONDS variable with typeset in
|
||||
a function could corrupt memory has been fixed.
|
||||
|
|
|
@ -57,10 +57,10 @@ static const char enum_type[] =
|
|||
"field splitting and pathname expansion are not performed on "
|
||||
"the arguments. Tilde expansion occurs on \avalue\a.]"
|
||||
"[r?Enables readonly. Once enabled, the value cannot be changed or unset.]"
|
||||
"[a?Indexed array. Each \aname\a will converted to an indexed "
|
||||
"[a?Indexed array. Each \aname\a is converted to an indexed "
|
||||
"array of type \b\f?\f\b. If a variable already exists, the current "
|
||||
"value will become index \b0\b.]"
|
||||
"[A?Associative array. Each \aname\a will converted to an associative "
|
||||
"[A?Associative array. Each \aname\a is converted to an associative "
|
||||
"array of type \b\f?\f\b. If a variable already exists, the current "
|
||||
"value will become subscript \b0\b.]"
|
||||
"[h]:[string?Used within a type definition to provide a help string "
|
||||
|
|
|
@ -224,6 +224,10 @@ int b_eval(int argc,char *argv[], Shbltin_t *context)
|
|||
return(shp->exitval);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* for the dictionary generator */
|
||||
int b_source(register int n,char *argv[],Shbltin_t *context){}
|
||||
#endif
|
||||
int b_dot_cmd(register int n,char *argv[],Shbltin_t *context)
|
||||
{
|
||||
register char *script;
|
||||
|
@ -529,7 +533,7 @@ static void print_times(struct timeval utime, struct timeval stime)
|
|||
sfprintf(sfstdout, "%dm%02d%c%03ds %dm%02d%c%03ds\n", ut_min, ut_sec, radix, ut_ms, st_min, st_sec, radix, st_ms);
|
||||
}
|
||||
#if _lib_getrusage
|
||||
static void print_cpu_times()
|
||||
static void print_cpu_times(void)
|
||||
{
|
||||
struct rusage usage;
|
||||
/* Print the time (user & system) consumed by the shell. */
|
||||
|
@ -540,7 +544,7 @@ static void print_cpu_times()
|
|||
print_times(usage.ru_utime, usage.ru_stime);
|
||||
}
|
||||
#else /* _lib_getrusage */
|
||||
static void print_cpu_times()
|
||||
static void print_cpu_times(void)
|
||||
{
|
||||
struct timeval utime, stime;
|
||||
double dtime;
|
||||
|
|
|
@ -183,6 +183,10 @@ int b_trap(int argc,char *argv[],Shbltin_t *context)
|
|||
return(0);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* for the dictionary generator */
|
||||
int b_stop(int argc,char *argv[],Shbltin_t *context){}
|
||||
#endif
|
||||
int b_kill(int argc,char *argv[],Shbltin_t *context)
|
||||
{
|
||||
register char *signame;
|
||||
|
|
|
@ -191,7 +191,13 @@ int b_alias(int argc,register char *argv[],Shbltin_t *context)
|
|||
|
||||
#if 0
|
||||
/* for the dictionary generator */
|
||||
int b_local(int argc,char *argv[],Shbltin_t *context){}
|
||||
int b_autoload(int argc,register char *argv[],Shbltin_t *context){}
|
||||
int b_compound(int argc,register char *argv[],Shbltin_t *context){}
|
||||
int b_float(int argc,register char *argv[],Shbltin_t *context){}
|
||||
int b_functions(int argc,register char *argv[],Shbltin_t *context){}
|
||||
int b_integer(int argc,register char *argv[],Shbltin_t *context){}
|
||||
int b_local(int argc,register char *argv[],Shbltin_t *context){}
|
||||
int b_nameref(int argc,register char *argv[],Shbltin_t *context){}
|
||||
#endif
|
||||
int b_typeset(int argc,register char *argv[],Shbltin_t *context)
|
||||
{
|
||||
|
|
|
@ -1844,7 +1844,7 @@ const char sh_opttypeset[] =
|
|||
"value will be displayed as an unsigned integer.]"
|
||||
"[x?Puts each \aname\a on the export list. See \bexport\b(1). \aname\a "
|
||||
"cannot contain a \b.\b.]"
|
||||
"[A?Associative array. Each \aname\a will converted to an associative "
|
||||
"[A?Associative array. Each \aname\a is converted to an associative "
|
||||
"array. If a variable already exists, the current value will "
|
||||
"become index \b0\b.]"
|
||||
"[C?Compound variable. Each \aname\a will be a compound variable. If "
|
||||
|
|
|
@ -1234,7 +1234,7 @@ static void xcommands(register Emacs_t *ep,int count)
|
|||
show_info(ep,hbuf);
|
||||
return;
|
||||
}
|
||||
# if !AST_ksh_release /* debugging, modify as required */
|
||||
# if !_AST_ksh_release /* debugging, modify as required */
|
||||
case cntl('D'): /* ^X^D show debugging info */
|
||||
{
|
||||
char debugbuf[MAXLINE];
|
||||
|
|
|
@ -501,7 +501,7 @@ int ed_viread(void *context, int fd, register char *shbuf, int nchar, int reedit
|
|||
}
|
||||
|
||||
/*** Line terminated with escape, or escaped eol/eof, ***/
|
||||
/* so set raw mode */
|
||||
/*** so set raw mode ***/
|
||||
|
||||
if( tty_raw(ERRIO,0) < 0 )
|
||||
{
|
||||
|
|
|
@ -88,7 +88,7 @@ struct Namarray
|
|||
void *(*fun)(Namval_t*,const char*,int); /* associative arrays */
|
||||
void *fixed; /* for fixed sized arrays */
|
||||
Dt_t *table; /* for subscripts */
|
||||
void *scope; /* non-zerp when scoped */
|
||||
void *scope; /* non-zero when scoped */
|
||||
};
|
||||
|
||||
/* The context pointer for declaration command */
|
||||
|
|
|
@ -113,7 +113,6 @@ typedef struct _shlex_
|
|||
#define IORDWRSYM (SYMGT|'<')
|
||||
#define IORDWRSYMT (SYMSEMI|'<')
|
||||
#define IOCLOBSYM (SYMPIPE|'>')
|
||||
#define PIPESYM2 (SYMPIPE|'&')
|
||||
#define IPROCSYM (SYMLPAR|'<')
|
||||
#define OPROCSYM (SYMLPAR|'>')
|
||||
#define EOFSYM 04000 /* end-of-file */
|
||||
|
|
|
@ -221,7 +221,7 @@ name-value pair as a string. A \f5NULL\fP return value indicates
|
|||
that the name-value pair is unset.
|
||||
The \f5nv_getnum()\fP function returns the value of the given
|
||||
name-value pair as a double precision number using the \f5Sfio\fP
|
||||
library (See Sfio(3)) type \f5Sfdouble_t\fP.
|
||||
library (see sfio(3)) type \f5Sfdouble_t\fP.
|
||||
For name-value pairs without the \f5NV_INTEGER\fP attribute,
|
||||
the string value is evaluated as an arithmetic expression to
|
||||
arrive at a numerical value.
|
||||
|
@ -541,7 +541,7 @@ and returned.
|
|||
.IP
|
||||
\f5NV_CLONE\fP:
|
||||
If \fIfp\fP is non-\f5NULL\fP and it is on the stack,
|
||||
it is replace by a copy created by \f5malloc\fP(3).
|
||||
it is replaced by a copy created by \f5malloc\fP(3).
|
||||
The \f5nofree\fP field is set to \f50\fP.
|
||||
The new discipline is returned.
|
||||
Otherwise, \f5NULL\fP is returned.
|
||||
|
|
|
@ -6145,7 +6145,7 @@ and IEEE POSIX 1003.2 standards.
|
|||
(See
|
||||
.IR pathconf (2)
|
||||
and
|
||||
.IR sysconf (2).)
|
||||
.IR sysconf (3).)
|
||||
The
|
||||
.I pathname
|
||||
argument is required for parameters whose value depends on
|
||||
|
@ -7479,7 +7479,7 @@ or
|
|||
\f3times\fP
|
||||
Displays the accumulated user and system CPU times, one line with the times
|
||||
used by the shell and another with those used by all of the shell's child
|
||||
processes. No options are supporetd.
|
||||
processes. No options are supported.
|
||||
.TP
|
||||
\(dg \f3trap\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2action\^\fP \*(CK \*(OK \f2sig\^\fP \*(CK .\|.\|.
|
||||
The
|
||||
|
@ -8445,7 +8445,7 @@ except that the following are disallowed:
|
|||
.RS
|
||||
.PD 0
|
||||
.PP
|
||||
Unsetting the restricted option.
|
||||
unsetting the restricted option,
|
||||
.br
|
||||
changing directory (see
|
||||
.IR cd (1)),
|
||||
|
@ -8470,9 +8470,9 @@ redirecting output
|
|||
.BR >| ,
|
||||
.BR <> ,
|
||||
and
|
||||
.BR >> ).
|
||||
.BR >> ) ,
|
||||
.br
|
||||
adding or deleting built-in commands.
|
||||
adding or deleting built-in commands,
|
||||
.br
|
||||
using
|
||||
.B "command -p"
|
||||
|
@ -8591,7 +8591,7 @@ lseek(2),
|
|||
paste(1),
|
||||
pathconf(2),
|
||||
pipe(2),
|
||||
sysconf(2),
|
||||
sysconf(3),
|
||||
umask(2),
|
||||
ulimit(2),
|
||||
wait(2),
|
||||
|
|
|
@ -768,7 +768,7 @@ struct argnod *sh_argprocsub(Shell_t *shp,struct argnod *argp)
|
|||
sh_offstate(SH_INTERACTIVE);
|
||||
sh_offstate(SH_MONITOR);
|
||||
job.jobcontrol = 0;
|
||||
/* do the process substitution */
|
||||
/* run the process substitution */
|
||||
shp->subshell = 0;
|
||||
if(fd)
|
||||
shp->inpipe = pv;
|
||||
|
|
|
@ -871,13 +871,8 @@ static struct index_array *array_grow(Namval_t *np, register struct index_array
|
|||
}
|
||||
}
|
||||
else
|
||||
if((ap->val[0].cp=np->nvalue.cp))
|
||||
if((ap->val[0].cp=np->nvalue.cp) || (nv_isattr(np,NV_INTEGER) && !nv_isnull(np)))
|
||||
i++;
|
||||
else if(nv_isattr(np,NV_INTEGER) && !nv_isnull(np))
|
||||
{
|
||||
Sfdouble_t d= nv_getnum(np);
|
||||
i++;
|
||||
}
|
||||
ap->header.nelem = i;
|
||||
ap->header.hdr.disc = &array_disc;
|
||||
nv_disc(np,(Namfun_t*)ap, NV_FIRST);
|
||||
|
@ -1525,7 +1520,7 @@ char *nv_endsubscript(Namval_t *np, register char *cp, int mode)
|
|||
{
|
||||
Namarr_t *ap = nv_arrayptr(np);
|
||||
/* Block an attempt to alter a readonly array via subscript assignment or by appending the array.
|
||||
However need to allow instances of type variables. This exception is observed when np->nvflag
|
||||
However instances of type variables must be allowed. This exception is observed when np->nvflag
|
||||
has NV_BINARY and NV_LJUST set besides NV_RDONLY and NV_ARRAY. */
|
||||
if(nv_isattr(np,NV_RDONLY) && nv_isattr(np,NV_ARRAY) && mode&NV_ASSIGN && np->nvflag&(NV_BINARY|NV_LJUST)^(NV_BINARY|NV_LJUST))
|
||||
{
|
||||
|
|
|
@ -210,13 +210,6 @@ static char *env_init(Shell_t*);
|
|||
static void env_import_attributes(Shell_t*,char*);
|
||||
static Init_t *nv_init(Shell_t*);
|
||||
static int shlvl;
|
||||
|
||||
#ifdef _WINIX
|
||||
# define EXE "?(.exe)"
|
||||
#else
|
||||
# define EXE
|
||||
#endif
|
||||
|
||||
static int rand_shift;
|
||||
|
||||
/*
|
||||
|
|
|
@ -2321,10 +2321,6 @@ struct argnod *sh_endword(Shell_t *shp,int mode)
|
|||
break;
|
||||
}
|
||||
n = *sp;
|
||||
#if SHOPT_DOS
|
||||
if(!(inquote&1) && sh_lexstates[ST_NORM][n]==0)
|
||||
break;
|
||||
#endif /* SHOPT_DOS */
|
||||
if(!(inquote&1) || (sh_lexstates[ST_QUOTE][n] && n!=RBRACE))
|
||||
{
|
||||
if(n=='\n')
|
||||
|
|
|
@ -734,9 +734,7 @@ Namval_t *nv_create(const char *name, Dt_t *root, int flags, Namfun_t *dp)
|
|||
long mode, add=0;
|
||||
int copy=0,isref,top=0,noscope=(flags&NV_NOSCOPE);
|
||||
int nofree=0, level=0;
|
||||
#if SHOPT_FIXEDARRAY
|
||||
Namarr_t *ap;
|
||||
#endif /* SHOPT_FIXEDARRAY */
|
||||
if(root==shp->var_tree)
|
||||
{
|
||||
if(dtvnext(root))
|
||||
|
@ -944,7 +942,7 @@ Namval_t *nv_create(const char *name, Dt_t *root, int flags, Namfun_t *dp)
|
|||
{
|
||||
if(flags&NV_ARRAY)
|
||||
{
|
||||
Namarr_t *ap = nv_arrayptr(np);
|
||||
ap = nv_arrayptr(np);
|
||||
nq = nv_opensub(np);
|
||||
if((flags&NV_ASSIGN) && (!nq || nv_isnull(nq)))
|
||||
ap->nelem++;
|
||||
|
@ -1034,7 +1032,7 @@ Namval_t *nv_create(const char *name, Dt_t *root, int flags, Namfun_t *dp)
|
|||
if(c=='[')
|
||||
{
|
||||
#if SHOPT_FIXEDARRAY
|
||||
Namarr_t *ap = nv_arrayptr(np);
|
||||
ap = nv_arrayptr(np);
|
||||
#endif /* SHOPT_FIXEDARRAY */
|
||||
n = mode|nv_isarray(np);
|
||||
if(!mode && (flags&NV_ARRAY) && ((c=sp[1])=='*' || c=='@') && sp[2]==']')
|
||||
|
@ -2604,36 +2602,6 @@ Namval_t *sh_scoped(Shell_t *shp, register Namval_t *np)
|
|||
return(dtsearch(shp->var_tree,np));
|
||||
}
|
||||
|
||||
/*
|
||||
* return space separated list of names of variables in given tree
|
||||
*/
|
||||
static char *tableval(Dt_t *root)
|
||||
{
|
||||
static Sfio_t *out;
|
||||
register Namval_t *np;
|
||||
register int first=1;
|
||||
register Dt_t *base = dtview(root,0);
|
||||
if(out)
|
||||
sfseek(out,(Sfoff_t)0,SEEK_SET);
|
||||
else
|
||||
out = sfnew((Sfio_t*)0,(char*)0,-1,-1,SF_WRITE|SF_STRING);
|
||||
for(np=(Namval_t*)dtfirst(root);np;np=(Namval_t*)dtnext(root,np))
|
||||
{
|
||||
if(!nv_isnull(np) || np->nvfun || nv_isattr(np,~NV_NOFREE))
|
||||
{
|
||||
if(!first)
|
||||
sfputc(out,' ');
|
||||
else
|
||||
first = 0;
|
||||
sfputr(out,np->nvname,-1);
|
||||
}
|
||||
}
|
||||
sfputc(out,0);
|
||||
if(base)
|
||||
dtview(root,base);
|
||||
return((char*)out->_data);
|
||||
}
|
||||
|
||||
#if SHOPT_OPTIMIZE
|
||||
struct optimize
|
||||
{
|
||||
|
|
|
@ -41,12 +41,12 @@ static const char sh_opttype[] =
|
|||
"field splitting and pathname expansion are not performed on "
|
||||
"the arguments. Tilde expansion occurs on \avalue\a.]"
|
||||
"[r?Enables readonly. Once enabled, the value cannot be changed or unset.]"
|
||||
"[a]:?[type?Indexed array. Each \aname\a will converted to an indexed "
|
||||
"[a]:?[type?Indexed array. Each \aname\a is converted to an indexed "
|
||||
"array of type \b\f?\f\b. If a variable already exists, the current "
|
||||
"value will become index \b0\b. If \b[\b\atype\a\b]]\b is "
|
||||
"specified, each subscript is interpreted as a value of enumeration "
|
||||
"type \atype\a.]"
|
||||
"[A?Associative array. Each \aname\a will converted to an associative "
|
||||
"[A?Associative array. Each \aname\a is converted to an associative "
|
||||
"array of type \b\f?\f\b. If a variable already exists, the current "
|
||||
"value will become subscript \b0\b.]"
|
||||
"[h]:[string?Used within a type definition to provide a help string "
|
||||
|
@ -666,7 +666,6 @@ static int typeinfo(Opt_t* op, Sfio_t *out, const char *str, Optdisc_t *fp)
|
|||
nq = nv_namptr(dp->nodes,i);
|
||||
if(tp=nv_type(nq))
|
||||
{
|
||||
Namfun_t *pp = nv_hasdisc(nq,&type_disc);
|
||||
sfprintf(out,"\t[+%s?%s.\n",nq->nvname,tp->nvname);
|
||||
n = strlen(nq->nvname);
|
||||
while((cp=nv_namptr(dp->nodes,i+1)->nvname) && memcmp(cp,nq->nvname,n)==0 && cp[n]=='.')
|
||||
|
|
|
@ -1261,7 +1261,7 @@ pid_t path_spawn(Shell_t *shp,const char *opath,register char **argv, char **env
|
|||
|
||||
/*
|
||||
* File is executable but not machine code.
|
||||
* Assume file is a Shell script and execute it.
|
||||
* Assume file is a shell script and execute it.
|
||||
*/
|
||||
|
||||
static noreturn void exscript(Shell_t *shp,register char *path,register char *argv[],char **envp)
|
||||
|
|
|
@ -87,7 +87,9 @@ static const char version[] = "\n@(#)$Id: suid_exec "SH_RELEASE" $\n";
|
|||
static const char badopen[] = "cannot open";
|
||||
static const char badexec[] = "cannot exec";
|
||||
static const char devfd[] = "/dev/fd/10"; /* must match FDIN above */
|
||||
#ifndef _lib_setreuid
|
||||
static char tmpname[] = "/tmp/SUIDXXXXXX";
|
||||
#endif
|
||||
static char **arglist;
|
||||
|
||||
static char *shell;
|
||||
|
|
|
@ -158,8 +158,7 @@ static void get_cpu_times(Shell_t *shp, struct timeval *tv_usr, struct timeval *
|
|||
#endif /* _lib_getrusage */
|
||||
|
||||
#ifdef timeofday
|
||||
/* 'inline' is commented out because C89 doesn't have it */
|
||||
static /*inline*/ double timeval_to_double(struct timeval tv)
|
||||
static inline double timeval_to_double(struct timeval tv)
|
||||
{
|
||||
return (double)tv.tv_sec + ((double)tv.tv_usec / 1000000.0);
|
||||
}
|
||||
|
|
|
@ -132,7 +132,7 @@ y=* z=[
|
|||
s[$y]=1
|
||||
s[$z]=2
|
||||
if (( ${#s[@]} != 2 ))
|
||||
then err_exit 'number of elements of is not 2'
|
||||
then err_exit 'number of elements of s is not 2'
|
||||
fi
|
||||
(( s[$z] = s[$z] + ${s[$y]} ))
|
||||
if [[ ${s[$z]} != 3 ]]
|
||||
|
|
|
@ -748,11 +748,11 @@ foo=BUG command eval ':'
|
|||
# 'whence -f' should ignore functions
|
||||
foo_bar() { true; }
|
||||
actual="$(whence -f foo_bar)"
|
||||
whence -f foo_bar >/dev/null && err_exit "'whence -f' doesn't ignore functions (got '$(printf %q "$actual")')"
|
||||
whence -f foo_bar >/dev/null && err_exit "'whence -f' doesn't ignore functions (got $(printf %q "$actual"))"
|
||||
|
||||
# whence -vq/type -q must be tested as well
|
||||
actual="$(type -f foo_bar 2>&1)"
|
||||
type -f foo_bar >/dev/null 2>&1 && err_exit "'type -f' doesn't ignore functions (got '$(printf %q "$actual")')"
|
||||
type -f foo_bar >/dev/null 2>&1 && err_exit "'type -f' doesn't ignore functions (got $(printf %q "$actual"))"
|
||||
type -qf foo_bar && err_exit "'type -qf' doesn't ignore functions"
|
||||
|
||||
# Test the exit status of 'whence -q'
|
||||
|
@ -1060,7 +1060,7 @@ exp=1
|
|||
[[ $got == $exp ]] || err_exit "'kill %' has the wrong exit status (expected '$exp'; got '$got')"
|
||||
|
||||
# ======
|
||||
# 'cd -' should recognize the value of an overriden $OLDPWD variable
|
||||
# 'cd -' should recognize the value of an overridden $OLDPWD variable
|
||||
# https://github.com/ksh93/ksh/pull/249
|
||||
# https://github.com/att/ast/issues/8
|
||||
|
||||
|
|
|
@ -1153,7 +1153,7 @@ func2
|
|||
}
|
||||
foo
|
||||
EOF
|
||||
} 2> /dev/null || err_exit 'problem with unset -f foo within function foo'
|
||||
} 2> /dev/null || err_exit "problem with 'unset -f foo' within function foo"
|
||||
|
||||
val=$($SHELL 2> /dev/null <<- \EOF
|
||||
.sh.fun.set() { set -x; }
|
||||
|
|
|
@ -776,7 +776,7 @@ got=$(umask 777; set +x; { cat <(echo ok); } 2>&1)
|
|||
|
||||
# ======
|
||||
# https://github.com/att/ast/issues/1336
|
||||
# Use the /proc psuedo filesystem on Linux as a convenient way to force a write I/O error.
|
||||
# Use the /proc pseudo filesystem on Linux as a convenient way to force a write I/O error.
|
||||
if [[ $(uname) == Linux ]]
|
||||
then
|
||||
actual=$($SHELL -c 'echo > /proc/self/uid_map; echo okay' 2>&1)
|
||||
|
|
|
@ -765,12 +765,14 @@ touch $'XXX\xc3\xa1' $'XXX\xc3\xab' &&
|
|||
tst $LINENO <<"!"
|
||||
L autocomplete should not fill partial multibyte characters
|
||||
# https://github.com/ksh93/ksh/issues/223
|
||||
|
||||
d 15
|
||||
p :test-1:
|
||||
w : XX\t
|
||||
r ^:test-1: : XXX\r\n$
|
||||
!
|
||||
|
||||
# err_exit #
|
||||
((SHOPT_VSH)) && tst $LINENO <<"!"
|
||||
L Using b, B, w and W commands in vi mode
|
||||
# https://github.com/att/ast/issues/1467
|
||||
|
|
|
@ -283,7 +283,7 @@
|
|||
08-12-07 include/ast_std.h,misc/getenv.c: no _ast_getenv for uwin ast54 compatibility
|
||||
08-12-07 tm/tmxfmt.c: add %[_][EO]K for [space pad] [full|long] iso
|
||||
08-12-07 sfio/sfvscanf.c: fix ok[] short by one allocation
|
||||
08-12-07 comp/setlocale.c: fix off by one composite initialition loop test
|
||||
08-12-07 comp/setlocale.c: fix off by one composite initialization loop test
|
||||
08-12-07 path/pathkey.c: fix off by one loop test
|
||||
08-12-04 vmalloc/vmbest.c: catch sbrk() wraparound
|
||||
08-12-04 comp/spawnveg.c: clean up attrs on failure too
|
||||
|
|
|
@ -42,6 +42,8 @@ typedef struct _direct_s
|
|||
/* convert a pointer to an int */
|
||||
#define P2I(p) (Sfulong_t)((char*)(p) - (char*)0)
|
||||
|
||||
#ifdef F_DIOINFO
|
||||
|
||||
#if __STD_C
|
||||
static ssize_t diordwr(Sfio_t* f, Void_t* buf, size_t n, Direct_t* di, int type)
|
||||
#else
|
||||
|
@ -59,7 +61,6 @@ int type;
|
|||
done = 0; /* amount processed by direct IO */
|
||||
rv = 0;
|
||||
|
||||
#ifdef F_DIOINFO
|
||||
if((P2I(buf)%di->dio.d_mem) == 0 &&
|
||||
(f->here%di->dio.d_miniosz) == 0 && n >= di->dio.d_miniosz )
|
||||
{ /* direct IO ok, make sure we're in the right mode */
|
||||
|
@ -92,7 +93,6 @@ int type;
|
|||
di->cntl &= ~FDIRECT;
|
||||
(void)fcntl(f->file, F_SETFL, di->cntl);
|
||||
}
|
||||
#endif /*F_DIOINFO*/
|
||||
|
||||
if((rw = n-done) > 0 &&
|
||||
(rv = type == SF_READ ? read(f->file,buf,rw) : write(f->file,buf,rw)) > 0 )
|
||||
|
@ -141,18 +141,18 @@ Sfdisc_t* disc;
|
|||
|
||||
if(type == SF_FINAL || type == SF_DPOP)
|
||||
{
|
||||
#ifdef F_DIOINFO
|
||||
if(di->cntl&FDIRECT)
|
||||
{ di->cntl &= ~FDIRECT;
|
||||
(void)fcntl(f->file,F_SETFL,di->cntl);
|
||||
}
|
||||
#endif
|
||||
free(disc);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* F_DIOINFO */
|
||||
|
||||
#if __STD_C
|
||||
int sfdcdio(Sfio_t* f, size_t bufsize)
|
||||
#else
|
||||
|
|
|
@ -202,6 +202,14 @@ typedef struct
|
|||
#define FMT_EXP_NOCR 0x100 /* skip \r */
|
||||
#define FMT_EXP_NONL 0x200 /* skip \n */
|
||||
|
||||
/*
|
||||
* Define inline as an empty macro if we are
|
||||
* compiling with C89.
|
||||
*/
|
||||
#if __STDC_VERSION__ < 199901L
|
||||
#define inline
|
||||
#endif
|
||||
|
||||
/*
|
||||
* multibyte macros
|
||||
*/
|
||||
|
|
|
@ -226,7 +226,7 @@ outputs an
|
|||
prompt specified by
|
||||
.I "format, .\|.\|."
|
||||
to the controlling terminal and reads a response from the controlling terminal.
|
||||
Offirmative response returns
|
||||
Affirmative response returns
|
||||
.LR 0 ,
|
||||
.L EOF
|
||||
or quit response returns
|
||||
|
|
|
@ -2356,8 +2356,8 @@ symbol may be removed in a future release.
|
|||
The printing and scanning functions were extended to handle multibyte characters
|
||||
and to conform to the C99 standard.
|
||||
.PP
|
||||
The function \f5sfpoll()\fP was rehauled to make it useful
|
||||
for writing servers that must commnunicate with multiple streams
|
||||
The function \f5sfpoll()\fP was overhauled to make it useful
|
||||
for writing servers that must communicate with multiple streams
|
||||
without blocking.
|
||||
.PP
|
||||
The formatting pattern \f5%c\fP for \f5sf*printf\fP was extended
|
||||
|
|
|
@ -47,6 +47,12 @@
|
|||
* not done for `csh script arg ...'
|
||||
*/
|
||||
|
||||
#ifdef _WINIX
|
||||
# define EXE "?(.exe)"
|
||||
#else
|
||||
# define EXE
|
||||
#endif
|
||||
|
||||
char*
|
||||
pathshell(void)
|
||||
{
|
||||
|
@ -59,13 +65,13 @@ pathshell(void)
|
|||
|
||||
static char* val;
|
||||
|
||||
if ((sh = getenv("SHELL")) && *sh == '/' && strmatch(sh, "*/(sh|*[!cC]sh)*([[:digit:]])?(-+([.[:alnum:]]))?(.exe)"))
|
||||
if ((sh = getenv("SHELL")) && *sh == '/' && strmatch(sh, "*/(sh|*[!cC]sh)*([[:digit:]])?(-+([.[:alnum:]]))" EXE))
|
||||
{
|
||||
if (!(ru = getuid()) || !eaccess("/bin", W_OK))
|
||||
{
|
||||
if (stat(sh, &st))
|
||||
goto defshell;
|
||||
if (ru != st.st_uid && !strmatch(sh, "?(/usr)?(/local)/?([ls])bin/?([[:lower:]])sh?(.exe)"))
|
||||
if (ru != st.st_uid && !strmatch(sh, "?(/usr)?(/local)/?([ls])bin/?([[:lower:]])sh" EXE))
|
||||
goto defshell;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -30,6 +30,9 @@
|
|||
#include <ast.h>
|
||||
#include <ctype.h>
|
||||
#include <ls.h>
|
||||
#ifdef __linux__
|
||||
#include <sys/sysmacros.h>
|
||||
#endif
|
||||
|
||||
char*
|
||||
fmtdev(struct stat* st)
|
||||
|
|
|
@ -57,7 +57,7 @@ static const char usage[] =
|
|||
"converted back to the native encoding. Multibyte characters in the "
|
||||
"current locale are treated as printable characters.]"
|
||||
"[A:show-all?Equivalent to \b-vET\b.]"
|
||||
"[B:squeeze-blank?Multiple adjacent new-line characters are replace by one"
|
||||
"[B:squeeze-blank?Multiple adjacent new-line characters are replaced by one"
|
||||
" new-line.]"
|
||||
"[D:dos-output?Output files are opened in \atext\amode which inserts carriage"
|
||||
" returns in front of new-lines on some systems.]"
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
* ASSERT NOTE:
|
||||
* Some sanity checking code is included using assert(). On my FreeBSD
|
||||
* system, this additional code can be removed by compiling with NDEBUG
|
||||
* defined. Check your own systems man page on assert() to see how to
|
||||
* defined. Check your own system's man page on assert() to see how to
|
||||
* compile WITHOUT the sanity checking code on your system.
|
||||
*
|
||||
* UNROLLED TRANSFORM LOOP NOTE:
|
||||
|
|
Loading…
Reference in a new issue