mirror of
				git://git.code.sf.net/p/cdesktopenv/code
				synced 2025-03-09 15:50:02 +00:00 
			
		
		
		
	Fix a large number of typos and other problems (#110)
Most of these fixes are for typos and extra whitespace at the end of lines. These are the notable changes: - Fixed a compatibility issue with how asterisks are displayed using certain fonts. Bug report: https://github.com/att/ast/issues/764 - Fixed a bug in the man page that caused searches for the '|' character to fail. Bug report: https://github.com/att/ast/issues/871 - Removed a duplicate description of 'set -B' from the man page. Bug report: https://github.com/att/ast/issues/789 - Added documentation for options missing from the ksh man page (applies to 'hist -N', 'sleep -s', 'whence -q' and many of ulimit's options). Bug reports: https://github.com/att/ast/issues/948 https://github.com/att/ast/issues/503#issuecomment-386649715 https://github.com/att/ast/issues/507#issuecomment-507924608 - Applied the following ksh2020 documentation fixes: https://github.com/att/ast/pull/351 https://github.com/att/ast/pull/352 - Fixed a minor GCC -Wformat warning in procopen.c by changing a sentinel to NULL.
This commit is contained in:
		
							parent
							
								
									338586896d
								
							
						
					
					
						commit
						f9fdbfc9e9
					
				
					 66 changed files with 487 additions and 432 deletions
				
			
		| 
						 | 
				
			
			@ -34,7 +34,7 @@ hash:			generic, scoped hash table support
 | 
			
		|||
 | 
			
		||||
include/ast:		libast support headers
 | 
			
		||||
 | 
			
		||||
	align.h		compile time type alignmnent support
 | 
			
		||||
	align.h		compile time type alignment support
 | 
			
		||||
	dirent.h	POSIX directory(3) interface definitions
 | 
			
		||||
	error.h		error() interface definitions
 | 
			
		||||
	ftw.h		ftwalk() interface definitions
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
12-07-25 pathprobe.c: fix read() loop to handle EINTR
 | 
			
		||||
12-06-28 vmalloc/malloc.c: use sbrk() unless VMALLOC_OPTIONS=mmap or asoinit(0,0,0)!=0 (workaround until next malloc update)
 | 
			
		||||
12-06-28 aso/aso.c: asoinit(0,0,0): 0: no specific init, 1: app initialized
 | 
			
		||||
12-06-27 sfio/sfvprintf.c: allow { L* z* } aliases for I* -- posix will probably pick one
 | 
			
		||||
12-06-27 sfio/sfvprintf.c: allow { L* z* } aliases for I* -- POSIX will probably pick one
 | 
			
		||||
12-06-26 regex/regnexec.c: fix uninitialized variable reference
 | 
			
		||||
12-06-26 comp/setlocale.c: utf8_wctomb() now calls (the correct) wc2utf8()
 | 
			
		||||
12-06-25 string/chresc.c: accept \u[U+<hex>] and \u{U+<hex>}
 | 
			
		||||
| 
						 | 
				
			
			@ -10,7 +10,7 @@
 | 
			
		|||
12-06-18 sfio/_sfopen.c: add 'e' => O_CLOEXEC
 | 
			
		||||
12-06-18 features/fcntl.c: add #define O_CLOEXEC 0 if not defined
 | 
			
		||||
12-06-13 features/float: handle __mips c99 peculiarities
 | 
			
		||||
12-06-13 features/standards: handle __MACH__ posix peculiarities
 | 
			
		||||
12-06-13 features/standards: handle __MACH__ POSIX peculiarities
 | 
			
		||||
12-06-08 sfio/sfclose.c,sfmode.c: sfclose() for sfopopen() stream returns sh-compatible $?
 | 
			
		||||
12-06-08 comp/strtold.c: fix header botch that missed ldexpl() prototype -- ouch
 | 
			
		||||
12-06-06 misc/proclib.h: partially undo <ast_standards.h> for leaked ancient bsd-isms
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +143,7 @@
 | 
			
		|||
10-08-11 misc/conformance.c: check ast_env_serial for dynamic astconf() changes
 | 
			
		||||
10-08-11 port/lcgen.c: remember to fudge Table_t.count for synthesized entries
 | 
			
		||||
10-08-04 include/ast.h,comp/setlocale.c: add { debug C.UTF-8 } mbalpha() mbwidth()
 | 
			
		||||
10-08-02 misc/translate.c: add NLSPATH message cache check 
 | 
			
		||||
10-08-02 misc/translate.c: add NLSPATH message cache check
 | 
			
		||||
10-07-29 string/fmtint.c: fix nasty bug that rendered "1000" as "1"
 | 
			
		||||
10-07-27 setlocale,lsgen,localeconv: handle C vs C_EU decimal thousands sep
 | 
			
		||||
10-07-26 misc/optget.c: fix interaction with nested plugin/builtin calls
 | 
			
		||||
| 
						 | 
				
			
			@ -213,7 +213,7 @@
 | 
			
		|||
10-01-01 ast_std.h: add { AST_LC_internal AST_LC_setenv }
 | 
			
		||||
09-12-24 comp/setlocale.c: fix setlocale(LC_ALL,"") when already initialized
 | 
			
		||||
09-12-17 misc/optget.c: handle mixed solaris usage="x:f:(in)yo:(out)"
 | 
			
		||||
09-12-11 regex/regcomp.c: posix semantics for [z-a]
 | 
			
		||||
09-12-11 regex/regcomp.c: POSIX semantics for [z-a]
 | 
			
		||||
09-12-11 regex/regcomp.c: fix BRE/ERE ^^ logic
 | 
			
		||||
09-12-11 regex/regcomp.c: fix regcomb() for REG_LEFT|REG_RIGHT
 | 
			
		||||
09-12-11 regex/regcomp.c: bm complete=0 if REX_END
 | 
			
		||||
| 
						 | 
				
			
			@ -304,7 +304,7 @@
 | 
			
		|||
08-07-21 include/glob.h,misc/glob.c: GLOB_STARSTAR only forces lstat on chdir
 | 
			
		||||
08-07-17 sfio: sync with kpv
 | 
			
		||||
08-07-17 misc/optget.c: call astwinsize() each time terminal width required
 | 
			
		||||
08-07-16 sfio/sfvscanf.c: fix %% to skip leading space per posix
 | 
			
		||||
08-07-16 sfio/sfvscanf.c: fix %% to skip leading space per POSIX
 | 
			
		||||
08-07-16 vmalloc/vmbest.c: add VMCHECK=m, VM_mmap to favor mmap() alloc
 | 
			
		||||
08-07-16 features/stdio,stdio/f(read|write).c: size_t return value!! ouch
 | 
			
		||||
08-06-24 tm/tmxfmt.c: fix %z to handle tm_isdst -- doh
 | 
			
		||||
| 
						 | 
				
			
			@ -330,7 +330,7 @@
 | 
			
		|||
08-03-06 misc/optget.c: ---* and +++* are now operands
 | 
			
		||||
08-03-06 misc/errorx.c: fix old error_info.translate workaround
 | 
			
		||||
08-02-05 regex/regcomp.c: allow REG_SHELL {,n}... => {0,n}...
 | 
			
		||||
08-02-27 misc/stk.c: top element during allocation relocated to top 
 | 
			
		||||
08-02-27 misc/stk.c: top element during allocation relocated to top
 | 
			
		||||
08-02-18 include/ip6.h,string/strtoip6.c,fmtip6.c: add ipv6 addr support
 | 
			
		||||
08-02-14 regex/regsubexec.c: fix null match (tricky)
 | 
			
		||||
08-02-14 regex/regsubcomp.c: fix SRE to match ksh
 | 
			
		||||
| 
						 | 
				
			
			@ -403,12 +403,12 @@
 | 
			
		|||
07-02-14 include/int.h: drop
 | 
			
		||||
07-02-14 include/sfio.h: add SF_WCWIDTH
 | 
			
		||||
07-02-12 comp/conf.sh: fix CONF_LIMIT bug that missed ULONG_MAX etc.
 | 
			
		||||
07-02-12 comp/conf.tab: *LONGLONG* => *LLONG* to match posix
 | 
			
		||||
07-02-12 features/float: *LONGLONG* => *LLONG* to match posix
 | 
			
		||||
07-02-12 comp/conf.tab: *LONGLONG* => *LLONG* to match POSIX
 | 
			
		||||
07-02-12 features/float: *LONGLONG* => *LLONG* to match POSIX
 | 
			
		||||
07-02-12 port/astconf.c: handle CONF_LIMITS_DEF with no deferral
 | 
			
		||||
07-02-12 stdio/vasprintf.c: add trailing '\0' -- doh
 | 
			
		||||
07-02-04 string/fmtelapsed.c: fix naive multi month/year logic
 | 
			
		||||
07-02-02 misc/optget.c: add --??posix for getopts(1)/getopt(3)
 | 
			
		||||
07-02-02 misc/optget.c: add --??POSIX for getopts(1)/getopt(3)
 | 
			
		||||
07-01-26 string/chresc.c: use mbchar()
 | 
			
		||||
07-01-26 misc/optget.c: handle "o:-:" usage for old-style long options
 | 
			
		||||
07-01-22 sfio/sfdisc.c,sfpool.c: handle push on streams with pending peek
 | 
			
		||||
| 
						 | 
				
			
			@ -502,7 +502,7 @@
 | 
			
		|||
06-06-27 features/float,sfio/sfcvt.c: fix Nan logic
 | 
			
		||||
06-06-27 port/astmath.c: fix long double isnan() test
 | 
			
		||||
06-06-27 features/map.c: _map_libc for std => _ast_std
 | 
			
		||||
06-06-25 string/strperm.c: handle posix = w.r.t. umask
 | 
			
		||||
06-06-25 string/strperm.c: handle POSIX = w.r.t. umask
 | 
			
		||||
06-06-19 port/mnt.c,features/fs: handle netbsd getmntent api change
 | 
			
		||||
06-06-18 regex/regstat.c: add REG_LITERAL check
 | 
			
		||||
06-06-11 cdt/dtview.c: update from kpv
 | 
			
		||||
| 
						 | 
				
			
			@ -750,9 +750,9 @@
 | 
			
		|||
	 vmalloc/malloc.c: _AST_mem_method==_mem_* to force mem get method
 | 
			
		||||
	 sfio/sfputr.c: __ia64 memccpy is bogus -- how many tries do they get?
 | 
			
		||||
	 path/pathshell.c: verify abs path and access(path,X_OK) -- duh
 | 
			
		||||
	 vmalloc/vmhdr.h: add private _Vmessage() for non-sfio ASSERT() 
 | 
			
		||||
	 vmalloc/vmhdr.h: add private _Vmessage() for non-sfio ASSERT()
 | 
			
		||||
	 port/astconf.c: fix bug that always returned the minmax value
 | 
			
		||||
03-06-11 comp/*.c: reorder macro hding for mvs.390 and <ast_map.h> 
 | 
			
		||||
03-06-11 comp/*.c: reorder macro hding for mvs.390 and <ast_map.h>
 | 
			
		||||
	 features/vmalloc: add _lib_brk and _lib_sbrk verification
 | 
			
		||||
	 include/ast_std.h,etc.: add _map_malloc for malloc => _ast_malloc
 | 
			
		||||
	 comp/conf.sh: fix SI_* and *_SI_* macro redefs
 | 
			
		||||
| 
						 | 
				
			
			@ -774,7 +774,7 @@
 | 
			
		|||
03-05-24 misc/optget.c: fix (ancient) argv null dereference
 | 
			
		||||
03-05-23 comp/getcwd.c: don't intercept on _WINIX -- unreliable st_ino
 | 
			
		||||
03-05-22 sfio/sfsprintf.c: n<0 => don't append '\0'
 | 
			
		||||
03-05-18 misc/fts.c: re-stat FTS_DP to update nlink/times 
 | 
			
		||||
03-05-18 misc/fts.c: re-stat FTS_DP to update nlink/times
 | 
			
		||||
	 misc/fts.c: add FTSENT.stack to eliminate getlist() recursion
 | 
			
		||||
	 regex/ucs_names.h: use "..." catenation to placate some cc's
 | 
			
		||||
03-05-11 string/strtoi.h: handle "-" "+" "0x" "11#"
 | 
			
		||||
| 
						 | 
				
			
			@ -1429,7 +1429,7 @@
 | 
			
		|||
98-06-19 tokscan: add %f %g
 | 
			
		||||
98-06-01 disc/sf*.c: memset(0) after disc malloc()
 | 
			
		||||
98-05-11 strelapsed: y==Y
 | 
			
		||||
	 fts: pathcanon() top list 
 | 
			
		||||
	 fts: pathcanon() top list
 | 
			
		||||
98-04-01 error: error_info.time for all msgs, just after cmd id
 | 
			
		||||
	 error: no sfsync(sfstdin)
 | 
			
		||||
	 sfio: sfpool, Sffmt_t update
 | 
			
		||||
| 
						 | 
				
			
			@ -1539,7 +1539,7 @@
 | 
			
		|||
	 sfio.h,stdio.h,ast_common.h: pollution cleanup
 | 
			
		||||
	 magic.c: add | op for switch
 | 
			
		||||
	 Makefile: stdio.h was on both HEADERSRC and HEADERGEN -- don't do that
 | 
			
		||||
	 drop pp:notice to get <sfio.h> ... <ast.h> to work 
 | 
			
		||||
	 drop pp:notice to get <sfio.h> ... <ast.h> to work
 | 
			
		||||
	 regex: add [[:<:]]==\< and [[:>:]]==\> for bsd compat
 | 
			
		||||
	 mime.c: ignore X-* headers while scanning for Content-*
 | 
			
		||||
	 magic.c: check for negative indirect offsets
 | 
			
		||||
| 
						 | 
				
			
			@ -1549,7 +1549,7 @@
 | 
			
		|||
	 magic.c: MAGIFILE is now a : file list
 | 
			
		||||
	 mnt.c: another 4.4 bsd fix -- users must include <sys/crap.h>
 | 
			
		||||
	 common: fix _WIN32 chicken&egg with va_copy
 | 
			
		||||
	 sfio: forgot to set f->val along with _Sfi in sfexcept() 
 | 
			
		||||
	 sfio: forgot to set f->val along with _Sfi in sfexcept()
 | 
			
		||||
	 Makefile: add mini target for uwin libmini.a
 | 
			
		||||
	 sfcvt.c: workaround for flaky long double optimizers
 | 
			
		||||
	 features/common: fix to work with va_list==void*
 | 
			
		||||
| 
						 | 
				
			
			@ -1562,7 +1562,7 @@
 | 
			
		|||
	 regerror: fix for xopen
 | 
			
		||||
	 getopt: fix for xopen
 | 
			
		||||
	 magic: add ciao virtual database
 | 
			
		||||
	 astconf: posix/strict/xopen implies "standard" conformance
 | 
			
		||||
	 astconf: POSIX/strict/xopen implies "standard" conformance
 | 
			
		||||
	 fs3d.h: hide mount prototype
 | 
			
		||||
	 ast_std.h,mnt.c,features/fs: ncr port tweaks
 | 
			
		||||
96-10-31 version 5.0
 | 
			
		||||
| 
						 | 
				
			
			@ -1694,7 +1694,7 @@
 | 
			
		|||
	 oops object / shared library compat with _sfgetl2 _sfgetu2
 | 
			
		||||
95-09-11 add getopt() compatibility
 | 
			
		||||
	 add fstat,lstat,mknod,stat fixes for _x versions in sys/stat.h
 | 
			
		||||
	 add getconf CONFORMANCE - posix for things that aren't ast default
 | 
			
		||||
	 add getconf CONFORMANCE - POSIX for things that aren't ast default
 | 
			
		||||
	 sfio_t.h: #ifndef _SFIO_H #include "sfio.h" #endif
 | 
			
		||||
	 snarf vmalloc from kpv
 | 
			
		||||
95-08-11 fix malloc bug in magic
 | 
			
		||||
| 
						 | 
				
			
			@ -1780,7 +1780,7 @@
 | 
			
		|||
	 , treated like :space: between stropt() options
 | 
			
		||||
	 fix procopen() fd dup to ignore self-dups
 | 
			
		||||
	 add library id[] to misc/state.c
 | 
			
		||||
	 add ftwalk(FTW_METAPHYSICAL) for posix -H
 | 
			
		||||
	 add ftwalk(FTW_METAPHYSICAL) for POSIX -H
 | 
			
		||||
	 sfvprintf() now handles balanced () in %()
 | 
			
		||||
	 add tmfmt() with buffer size check to replace tmform()
 | 
			
		||||
	 add fmttime() calling tmfmt() to fit fmt*() mold
 | 
			
		||||
| 
						 | 
				
			
			@ -1789,9 +1789,9 @@
 | 
			
		|||
	 add EXTTYPE extended header to tar.h
 | 
			
		||||
95-02-14 sfmove() buffer size overflow fix
 | 
			
		||||
	 add _SFSTDIO_H to sfio.h
 | 
			
		||||
	 rename setenv() to setenviron() -- posix finally decided
 | 
			
		||||
	 rename setenv() to setenviron() -- POSIX finally decided
 | 
			
		||||
	 rename <option.h> opt_* to opt_info.*
 | 
			
		||||
	 update features/unistd.c for _SC_* and _PC_* posix additions
 | 
			
		||||
	 update features/unistd.c for _SC_* and _PC_* POSIX additions
 | 
			
		||||
95-01-19 (char*)uchar cast in fmtesc()
 | 
			
		||||
	 fix hash bucket memory leak in hashlook() [via John Mocenigo]
 | 
			
		||||
	 update strings/strtape()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ memmove(void* to, const void* from, register size_t n)
 | 
			
		|||
	if (n <= 0)	/* works if size_t is signed or not */
 | 
			
		||||
		;
 | 
			
		||||
	else if (in + n <= out || out + n <= in)
 | 
			
		||||
		return(memcpy(to, from, n));	/* hope it's fast*/
 | 
			
		||||
		return(memcpy(to, from, n));	/* hope it's fast */
 | 
			
		||||
	else if (out < in)
 | 
			
		||||
		do *out++ = *in++; while (--n > 0);
 | 
			
		||||
	else
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -529,7 +529,7 @@ runve(int mode, const char* path, char* const* argv, char* const* envv)
 | 
			
		|||
	 *	(3) /c/(WINNT|WINDOWS)/system32 /c/(WINNT|WINDOWS)
 | 
			
		||||
	 *	(4) the directories on $PATH
 | 
			
		||||
	 * there are no cygwin dlls in (3), so if (1) and (2) fail
 | 
			
		||||
	 * to produce the required dlls its up to (4)
 | 
			
		||||
	 * to produce the required dlls it's up to (4)
 | 
			
		||||
	 *
 | 
			
		||||
	 * the standard allows PATH to be anything once the path
 | 
			
		||||
	 * to an executable is determined; this code ensures that PATH
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -241,7 +241,7 @@ tst	real_vfork note{ vfork child shares data with parent }end execute{
 | 
			
		|||
	}
 | 
			
		||||
}end
 | 
			
		||||
 | 
			
		||||
tst	lib_posix_spawn unistd.h stdlib.h spawn.h -Dfork=______fork note{ posix_spawn exists and it works and its worth using }end status{
 | 
			
		||||
tst	lib_posix_spawn unistd.h stdlib.h spawn.h -Dfork=______fork note{ posix_spawn exists, it works and it's worth using }end status{
 | 
			
		||||
	#include <sys/types.h>
 | 
			
		||||
	#include <sys/stat.h>
 | 
			
		||||
	#include <sys/wait.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -304,7 +304,7 @@ tst	lib_posix_spawn unistd.h stdlib.h spawn.h -Dfork=______fork note{ posix_spaw
 | 
			
		|||
			NOTE("SIGHUP ignored in parent not ignored in child");
 | 
			
		||||
			_exit(0);
 | 
			
		||||
		}
 | 
			
		||||
		/* must return exec-type errors or its useless to us *unless* there is no [v]fork() */
 | 
			
		||||
		/* must return exec-type errors or it's useless to us *unless* there is no [v]fork() */
 | 
			
		||||
		n = strlen(cmd[0]);
 | 
			
		||||
		if (n >= (sizeof(tmp) - 3))
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,7 +75,7 @@ is ANSI, K&R and C++ compatible and includes or defines the equivalent of
 | 
			
		|||
.L <string.h>
 | 
			
		||||
and
 | 
			
		||||
.LR <unistd.h> .
 | 
			
		||||
Other libraries that depend on 
 | 
			
		||||
Other libraries that depend on
 | 
			
		||||
.B libast
 | 
			
		||||
may also have headers installed in the
 | 
			
		||||
.L include/ast
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -134,7 +134,7 @@ on the same \f5dest\fP with values, say \fIv1\fP and \fIv2\fP.
 | 
			
		|||
The eventual value in \f5dest\fP
 | 
			
		||||
will be as if \f5*dest += 2\fP was performed in a single-threaded execution.
 | 
			
		||||
 | 
			
		||||
That should be constrasted with a situation where, instead of \f5asoinc32()\fP or \f5asodec32()\fP,
 | 
			
		||||
That should be contrasted with a situation where, instead of \f5asoinc32()\fP or \f5asodec32()\fP,
 | 
			
		||||
only normal increment (++) or decrement (--) were used.
 | 
			
		||||
Then, the end result could be either \f5*dest += 1\fP or \f5*dest += 2\fP,
 | 
			
		||||
depending on states of the hardware cache and process scheduling.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -76,7 +76,7 @@ is
 | 
			
		|||
then
 | 
			
		||||
\f5"/"\fP
 | 
			
		||||
is used.
 | 
			
		||||
Otherwise if 
 | 
			
		||||
Otherwise if
 | 
			
		||||
.I path
 | 
			
		||||
is not
 | 
			
		||||
.L 0
 | 
			
		||||
| 
						 | 
				
			
			@ -136,7 +136,7 @@ command options.
 | 
			
		|||
.TP
 | 
			
		||||
.L UNIVERSE
 | 
			
		||||
.L ucb
 | 
			
		||||
for 
 | 
			
		||||
for
 | 
			
		||||
.I Berkeley
 | 
			
		||||
style and
 | 
			
		||||
.L att
 | 
			
		||||
| 
						 | 
				
			
			@ -168,7 +168,7 @@ relative to
 | 
			
		|||
.IR path .
 | 
			
		||||
If
 | 
			
		||||
.I notify
 | 
			
		||||
returns 
 | 
			
		||||
returns
 | 
			
		||||
.L 0
 | 
			
		||||
then the configuration parameter value is not changed.
 | 
			
		||||
.PP
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +188,7 @@ or
 | 
			
		|||
.L R_OK|W_OK
 | 
			
		||||
then all configuration parameters are listed.
 | 
			
		||||
.L R_OK
 | 
			
		||||
lists the readonly configuration parameters and 
 | 
			
		||||
lists the readonly configuration parameters and
 | 
			
		||||
.L W_OK
 | 
			
		||||
lists the settable configuration parameters.
 | 
			
		||||
.L X_OK
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -340,7 +340,7 @@ the key as defined by the \f5Dtdisc_t.size\fP field.
 | 
			
		|||
.PP
 | 
			
		||||
.Ss "  Void_t* (*memoryf)(Dt_t* dt, Void_t* addr, size_t size, Dtdisc_t* disc)"
 | 
			
		||||
If not \f5NULL\fP, \f5memoryf\fP is used to allocate and free memory.
 | 
			
		||||
When \f5addr\fP is \f5NULL\fP, a memory segment of size \f5size\fP is requested. 
 | 
			
		||||
When \f5addr\fP is \f5NULL\fP, a memory segment of size \f5size\fP is requested.
 | 
			
		||||
If \f5addr\fP is not \f5NULL\fP and \f5size\fP is zero, \f5addr\fP is to be freed.
 | 
			
		||||
If \f5addr\fP is not \f5NULL\fP and \f5size\fP is positive,
 | 
			
		||||
\f5addr\fP is to be resized to the given size.
 | 
			
		||||
| 
						 | 
				
			
			@ -485,7 +485,7 @@ For \f5Dtset\fP, \f5Dtbag\fP, \f5Dtrhset\fP and \f5Dtrhbag\fP,
 | 
			
		|||
objects are ordered by some internal order defined at the time when these
 | 
			
		||||
functions are called.
 | 
			
		||||
 | 
			
		||||
Objects in a dictionary or a viewpath can be walked using 
 | 
			
		||||
Objects in a dictionary or a viewpath can be walked using
 | 
			
		||||
a \f5for(;;)\fP loop as below.
 | 
			
		||||
.Cs
 | 
			
		||||
    for(obj = dtfirst(dt); obj; obj = dtnext(dt,obj))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ is not 0 then
 | 
			
		|||
is set to point to the next character in
 | 
			
		||||
.I s
 | 
			
		||||
on return.
 | 
			
		||||
0 is returned and 
 | 
			
		||||
0 is returned and
 | 
			
		||||
.I e
 | 
			
		||||
is not modified when the end of
 | 
			
		||||
.I s
 | 
			
		||||
| 
						 | 
				
			
			@ -77,9 +77,9 @@ value until up to the number of characters in an
 | 
			
		|||
.I int
 | 
			
		||||
is reached.
 | 
			
		||||
This operation is inherently machine-dependent,
 | 
			
		||||
but at least its defined in one place.
 | 
			
		||||
but at least it's defined in one place.
 | 
			
		||||
.PP
 | 
			
		||||
The following 
 | 
			
		||||
The following
 | 
			
		||||
.B \e
 | 
			
		||||
escape sequences are recognized:
 | 
			
		||||
.TP
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ A
 | 
			
		|||
is appended to the message text, so none should appear in the
 | 
			
		||||
.L printf
 | 
			
		||||
format.
 | 
			
		||||
If 
 | 
			
		||||
If
 | 
			
		||||
.I error_info.id
 | 
			
		||||
is not
 | 
			
		||||
.L 0
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +92,7 @@ returns the
 | 
			
		|||
argument, but on some systems it may do language translation via lookup
 | 
			
		||||
on the original source text.
 | 
			
		||||
.RL ( error
 | 
			
		||||
calls 
 | 
			
		||||
calls
 | 
			
		||||
.L ERROR_translate
 | 
			
		||||
with a 0
 | 
			
		||||
.L flag
 | 
			
		||||
| 
						 | 
				
			
			@ -107,7 +107,7 @@ Debug messages are prefixed with
 | 
			
		|||
.BI debug level.
 | 
			
		||||
If
 | 
			
		||||
.I "errno != error_info.last_errno"
 | 
			
		||||
then 
 | 
			
		||||
then
 | 
			
		||||
.I error_info.last_errno
 | 
			
		||||
is set to
 | 
			
		||||
.I errno
 | 
			
		||||
| 
						 | 
				
			
			@ -164,7 +164,7 @@ to the message after
 | 
			
		|||
A usage message is emitted.
 | 
			
		||||
.TP
 | 
			
		||||
.L ERROR_PROMPT
 | 
			
		||||
The trailing 
 | 
			
		||||
The trailing
 | 
			
		||||
.I newline
 | 
			
		||||
is suppressed.
 | 
			
		||||
.TP
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +179,7 @@ The message is from a library routine.
 | 
			
		|||
The elements of the global struct
 | 
			
		||||
.I error_info
 | 
			
		||||
control error output and actions.
 | 
			
		||||
Parts of 
 | 
			
		||||
Parts of
 | 
			
		||||
.I error_info
 | 
			
		||||
can be initialized from the
 | 
			
		||||
.L ERROR_OPTIONS
 | 
			
		||||
| 
						 | 
				
			
			@ -192,14 +192,14 @@ options, described below.
 | 
			
		|||
.I "int core"
 | 
			
		||||
If
 | 
			
		||||
.I "error_info.core != 0"
 | 
			
		||||
then 
 | 
			
		||||
then
 | 
			
		||||
.I "level >= error_info.core"
 | 
			
		||||
generates a core dump.
 | 
			
		||||
Initialized by
 | 
			
		||||
.EX
 | 
			
		||||
ERROR_OPTIONS="core=\fIlevel\fP"
 | 
			
		||||
.EE
 | 
			
		||||
where 
 | 
			
		||||
where
 | 
			
		||||
.I level
 | 
			
		||||
can be a number or one of
 | 
			
		||||
.LR error ,
 | 
			
		||||
| 
						 | 
				
			
			@ -247,7 +247,7 @@ are defined
 | 
			
		|||
.RL ( _TRACE_
 | 
			
		||||
is defined by
 | 
			
		||||
.I makerules
 | 
			
		||||
when 
 | 
			
		||||
when
 | 
			
		||||
.L CCFLAGS
 | 
			
		||||
contains
 | 
			
		||||
.LR \-g ).
 | 
			
		||||
| 
						 | 
				
			
			@ -264,7 +264,7 @@ and
 | 
			
		|||
.L message
 | 
			
		||||
call
 | 
			
		||||
.L liberror
 | 
			
		||||
and 
 | 
			
		||||
and
 | 
			
		||||
.L error
 | 
			
		||||
respectively if
 | 
			
		||||
.IR "error_info.trace<0" .
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,18 +57,18 @@ via
 | 
			
		|||
or
 | 
			
		||||
.IR at .
 | 
			
		||||
.PP
 | 
			
		||||
.L findopen 
 | 
			
		||||
returns a handle to a 
 | 
			
		||||
.L findopen
 | 
			
		||||
returns a handle to a
 | 
			
		||||
.I fastfind
 | 
			
		||||
stream for the 
 | 
			
		||||
.I ksh 
 | 
			
		||||
stream for the
 | 
			
		||||
.I ksh
 | 
			
		||||
file pattern
 | 
			
		||||
.IR pattern .
 | 
			
		||||
.L findnext
 | 
			
		||||
returns the next pathname that matches the pattern specified by
 | 
			
		||||
.IR handle .
 | 
			
		||||
.L findnext
 | 
			
		||||
returns 
 | 
			
		||||
returns
 | 
			
		||||
.L 0
 | 
			
		||||
when no more pathnames match the pattern.
 | 
			
		||||
Finally,
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +78,7 @@ closes the
 | 
			
		|||
stream for
 | 
			
		||||
.IR handle .
 | 
			
		||||
.SH BUGS
 | 
			
		||||
These rotuines are only as good as the
 | 
			
		||||
These routines are only as good as the
 | 
			
		||||
.I fastfind
 | 
			
		||||
information which is in the system administration domain.
 | 
			
		||||
.SH "SEE ALSO"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -167,7 +167,7 @@ mode string for the file mode bits in
 | 
			
		|||
.IR mode .
 | 
			
		||||
If
 | 
			
		||||
.I "external != 0"
 | 
			
		||||
then 
 | 
			
		||||
then
 | 
			
		||||
.I mode
 | 
			
		||||
is
 | 
			
		||||
.IR modecanon (3)
 | 
			
		||||
| 
						 | 
				
			
			@ -191,7 +191,7 @@ pattern
 | 
			
		|||
.L fmtsignal
 | 
			
		||||
returns the signal name, sans
 | 
			
		||||
.LR SIG ,
 | 
			
		||||
for the signal number 
 | 
			
		||||
for the signal number
 | 
			
		||||
.IR sig .
 | 
			
		||||
If
 | 
			
		||||
.I "sig < 0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ formats
 | 
			
		|||
.IR ls (1)
 | 
			
		||||
style file information into the buffer
 | 
			
		||||
.IR buf .
 | 
			
		||||
A pointer to the trailing 0 in 
 | 
			
		||||
A pointer to the trailing 0 in
 | 
			
		||||
.I buf
 | 
			
		||||
is returned.
 | 
			
		||||
.I name
 | 
			
		||||
| 
						 | 
				
			
			@ -130,7 +130,7 @@ The user and group fields are each
 | 
			
		|||
.B LS_W_NAME
 | 
			
		||||
characters wide,
 | 
			
		||||
the
 | 
			
		||||
.B LS_INUMBER 
 | 
			
		||||
.B LS_INUMBER
 | 
			
		||||
field is
 | 
			
		||||
.B LS_W_INUMBER
 | 
			
		||||
characters wide,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -114,7 +114,7 @@ The \fIuserf\fP prototype is:
 | 
			
		|||
    char*          path;    /* full pathname */
 | 
			
		||||
    short          pathlen; /* strlen(path) */
 | 
			
		||||
    unsigned short info;    /* type of object */
 | 
			
		||||
    unsigned short status;  /* status of object */ 
 | 
			
		||||
    unsigned short status;  /* status of object */
 | 
			
		||||
    short          level;   /* depth of object on the search path */
 | 
			
		||||
    short          namelen; /* strlen(name) */
 | 
			
		||||
    char           name[];  /* file name of object */
 | 
			
		||||
| 
						 | 
				
			
			@ -206,7 +206,7 @@ The \fIcomparf\fP prototype is:
 | 
			
		|||
\fIFtwalk\fR normally returns 0.
 | 
			
		||||
On hard errors such as running out of memory, it returns -1.
 | 
			
		||||
\fIFtwalk\fR may also return other values as discussed with respect
 | 
			
		||||
to \fIuserf\fR. 
 | 
			
		||||
to \fIuserf\fR.
 | 
			
		||||
.PP
 | 
			
		||||
\fIFtwflags\fR returns a combination of \fB0, FTW_META, FTW_PHYSICAL\fR
 | 
			
		||||
according to the
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,7 +49,7 @@ char* getcwd(char* \fIbuf\fP, size_t \fIlen\fP);
 | 
			
		|||
.L getcwd
 | 
			
		||||
copies the absolute path name of the current directory info into
 | 
			
		||||
.I buf
 | 
			
		||||
of length 
 | 
			
		||||
of length
 | 
			
		||||
.IR len .
 | 
			
		||||
The return path may be longer than
 | 
			
		||||
.LR PATH_MAX .
 | 
			
		||||
| 
						 | 
				
			
			@ -57,10 +57,10 @@ If
 | 
			
		|||
.I "buff == 0"
 | 
			
		||||
then space is allocated via
 | 
			
		||||
.IR malloc (3)
 | 
			
		||||
and 
 | 
			
		||||
and
 | 
			
		||||
.I len
 | 
			
		||||
extra characters are reserved after the generated path name.
 | 
			
		||||
A pointer to the path name is returned, 
 | 
			
		||||
A pointer to the path name is returned,
 | 
			
		||||
.L 0
 | 
			
		||||
on error.
 | 
			
		||||
.SH "SEE ALSO"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,7 +52,7 @@ and its
 | 
			
		|||
.IR value .
 | 
			
		||||
A
 | 
			
		||||
.I key
 | 
			
		||||
is a sequence of 
 | 
			
		||||
is a sequence of
 | 
			
		||||
.L char
 | 
			
		||||
elements and a
 | 
			
		||||
.I value
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +116,7 @@ The number of lookup collisions.
 | 
			
		|||
.RE
 | 
			
		||||
.TP
 | 
			
		||||
.L "Hash_table_t* scope"
 | 
			
		||||
The table that this scope covers, 
 | 
			
		||||
The table that this scope covers,
 | 
			
		||||
.L NULL
 | 
			
		||||
if the table is not a scope.
 | 
			
		||||
.TP
 | 
			
		||||
| 
						 | 
				
			
			@ -215,11 +215,11 @@ if
 | 
			
		|||
is specified and
 | 
			
		||||
.IR strcmp (3)
 | 
			
		||||
otherwise.
 | 
			
		||||
The first argument is the 
 | 
			
		||||
The first argument is the
 | 
			
		||||
.I key
 | 
			
		||||
from the current hash bucket on the 
 | 
			
		||||
from the current hash bucket on the
 | 
			
		||||
.I "collision chain"
 | 
			
		||||
and the second argument is the user supplied 
 | 
			
		||||
and the second argument is the user supplied
 | 
			
		||||
.IR key .
 | 
			
		||||
.TP
 | 
			
		||||
.L "HASH_free, (int(*)()) free"
 | 
			
		||||
| 
						 | 
				
			
			@ -230,7 +230,7 @@ If
 | 
			
		|||
was set in
 | 
			
		||||
.L hashalloc
 | 
			
		||||
then the hash bucket pointer is passed, otherwise the bucket
 | 
			
		||||
.L value 
 | 
			
		||||
.L value
 | 
			
		||||
pointer is passed.
 | 
			
		||||
.TP
 | 
			
		||||
.L "HASH_hash, (int(*)()) hash"
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ Changes the hash table flags by
 | 
			
		|||
.IR or ing
 | 
			
		||||
in
 | 
			
		||||
.LR flags .
 | 
			
		||||
The flags, which may be 
 | 
			
		||||
The flags, which may be
 | 
			
		||||
.IR or ed
 | 
			
		||||
together, are:
 | 
			
		||||
.RS
 | 
			
		||||
| 
						 | 
				
			
			@ -321,7 +321,7 @@ in the hash table
 | 
			
		|||
.L tab
 | 
			
		||||
according to
 | 
			
		||||
.L flags
 | 
			
		||||
and 
 | 
			
		||||
and
 | 
			
		||||
.LR value .
 | 
			
		||||
A
 | 
			
		||||
.L Hash_bucket_t
 | 
			
		||||
| 
						 | 
				
			
			@ -408,7 +408,7 @@ value is returned.
 | 
			
		|||
For
 | 
			
		||||
.L HASH_LOOKUP
 | 
			
		||||
the bucket
 | 
			
		||||
.L value 
 | 
			
		||||
.L value
 | 
			
		||||
field is returned,
 | 
			
		||||
.L NULL
 | 
			
		||||
if the bucket is not found.
 | 
			
		||||
| 
						 | 
				
			
			@ -481,7 +481,7 @@ in the hash table
 | 
			
		|||
.LR tab .
 | 
			
		||||
If
 | 
			
		||||
.L flags
 | 
			
		||||
is 
 | 
			
		||||
is
 | 
			
		||||
.L HASH_NOSCOPE
 | 
			
		||||
then only the top level hash table is used, otherwise the walk includes
 | 
			
		||||
all scope covered tables.
 | 
			
		||||
| 
						 | 
				
			
			@ -514,7 +514,7 @@ pointer for a sequential scan on the hash table
 | 
			
		|||
.LR tab .
 | 
			
		||||
If
 | 
			
		||||
.L flags
 | 
			
		||||
is 
 | 
			
		||||
is
 | 
			
		||||
.L HASH_NOSCOPE
 | 
			
		||||
then only the top level hash table is used, otherwise the scan includes
 | 
			
		||||
all scope covered tables.
 | 
			
		||||
| 
						 | 
				
			
			@ -534,9 +534,9 @@ If no elements remain then
 | 
			
		|||
is returned.
 | 
			
		||||
.TP
 | 
			
		||||
.L "void hashdone(Hash_position_t* pos)"
 | 
			
		||||
Completes a scan initiated by 
 | 
			
		||||
Completes a scan initiated by
 | 
			
		||||
.L hashscan()
 | 
			
		||||
on 
 | 
			
		||||
on
 | 
			
		||||
.LR pos .
 | 
			
		||||
.TP
 | 
			
		||||
.L "int hashset(Hash_table_t* tab, int flags)"
 | 
			
		||||
| 
						 | 
				
			
			@ -567,14 +567,14 @@ may be cleared.
 | 
			
		|||
Dumps hash table accounting info to standard error.
 | 
			
		||||
If
 | 
			
		||||
.L tab
 | 
			
		||||
is 
 | 
			
		||||
is
 | 
			
		||||
.L NULL
 | 
			
		||||
then all allocated hash tables are dumped, otherwise only information on
 | 
			
		||||
.L tab
 | 
			
		||||
is dumped.
 | 
			
		||||
If
 | 
			
		||||
.L flags
 | 
			
		||||
is 
 | 
			
		||||
is
 | 
			
		||||
.L HASH_BUCKET
 | 
			
		||||
then the hash bucket
 | 
			
		||||
.I key-value
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ These routines provide an interface to the
 | 
			
		|||
command magic file.
 | 
			
		||||
.L magicopen
 | 
			
		||||
returns a magic session handle that is passed to all of the other routines.
 | 
			
		||||
.I flags 
 | 
			
		||||
.I flags
 | 
			
		||||
may be
 | 
			
		||||
.TP
 | 
			
		||||
.L MAGIC_MIME
 | 
			
		||||
| 
						 | 
				
			
			@ -94,13 +94,13 @@ loads the magic file named by
 | 
			
		|||
.I path
 | 
			
		||||
into the magic session.
 | 
			
		||||
.I flags
 | 
			
		||||
are the same as with 
 | 
			
		||||
are the same as with
 | 
			
		||||
.LR magicopen .
 | 
			
		||||
More than one magic file can be loaded into a session;
 | 
			
		||||
the files are searched in load order.
 | 
			
		||||
If
 | 
			
		||||
.I path
 | 
			
		||||
is 
 | 
			
		||||
is
 | 
			
		||||
.L 0
 | 
			
		||||
then the default magic file is loaded.
 | 
			
		||||
.PP
 | 
			
		||||
| 
						 | 
				
			
			@ -133,7 +133,7 @@ flag then
 | 
			
		|||
.I st
 | 
			
		||||
is assumed to contain valid stat information, otherwise
 | 
			
		||||
.L magictype
 | 
			
		||||
calls 
 | 
			
		||||
calls
 | 
			
		||||
.L stat
 | 
			
		||||
on
 | 
			
		||||
.IR st .
 | 
			
		||||
| 
						 | 
				
			
			@ -150,7 +150,7 @@ However, with the extended format it is possible to write a single
 | 
			
		|||
magic file that works on all platforms.
 | 
			
		||||
Most of the net magic files floating around work with
 | 
			
		||||
.LR magic ,
 | 
			
		||||
but they usually double up on 
 | 
			
		||||
but they usually double up on
 | 
			
		||||
.I le
 | 
			
		||||
and
 | 
			
		||||
.I be
 | 
			
		||||
| 
						 | 
				
			
			@ -227,7 +227,7 @@ field is either the offset into the data upon which the current entry operates
 | 
			
		|||
or a file metadata identifier.
 | 
			
		||||
Offsets are either integer constants or offset expressions.
 | 
			
		||||
An offset expression is contained in (...) and is a combination of
 | 
			
		||||
integral arithmetic operators and the 
 | 
			
		||||
integral arithmetic operators and the
 | 
			
		||||
.L @
 | 
			
		||||
indirection operator.
 | 
			
		||||
Indirections take the form
 | 
			
		||||
| 
						 | 
				
			
			@ -238,9 +238,9 @@ The size of the indirection value is taken either from one of the suffixes
 | 
			
		|||
.LR H (short, 2 chars),
 | 
			
		||||
.LR L (long, 4 chars),
 | 
			
		||||
pr
 | 
			
		||||
.LR Q (quead, 8 chars),
 | 
			
		||||
.LR Q (quad, 8 chars),
 | 
			
		||||
or from the
 | 
			
		||||
.L type 
 | 
			
		||||
.L type
 | 
			
		||||
field.
 | 
			
		||||
Valid file metadata identifiers are:
 | 
			
		||||
.TP
 | 
			
		||||
| 
						 | 
				
			
			@ -372,7 +372,7 @@ field takes the form
 | 
			
		|||
.LI & number
 | 
			
		||||
where
 | 
			
		||||
.I number
 | 
			
		||||
is 
 | 
			
		||||
is
 | 
			
		||||
.I anded
 | 
			
		||||
with the integral value at
 | 
			
		||||
.L offset
 | 
			
		||||
| 
						 | 
				
			
			@ -389,13 +389,13 @@ field entries above.
 | 
			
		|||
means any value and applies to all types.
 | 
			
		||||
Integral
 | 
			
		||||
.L type
 | 
			
		||||
expression take the form [\fIoperator\fP] \fIoperand\P where 
 | 
			
		||||
expression take the form [\fIoperator\fP] \fIoperand\P where
 | 
			
		||||
.I operand
 | 
			
		||||
is compared with the data value at
 | 
			
		||||
.L offset
 | 
			
		||||
using
 | 
			
		||||
.IR operator .
 | 
			
		||||
.I operator 
 | 
			
		||||
.I operator
 | 
			
		||||
may be one of
 | 
			
		||||
.LR < .
 | 
			
		||||
.LR <= ,
 | 
			
		||||
| 
						 | 
				
			
			@ -407,7 +407,7 @@ or
 | 
			
		|||
defaults to
 | 
			
		||||
.L ==
 | 
			
		||||
if omitted.
 | 
			
		||||
.I operand 
 | 
			
		||||
.I operand
 | 
			
		||||
may be an integral constant or one of the following builtin function calls:
 | 
			
		||||
.TP
 | 
			
		||||
.L magic()
 | 
			
		||||
| 
						 | 
				
			
			@ -415,7 +415,7 @@ A recursive call to the magic algorithm starting with the data at
 | 
			
		|||
.LR offset .
 | 
			
		||||
.TP
 | 
			
		||||
\f5loop(\fIfunction\fP,\fIoffset\fP,\fIincrement\fP)\fR
 | 
			
		||||
Call 
 | 
			
		||||
Call
 | 
			
		||||
.I function
 | 
			
		||||
starting at
 | 
			
		||||
.I offset
 | 
			
		||||
| 
						 | 
				
			
			@ -447,7 +447,7 @@ then a
 | 
			
		|||
is placed between the descriptions
 | 
			
		||||
(most optional descriptions start with
 | 
			
		||||
.IR comma .)
 | 
			
		||||
The data value at 
 | 
			
		||||
The data value at
 | 
			
		||||
.L offset
 | 
			
		||||
can be referenced in the description using
 | 
			
		||||
.L %s
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ and
 | 
			
		|||
may be the same.
 | 
			
		||||
.PP
 | 
			
		||||
.L memdup
 | 
			
		||||
copies the 
 | 
			
		||||
copies the
 | 
			
		||||
.I n
 | 
			
		||||
byte buffer
 | 
			
		||||
.I buf
 | 
			
		||||
| 
						 | 
				
			
			@ -86,11 +86,11 @@ and
 | 
			
		|||
may be the same.
 | 
			
		||||
.PP
 | 
			
		||||
.L memzero
 | 
			
		||||
sets the first 
 | 
			
		||||
sets the first
 | 
			
		||||
.I n
 | 
			
		||||
bytes in
 | 
			
		||||
.I buf
 | 
			
		||||
to 
 | 
			
		||||
to
 | 
			
		||||
.IR 0 .
 | 
			
		||||
.SH "SEE ALSO"
 | 
			
		||||
Proposed Bell Laboratories ASCII/EBCDIC standard, April 16, 1979.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ These routines provide an interface to the MIME type database.
 | 
			
		|||
.L mimeopen
 | 
			
		||||
returns a mime session handle that is passed to all of the other routines.
 | 
			
		||||
The
 | 
			
		||||
.I flags 
 | 
			
		||||
.I flags
 | 
			
		||||
argument is currently unused.
 | 
			
		||||
.PP
 | 
			
		||||
.L mimeclose
 | 
			
		||||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ More than one mime file can be loaded into a session;
 | 
			
		|||
the files are searched in load order.
 | 
			
		||||
If
 | 
			
		||||
.I path
 | 
			
		||||
is 
 | 
			
		||||
is
 | 
			
		||||
.L 0
 | 
			
		||||
then the default mime file is loaded.
 | 
			
		||||
.PP
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -98,7 +98,7 @@ The traditional bit access macro (\f5S_\fP prefix changes to \f5X_\fP) are:
 | 
			
		|||
and
 | 
			
		||||
.L X_IRWXO .
 | 
			
		||||
.LI X_ITYPE( mode )
 | 
			
		||||
returns the type bits for 
 | 
			
		||||
returns the type bits for
 | 
			
		||||
.IR mode .
 | 
			
		||||
.SH "SEE ALSO"
 | 
			
		||||
pax(1), stat(2)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ Path buffers are assumed to be of size
 | 
			
		|||
.L <ast.h>
 | 
			
		||||
always defines
 | 
			
		||||
.LR PATH_MAX ,
 | 
			
		||||
even if it indeterminant on the local system.
 | 
			
		||||
even if it's indeterminate on the local system.
 | 
			
		||||
Yes, this was probably a bad choice, but it was made about 10 years ago.
 | 
			
		||||
We will probably move to a <stk.h> based implementation.
 | 
			
		||||
.PP
 | 
			
		||||
| 
						 | 
				
			
			@ -80,7 +80,7 @@ with access
 | 
			
		|||
.L mode
 | 
			
		||||
using the
 | 
			
		||||
.L :
 | 
			
		||||
separated directories in 
 | 
			
		||||
separated directories in
 | 
			
		||||
.IR dirs .
 | 
			
		||||
Both
 | 
			
		||||
.I a
 | 
			
		||||
| 
						 | 
				
			
			@ -109,11 +109,11 @@ A regular file.
 | 
			
		|||
.L PATH_ABSOLUTE
 | 
			
		||||
Generated path name is rooted at
 | 
			
		||||
.LR / .
 | 
			
		||||
.I path 
 | 
			
		||||
.I path
 | 
			
		||||
is returned, 0 on error.
 | 
			
		||||
.PP
 | 
			
		||||
.L pathbin
 | 
			
		||||
returns a pointer to the 
 | 
			
		||||
returns a pointer to the
 | 
			
		||||
.L :
 | 
			
		||||
separated list of directories to search for executable commands.
 | 
			
		||||
The
 | 
			
		||||
| 
						 | 
				
			
			@ -130,7 +130,7 @@ canonicalizes the path
 | 
			
		|||
in place.
 | 
			
		||||
A pointer to the trailing 0 in the canonicalized path is returned.
 | 
			
		||||
A canonical path has:
 | 
			
		||||
redundant 
 | 
			
		||||
redundant
 | 
			
		||||
.L .
 | 
			
		||||
and
 | 
			
		||||
.L /
 | 
			
		||||
| 
						 | 
				
			
			@ -156,7 +156,7 @@ Symbolic links are resolved at each component.
 | 
			
		|||
If an error occurs and either of
 | 
			
		||||
.L PATH_DOTDOT
 | 
			
		||||
or
 | 
			
		||||
.L PATH_EXISTS 
 | 
			
		||||
.L PATH_EXISTS
 | 
			
		||||
is set then
 | 
			
		||||
.I path
 | 
			
		||||
will contain the components following the failure point.
 | 
			
		||||
| 
						 | 
				
			
			@ -205,7 +205,7 @@ is longer than
 | 
			
		|||
then it is split up into a sequence of relative paths and
 | 
			
		||||
.I chdir
 | 
			
		||||
is called on each of these.
 | 
			
		||||
For any given system, if you got to a directory, then 
 | 
			
		||||
For any given system, if you got to a directory, then
 | 
			
		||||
.L pathcd
 | 
			
		||||
can get you back, modulo permission and link changes.
 | 
			
		||||
.PP
 | 
			
		||||
| 
						 | 
				
			
			@ -231,13 +231,13 @@ by converting non-standard dynamic link text to
 | 
			
		|||
converts in the other direction.
 | 
			
		||||
.PP
 | 
			
		||||
.L pathkey
 | 
			
		||||
generates in 
 | 
			
		||||
generates in
 | 
			
		||||
.I key
 | 
			
		||||
a 14 character lookup key (plus terminating 0) for the language
 | 
			
		||||
.I lang
 | 
			
		||||
processor in
 | 
			
		||||
.IR path .
 | 
			
		||||
A poihter to the key is returned, 0 on error.
 | 
			
		||||
A pointer to the key is returned, 0 on error.
 | 
			
		||||
If
 | 
			
		||||
.I "key == 0"
 | 
			
		||||
then space is allocated via
 | 
			
		||||
| 
						 | 
				
			
			@ -270,9 +270,9 @@ and the
 | 
			
		|||
environment variable (set by
 | 
			
		||||
.IR ksh (1) )
 | 
			
		||||
are used for related root searching.
 | 
			
		||||
If 
 | 
			
		||||
If
 | 
			
		||||
.I p
 | 
			
		||||
also contains a 
 | 
			
		||||
also contains a
 | 
			
		||||
.L /
 | 
			
		||||
then
 | 
			
		||||
.I ../p
 | 
			
		||||
| 
						 | 
				
			
			@ -367,14 +367,14 @@ where the length of
 | 
			
		|||
if !=0, is limited to 5, the length of
 | 
			
		||||
.I <pid>
 | 
			
		||||
(the base 64 representation of the current process id)
 | 
			
		||||
is limited to 3, and 
 | 
			
		||||
is limited to 3, and
 | 
			
		||||
.I <suf>
 | 
			
		||||
(an internally generated suffix that avoid file confilicts)
 | 
			
		||||
(an internally generated suffix that avoid file conflicts)
 | 
			
		||||
is limited to 3.
 | 
			
		||||
The generated path name conforms to the classic UNIX 14 char and the DOS
 | 
			
		||||
.LR 8.3
 | 
			
		||||
limitations.
 | 
			
		||||
Both 
 | 
			
		||||
Both
 | 
			
		||||
.I dir
 | 
			
		||||
and
 | 
			
		||||
.I pfx
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,10 +92,10 @@ In this case
 | 
			
		|||
is set to indicate the error.
 | 
			
		||||
.TP
 | 
			
		||||
.L ispreroot
 | 
			
		||||
Non-zero is returned if 
 | 
			
		||||
Non-zero is returned if
 | 
			
		||||
.I dir
 | 
			
		||||
is the current process preroot.
 | 
			
		||||
If 
 | 
			
		||||
If
 | 
			
		||||
.I dir
 | 
			
		||||
is
 | 
			
		||||
.B 0
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +124,7 @@ with the process preroot set to
 | 
			
		|||
must be a
 | 
			
		||||
.BR 0 -terminated
 | 
			
		||||
argument array.
 | 
			
		||||
If 
 | 
			
		||||
If
 | 
			
		||||
.I argv
 | 
			
		||||
is
 | 
			
		||||
.B 0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,12 +72,12 @@ and flags in
 | 
			
		|||
.IR flags .
 | 
			
		||||
.PP
 | 
			
		||||
.I command
 | 
			
		||||
is searched for using the 
 | 
			
		||||
is searched for using the
 | 
			
		||||
.L PATH
 | 
			
		||||
environment variable from the calling environment.
 | 
			
		||||
If
 | 
			
		||||
.I command
 | 
			
		||||
is 
 | 
			
		||||
is
 | 
			
		||||
.L 0
 | 
			
		||||
then the current shell is used (see
 | 
			
		||||
.IR pathshell (3)).
 | 
			
		||||
| 
						 | 
				
			
			@ -85,7 +85,7 @@ If
 | 
			
		|||
.I envv
 | 
			
		||||
is not
 | 
			
		||||
.L 0
 | 
			
		||||
then it is a 
 | 
			
		||||
then it is a
 | 
			
		||||
.L 0
 | 
			
		||||
terminated vector of
 | 
			
		||||
\fIname\fP[=\fIvalue\fP]
 | 
			
		||||
| 
						 | 
				
			
			@ -110,9 +110,9 @@ and will appear at the top of the child environment.
 | 
			
		|||
.PP
 | 
			
		||||
If
 | 
			
		||||
.I opv
 | 
			
		||||
is not 
 | 
			
		||||
is not
 | 
			
		||||
.L 0
 | 
			
		||||
then it is a 0 terminaled vector of operations to perform.
 | 
			
		||||
then it is a zero-terminated vector of operations to perform.
 | 
			
		||||
In the following
 | 
			
		||||
.I context
 | 
			
		||||
is a combination of
 | 
			
		||||
| 
						 | 
				
			
			@ -131,7 +131,7 @@ is closed in
 | 
			
		|||
\f5PROC_FD_DUP(\fIfrom\fP,\fIto\fP,\fIcontext\fP)\fR
 | 
			
		||||
The file descriptor
 | 
			
		||||
.I from
 | 
			
		||||
is 
 | 
			
		||||
is
 | 
			
		||||
.IR dup (2)'d
 | 
			
		||||
into the file descriptor
 | 
			
		||||
.I to
 | 
			
		||||
| 
						 | 
				
			
			@ -155,7 +155,7 @@ in the child context.
 | 
			
		|||
\f5PROC_SYS_PGRP(\fIpgid\fP)\fR
 | 
			
		||||
The child process group is set to
 | 
			
		||||
.IR pgid .
 | 
			
		||||
.I pgid 
 | 
			
		||||
.I pgid
 | 
			
		||||
may have the following values:
 | 
			
		||||
.TP
 | 
			
		||||
.L <0
 | 
			
		||||
| 
						 | 
				
			
			@ -190,7 +190,7 @@ when
 | 
			
		|||
is a shell script.
 | 
			
		||||
.TP
 | 
			
		||||
.L PROC_BACKGROUND
 | 
			
		||||
Standard shell 
 | 
			
		||||
Standard shell
 | 
			
		||||
.L &
 | 
			
		||||
setup is done for the child process.
 | 
			
		||||
.TP
 | 
			
		||||
| 
						 | 
				
			
			@ -241,7 +241,7 @@ if it is a shell script.
 | 
			
		|||
.L PROC_PRIVELEGED
 | 
			
		||||
If the effective user id is
 | 
			
		||||
.L 0
 | 
			
		||||
then the child real user id is set to 
 | 
			
		||||
then the child real user id is set to
 | 
			
		||||
.L 0
 | 
			
		||||
and the child real group id is set to the effective group id.
 | 
			
		||||
.TP
 | 
			
		||||
| 
						 | 
				
			
			@ -274,7 +274,7 @@ The child process id.
 | 
			
		|||
.TP
 | 
			
		||||
.L "pid_t \fIpgrp\fP"
 | 
			
		||||
The child process group.
 | 
			
		||||
.TP 
 | 
			
		||||
.TP
 | 
			
		||||
.L "int \fIrfd\fP"
 | 
			
		||||
A read file descriptor connected to
 | 
			
		||||
.IR command 's
 | 
			
		||||
| 
						 | 
				
			
			@ -308,9 +308,9 @@ Presumably some other mechanism will be used to wait for
 | 
			
		|||
.IR proc.pid .
 | 
			
		||||
.PP
 | 
			
		||||
.L procrun
 | 
			
		||||
combines 
 | 
			
		||||
combines
 | 
			
		||||
.L procopen
 | 
			
		||||
and 
 | 
			
		||||
and
 | 
			
		||||
.L procclose
 | 
			
		||||
with the flags
 | 
			
		||||
.L PROC_GID|PROC_UID
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -105,7 +105,7 @@ then the array
 | 
			
		|||
is filled with character pointers to the substrings of
 | 
			
		||||
.I source
 | 
			
		||||
that correspond to the
 | 
			
		||||
parenthesized subexpressions of 
 | 
			
		||||
parenthesized subexpressions of
 | 
			
		||||
.IR pattern :
 | 
			
		||||
.I re\->match[i].sp
 | 
			
		||||
points to the beginning and
 | 
			
		||||
| 
						 | 
				
			
			@ -128,12 +128,12 @@ are filled with zeros.
 | 
			
		|||
Matches involving
 | 
			
		||||
.LR * ,
 | 
			
		||||
.LR + ,
 | 
			
		||||
and 
 | 
			
		||||
and
 | 
			
		||||
.L ?
 | 
			
		||||
are extended as far as possible.
 | 
			
		||||
A maximum of 9 subexpressions will be matched.
 | 
			
		||||
The structure of elements of
 | 
			
		||||
.I re\->match 
 | 
			
		||||
.I re\->match
 | 
			
		||||
is:
 | 
			
		||||
.nf
 | 
			
		||||
.ta 8n
 | 
			
		||||
| 
						 | 
				
			
			@ -168,7 +168,7 @@ string delimited by
 | 
			
		|||
.LI re\->match[ n ].sp
 | 
			
		||||
and
 | 
			
		||||
.LI re\->match[ n ].ep .
 | 
			
		||||
Each instance of 
 | 
			
		||||
Each instance of
 | 
			
		||||
.L &
 | 
			
		||||
is replaced by the string delimited by
 | 
			
		||||
.I re\->match[0].sp
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -165,7 +165,7 @@ long       sffmtversion(Sffmt_t* fe, type);
 | 
			
		|||
.ft 5
 | 
			
		||||
Void_t*    sfsetbuf(Sfio_t* f, Void_t* buf, size_t size);
 | 
			
		||||
int        sfsync(Sfio_t* f);
 | 
			
		||||
int        sfpoll(Sfio_t** flist, int n, int timeout); 
 | 
			
		||||
int        sfpoll(Sfio_t** flist, int n, int timeout);
 | 
			
		||||
Sfio_t*    sfpool(Sfio_t* f, Sfio_t* poolf, int mode);
 | 
			
		||||
int        sfpurge(Sfio_t* f);
 | 
			
		||||
.ft 1
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +188,7 @@ SF_DPUSH
 | 
			
		|||
SF_DPOP
 | 
			
		||||
SF_DPOLL
 | 
			
		||||
SF_DBUFFER
 | 
			
		||||
SF_SYNC	
 | 
			
		||||
SF_SYNC
 | 
			
		||||
SF_PURGE
 | 
			
		||||
SF_FINAL
 | 
			
		||||
SF_READY
 | 
			
		||||
| 
						 | 
				
			
			@ -283,7 +283,7 @@ stream pools for automatic data synchronization.
 | 
			
		|||
Applications can extend the \f5sfprintf()/sfscanf()\fP functions
 | 
			
		||||
to define their own conversion patterns as well as redefine existing ones.
 | 
			
		||||
.PP
 | 
			
		||||
A discipline defines analogues of 
 | 
			
		||||
A discipline defines analogues of
 | 
			
		||||
the system calls \f5read(2), write(2)\fP and \f5lseek(2)\fP.
 | 
			
		||||
Such system calls or their discipline replacements are used to process stream data.
 | 
			
		||||
Henceforth, ``\fIsystem call\fP'' will refer to either a system call
 | 
			
		||||
| 
						 | 
				
			
			@ -455,8 +455,8 @@ no longer behave as macros. Thus, an application that requires such fast macro f
 | 
			
		|||
should leave \f5SF_MTSAFE\fP off and performs explicit locking with \f5sfmutex()\fP.
 | 
			
		||||
.Tp
 | 
			
		||||
\f5SF_IOINTR\fP:
 | 
			
		||||
This flag indicates that I/O system calls should not be resumed 
 | 
			
		||||
after being interrupted by signals. It is useful for 
 | 
			
		||||
This flag indicates that I/O system calls should not be resumed
 | 
			
		||||
after being interrupted by signals. It is useful for
 | 
			
		||||
aborting I/O operations on such interruptions. Note, however,
 | 
			
		||||
that certain operating systems (e.g., BSD Unix systems) may automatically
 | 
			
		||||
resume interrupted system calls outside the scope of the library. On such systems,
 | 
			
		||||
| 
						 | 
				
			
			@ -784,7 +784,7 @@ from input stream \f5fr\fP to output stream \f5fw\fP.
 | 
			
		|||
 | 
			
		||||
An object can be either a byte if the record separator argument
 | 
			
		||||
\f5rsc\fP is negative or a record of \f5rsc\fP is non-negative.
 | 
			
		||||
In the latter case, a record is incomplete if it does not end in \f5rsc\fP. 
 | 
			
		||||
In the latter case, a record is incomplete if it does not end in \f5rsc\fP.
 | 
			
		||||
Generally speaking, a stream can have at most one incomplete record.
 | 
			
		||||
If \f5n\fP is negative, all complete objects of \f5fr\fP will be moved.
 | 
			
		||||
Otherwise, \f5n\fP indicates the number of objects to move.
 | 
			
		||||
| 
						 | 
				
			
			@ -866,7 +866,7 @@ call can be obtained in another \f5sfreserve()\fP call with the argument
 | 
			
		|||
\f5type\fP being \f5SF_LASTR\fP. The second argument \f5n\fP
 | 
			
		||||
to \f5sfreserve()\fP will be ignored in this case.
 | 
			
		||||
 | 
			
		||||
A \f5sfreserve()\fP call is successful if it can obtain a data block 
 | 
			
		||||
A \f5sfreserve()\fP call is successful if it can obtain a data block
 | 
			
		||||
of size at least the absolute value of \f5n\fP.
 | 
			
		||||
For a \f5SF_READ\fP atream, the argument \f5n\fP is treated as follows:
 | 
			
		||||
.Tp
 | 
			
		||||
| 
						 | 
				
			
			@ -986,7 +986,7 @@ which contains the following elements:
 | 
			
		|||
 | 
			
		||||
    char*        form;   /* format string to stack     */
 | 
			
		||||
    va_list      args;   /* corresponding arg list     */
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
    int          fmt;    /* pattern being processed    */
 | 
			
		||||
    ssize_t      size;   /* object size                */
 | 
			
		||||
    int          flags;  /* formatting control flags   */
 | 
			
		||||
| 
						 | 
				
			
			@ -1100,7 +1100,7 @@ Arguments are always processed in order and
 | 
			
		|||
\f5fe->extf\fP is called exactly once per argument.
 | 
			
		||||
Note that, when \f5pos$\fP (below) is not used anywhere in a format string,
 | 
			
		||||
each argument is used exactly once per a corresponding pattern.
 | 
			
		||||
In that case, \f5fe->extf\fP is called 
 | 
			
		||||
In that case, \f5fe->extf\fP is called
 | 
			
		||||
as soon as the pattern is recognized and before any scanning or formatting.
 | 
			
		||||
On the other hand, when \f5pos$\fP is used in a format string,
 | 
			
		||||
an argument may be used multiple times.
 | 
			
		||||
| 
						 | 
				
			
			@ -1257,7 +1257,7 @@ In the second case, a given decimal value would define a size while
 | 
			
		|||
Then, if the conversion specifier is \f5s\fP, this size defines the
 | 
			
		||||
length of the string or strings being formatted (see the discussion of \f5base\fP below).
 | 
			
		||||
For integer and floating point patterns,
 | 
			
		||||
the size is used to select a type from one of the below lists as 
 | 
			
		||||
the size is used to select a type from one of the below lists as
 | 
			
		||||
indicated by the conversion specifier:
 | 
			
		||||
 | 
			
		||||
.nf
 | 
			
		||||
| 
						 | 
				
			
			@ -1270,7 +1270,7 @@ indicated by the conversion specifier:
 | 
			
		|||
 | 
			
		||||
The selection algorithm always matches types from left to right in any given list.
 | 
			
		||||
Although selection is generally based on sizes in bytes,
 | 
			
		||||
for compatibility with Microsoft-C, the size 64 
 | 
			
		||||
for compatibility with Microsoft-C, the size 64
 | 
			
		||||
is matched with an appropriate type with the same number of bits, if any.
 | 
			
		||||
If the given size does not match any of the listed types,
 | 
			
		||||
it shall match one of \f5int\fP, \f5unsigned int\fP, and \f5double\fP
 | 
			
		||||
| 
						 | 
				
			
			@ -1517,7 +1517,7 @@ indicated by the conversion specifier:
 | 
			
		|||
 | 
			
		||||
The selection algorithm always matches types from left to right in any given list.
 | 
			
		||||
Although selection is generally based on sizes in bytes,
 | 
			
		||||
for compatibility with Microsoft-C, the size 64 
 | 
			
		||||
for compatibility with Microsoft-C, the size 64
 | 
			
		||||
is matched with an appropriate type with the same number of bits, if any.
 | 
			
		||||
If the given size does not match any of the listed types,
 | 
			
		||||
it shall match one of \f5int\fP, \f5unsigned int\fP, and \f5double\fP
 | 
			
		||||
| 
						 | 
				
			
			@ -1738,7 +1738,7 @@ the discipline that was pushed down.
 | 
			
		|||
 | 
			
		||||
Note that a discipline can be used on only one stream at a time.
 | 
			
		||||
An application should take care to allocate different discipline
 | 
			
		||||
structures for use with different streams. 
 | 
			
		||||
structures for use with different streams.
 | 
			
		||||
A discipline structure is of the type \f5Sfdisc_t\fP which
 | 
			
		||||
contains the following public fields:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1854,7 +1854,7 @@ I/O modes are ready.
 | 
			
		|||
.Tp
 | 
			
		||||
\f5SF_SYNC\fP, \f5SF_PURGE\fP:
 | 
			
		||||
If \f5SF_IOCHECK\fP is set,
 | 
			
		||||
these events are raised respectively for a \f5sfsync()\fP or \f5sfpurge()\fP call. 
 | 
			
		||||
these events are raised respectively for a \f5sfsync()\fP or \f5sfpurge()\fP call.
 | 
			
		||||
In each case, the respective event is raised once before the appropriate
 | 
			
		||||
operation (synchronization or purging) with \f5((int)value)\fP being \f51\fP
 | 
			
		||||
and once after with \f5((int)value)\fP being \f50\fP.
 | 
			
		||||
| 
						 | 
				
			
			@ -2066,7 +2066,7 @@ On such a call, if the return value is negative, \f5sfwalk()\fP will terminate.
 | 
			
		|||
Otherwise, it returns the return value from the last invocation of \f5walkf()\fP.
 | 
			
		||||
 | 
			
		||||
As an example, the call \f5sfwalk(walkf, data, SF_READ)\fP will iterate over all streams
 | 
			
		||||
opened for reading. Similarly, \f5sfwalk(walkf, data, SF_READ|SF_WRITE)\fP 
 | 
			
		||||
opened for reading. Similarly, \f5sfwalk(walkf, data, SF_READ|SF_WRITE)\fP
 | 
			
		||||
iterates over all streams opened for both reading and writing.
 | 
			
		||||
Lastly, \f5sfwalk(walkf, data, 0)\fP iterates over all streams.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,7 +90,7 @@ do this on systems that don't support
 | 
			
		|||
.IR fork (2).
 | 
			
		||||
This makes porting to NT and Windows a snap: a simple
 | 
			
		||||
.IR iffe (1)
 | 
			
		||||
probe provides a 
 | 
			
		||||
probe provides a
 | 
			
		||||
.L spawnveg
 | 
			
		||||
implementation using the NT or Windows process primitives.
 | 
			
		||||
.SH "SEE ALSO"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,14 +56,14 @@ install it as the active stack.
 | 
			
		|||
A stack is created with the \f5stakcreate\fP() function.
 | 
			
		||||
A \fIflags\fP argument of \f5STAK_SMALL\fP indicates that unused
 | 
			
		||||
space on the stack should be freed whenever this stack ceases
 | 
			
		||||
to be the active stack. 
 | 
			
		||||
to be the active stack.
 | 
			
		||||
If successful,
 | 
			
		||||
\f5stakcreate\fP() returns a pointer to a stack whose reference
 | 
			
		||||
count is 1.
 | 
			
		||||
Otherwise, \f5stakcreate\fP() returns a null pointer.
 | 
			
		||||
The \f5staklink\fP() function increases the reference count for the
 | 
			
		||||
given \fIstack\fP.
 | 
			
		||||
The \f5stakinstall\fP() function 
 | 
			
		||||
The \f5stakinstall\fP() function
 | 
			
		||||
makes the specified \fIstack\fP the active stack and returns a pointer
 | 
			
		||||
to the previous active stack.
 | 
			
		||||
When the \fIoverflow\fP argument is not null,
 | 
			
		||||
| 
						 | 
				
			
			@ -113,7 +113,7 @@ If \fIaddress\fP is not the address of an object on the
 | 
			
		|||
stack the result is undefined.
 | 
			
		||||
.PP
 | 
			
		||||
The remaining functions are used to build the current object incrementally.
 | 
			
		||||
An object that is built incrementally on the stack will  
 | 
			
		||||
An object that is built incrementally on the stack will
 | 
			
		||||
always occupy contiguous memory within a stack frame but
 | 
			
		||||
until \f5stakfreeze\fP() is called,
 | 
			
		||||
the location in memory for the object can change.
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +123,7 @@ Initially, this offset is zero, and the offset changes as a result
 | 
			
		|||
of the operations you specify.
 | 
			
		||||
The \f5stakseek\fP() function is used set the offset for the
 | 
			
		||||
current object.
 | 
			
		||||
The \fIoffset\fP argument to \f5stakseek\fP() specifies the new 
 | 
			
		||||
The \fIoffset\fP argument to \f5stakseek\fP() specifies the new
 | 
			
		||||
offset for the current object.
 | 
			
		||||
The frame will be extended or moved
 | 
			
		||||
if \f5offset\fP causes the new current offset to extend beyond the
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,14 +57,14 @@ install it as the active stack.
 | 
			
		|||
A stack is created with the \f5stkopen\fP() function.
 | 
			
		||||
A \fIflags\fP argument of \f5STK_SMALL\fP indicates that unused
 | 
			
		||||
space on the stack should be freed whenever this stack ceases
 | 
			
		||||
to be the active stack. 
 | 
			
		||||
to be the active stack.
 | 
			
		||||
If successful,
 | 
			
		||||
\f5stkopen\fP() returns a pointer to a stack whose reference
 | 
			
		||||
count is 1.
 | 
			
		||||
Otherwise, \f5stkopen\fP() returns a null pointer.
 | 
			
		||||
The \f5stklink\fP() function increases the reference count for the
 | 
			
		||||
given \fIstack\fP.
 | 
			
		||||
The \f5stkinstall\fP() function 
 | 
			
		||||
The \f5stkinstall\fP() function
 | 
			
		||||
makes the specified \fIstack\fP the active stack and returns a pointer
 | 
			
		||||
to the previous active stack.
 | 
			
		||||
When the \fIoverflow\fP argument is not null,
 | 
			
		||||
| 
						 | 
				
			
			@ -115,7 +115,7 @@ stack the result is undefined.
 | 
			
		|||
.PP
 | 
			
		||||
The \f5sfio\fP(3) output functions can be used to build
 | 
			
		||||
current object incrementally.
 | 
			
		||||
An object that is built incrementally on the stack will  
 | 
			
		||||
An object that is built incrementally on the stack will
 | 
			
		||||
always occupy contiguous memory within a stack frame but
 | 
			
		||||
until \f5stkfreeze\fP() is called,
 | 
			
		||||
the location in memory for the object can change.
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +125,7 @@ Initially, this offset is zero, and the offset changes as a result
 | 
			
		|||
of the operations you specify.
 | 
			
		||||
The \f5stkseek\fP() function is used set the offset for the
 | 
			
		||||
current object.
 | 
			
		||||
The \fIoffset\fP argument to \f5stkseek\fP() specifies the new 
 | 
			
		||||
The \fIoffset\fP argument to \f5stkseek\fP() specifies the new
 | 
			
		||||
offset for the current object.
 | 
			
		||||
The frame will be extended or moved
 | 
			
		||||
if \f5offset\fP causes the new current offset to extend beyond the
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ stresc \- convert character constants in string
 | 
			
		|||
.L "int stresc(char* s)"
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
.I stresc
 | 
			
		||||
converts 
 | 
			
		||||
converts
 | 
			
		||||
.L \e
 | 
			
		||||
character constant expressions in the nul-terminated string
 | 
			
		||||
.I s
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ Except for
 | 
			
		|||
.I &
 | 
			
		||||
and
 | 
			
		||||
.IR ! ,
 | 
			
		||||
each shell pattern has an equivalent 
 | 
			
		||||
each shell pattern has an equivalent
 | 
			
		||||
.IR egrep (1)
 | 
			
		||||
construct.
 | 
			
		||||
.EX
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ where
 | 
			
		|||
.I name
 | 
			
		||||
must be one of the option names in
 | 
			
		||||
.IR tab ,
 | 
			
		||||
.I value 
 | 
			
		||||
.I value
 | 
			
		||||
is an optional value, and
 | 
			
		||||
.B no
 | 
			
		||||
is for Boolean options.
 | 
			
		||||
| 
						 | 
				
			
			@ -108,7 +108,7 @@ is not found in
 | 
			
		|||
.I tab
 | 
			
		||||
then
 | 
			
		||||
.I fun
 | 
			
		||||
is called with 
 | 
			
		||||
is called with
 | 
			
		||||
.I p
 | 
			
		||||
pointing to an internal
 | 
			
		||||
.I namval
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,7 +48,7 @@ applies a file permission expression in the nul-terminated string
 | 
			
		|||
to the initial file permission mask
 | 
			
		||||
.IR p .
 | 
			
		||||
The new permission mask is returned.
 | 
			
		||||
If 
 | 
			
		||||
If
 | 
			
		||||
.I e
 | 
			
		||||
not 0 then
 | 
			
		||||
.I *e
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,7 +56,7 @@ elements using the comparison function
 | 
			
		|||
.I compare
 | 
			
		||||
returns
 | 
			
		||||
.L \-1
 | 
			
		||||
if 
 | 
			
		||||
if
 | 
			
		||||
.I a
 | 
			
		||||
is lexicographically less than
 | 
			
		||||
.IR b ,
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ is equal to
 | 
			
		|||
.IR b ,
 | 
			
		||||
and
 | 
			
		||||
.L 1
 | 
			
		||||
if 
 | 
			
		||||
if
 | 
			
		||||
.I a
 | 
			
		||||
is lexicographically greater than
 | 
			
		||||
.IR b .
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ converts the generic tape device specification in the nul-terminated string
 | 
			
		|||
.I s
 | 
			
		||||
to a local tape device pathname.
 | 
			
		||||
A pointer to the device pathname is returned.
 | 
			
		||||
If 
 | 
			
		||||
If
 | 
			
		||||
.I e
 | 
			
		||||
not 0 then
 | 
			
		||||
.I *e
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ strton \- convert string to long integer
 | 
			
		|||
converts the nul-terminated string
 | 
			
		||||
.I s
 | 
			
		||||
to a long integer.
 | 
			
		||||
If 
 | 
			
		||||
If
 | 
			
		||||
.I e
 | 
			
		||||
not 0 then
 | 
			
		||||
.I *e
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +63,7 @@ All but
 | 
			
		|||
are optional.
 | 
			
		||||
.I sign
 | 
			
		||||
may be \+ or \-.
 | 
			
		||||
.I base 
 | 
			
		||||
.I base
 | 
			
		||||
may be:
 | 
			
		||||
.TP
 | 
			
		||||
.B 0x
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ and
 | 
			
		|||
.PP
 | 
			
		||||
.L swapop
 | 
			
		||||
returns the swap operation required to convert the
 | 
			
		||||
.L width 
 | 
			
		||||
.L width
 | 
			
		||||
byte integer
 | 
			
		||||
.L external
 | 
			
		||||
to the
 | 
			
		||||
| 
						 | 
				
			
			@ -85,7 +85,7 @@ and
 | 
			
		|||
.L 1
 | 
			
		||||
with bytes
 | 
			
		||||
.L 2
 | 
			
		||||
and 
 | 
			
		||||
and
 | 
			
		||||
.LR 3 .
 | 
			
		||||
.TP
 | 
			
		||||
.L 4
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ in the header
 | 
			
		|||
described in
 | 
			
		||||
.IR int (3).
 | 
			
		||||
.PP
 | 
			
		||||
.L swapget 
 | 
			
		||||
.L swapget
 | 
			
		||||
returns the
 | 
			
		||||
.L width
 | 
			
		||||
byte integer in the buffer
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +109,7 @@ byte integer in the buffer
 | 
			
		|||
swapped according to
 | 
			
		||||
.LR op .
 | 
			
		||||
.PP
 | 
			
		||||
.L swapput 
 | 
			
		||||
.L swapput
 | 
			
		||||
copies the
 | 
			
		||||
.L width
 | 
			
		||||
byte integer
 | 
			
		||||
| 
						 | 
				
			
			@ -122,16 +122,16 @@ swapped according to
 | 
			
		|||
is returned.
 | 
			
		||||
.PP
 | 
			
		||||
.L swapmem
 | 
			
		||||
swaps 
 | 
			
		||||
swaps
 | 
			
		||||
.L n
 | 
			
		||||
bytes from the buffer
 | 
			
		||||
.L from
 | 
			
		||||
to the buffer
 | 
			
		||||
.L to
 | 
			
		||||
according to 
 | 
			
		||||
according to
 | 
			
		||||
.LR op .
 | 
			
		||||
.L to
 | 
			
		||||
and 
 | 
			
		||||
and
 | 
			
		||||
.L from
 | 
			
		||||
may be the same.
 | 
			
		||||
.SH "SEE ALSO"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,8 +42,8 @@ tab \- simple table lookup routines
 | 
			
		|||
.SH SYNOPSIS
 | 
			
		||||
.L "#include <ast.h>"
 | 
			
		||||
.sp
 | 
			
		||||
.L "int tabindex(const void* tab, int size, const char* name);" 
 | 
			
		||||
.L "void* tablook(const void* tab, int size, const char* name);" 
 | 
			
		||||
.L "int tabindex(const void* tab, int size, const char* name);"
 | 
			
		||||
.L "void* tablook(const void* tab, int size, const char* name);"
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
These routines do linear lookups in
 | 
			
		||||
.I small
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ The
 | 
			
		|||
.I tm
 | 
			
		||||
library supports conversion between
 | 
			
		||||
string date specifications,
 | 
			
		||||
seconds reolution
 | 
			
		||||
seconds resolution
 | 
			
		||||
.L time_t
 | 
			
		||||
clock values and
 | 
			
		||||
.LR Tm_t .
 | 
			
		||||
| 
						 | 
				
			
			@ -356,7 +356,7 @@ The nanosecond part of the time.
 | 
			
		|||
\fB%Q\fP\fI<delim>recent<delim>distant<delim>\fP
 | 
			
		||||
Recent dates are formatted with
 | 
			
		||||
.I recent
 | 
			
		||||
and distand dates are formatted with
 | 
			
		||||
and distant dates are formatted with
 | 
			
		||||
.IR distant ,
 | 
			
		||||
where
 | 
			
		||||
.I <delim>
 | 
			
		||||
| 
						 | 
				
			
			@ -400,7 +400,7 @@ character.
 | 
			
		|||
.IR hh : mm : ss .
 | 
			
		||||
.TP
 | 
			
		||||
.B u
 | 
			
		||||
Weeday number with 1 for Monday, 7 for Sunday.
 | 
			
		||||
Weekday number with 1 for Monday, 7 for Sunday.
 | 
			
		||||
.TP
 | 
			
		||||
.B U
 | 
			
		||||
Week number with Sunday as the first day.
 | 
			
		||||
| 
						 | 
				
			
			@ -507,9 +507,9 @@ then it specifies a time zone other that the local time zone.
 | 
			
		|||
.TP
 | 
			
		||||
.L "void tmset(Tm_zone_t* zone);"
 | 
			
		||||
.L tmset
 | 
			
		||||
sets the reference timezoe to
 | 
			
		||||
sets the reference timezone to
 | 
			
		||||
.LR zone .
 | 
			
		||||
.L tm_info.local 
 | 
			
		||||
.L tm_info.local
 | 
			
		||||
points to the local timezone and
 | 
			
		||||
.L tm_info.zone
 | 
			
		||||
points to the current reference timezone.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -385,9 +385,9 @@ then it specifies a time zone other that the local time zone.
 | 
			
		|||
.TP
 | 
			
		||||
.L "void tmset(Tm_zone_t* zone);"
 | 
			
		||||
.L tmset
 | 
			
		||||
sets the reference timezoe to
 | 
			
		||||
sets the reference timezone to
 | 
			
		||||
.LR zone .
 | 
			
		||||
.L tm_info.local 
 | 
			
		||||
.L tm_info.local
 | 
			
		||||
points to the local timezone and
 | 
			
		||||
.L tm_info.zone
 | 
			
		||||
points to the current reference timezone.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ then it will point to the next unread character in
 | 
			
		|||
on return.
 | 
			
		||||
The number of scanned tokens is returned.
 | 
			
		||||
.L \-1
 | 
			
		||||
is returned if 
 | 
			
		||||
is returned if
 | 
			
		||||
.L string
 | 
			
		||||
was not empty and
 | 
			
		||||
.L format
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +116,7 @@ is a line splice.
 | 
			
		|||
.L %
 | 
			
		||||
in
 | 
			
		||||
.L format
 | 
			
		||||
prefixes format conversion characters; each conversion character 
 | 
			
		||||
prefixes format conversion characters; each conversion character
 | 
			
		||||
corresponds to a
 | 
			
		||||
.L tokscan
 | 
			
		||||
argument following the
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +125,7 @@ argument.
 | 
			
		|||
The format conversions are:
 | 
			
		||||
.TP
 | 
			
		||||
.L %c
 | 
			
		||||
A single 
 | 
			
		||||
A single
 | 
			
		||||
.LR char .
 | 
			
		||||
.TP
 | 
			
		||||
.L "%hd %d %ld"
 | 
			
		||||
| 
						 | 
				
			
			@ -185,7 +185,7 @@ to
 | 
			
		|||
.L tokscan
 | 
			
		||||
above converts quoted
 | 
			
		||||
.I carriage-return
 | 
			
		||||
back to 
 | 
			
		||||
back to
 | 
			
		||||
.IR newline ),
 | 
			
		||||
and deletes
 | 
			
		||||
.I "# ... newline"
 | 
			
		||||
| 
						 | 
				
			
			@ -206,7 +206,7 @@ then
 | 
			
		|||
is a 0 terminated string;
 | 
			
		||||
otherwise
 | 
			
		||||
.L input
 | 
			
		||||
is an open 
 | 
			
		||||
is an open
 | 
			
		||||
.L Sfio_t*
 | 
			
		||||
stream.
 | 
			
		||||
If
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ loads a string vector from lines in
 | 
			
		|||
.LR string .
 | 
			
		||||
.L string
 | 
			
		||||
may be modified upon return.
 | 
			
		||||
Each line in 
 | 
			
		||||
Each line in
 | 
			
		||||
.L string
 | 
			
		||||
is treated as a new vector element.
 | 
			
		||||
Lines with
 | 
			
		||||
| 
						 | 
				
			
			@ -64,15 +64,15 @@ joins consecutive lines.
 | 
			
		|||
A string vector pointer is returned, 0 on error.
 | 
			
		||||
.PP
 | 
			
		||||
.L vecfile
 | 
			
		||||
constructs a string vector by calling 
 | 
			
		||||
.L vecload 
 | 
			
		||||
constructs a string vector by calling
 | 
			
		||||
.L vecload
 | 
			
		||||
on the contents of the file named by
 | 
			
		||||
.LR path .
 | 
			
		||||
The string vector pointer is returned, 0 on error.
 | 
			
		||||
.PP
 | 
			
		||||
.L vecstring
 | 
			
		||||
constructs a string vector by calling 
 | 
			
		||||
.L vecload 
 | 
			
		||||
constructs a string vector by calling
 | 
			
		||||
.L vecload
 | 
			
		||||
on a copy of
 | 
			
		||||
.LR string .
 | 
			
		||||
The string vector pointer is returned, 0 on error.
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +92,7 @@ inserts the string vector
 | 
			
		|||
.L vecload
 | 
			
		||||
or
 | 
			
		||||
.LR vecstring )
 | 
			
		||||
between 
 | 
			
		||||
between
 | 
			
		||||
.L "(*argvp)[0]"
 | 
			
		||||
and
 | 
			
		||||
.LR "(*argvp)[1]" ,
 | 
			
		||||
| 
						 | 
				
			
			@ -108,7 +108,7 @@ is called before the return.
 | 
			
		|||
is returned if the insertion failed.
 | 
			
		||||
.SH EXAMPLES
 | 
			
		||||
.L vecargs
 | 
			
		||||
is commonly used to modify command 
 | 
			
		||||
is commonly used to modify command
 | 
			
		||||
.L argv
 | 
			
		||||
from fixed files.
 | 
			
		||||
For example,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ vmalloc \- virtual memory allocation
 | 
			
		|||
.MW "int vmstat(Vmalloc_t* vm, Vmstat_t* statb);"
 | 
			
		||||
.MW "int vmtrace(int fd);"
 | 
			
		||||
.MW "int vmtrbusy(Vmalloc_t* vm);"
 | 
			
		||||
.MW "Void_t* vmdata(Vmalloc_t* vm);" 
 | 
			
		||||
.MW "Void_t* vmdata(Vmalloc_t* vm);"
 | 
			
		||||
.fi
 | 
			
		||||
.SS "Malloc-compatible functions"
 | 
			
		||||
.nf
 | 
			
		||||
| 
						 | 
				
			
			@ -268,7 +268,7 @@ a structure with these members:
 | 
			
		|||
.fi
 | 
			
		||||
.in -.5i
 | 
			
		||||
.TP
 | 
			
		||||
.MW round 
 | 
			
		||||
.MW round
 | 
			
		||||
If this value is positive, all size arguments to the
 | 
			
		||||
\f5memoryf\fP function will be multiples of it.
 | 
			
		||||
.TP
 | 
			
		||||
| 
						 | 
				
			
			@ -410,7 +410,7 @@ By default, this file descriptor is 2, the standard error.
 | 
			
		|||
checks a region using \f5Vmdebug\fP or \f5Vmbest\fP for integrity.
 | 
			
		||||
If \f5Vmdebug\fP, this also checks for block overwriting errors.
 | 
			
		||||
On errors, \fIvmdbwarn\fP is called.
 | 
			
		||||
If flag \f5VM_DBCHECK\fP is on, 
 | 
			
		||||
If flag \f5VM_DBCHECK\fP is on,
 | 
			
		||||
\fIvmdbcheck\fP is called at each invocation of
 | 
			
		||||
\fIvmalloc\fP, \fIvmfree\fP, or \fIvmresize\fP.
 | 
			
		||||
.PP
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,7 @@
 | 
			
		|||
 *	FF_dir	FF_gnu with sfgetl/sfputl and trailing / on dirs (FF_dir_magic)
 | 
			
		||||
 *	FF_typ	FF_dir with (mime) types (FF_typ_magic)
 | 
			
		||||
 *
 | 
			
		||||
 * the bigram encoding steals the eighth bit (that's why its FF_old)
 | 
			
		||||
 * the bigram encoding steals the eighth bit (that's why it's FF_old)
 | 
			
		||||
 * maybe one day we'll limit it to readonly:
 | 
			
		||||
 *
 | 
			
		||||
 * 0-2*FF_OFF	 likeliest differential counts + offset to make nonnegative 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -599,7 +599,7 @@ procopen(const char* cmd, char** argv, char** envv, long* modv, int flags)
 | 
			
		|||
			if (!fork())
 | 
			
		||||
			{
 | 
			
		||||
				sfsprintf(path, sizeof(path), "%d", getppid());
 | 
			
		||||
				execlp("trace", "trace", "-p", path, NiL);
 | 
			
		||||
				execlp("trace", "trace", "-p", path, NULL);
 | 
			
		||||
				_exit(EXIT_NOTFOUND);
 | 
			
		||||
			}
 | 
			
		||||
			sleep(2);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue