# # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # Note that these AST components deliver installed headers to /usr/include/ast/ # but nothing else in gate depends on these to build, and serveral of them are # auto-generated. The install_h target is deliberately not wired into # 'cmdheaders' in usr/src/Makefile as that would significantly increase the # time taken to run the 'setup' target. Instead, sub-components automatically # install header files as part of the 'install' target. include $(SRC)/Makefile.master all : TARGET= all clean : TARGET= clean clobber : TARGET= clobber _msg : TARGET= _msg install : TARGET= install install_h : TARGET= install_h # The _feature target is used to initially populate and to update the # FEATURE files for each component. It is not run as part of a normal # build. _feature : TARGET= _feature install SUBDIRS= \ tools \ libast \ libcmd \ libdll \ libpp \ libshell \ libsum \ ksh \ msgcc \ shcomp .KEEP_STATE: .PARALLEL: $(SUBDIRS) all clean clobber install install_h _msg _feature: $(SUBDIRS) $(SUBDIRS): FRC @cd $@; pwd; $(MAKE) $(TARGET) FRC: libast: tools libcmd: libsum libast libdll: libast libpp: libast libshell: libast libcmd libdll libsum: libast shcomp: libshell msgcc: libast libpp ksh: libshell shcomp # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # C_AST = $(CONTRIB)/ast C_ASTINIT = $(C_AST)/src/cmd/INIT AST= $(SRC)/cmd/ast AST_TOOLS = $(AST)/tools AST_LCGEN = $(AST_TOOLS)/lcgen AST_PROTO = $(AST_TOOLS)/proto -p -s -l $(C_AST)/lib/package/ast.lic \ -o '$(AST_LICENSE)' # Override this top level flag so the compiler builds in its native C99 mode. CSTD= $(CSTD_GNU99) # # Shell feature flags. # * - the upstream build configuration can be viewed at # $(CONTRIB)/ast/src/cmd/ksh93/Makefile # # These options are enabled, and are also enabled by default in the upstream # build framework*: # # SHOPT_2DMATCH two dimensional .sh.match for ${var//pat/str} # SHOPT_BGX one SIGCHLD trap per completed job # SHOPT_BRACEPAT C-shell {...,...} expansions (, required) # SHOPT_DYNAMIC dynamic loading for builtins # SHOPT_ESH emacs/gmacs edit mode # SHOPT_FILESCAN fast file scan # SHOPT_FIXEDARRAY fixed dimension indexed array # SHOPT_HISTEXPAND csh-style history file expansions # SHOPT_KIA shell information database generation # SHOPT_MULTIBYTE multibyte character handling # SHOPT_NAMESPACE allow namespaces # SHOPT_OPTIMIZE optimize loop invariants # SHOPT_RAWONLY make viraw the only vi mode # SHOPT_STATS add .sh.stats variable # SHOPT_SUID_EXEC allow (safe) suid/sgid shell scripts # SHOPT_TYPEDEF enable typeset type definitions # SHOPT_VSH vi edit mode # These options are enabled but are not enabled by default in the upstream # build framework*: # # SHOPT_SYSRC attempt . /etc/ksh.kshrc if interactive # These options are NOT enabled but are enabled by default in the upstream # build framework*: # # SHOPT_AUDIT enable auditing per SHOPT_AUDITFILE # SHOPT_COSHELL build with connection to coshell # SHOPT_EDPREDICT predictive editing # These options are NOT enabled and are also NOT enabled in the upstream # build framework*: # # SHOPT_ACCT accounting # SHOPT_ACCTFILE per user accounting info # SHOPT_AUDITFILE "/etc/ksh_audit" auditing file # SHOPT_BASH bash compatibility code # SHOPT_CRNL accept for # SHOPT_ECHOPRINT make echo equivalent to print # SHOPT_FS_3D 3d file system # SHOPT_OLDTERMIO support both TCGETA and TCGETS # SHOPT_P_SUID real uid's that require -p for set[ug]id # SHOPT_PFSH solaris exec_attr(5) profile execution # SHOPT_REGRESS enable __regress__ builtin # SHOPT_REMOTE enable --rc if running as a remote shell # SHOPT_SEVENBIT strip the eigth bit from characters # SHOPT_SPAWN use spawnveg for fork/exec # SHOPT_TIMEOUT number of seconds for shell timeout LIBSHELLFEATUREFLAGS= \ -DSHOPT_2DMATCH \ -DSHOPT_BGX \ -DSHOPT_BRACEPAT \ -DSHOPT_DYNAMIC \ -DSHOPT_ESH \ -DSHOPT_FILESCAN \ -DSHOPT_FIXEDARRAY \ -DSHOPT_HISTEXPAND \ -DSHOPT_KIA \ -DSHOPT_MULTIBYTE \ -DSHOPT_NAMESPACE \ -DSHOPT_OPTIMIZE \ -DSHOPT_PFSH=0 \ -DSHOPT_RAWONLY \ -DSHOPT_STATS \ -DSHOPT_SUID_EXEC \ -DSHOPT_SYSRC \ -DSHOPT_TYPEDEF \ -DSHOPT_VSH # # common CPP flags for libshell consumers (ksh, shcomp etc.) # LIBSHELLCPPFLAGS= \ -I$(LIBSHELLBASE)/$(LIBSHELLMACH) \ -I$(ASTSRC)/include \ -I$(ROOT)/usr/include/ast \ -I$(ROOT)/usr/include \ \ -DSHOPT_CMDLIB_BLTIN=0 \ '-DSH_CMDLIB_DIR="/usr/bin"' \ '-DSHOPT_CMDLIB_HDR="../common/illumos_cmdlist.h"' \ \ $(LIBSHELLFEATUREFLAGS) \ \ -DKSHELL \ -D_BLD_shell \ -D_PACKAGE_ast \ -D_API_ast=20100309 \ '-DERROR_CATALOG="libshell"' \ -DERROR_CONTEXT_T=Error_context_t \ '-DUSAGE_LICENSE=\ "[-author?David Korn ]" \ "[-copyright?Copyright (c) 1982-2012 AT&T Intellectual Property]" \ "[-license?http://www.eclipse.org/org/documents/epl-v10.html]" \ "[--catalog?libshell]"' # Default CFLAGS/CFLAGS64 for AST sources ASTCFLAGS= $(CCVERBOSE) -Wno-unknown-pragmas ASTCFLAGS64= $(CCVERBOSE) -Wno-unknown-pragmas # Generated header files generated using this system have a number of # artifacts that are cleaned up by the following action. # # They include a 'generated by' header which includes the full path to # the source file. The path to the root of the gate is removed, leaving only # the relative part of the path. # # They have trailing whitespace, which is removed. # Unfortunately, due to differences in the "sed" command implemented in # various illumos distributions, we can't portably use 'sed -i' here. SEDPATTERN= \ s^$(SRC)/^^g; \ s/ *$$//; \ /def.* _def_.*_$(MACH64)/s/$(MACH64)/$(HDRGUARD)/; \ /def.* _def_.*_$(MACH)/s/$(MACH)/$(HDRGUARD)/; POST_PROCESS_AST= \ { \ tf=$$(mktemp /tmp/ast.XXXXXXXXXX) && \ $(SED) < "$@" > "$$tf" '$(SEDPATTERN)' && \ $(CP) -p "$$tf" "$@" && \ $(RM) "$$tf"; \ } # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # ROOTHDRDIR= $(ROOT)/usr/include/ast # Define the symbol used to distinguish between 32bit and 64bit parts of the # include file. We cannot use |_LP64| here because not every compiler (like # Studio 10/11/12) sets it by default (this doesn't harm because the AST # includes are OS- and platform-specific anyway) and we can't rely on the # system includes like because "/usr/bin/diff -D" # adds the "#ifdef " before any other content and "injecting" an # "#include " will alter the behaviour of the AST code # in unpredictable ways (e.g. the resulting code will not longer work). # Sun-Bug #6524070 ("RFE: Please set |_LP64| for 64bit platforms by default # (like gcc does)") has been filed against the Sun Studio compiler as RFE # to set |_LP64| for 64bit targets. # Hammerhead: amd64 only AST64BITCPPSYMBOL = __amd64 # We use a custom install sequence here to unify 32bit and 64bit AST includes # since we can only ship one set of includes. Therefore we use # "/usr/bin/diff -D <64bit>" (and for some exceptions a manual path) to # generate an unified version of the include files (and add a boilerplate text # which explains the interface stability status). # Hammerhead: amd64-only build — no 32/64 diff merge needed. # Install headers directly from HDRDIR64 with stability boilerplate. $(ROOTHDRDIR)/%: $(HDRDIR64)/% @mkdir -p tmpastinclude ; \ typeset boilerplate="" ; \ boilerplate+="/*\n" \ boilerplate+=" * BEGIN illumos section\n" \ boilerplate+=" * This is an unstable interface; changes may be made\n" \ boilerplate+=" * without notice.\n" \ boilerplate+=" * END illumos section\n" \ boilerplate+=" */\n" ; \ printf "# Installing (amd64-only) %s\n" "$(@F)" ; \ { \ print -n "$${boilerplate}" ; \ cat "$(HDRDIR64)/$(@F)" ; \ } >"tmpastinclude/$(@F)" $(INS) -s -m $(FILEMODE) -f $(@D) "tmpastinclude/$(@F)" # Add temporary include files to the list of files to "clobber" CLOBBERFILES += tmpastinclude/* # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # # Temporarily control building AST l10n catalogs until all build # machines have been updated. # # Should we build AST l10n catalogs ? # This can be overridden at build time via: # $ export ON_BUILD_AST_L10N_CATALOGS=0 # Hammerhead: Disabled - msgcc is not available during clean builds # (circular dep: msgcc depends on libast). English-only OS, no translations. ON_BUILD_AST_L10N_CATALOGS=0 DO_BUILD_AST_CATALOGS_1= $(ON_BUILD_AST_L10N_CATALOGS:0=$(POUND_SIGN)) DONT_BUILD_AST_CATALOGS_1= $(ON_BUILD_AST_L10N_CATALOGS:1=$(POUND_SIGN)) DO_BUILD_AST_CATALOGS= $(DO_BUILD_AST_CATALOGS_1:1=) DONT_BUILD_AST_CATALOGS= $(DONT_BUILD_AST_CATALOGS_1:0=) # # l10n message catalog generation for AST libraries # MSGLIBNAME= $(ASTLIB) ASTMSGCATALOG= $(ROOT)/usr/lib/locale/C/LC_MESSAGES/$(MSGLIBNAME) $(DO_BUILD_AST_CATALOGS)ASTMSGCC= \ PATH="$(ASTBINDIR):/bin:/usr/bin" \ /usr/bin/ksh93 $(MSGCC) >>msgcc.out 2>&1 ASTMSGS= $(LIBOBJS:%.o=msgs/%.mso) # cpp defines needed by msgcc i386_ASTMSGCCFLAGS= -D__i386 amd64_ASTMSGCCFLAGS= -D__amd64 sparc_ASTMSGCCFLAGS= -D__sparc sparcv9_ASTMSGCCFLAGS= -D__sparcv9 ASTMSGCCFLAGS= -D_STDC_C99 -D__STDC__ -D__BUILTIN_VA_ARG_INCR \ $($(TARGETMACH)_ASTMSGCCFLAGS) msgs/%.mso: $(ASTSRC)/%.c @mkdir -p "$$(dirname "$@")" ; \ print "# Processing file $< to $@" >>msgcc.out ; \ $(ASTMSGCC) -M-set=ast $(ASTMSGCCFLAGS) $(CFLAGS) $(CPPFLAGS) -c "$<" -o "$@" msgs/%.mso: ../%.c @mkdir -p "$$(dirname "$@")" ; \ print "# Processing file $< to $@" >>msgcc.out ; \ $(ASTMSGCC) -M-set=ast $(ASTMSGCCFLAGS) $(CFLAGS) $(CPPFLAGS) -c "$<" -o "$@" $(MSGLIBNAME).msg: $(ASTMSGS) @print "# Processing files $(ASTMSGS) to $@" >>msgcc.out ; \ $(ASTMSGCC) -M-set=ast $(ASTMSGCCFLAGS) $(CFLAGS) $(CPPFLAGS) -o $@ $(ASTMSGS) $(ASTMSGCATALOG): $(MSGLIBNAME).msg @$(RM) "$(ASTMSGCATALOG)" ; \ sed 's/^$$translation msgcc .*//' <"$(MSGLIBNAME).msg" | gencat "$@" - ; \ $(CHMOD) 0644 $(ASTMSGCATALOG) # Hammerhead: Simplified for GNU Make compatibility # Original used POUND_SIGN conditionals which don't work well with gmake ifeq ($(ON_BUILD_AST_L10N_CATALOGS),1) _msg: $(ASTMSGCATALOG) else _msg: $(RM) -f $(ASTMSGCATALOG) ; \ $(TOUCH) $(ASTMSGCATALOG) ; \ $(CHMOD) 0644 $(ASTMSGCATALOG) endif # Add message catalogs to the list of files to "clobber" CLOBBERFILES += \ $(ASTMSGS) \ $(ASTMSGCATALOG) \ $(MSGLIBNAME).msg \ msgcc.out # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # AST_IFFE = $(AST_TOOLS)/iffe # The AST sources use a utility called "iffe" (If FEature Exists) to probe the # build environment, and to generate the header files needed to build the # libraries and commands. In order to support cross-compilation, the # generated FEATURE files are bundled with gate, but a TBC target is # provided to re-generate them if necessary due to a change elsewhere in gate. # # NOTES: # # Only the primary compiler is used with iffe. # # We use big PIC here since pic is too small on 64-bit sparc and on 32-bit # it's close to the barrier. # # "-D_map_libc=1" is needed to force map.c to add a "_ast_" prefix to all # AST symbol names which may otherwise collide with libc. # # "-D_lib_socket=1 -lsocket -lnsl" was added to make sure ksh93 is compiled # with networking support enabled; the current AST build infrastructure has # problems with detecting networking support in illumos. # # "-D_TS_ERRNO -D_REENTRANT" are flags taken from the default OS/Net # build system. IFFECC= $($(TARGETMACH)_CC) IFFECPPFLAGS= $(ASTPLATFORMCPPFLAGS) \ -D_TS_ERRNO -D_REENTRANT \ -YI,$(ROOT)/usr/include -D_BLD_DLL -D_BLD_ast \ -D_lib_socket=1 -D_map_libc=1 \ $(LIBSHELLFEATUREFLAGS) \ -I$(ASTSRC)/include -I. IFFECFLAGS= $(CSTD_GNU99) $($(TARGETMACH)_COPTFLAG) \ $($(TARGETMACH)_C_BIGPICFLAGS) $($(TARGETMACH)_CFLAGS) IFFELDFLAGS= $(ZASSERTDEFLIB) $(ZFATALWARNINGS) $(LDLIBS) IFFELIBS= -lsocket -lnsl IFFEC= $(IFFECC) $(IFFECPPFLAGS) $(IFFECFLAGS) \ $(IFFELDFLAGS) $(IFFELIBS) IFFEFLAGS= -v -R $(ROOT) IFFEPATH= $(AST_TOOLS):/usr/bin:/usr/sbin:/sbin FEATURE/% : SHADOW_CCS= FEATURE/%: $(ASTSRC)/features/% PATH=$(IFFEPATH) \ $(AST_IFFE) $(IFFEFLAGS) -c '$(IFFEC)' run $< $(IFFE_EXTRA) $(POST_PROCESS_AST) FEATURE/%: $(ASTSRC)/features/%.c PATH=$(IFFEPATH) \ $(AST_IFFE) $(IFFEFLAGS) -c '$(IFFEC)' run $< $(IFFE_EXTRA) $(POST_PROCESS_AST) FEATURE/%: $(ASTSRC)/features/%.sh PATH=$(IFFEPATH) \ $(AST_IFFE) $(IFFEFLAGS) -c '$(IFFEC)' run $< $(IFFE_EXTRA) $(POST_PROCESS_AST) This area contains the build configuration for selected AT&T Software Technology (AST) libraries and commands. In particular ksh (the illumos /bin/sh), its supporting libraries and and a small number of system commands, see ./ksh/builtins/alias.c The source for these components is in usr/src/contrib/ast/; see the README file there for more information. The AST library builds use FEATURE files to describe the capabilities of the host system and build environment (similar to the output from tools like GNU autoconf). In order to support cross compilation and ensure reproducible builds, these files are present in this tree under libXXX//FEATURE/ alongside a small number of other generated files. The FEATURE files can be re-generated based on the current contents of proto using 'make _feature' in this directory. This should be done after adding new features to the standard libraries that AST can detect and use. This needs to be done for all supported architectures. # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # SHELL= /bin/ksh93 PROG= ksh USRKSH_ALIAS_LIST=ksh ksh93 rksh rksh93 include ../../Makefile.cmd # Hammerhead: amd64-only SUBDIRS= $(MACH64) SUBDIRS += builtins ARCH32_i386= i86 ARCH32_sparc= sparcv7 ARCH32= $(ARCH32_$(MACH)) all : TARGET = all install : TARGET = install clean : TARGET = clean clobber : TARGET = clobber lint : TARGET = lint testshell : TARGET = testshell .KEEP_STATE: # Serialise the build to avoid running the test suite for 32-bit # and 64-bit in parallel .NOTPARALLEL: $(SUBDIRS) all clean clobber lint testshell: $(SUBDIRS) install_h _feature: # dummy file since AST/ksh doesn't use *.po files # (and "ksh" is just a frontend which calls directly into libshell, # i.e. there are no l10n strings here) $(PROG).po: $(RM) ksh.po ksh93.po ; \ $(TOUCH) $(PROG).po install: $(SUBDIRS) @(set -o xtrace ; \ builtin ln ; \ builtin rm ; \ for i in $(USRKSH_ALIAS_LIST) ; do \ [[ "$$i" == "$(PROG)" ]] && continue ; \ rm -f "$(ROOTESSBIN)/$$i" ; \ ln "$(ROOTESSBIN)/$(PROG)" "$(ROOTESSBIN)/$$i" ; \ done \ ) $(RM) $(ROOTESSBIN)/jsh $(SYMLINK) ksh93 $(ROOTESSBIN)/jsh $(RM) $(ROOTLIB)/rsh $(SYMLINK) /bin/ksh93 $(ROOTLIB)/rsh $(SUBDIRS): FRC @cd $@; pwd; $(MAKE) $(TARGET) FRC: include ../../Makefile.targ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. # # Copyright (c) 2018, Joyent, Inc. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # Hammerhead: use /bin/sh instead of ksh93 to reduce memory per parallel job SHELL=/bin/sh PROG= ksh USRKSH_ALIAS_LIST=ksh ksh93 rksh rksh93 # Set common AST build flags (e.g., needed to support the math stuff). include ../../Makefile.ast OBJECTS= pmain.o ASTSRC= $(C_AST)/src/cmd/ksh93 LIBSHELLBASE= ../../libshell LIBSHELLSRC= $(ASTSRC)/sh SRCS= $(OBJECTS:%.o=$(LIBSHELLSRC)/%.c) LDLIBS += -lshell -lumem # We use "=" here since using $(CPPFLAGS.master) is very tricky in our # case - it MUST come as the last element but future changes in -D options # may then cause silent breakage in the AST sources because the last -D # option specified overrides previous -D options so we prefer the current # way to explicitly list each single flag. CPPFLAGS= \ $(DTEXTDOM) $(DTS_ERRNO) \ $(LIBSHELLCPPFLAGS) CFLAGS += $(ASTCFLAGS) CFLAGS64 += $(ASTCFLAGS64) # Workaround for CR#6628728 ("|memcntl()| prototype not available for C99/XPG6") pmain.o : CERRWARN += -Wno-implicit-function-declaration # not linted SMATCH=off .KEEP_STATE: %.o: $(LIBSHELLSRC)/%.c $(COMPILE.c) -c -o $@ $< $(POST_PROCESS_O) all: $(PROG) # We explicitly delete "ksh" and "ksh93" to catch changes in # BUILD_KSH93_AS_BINKSH (see Makefile.ksh93switch) # and soft-link $(PROG) to ksh/ksh93 below because ksh93 test # suite seems to require that ksh93 is available as "ksh" in # ${PATH} (see comment about "io.sh" in Makefile.testshell). $(PROG): $(OBJECTS) $(RM) ksh ksh93 $(LINK.c) $(OBJECTS) -o $@ $(LDLIBS) $(POST_PROCESS) (set +o errexit ; \ [[ ! -x ksh93 ]] && ln $(PROG) ksh93 ; \ [[ ! -x ksh ]] && ln $(PROG) ksh ; \ true \ ) clean: $(RM) $(OBJECTS) # We explicitly delete "ksh" and "ksh93" to catch changes in # BUILD_KSH93_AS_BINKSH (see Makefile.ksh93switch) CLOBBERFILES += ksh ksh93 # Install rule for $(MACH)/Makefile (32bit) INSTALL.ksh.32bit=@ \ (print "$(POUND_SIGN) Installing 32bit $(PROG) aliases $(USRKSH_ALIAS_LIST)" ; \ set -o xtrace ; \ for i in $(USRKSH_ALIAS_LIST) ; do \ [[ "$$i" == "$(PROG)" ]] && continue ; \ $(RM) "$(ROOTBIN32)/$$i" ; \ $(LN) "$(ROOTBIN32)/$(PROG)" "$(ROOTBIN32)/$$i" ; \ done \ ) # Hammerhead: INSTALL.ksh.64bit removed — ROOTBIN64=ROOTBIN (path flattening), # so ../../bin symlinks from /usr/bin would be circular. # The amd64/Makefile installs directly without alias symlinks. include ../Makefile.testshell # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. # # # Run the ksh93 minimum set of tests # # # Notes: # - "builtins.sh" may fail in some locales like this: # -- snip -- # ## Running ksh test: LANG='zh_TW.EUC' script='builtins.sh' # builtins.sh[274]: printf "%T" now # -- snip -- # # - "options.sh" may currently fail in some locales with: # -- snip -- # options.sh[145]: -G ** failed -- expected 'bam.c bar bar.c bar/bam.c bar/foo.c foo foo/bam.c', got 'bam.c bar bar/bam.c bar.c bar/foo.c foo foo/bam.c' # options.sh[149]: -G **/*.c failed -- expected 'bam.c bar.c bar/bam.c bar/foo.c foo/bam.c', got 'bam.c bar/bam.c bar.c bar/foo.c foo/bam.c' # -- snip -- # This may be simply a different sort order or a bug in the test suite. # Currently under investigation. # # - "glob.sh" may currently fail in some locales (e.g. en_US.UTF-8) with: # -- snip -- # glob.sh[157] glob -- expected '
', got '
' # glob.sh[277] glob -- expected ' ', got ' ' # -- snip -- # This may be simply a different sort order or a bug in the test suite. # Currently under investigation. # # - These tests need a working system clock, otherwise they'll bite you. # # - The current list of locales was mainly composed to cover various encodings # and all important markets based on suggestions by Sun's i18n team. # # - More locales should be tested here (via ON_KSH_TEST_LOCALES below). # Locales like "ru_RU.KOI8-R","de_DE.UTF-8", "is_IS.ISO8859-1", # "is_IS.UTF-8" and "nl_BE.ISO8859-15" are on our wishlist - but # that is getting little bit more compliciated because these locales use # ',' as decimal delimter. The best solution may be to wait for ksh93 # being integrated into OS/Net and then change the test sequence to # use ksh93's associative/compound variables (this may require a flag # day... ;-( ). # # - Due to the timing sensitivity of some of the tests, these tests should # be run on a quiet system with no other activity. # TESTSRC= $(LIBSHELLBASE)/common/tests # ON_KSH_TEST_LOCALES can be overridden via # $ export ON_KSH_TEST_LOCALES= # before $ make install # ON_KSH_TEST_LOCALES = \ C \ en_US.UTF-8 en_US en_US.ISO8859-15@euro \ he_IL.UTF-8 \ hi_IN.UTF-8 \ ja ja_JP.PCK ja_JP.UTF-8 ja_JP.eucJP \ ko_KR.UTF-8 ko_KR.EUC \ th_TH.TIS620 \ zh_CN.EUC zh_CN.GBK \ zh_CN.GB18030 zh_CN.GB18030@pinyin zh_CN.GB18030@radical zh_CN.GB18030@stroke \ zh_CN.UTF-8 zh_CN.UTF-8@pinyin zh_CN.UTF-8@radical zh_CN.UTF-8@stroke \ zh_HK.BIG5HK \ zh_TW.BIG5 zh_TW.EUC zh_TW.UTF-8 # ON_KSH_TEST_LIST can be overridden via # $ export ON_KSH_TEST_LIST= # before $ make install # ON_KSH_TEST_LIST = $(TESTSRC)/*.sh # Boolean (true/false) flag to control whether we should make test # failures non-fatal ON_KSH_TEST_IGNORE_TESTFAILURE=false # We must wait for other things in this subdir to finish before running # the test suite, otherwise we may run into trouble that this activity # may disturb the test suite run (resulting in weird "heisenbug"-like # test failures). testshell: $(PROG) @ \ builtin basename ; \ print '# NOTE: Make sure your binaries in ROOT match your kernel!' ; \ ( \ set +o errexit ; \ export PATH="$(SRC)/cmd/ksh/$(LIBSHELLMACH):/bin:/usr/bin" ; \ printf "# which ksh='%s', ksh93='%s'\n" \ "$$(which ksh)" "$$(which ksh93)" ; \ ) ; \ if [[ "$$(isalist)" != ~(F)$(LIBSHELLMACH) ]] ; then \ printf \ "# ISA='%s' not available on this system, skipping tests...\n" \ "$(LIBSHELLMACH)" ; \ exit 0 ; \ fi ; \ print "# Libraries used:" ; \ LD_LIBRARY_PATH_64="$(ROOTLIB64)/" \ LD_LIBRARY_PATH_32="$(ROOTLIB)/" \ LD_LIBRARY_PATH="$(ROOTLIB64)/:$(ROOTLIB)/" \ /usr/bin/ldd "$(SRC)/cmd/ksh/$(LIBSHELLMACH)/ksh" ; \ print "# Running tests:" ; \ redirect 2>&1 ; \ (supported_locales="$$(/usr/bin/locale -a)" ; \ for test_lang in $(ON_KSH_TEST_LOCALES) ; do \ if [[ "$$(egrep "^$${test_lang}\$$" <<< "$${supported_locales}")" == "" ]] ; then \ printf \ "# Locale '%s' not supported, skipping tests...\n" \ "$${test_lang}" ; \ continue ; \ fi ; \ (for test_item in $(ON_KSH_TEST_LIST) ; do \ [[ "$${test_item}" == "$(TESTSRC)/builtins.sh" || \ "$${test_item}" == "$(TESTSRC)/glob.sh" || \ "$${test_item}" == "$(TESTSRC)/options.sh" ]] || \ $(ON_KSH_TEST_IGNORE_TESTFAILURE) && \ set +o errexit ; \ for mode in 'plain_script:-s' 'compiled_script:-c' ; do \ printf \ "## Running %s test: LANG='%s' script='%s', mode='%s'\n" \ "$(LIBSHELLMACH)/ksh" \ "$${test_lang}" \ "$$(basename "$${test_item}")" \ "$${mode%:*}"; \ ( \ ulimit -s 65536 ; \ test_output="$$( ( \ export \ SHELL="$(SRC)/cmd/ksh/$(LIBSHELLMACH)/ksh" \ LD_LIBRARY_PATH_64="$(ROOTLIB64)/" \ LD_LIBRARY_PATH_32="$(ROOTLIB)/" \ LD_LIBRARY_PATH="$(ROOTLIB64)/:$(ROOTLIB)/" ; \ "$${SHELL}" "$(TESTSRC)/shtests" -t "$${mode#*:}" \ LD_LIBRARY_PATH_64="$${LD_LIBRARY_PATH_64}" \ LD_LIBRARY_PATH_32="$${LD_LIBRARY_PATH_32}" \ LD_LIBRARY_PATH="$${LD_LIBRARY_PATH}" \ SHELL="$${SHELL}" \ LANG="$${test_lang}" \ LC_ALL="$${test_lang}" \ VMALLOC_OPTIONS=abort \ SHCOMP="$(ROOTBIN)/shcomp" \ "$${test_item}" \ ) 2>&1 | while read ; do \ printf "#\t%s\n" "$${REPLY}" ; \ done | tee /dev/stderr)" ; \ [[ "$${test_output}" == ~(E)test.*passed\ \[\ [[:digit:]]*\ test.*\ 0\ errors\ \] ]] || \ (print "##--------> test failed" ; exit 1) \ ) ; \ done ; \ set -o errexit ; \ done) ; \ done) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # Specify the MACH we currently use to build and test ksh LIBSHELLMACH= $(MACH64) include ../../../Makefile.cmd include ../../../Makefile.cmd.64 include ../Makefile.com # Hammerhead: ksh93 is a boot-essential shell, install to /bin. # Parent ksh/Makefile creates ksh93/rksh/rksh93 hardlinks in ROOTESSBIN. ROOTPROG = $(PROG:%=$(ROOTESSBIN)/%) install: all $(ROOTPROG) include ../../../Makefile.targ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2010 Nexenta Systems, Inc. All rights reserved. # Copyright (c) 2018, Joyent, Inc. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # PROG= alias ALIASPROG= \ bg \ cd \ cksum \ cmp \ comm \ command \ cut \ fc \ fg \ getopts \ hash \ jobs \ join \ kill \ paste \ print \ read \ rev \ sum \ tee \ test \ type \ ulimit \ umask \ unalias \ uniq \ wait \ wc XPG4ALIASPROG= \ alias \ bg \ cd \ command \ fc \ fg \ getopts \ hash \ jobs \ kill \ read \ test \ type \ ulimit \ umask \ unalias \ wait XPG4SH= \ sh ROOTXPG4ALIAS= \ $(XPG4SH:%=$(ROOTXPG4BIN)/%) $(XPG4ALIASPROG:%=$(ROOTXPG4BIN)/%) include ../../../Makefile.cmd # Hammerhead: SPARC Makefile.cmd.64 include removed - amd64 only # Hammerhead: Install alias + builtins to /usr/bin (same as /bin via symlink) ROOTALIASPROG= $(ALIASPROG:%=$(ROOTBIN)/%) FILEMODE= 555 CERRWARN += -Wno-parentheses # not linted SMATCH=off .KEEP_STATE: all: $(PROG) # Hammerhead: XPG4 aliases symlink to /bin/alias (3 levels up from /usr/xpg4/bin) $(XPG4ALIASPROG:%=$(ROOTXPG4BIN)/%): $(RM) $@; $(SYMLINK) ../../../bin/alias $@ $(XPG4SH:%=$(ROOTXPG4BIN)/%): $(RM) $@; $(SYMLINK) ../../bin/ksh93 $@ # Hammerhead: Builtins as hardlinks to alias in /usr/bin $(ROOTALIASPROG): $(ROOTPROG) $(RM) $@; $(LN) $(ROOTPROG) $@ # Set common AST build flags (e.g., needed to support the math stuff). include ../../Makefile.ast ASTSRC= $(C_AST)/src/cmd/ksh93 OBJECTS= \ alias.o SRCS= $(OBJECTS:%.o=%.c) LDLIBS += -lshell -lcmd -last -lumem CPPFLAGS= \ $(DTEXTDOM) $(DTS_ERRNO) \ -I$(ASTSRC)/include \ -I$(AST)/libshell/$(MACH64) \ -I$(ROOT)/usr/include/ast \ -I$(ROOT)/usr/include CFLAGS += $(ASTCFLAGS) CFLAGS64 += $(ASTCFLAGS64) # Hammerhead: Install alias to /usr/bin (= /bin via symlink) ROOTCMDDIR=$(ROOTBIN) install: all $(ROOTPROG) $(ROOTXPG4PROG) $(ROOTALIASPROG) $(ROOTXPG4ALIAS) $(PROG): $(OBJECTS) $(RM) alias $(LINK.c) $(OBJECTS) -o $@ $(LDLIBS) $(POST_PROCESS) clean clobber: rm -f $(PROG) $(OBJECTS) _msg: /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * * Copyright 2021 OmniOS Community Edition (OmniOSce) Association. */ /* * alias.c is a C version of the alias.sh wrapper (which links ksh * builtins to commands in /usr/bin/, e.g. calling this wrapper as * /usr/bin/alias will call the ksh "alias" builtin, running it as * /usr/bin/cut will call the ksh "cut" builtin etc. */ #include #include #include #include #include #include #undef calloc #undef free typedef struct { const char *name; int (* func)(int, char **, Shbltin_t *); } bfastpathrec; /* * We've disabled the "fastpath" codepath for some commands below * because it causes a paradoxon for large input files (as used by * ON PerfPIT for testing). For /usr/bin/rev (where the issue was * first discovered) it looks like this: * - for small files like /etc/profile the fastpath is faster in a loop * with 1000 iterations (8 seconds with fastpath, 14 seconds without * fastpath) * - for large files (/usr/pub/UTF-8 replicated until the test file * reaches 24884706 bytes) the benchmark reverses: The fastpath now * needs 40 seconds and without fastpath it needs 30 seconds (for 100 * iterations). */ #if 0 #define ENABLE_PERFORMANCE_PARADOXON 1 #endif /* * List of libcmd builtins which do not require a |Shell_t| context. * This list was automatically generated from */ static const bfastpathrec fastpath_builtins[] = { /* This list must be alphabetically sorted for |strcmp()| usage */ { "basename", b_basename }, { "cat", b_cat }, { "chgrp", b_chgrp }, { "chmod", b_chmod }, { "chown", b_chown }, #ifdef ENABLE_PERFORMANCE_PARADOXON { "cksum", b_cksum }, #endif /* ENABLE_PERFORMANCE_PARADOXON */ { "cmp", b_cmp }, { "comm", b_comm }, { "cp", b_cp }, { "cut", b_cut }, { "date", b_date }, { "dirname", b_dirname }, { "expr", b_expr }, { "fds", b_fds }, { "fmt", b_fmt }, { "fold", b_fold }, { "getconf", b_getconf }, { "head", b_head }, { "id", b_id }, { "join", b_join }, { "ln", b_ln }, { "md5sum", b_md5sum }, { "mkdir", b_mkdir }, { "mkfifo", b_mkfifo }, { "mktemp", b_mktemp }, { "mv", b_mv }, { "paste", b_paste }, { "pathchk", b_pathchk }, { "pids", b_pids }, #ifdef ENABLE_PERFORMANCE_PARADOXON { "rev", b_rev }, #endif /* ENABLE_PERFORMANCE_PARADOXON */ { "rm", b_rm }, { "rmdir", b_rmdir }, { "stty", b_stty }, #ifdef ENABLE_PERFORMANCE_PARADOXON { "sum", b_sum }, #endif /* ENABLE_PERFORMANCE_PARADOXON */ { "sync", b_sync }, { "tail", b_tail }, { "tee", b_tee }, { "tty", b_tty }, { "uname", b_uname }, { "uniq", b_uniq }, { "vmstate", b_vmstate }, { "wc", b_wc }, { NULL, NULL } }; static inline const bfastpathrec * find_bfastpathrec(const char *name) { unsigned int i; signed int cmpres; for (i = 0; fastpath_builtins[i].name != NULL; i++) { cmpres = strcmp(fastpath_builtins[i].name, name); if (cmpres == 0) return (&fastpath_builtins[i]); else if (cmpres > 0) return (NULL); } return (NULL); } static inline int fastpath_builtin_main(const bfastpathrec *brec, int argc, char *argv[]) { setlocale(LC_ALL, ""); /* calls |_ast_setlocale()| */ return ((*brec->func)(argc, argv, NULL)); } /* Builtin script, originally derived from alias.sh */ static const char *script = "\n" /* Get name of builtin */ "typeset cmd=\"${0##*/}\"\n" /* * If the requested command is not an alias, load it explicitly * to make sure it is not bound to a path (those built-ins which * are mapped via shell aliases point to commands which are * "special shell built-ins" which cannot be bound to a specific * PATH element) - otherwise we may execute the wrong command * if an executable with the same name sits in a PATH element * before /usr/bin (e.g. /usr/xpg4/bin/ls would be executed * before /bin/ls if the path was something like * PATH=/usr/xpg4/bin:/usr/bin). */ "if [[ \"${cmd}\" != ~(Elr)(alias|unalias|command) ]] && " "! alias \"${cmd}\" >/dev/null 2>&1 ; then\n" "PATH='' builtin \"${cmd}\"\n" "fi\n" /* command is a keyword and needs to be handled separately */ "if [[ \"${cmd}\" == \"command\" ]] ; then\n" "command \"$@\"\n" "else\n" "\"${cmd}\" \"$@\"\n" "fi\n" "exitval=$?"; static int script_builtin_main(int argc, char **argv) { int i; Shell_t *shp; Namval_t *np; int exitval; char **xargv; /* * Create copy of |argv| array shifted by one position to * emulate $ /usr/bin/sh ... #. * First position is set to "/usr/bin/sh" since other * values may trigger special shell modes (e.g. *rsh* will * trigger "restricted" shell mode etc.). */ xargv = calloc(argc + 2, sizeof (char *)); if (xargv == NULL) return (1); xargv[0] = "/usr/bin/sh"; for (i = 0; i < argc; i++) xargv[i + 1] = argv[i]; xargv[i + 1] = NULL; shp = sh_init(argc + 1, xargv, 0); if (!shp) error(ERROR_exit(1), "shell initialisation failed."); if (setjmp(*shp->jmplist) == 0) (void) sh_trap(script, 0); np = nv_open("exitval", shp->var_tree, 0); if (!np) error(ERROR_exit(1), "variable %s not found.", "exitval"); exitval = (int)nv_getnum(np); nv_close(np); free(xargv); return (exitval); } int main(int argc, char **argv) { const char *progname; const bfastpathrec *brec; char execnamebuff[PATH_MAX + 1]; /* Get program name */ if (pathprog(argv[0], execnamebuff, sizeof (execnamebuff)) <= 0) error(ERROR_exit(1), "could not determinate exec name."); progname = (const char *)strrchr(execnamebuff, '/'); if (progname != NULL) progname++; else progname = execnamebuff; /* Execute command... */ if (brec = find_bfastpathrec(progname)) { /* ... either via a fast path (calling the code directly) ... */ return (fastpath_builtin_main(brec, argc, argv)); } else { /* ... or from within a full shell. */ return (script_builtin_main(argc, argv)); } } # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # SHELL= /usr/bin/ksh93 include $(SRC)/lib/Makefile.lib # Hammerhead: amd64-only SUBDIRS= $(MACH64) all : TARGET= all clean : TARGET= clean clobber : TARGET= clobber install : TARGET= install install_h : TARGET= install_h _msg : TARGET= _msg _feature : TARGET= _feature .KEEP_STATE: .PARALLEL: $(SUBDIRS) all clean clobber install _feature: $(SUBDIRS) # Hammerhead: amd64-only, use $(SUBDIRS) not $(MACH) _msg: $(SUBDIRS) include Makefile.defs HDRS= $(HEADERINSTALL) HDRDIR32= $(MACH)/ast HDRDIR64= $(MACH64)/ast include ../Makefile.asthdr install_h: $(SUBDIRS) .WAIT $(ROOTHDRS) install: install_h $(SUBDIRS): FRC @cd $@; pwd; $(MAKE) $(TARGET) FRC: include $(SRC)/lib/Makefile.targ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. # # Copyright (c) 2019, Joyent, Inc. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. SHELL= /usr/bin/ksh93 LIBRARY= libast.a VERS= .1 include ../Makefile.defs OBJECTS += $(LIBOBJS) include $(SRC)/lib/Makefile.lib include ../../Makefile.ast MAPFILES= ../mapfile-vers LIBS= $(DYNLIB) LDLIBS += -lm -lc -lsocket # We use "=" here since using $(CPPFLAGS.master) is very tricky in our # case - it MUST come as the last element but future changes in -D options # may then cause silent breakage in the AST sources because the last -D # option specified overrides previous -D options so we prefer the current # way to explicitly list each single flag. # Notes: # - "-D_BLD_DLL" comes from ${mam_cc_DLL} in Mamfile # - Be careful with "-D__OBSOLETE__=xxx". Make sure this is in sync with # upstream (see Mamfile) and do not change the |__OBSOLETE__| value # without examining the symbols that will be removed, and evaluating # whether that breaks compatibility with upstream binaries. CPPFLAGS= \ $(DTEXTDOM) $(DTS_ERRNO) \ $(ASTPLATFORMCPPFLAGS) \ -Iast -I. \ -I$(ASTSRC) \ -I$(ASTSRC)/comp \ -I$(ASTSRC)/include \ -I$(ASTSRC)/std \ -I$(ASTSRC)/dir \ -I$(ASTSRC)/port \ -I$(ASTSRC)/sfio \ -I$(ASTSRC)/misc \ -I$(ASTSRC)/string \ -I$(ROOT)/usr/include \ '-DCONF_LIBSUFFIX=".so"' \ '-DCONF_LIBPREFIX="lib"' \ -DERROR_CATALOG=\""libast"\" \ -D__OBSOLETE__=20120101 \ -D_BLD_ast \ -D_PACKAGE_ast \ -D_BLD_DLL \ -D_AST_std_malloc=1 CFLAGS += $(ASTCFLAGS) CFLAGS64 += $(ASTCFLAGS64) CERRWARN += -Wno-parentheses CERRWARN += $(CNOWARN_UNINIT) CERRWARN += -Wno-char-subscripts CERRWARN += -Wno-clobbered CERRWARN += -Wno-unused-variable CERRWARN += -Wno-unused-but-set-variable CERRWARN += -Wno-unused-but-set-parameter CERRWARN += -Wno-unused-value CERRWARN += -Wno-unused-function CERRWARN += -Wno-implicit-function-declaration CERRWARN += -Wno-empty-body CERRWARN += -Wno-type-limits CERRWARN += -Wno-address # It seems, we get false positives with following three files. # Since this is third party source, silencing this warning seems to be # reasonable path to take. pics/path/pathpath.o : CERRWARN += -Wno-return-local-addr pics/path/pathpath.o : CERRWARN += -Wno-return-local-addr pics/path/pathkey.o : CERRWARN += -Wno-return-local-addr pics/path/pathkey.o : CERRWARN += -Wno-return-local-addr pics/path/pathprobe.o : CERRWARN += -Wno-return-local-addr pics/path/pathprobe.o : CERRWARN += -Wno-return-local-addr # The code layout after macro expansion is upsetting gcc 14, silence it. pics/sfio/sfdisc.o : CERRWARN += -Wno-misleading-indentation pics/sfio/sfstack.o : CERRWARN += -Wno-misleading-indentation pics/port/astconf.o : CERRWARN += -Wno-unused-label SMATCH= off .KEEP_STATE: all: install_h mkpicdirs .WAIT $(LIBS) mkpicdirs: @mkdir -p $(LOBJDIRS:%=pics/%) include $(SRC)/lib/Makefile.targ pics/%.o: $(ASTSRC)/%.c $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< $(POST_PROCESS_O) ###################################################################### # Header file generation ast/%: FILEMODE= 0644 # The HEADERGEN headers are generated from the corresponding FEATURE/ file # with any ast_ prefix removed. $(HEADERGEN:%=ast/%): $(FEATURES:%=FEATURE/%) src=`echo $(@F:%.h=%) | sed 's/^ast_//'`; \ $(AST_PROTO) FEATURE/$$src > $@ $(POST_PROCESS_AST) ast/prototyped.h: $(AST_TOOLS)/proto $(MKDIR) -p $(@D) $(AST_TOOLS)/proto -f /dev/null > $@ ast/ast_common.h: ast/prototyped.h $(AST_PROTO) FEATURE/common | $(GREP) -v 'define _def_map_' > $@ $(POST_PROCESS_AST) $(CP) $@ . ast/lc.h: lc.h $(AST_PROTO) lc.h > ast/lc.h ast/%.h: $(ASTSRC)/include/%.h $(INS.file) $(POST_PROCESS_AST) ast/%.h: $(ASTSRC)/comp/%.h $(INS.file) $(POST_PROCESS_AST) ast/%.h: $(ASTSRC)/cdt/%.h $(INS.file) $(POST_PROCESS_AST) ast/%.h: $(ASTSRC)/std/%.h $(INS.file) $(POST_PROCESS_AST) ast/ast_namval.h: $(ASTSRC)/include/namval.h $(CP) $(ASTSRC)/include/namval.h $@ $(POST_PROCESS_AST) CLOBBERFILES += ast_common.h t.c CLOBBERFILES += ast/* install_h: ast/prototyped.h ast/ast_common.h ast/lc.h \ $(HEADERGEN:%=ast/%) $(HEADERSRC:%=ast/%) .PARALLEL: $(HEADERGEN:%=ast/%) $(HEADERSRC:%=ast/%) _feature: FRC $(MAKE) -f Makefile.iffe generate include ../../Makefile.astmsg FRC: # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # These macros should be kept synchronised with those in # usr/src/contrib/ast/src/lib/libast/Makefile AST_LICENSE = -o since=1985,author=gsf+dgk+kpv ASTLIB= libast ASTSRC= $(C_AST)/src/lib/$(ASTLIB) HDRGUARD= ast FEATURES= common lib sys fs tty standards param \ align api aso asometh botch ccode dirent eaccess errno \ fcntl float hack iconv libpath limits locale mmap \ mode ndbm nl_types omitted options preroot prog \ sfinit sfio sig siglist signal sizeof stdio \ syscall time tmlib tmx tv tvlib uwin vfork vmalloc wait \ wchar wctype map HEADERSTD= dirent.h iconv.h nl_types.h stdio.h wchar.h wctype.h HEADERSRC= \ ast.h ast_dir.h ast_getopt.h ast_std.h ast_namval.h ast_windows.h \ ccode.h cdt.h cdtlib.h cmdarg.h debug.h dt.h error.h find.h ftw.h \ ftwalk.h fts.h fs3d.h getopt.h glob.h hash.h hashkey.h hashpart.h \ ip6.h ls.h magic.h mc.h mime.h mnt.h modecanon.h modex.h \ namval.h option.h proc.h re_comp.h recfmt.h regex.h regexp.h \ sfio.h sfio_s.h sfio_t.h sfdisc.h shcmd.h \ stack.h stak.h stk.h swap.h tar.h times.h tm.h tok.h \ usage.h vdb.h vecargs.h vmalloc.h wait.h wordexp.h \ bytesex.h endian.h fnmatch.h magicid.h fnv.h aso.h \ $(HEADERSTD) HEADERGEN= \ align.h preroot.h sig.h tmx.h tv.h \ ast_api.h ast_botch.h ast_ccode.h ast_fcntl.h ast_float.h \ ast_fs.h ast_lib.h ast_map.h ast_mmap.h ast_mode.h ast_ndbm.h \ ast_param.h ast_sys.h ast_time.h ast_tty.h \ ast_vfork.h ast_wait.h ast_limits.h ast_standards.h ast_sizeof.h \ $(HEADERSTD:%=ast_%) HEADERINSTALL= $(HEADERSRC) $(HEADERGEN) ast_common.h lc.h prototyped.h LOBJDIRS= \ aso cdt comp dir disc hash misc obsolete path port preroot \ regex sfio stdio string tm uwin vec vmalloc LIBOBJS= \ aso/aso-fcntl.o \ aso/aso-sem.o \ aso/aso.o \ aso/asolock.o \ aso/asometh.o \ aso/asorelax.o \ cdt/dtclose.o \ cdt/dtcomp.o \ cdt/dtdisc.o \ cdt/dthash.o \ cdt/dtlist.o \ cdt/dtmethod.o \ cdt/dtnew.o \ cdt/dtopen.o \ cdt/dtstrhash.o \ cdt/dttree.o \ cdt/dtview.o \ cdt/dtwalk.o \ comp/atexit.o \ comp/basename.o \ comp/catopen.o \ comp/closelog.o \ comp/creat64.o \ comp/dirname.o \ comp/dup2.o \ comp/eaccess.o \ comp/errno.o \ comp/execlp.o \ comp/execve.o \ comp/execvp.o \ comp/execvpe.o \ comp/fcntl.o \ comp/fmtmsglib.o \ comp/fnmatch.o \ comp/frexp.o \ comp/frexpl.o \ comp/fsync.o \ comp/ftw.o \ comp/getdate.o \ comp/getgroups.o \ comp/getlogin.o \ comp/getopt.o \ comp/getoptl.o \ comp/getpgrp.o \ comp/getsubopt.o \ comp/getwd.o \ comp/gross.o \ comp/hsearch.o \ comp/iconv.o \ comp/killpg.o \ comp/link.o \ comp/localeconv.o \ comp/lstat.o \ comp/memccpy.o \ comp/memchr.o \ comp/memcmp.o \ comp/memcpy.o \ comp/memmove.o \ comp/memset.o \ comp/mkdir.o \ comp/mkfifo.o \ comp/mknod.o \ comp/mktemp.o \ comp/mktime.o \ comp/mount.o \ comp/nftw.o \ comp/omitted.o \ comp/open.o \ comp/openlog.o \ comp/putenv.o \ comp/re_comp.o \ comp/readlink.o \ comp/realpath.o \ comp/regcmp.o \ comp/regexp.o \ comp/remove.o \ comp/rename.o \ comp/resolvepath.o \ comp/rmdir.o \ comp/setenv.o \ comp/setlocale.o \ comp/setlogmask.o \ comp/setpgid.o \ comp/setsid.o \ comp/sigunblock.o \ comp/sigflag.o \ comp/spawnveg.o \ comp/statvfs.o \ comp/strcasecmp.o \ comp/strchr.o \ comp/strftime.o \ comp/strncasecmp.o \ comp/strptime.o \ comp/strrchr.o \ comp/strstr.o \ comp/strtod.o \ comp/strtol.o \ comp/strtold.o \ comp/strtoll.o \ comp/strtoul.o \ comp/strtoull.o \ comp/swab.o \ comp/symlink.o \ comp/syslog.o \ comp/system.o \ comp/tempnam.o \ comp/tmpnam.o \ comp/transition.o \ comp/tsearch.o \ comp/unlink.o \ comp/unsetenv.o \ comp/vfork.o \ comp/waitpid.o \ comp/wc.o \ comp/wordexp.o \ dir/getdents.o \ dir/opendir.o \ dir/readdir.o \ dir/rewinddir.o \ dir/seekdir.o \ dir/telldir.o \ disc/memfatal.o \ disc/sfdcdio.o \ disc/sfdcdos.o \ disc/sfdcfilter.o \ disc/sfdcmore.o \ disc/sfdcprefix.o \ disc/sfdcseekable.o \ disc/sfdcslow.o \ disc/sfdcsubstr.o \ disc/sfdctee.o \ disc/sfdcunion.o \ disc/sfkeyprintf.o \ disc/sfstrtmp.o \ hash/hashalloc.o \ hash/hashdump.o \ hash/hashfree.o \ hash/hashlast.o \ hash/hashlook.o \ hash/hashscan.o \ hash/hashsize.o \ hash/hashview.o \ hash/hashwalk.o \ hash/memhash.o \ hash/memsum.o \ hash/strhash.o \ hash/strkey.o \ hash/strsum.o \ misc/astintercept.o \ misc/conformance.o \ misc/debug.o \ misc/cmdarg.o \ misc/error.o \ misc/errorf.o \ misc/errormsg.o \ misc/errorx.o \ misc/fastfind.o \ misc/fmtrec.o \ misc/fs3d.o \ misc/fts.o \ misc/ftwalk.o \ misc/ftwflags.o \ misc/getcwd.o \ misc/getenv.o \ misc/glob.o \ misc/magic.o \ misc/mime.o \ misc/mimetype.o \ misc/optesc.o \ misc/optget.o \ misc/optjoin.o \ misc/optctx.o \ misc/procclose.o \ misc/procfree.o \ misc/procopen.o \ misc/procrun.o \ misc/recfmt.o \ misc/reclen.o \ misc/recstr.o \ misc/setenviron.o \ misc/sigcrit.o \ misc/sigdata.o \ misc/signal.o \ misc/stack.o \ misc/state.o \ misc/stk.o \ misc/systrace.o \ misc/translate.o \ misc/univdata.o \ obsolete/spawn.o \ path/pathaccess.o \ path/pathbin.o \ path/pathcanon.o \ path/pathcat.o \ path/pathcd.o \ path/pathcheck.o \ path/pathexists.o \ path/pathfind.o \ path/pathgetlink.o \ path/pathkey.o \ path/pathnative.o \ path/pathpath.o \ path/pathposix.o \ path/pathprobe.o \ path/pathprog.o \ path/pathrepl.o \ path/pathsetlink.o \ path/pathshell.o \ path/pathstat.o \ path/pathtemp.o \ path/pathtmp.o \ port/astconf.o \ port/astcopy.o \ port/astdynamic.o \ port/astlicense.o \ port/astquery.o \ port/aststatic.o \ port/astwinsize.o \ port/iblocks.o \ port/lc.o \ port/mc.o \ port/mnt.o \ port/touch.o \ preroot/getpreroot.o \ preroot/ispreroot.o \ preroot/realopen.o \ preroot/setpreroot.o \ regex/regalloc.o \ regex/regcache.o \ regex/regclass.o \ regex/regcoll.o \ regex/regcomp.o \ regex/regdecomp.o \ regex/regerror.o \ regex/regexec.o \ regex/regfatal.o \ regex/reginit.o \ regex/regnexec.o \ regex/regrecord.o \ regex/regrexec.o \ regex/regstat.o \ regex/regsub.o \ regex/regsubcomp.o \ regex/regsubexec.o \ sfio/_sfclrerr.o \ sfio/_sfdlen.o \ sfio/_sfeof.o \ sfio/_sferror.o \ sfio/_sffileno.o \ sfio/_sfgetc.o \ sfio/_sfgetl.o \ sfio/_sfgetl2.o \ sfio/_sfgetu.o \ sfio/_sfgetu2.o \ sfio/_sfllen.o \ sfio/_sfopen.o \ sfio/_sfputc.o \ sfio/_sfputd.o \ sfio/_sfputl.o \ sfio/_sfputm.o \ sfio/_sfputu.o \ sfio/_sfslen.o \ sfio/_sfstacked.o \ sfio/_sfulen.o \ sfio/_sfvalue.o \ sfio/sfclose.o \ sfio/sfclrlock.o \ sfio/sfcvt.o \ sfio/sfdisc.o \ sfio/sfdlen.o \ sfio/sfecvt.o \ sfio/sfexcept.o \ sfio/sfextern.o \ sfio/sffcvt.o \ sfio/sffilbuf.o \ sfio/sfflsbuf.o \ sfio/sfgetd.o \ sfio/sfgetl.o \ sfio/sfgetm.o \ sfio/sfgetr.o \ sfio/sfgetu.o \ sfio/sfllen.o \ sfio/sfmode.o \ sfio/sfmove.o \ sfio/sfmutex.o \ sfio/sfnew.o \ sfio/sfnotify.o \ sfio/sfnputc.o \ sfio/sfopen.o \ sfio/sfpeek.o \ sfio/sfpkrd.o \ sfio/sfpoll.o \ sfio/sfpool.o \ sfio/sfpopen.o \ sfio/sfprintf.o \ sfio/sfprints.o \ sfio/sfpurge.o \ sfio/sfputd.o \ sfio/sfputl.o \ sfio/sfputm.o \ sfio/sfputr.o \ sfio/sfputu.o \ sfio/sfraise.o \ sfio/sfrd.o \ sfio/sfread.o \ sfio/sfreserve.o \ sfio/sfresize.o \ sfio/sfscanf.o \ sfio/sfseek.o \ sfio/sfset.o \ sfio/sfsetbuf.o \ sfio/sfsetfd.o \ sfio/sfsize.o \ sfio/sfsk.o \ sfio/sfstack.o \ sfio/sfstrtod.o \ sfio/sfswap.o \ sfio/sfsync.o \ sfio/sftable.o \ sfio/sftell.o \ sfio/sftmp.o \ sfio/sfungetc.o \ sfio/sfvprintf.o \ sfio/sfvscanf.o \ sfio/sfwalk.o \ sfio/sfwr.o \ sfio/sfwrite.o \ stdio/_doprnt.o \ stdio/_doscan.o \ stdio/_filbuf.o \ stdio/_flsbuf.o \ stdio/_stdfun.o \ stdio/_stdopen.o \ stdio/_stdprintf.o \ stdio/_stdscanf.o \ stdio/_stdsprnt.o \ stdio/_stdvbuf.o \ stdio/_stdvsnprnt.o \ stdio/_stdvsprnt.o \ stdio/_stdvsscn.o \ stdio/asprintf.o \ stdio/clearerr.o \ stdio/fclose.o \ stdio/fcloseall.o \ stdio/fdopen.o \ stdio/feof.o \ stdio/ferror.o \ stdio/fflush.o \ stdio/fgetc.o \ stdio/fgetpos.o \ stdio/fgets.o \ stdio/fgetwc.o \ stdio/fgetws.o \ stdio/fileno.o \ stdio/flockfile.o \ stdio/fmemopen.o \ stdio/fopen.o \ stdio/fprintf.o \ stdio/fpurge.o \ stdio/fputc.o \ stdio/fputs.o \ stdio/fputwc.o \ stdio/fputws.o \ stdio/funlockfile.o \ stdio/fread.o \ stdio/freopen.o \ stdio/fscanf.o \ stdio/fseek.o \ stdio/fseeko.o \ stdio/fsetpos.o \ stdio/ftell.o \ stdio/ftello.o \ stdio/ftrylockfile.o \ stdio/fwide.o \ stdio/fwprintf.o \ stdio/fwrite.o \ stdio/fwscanf.o \ stdio/getc.o \ stdio/getchar.o \ stdio/getdelim.o \ stdio/getline.o \ stdio/getw.o \ stdio/getwc.o \ stdio/getwchar.o \ stdio/pclose.o \ stdio/popen.o \ stdio/printf.o \ stdio/putc.o \ stdio/putchar.o \ stdio/puts.o \ stdio/putw.o \ stdio/putwc.o \ stdio/putwchar.o \ stdio/rewind.o \ stdio/scanf.o \ stdio/setbuf.o \ stdio/setbuffer.o \ stdio/setlinebuf.o \ stdio/setvbuf.o \ stdio/snprintf.o \ stdio/sprintf.o \ stdio/sscanf.o \ stdio/stdio_c99.o \ stdio/swprintf.o \ stdio/swscanf.o \ stdio/tmpfile.o \ stdio/ungetc.o \ stdio/ungetwc.o \ stdio/vasprintf.o \ stdio/vfprintf.o \ stdio/vfscanf.o \ stdio/vfwprintf.o \ stdio/vfwscanf.o \ stdio/vprintf.o \ stdio/vscanf.o \ stdio/vsnprintf.o \ stdio/vsprintf.o \ stdio/vsscanf.o \ stdio/vswprintf.o \ stdio/vswscanf.o \ stdio/vwprintf.o \ stdio/vwscanf.o \ stdio/wprintf.o \ stdio/wscanf.o \ string/base64.o \ string/ccmap.o \ string/ccmapid.o \ string/ccnative.o \ string/chresc.o \ string/chrtoi.o \ string/fmtbase.o \ string/fmtbuf.o \ string/fmtclock.o \ string/fmtdev.o \ string/fmtelapsed.o \ string/fmterror.o \ string/fmtesc.o \ string/fmtfmt.o \ string/fmtfs.o \ string/fmtgid.o \ string/fmtident.o \ string/fmtint.o \ string/fmtip4.o \ string/fmtip6.o \ string/fmtls.o \ string/fmtmatch.o \ string/fmtmode.o \ string/fmtnum.o \ string/fmtperm.o \ string/fmtre.o \ string/fmtscale.o \ string/fmtsignal.o \ string/fmttime.o \ string/fmttmx.o \ string/fmttv.o \ string/fmtuid.o \ string/fmtversion.o \ string/memdup.o \ string/modedata.o \ string/modei.o \ string/modex.o \ string/stracmp.o \ string/strcopy.o \ string/strdup.o \ string/strelapsed.o \ string/strerror.o \ string/stresc.o \ string/streval.o \ string/strexpr.o \ string/strgid.o \ string/strlcat.o \ string/strlcpy.o \ string/strlook.o \ string/strmatch.o \ string/strmode.o \ string/strnacmp.o \ string/strncopy.o \ string/strnpcmp.o \ string/strntod.o \ string/strntol.o \ string/strntold.o \ string/strntoll.o \ string/strnton.o \ string/strntoul.o \ string/strntonll.o \ string/strntoull.o \ string/strnvcmp.o \ string/stropt.o \ string/strpcmp.o \ string/strperm.o \ string/strpsearch.o \ string/strsearch.o \ string/strsort.o \ string/strtape.o \ string/strtoip4.o \ string/strtoip6.o \ string/strton.o \ string/strtonll.o \ string/struid.o \ string/struniq.o \ string/strvcmp.o \ string/swapget.o \ string/swapmem.o \ string/swapop.o \ string/swapput.o \ string/tok.o \ string/tokline.o \ string/tokscan.o \ string/wc2utf8.o \ tm/tmdata.o \ tm/tmdate.o \ tm/tmequiv.o \ tm/tmfix.o \ tm/tmfmt.o \ tm/tmform.o \ tm/tmgoff.o \ tm/tminit.o \ tm/tmleap.o \ tm/tmlex.o \ tm/tmlocale.o \ tm/tmmake.o \ tm/tmpoff.o \ tm/tmscan.o \ tm/tmsleep.o \ tm/tmtime.o \ tm/tmtype.o \ tm/tmweek.o \ tm/tmword.o \ tm/tmxdate.o \ tm/tmxduration.o \ tm/tmxfmt.o \ tm/tmxgettime.o \ tm/tmxleap.o \ tm/tmxmake.o \ tm/tmxscan.o \ tm/tmxsettime.o \ tm/tmxsleep.o \ tm/tmxtime.o \ tm/tmxtouch.o \ tm/tmzone.o \ tm/tvcmp.o \ tm/tvgettime.o \ tm/tvsettime.o \ tm/tvsleep.o \ tm/tvtouch.o \ uwin/a64l.o \ uwin/acosh.o \ uwin/asinh.o \ uwin/atanh.o \ uwin/cbrt.o \ uwin/crypt.o \ uwin/erf.o \ uwin/err.o \ uwin/exp.o \ uwin/exp__E.o \ uwin/expm1.o \ uwin/gamma.o \ uwin/getpass.o \ uwin/lgamma.o \ uwin/log.o \ uwin/log1p.o \ uwin/log__L.o \ uwin/rand48.o \ uwin/random.o \ uwin/rcmd.o \ uwin/rint.o \ uwin/support.o \ vec/vecargs.o \ vec/vecfile.o \ vec/vecfree.o \ vec/vecload.o \ vec/vecstring.o \ vmalloc/malloc.o \ vmalloc/vmbest.o \ vmalloc/vmclear.o \ vmalloc/vmclose.o \ vmalloc/vmdcheap.o \ vmalloc/vmdebug.o \ vmalloc/vmdisc.o \ vmalloc/vmexit.o \ vmalloc/vmgetmem.o \ vmalloc/vmlast.o \ vmalloc/vmmopen.o \ vmalloc/vmopen.o \ vmalloc/vmpool.o \ vmalloc/vmprivate.o \ vmalloc/vmprofile.o \ vmalloc/vmregion.o \ vmalloc/vmsegment.o \ vmalloc/vmset.o \ vmalloc/vmstat.o \ vmalloc/vmstrdup.o \ vmalloc/vmtrace.o \ vmalloc/vmwalk.o # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # include ../Makefile.com include ../../Makefile.iffe GENCONF= conflim.h conftab.c conftab.h LCCONF= lc.h lctab.c # Unfortunately, due to differences in the "sed" command implemented in # various illumos distributions, we can't portably use 'sed -i' here. clean_%: % { \ tf=$$(mktemp /tmp/iffe.XXXXXXXXXX) && \ $(SED) < "$<" > "$$tf" '$(SEDPATTERN)' && \ $(CP) -p "$$tf" "$<" && \ $(RM) "$$tf"; \ } conftab.c: $(ASTSRC)/comp/conf.tab PATH=$(IFFEPATH) \ $(SHELL) $(ASTSRC)/comp/conf.sh -v $(ASTSRC)/comp/conf.tab \ $(IFFEC) conflim.h conftab.h: conftab.c lctab.c: $(ASTSRC)/port/lc.tab $(AST_LCGEN) $(LCCONF) < $(ASTSRC)/port/lc.tab lc.h: lctab.c FEATURE/limits: $(GENCONF) FEATURE/float: ast/ast_common.h cleaniffe: FRC $(RM) $(FEATURES:%=FEATURE/%) $(GENCONF) $(LCCONF) generate: cleaniffe $(FEATURES:%=FEATURE/%) $(LCCONF) \ .WAIT $(GENCONF:%=clean_%) $(LCCONF:%=clean_%) /* : : generated from contrib/ast/src/lib/libast/features/align.c by iffe version 2012-07-17 : : */ #ifndef _def_align_ast #define _def_align_ast 1 #define _sys_types 1 /* #include ok */ #define ALIGN_CHUNK 8192 #define ALIGN_INTEGRAL uintptr_t #define ALIGN_INTEGER(x) ((char*)(x)-(char*)0) #define ALIGN_POINTER(x) ((char*)(x)) #define ALIGN_ROUND(x,y) ALIGN_POINTER(ALIGN_INTEGER((x)+(y)-1)&~((y)-1)) #define ALIGN_BOUND ALIGN_BOUND2 #define ALIGN_ALIGN(x) ALIGN_ALIGN2(x) #define ALIGN_TRUNC(x) ALIGN_TRUNC2(x) #define ALIGN_BIT1 0x1 #define ALIGN_BOUND1 ALIGN_BOUND2 #define ALIGN_ALIGN1(x) ALIGN_ALIGN2(x) #define ALIGN_TRUNC1(x) ALIGN_TRUNC2(x) #define ALIGN_CLRBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0xfffffffffffffffe) #define ALIGN_SETBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)|0x1) #define ALIGN_TSTBIT1(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x1) #define ALIGN_BIT2 0x2 #define ALIGN_BOUND2 16 #define ALIGN_ALIGN2(x) ALIGN_TRUNC2((x)+15) #define ALIGN_TRUNC2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0xfffffffffffffff0) #define ALIGN_CLRBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0xfffffffffffffffd) #define ALIGN_SETBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)|0x2) #define ALIGN_TSTBIT2(x) ALIGN_POINTER(ALIGN_INTEGER(x)&0x2) #endif /* : : generated from contrib/ast/src/lib/libast/features/api by iffe version 2012-07-17 : : */ #ifndef _AST_API_H #define _AST_API_H 1 #define _sys_types 1 /* #include ok */ #define _AST_VERSION AST_VERSION /* pre-20100601 compatibility */ #define AST_VERSION 20111111 #define ASTAPI(rel) ( _BLD_ast || !_API_ast || _API_ast >= rel ) #if !defined(_API_ast) && defined(_API_DEFAULT) #define _API_ast _API_DEFAULT #endif #if ASTAPI(20120411) #undef cmdopen #define cmdopen cmdopen_20120411 #elif _API_ast >= 20110505 #undef cmdopen #define cmdopen cmdopen_20110505 #endif #if ASTAPI(20100601) #undef pathaccess #define pathaccess pathaccess_20100601 #endif #if ASTAPI(20100601) #undef pathcanon #define pathcanon pathcanon_20100601 #endif #if ASTAPI(20100601) #undef pathcat #define pathcat pathcat_20100601 #endif #if ASTAPI(20100601) #undef pathkey #define pathkey pathkey_20100601 #endif #if ASTAPI(20100601) #undef pathpath #define pathpath pathpath_20100601 #endif #if ASTAPI(20100601) #undef pathprobe #define pathprobe pathprobe_20100601 #endif #if ASTAPI(20100601) #undef pathrepl #define pathrepl pathrepl_20100601 #endif #if ASTAPI(20120528) #undef regexec #define regexec regexec_20120528 #endif #if ASTAPI(20120528) #undef regnexec #define regnexec regnexec_20120528 #endif #if ASTAPI(20120528) #undef regrexec #define regrexec regrexec_20120528 #endif #if ASTAPI(20120528) #undef regsubexec #define regsubexec regsubexec_20120528 #endif #if ASTAPI(20000308) #undef sfkeyprintf #define sfkeyprintf sfkeyprintf_20000308 #endif #if ASTAPI(20120528) #undef strgrpmatch #define strgrpmatch strgrpmatch_20120528 #endif #define _API_ast_MAP "cmdopen_20120411 cmdopen_20110505 pathaccess_20100601 pathcanon_20100601 pathcat_20100601 pathkey_20100601 pathpath_20100601 pathprobe_20100601 pathrepl_20100601 regexec_20120528 regnexec_20120528 regrexec_20120528 regsubexec_20120528 sfkeyprintf_20000308 strgrpmatch_20120528" #endif /* : : generated from contrib/ast/src/lib/libast/features/aso by iffe version 2012-07-17 : : */ #ifndef _def_aso_ast #define _def_aso_ast 1 #define _sys_types 1 /* #include ok */ /* gcc 4.1+ 64 bit memory atomic operations model */ #define _aso_cas8(p,o,n) __sync_val_compare_and_swap(p,o,n) #define _aso_inc8(p) __sync_fetch_and_add(p,1) #define _aso_dec8(p) __sync_fetch_and_sub(p,1) #define _aso_cas16(p,o,n) __sync_val_compare_and_swap(p,o,n) #define _aso_inc16(p) __sync_fetch_and_add(p,1) #define _aso_dec16(p) __sync_fetch_and_sub(p,1) #define _aso_cas32(p,o,n) __sync_val_compare_and_swap(p,o,n) #define _aso_inc32(p) __sync_fetch_and_add(p,1) #define _aso_dec32(p) __sync_fetch_and_sub(p,1) #define _aso_cas64(p,o,n) __sync_val_compare_and_swap(p,o,n) #define _aso_inc64(p) __sync_fetch_and_add(p,1) #define _aso_dec64(p) __sync_fetch_and_sub(p,1) #if _ast_sizeof_pointer == 8 #define _aso_casptr(p,o,n) ((void*)__sync_val_compare_and_swap(p,(uint64_t)o,(uint64_t)n)) #else #define _aso_casptr(p,o,n) ((void*)__sync_val_compare_and_swap(p,(uint32_t)o,(uint32_t)n)) #endif #endif /* : : generated from contrib/ast/src/lib/libast/features/asometh by iffe version 2012-07-17 : : */ #ifndef _def_asometh_ast #define _def_asometh_ast 1 #define _sys_types 1 /* #include ok */ #define _aso_fcntl 1 /* fcntl(F_SETLCK[W]) work */ #define _aso_semaphore 1 /* semget semop semctl work */ #endif /* : : generated from contrib/ast/src/lib/libast/features/botch.c by iffe version 2012-07-17 : : */ #ifndef _def_botch_ast #define _def_botch_ast 1 #define _sys_types 1 /* #include ok */ #endif /* : : generated from contrib/ast/src/lib/libast/features/ccode by iffe version 2012-07-17 : : */ #ifndef _def_ccode_ast #define _def_ccode_ast 1 #define _sys_types 1 /* #include ok */ #define CC_ASCII 1 /* ISO-8859-1 */ #define CC_EBCDIC_E 2 /* Xopen dd(1) EBCDIC */ #define CC_EBCDIC_I 3 /* Xopen dd(1) IBM */ #define CC_EBCDIC_O 4 /* IBM-1047 mvs OpenEdition */ #define CC_EBCDIC_S 5 /* Siemens posix-bc */ #define CC_EBCDIC_H 6 /* IBM-37 AS/400 */ #define CC_EBCDIC_M 7 /* IBM mvs cobol */ #define CC_EBCDIC_U 8 /* microfocus cobol */ #define CC_MAPS 8 /* number of code maps */ #define CC_EBCDIC CC_EBCDIC_E #define CC_EBCDIC1 CC_EBCDIC_E #define CC_EBCDIC2 CC_EBCDIC_I #define CC_EBCDIC3 CC_EBCDIC_O #define CC_NATIVE CC_ASCII /* native character code */ #define CC_ALIEN CC_EBCDIC /* alien character code */ #define CC_bel 0007 /* bel character */ #define CC_esc 0033 /* esc character */ #define CC_sub 0032 /* sub character */ #define CC_vt 0013 /* vt character */ #endif /* : : generated from contrib/ast/src/lib/libast/features/common by iffe version 2012-07-17 : : */ #ifndef _AST_COMMON_H #define _AST_COMMON_H 1 #define _sys_types 1 /* #include ok */ #define _hdr_pthread 1 /* #include ok */ #define _hdr_stdarg 1 /* #include ok */ #define _hdr_stddef 1 /* #include ok */ #define _hdr_stdint 1 /* #include ok */ #define _hdr_inttypes 1 /* #include ok */ #define _hdr_unistd 1 /* #include ok */ #define _hdr_time 1 /* #include ok */ #define _sys_time 1 /* #include ok */ #define _sys_times 1 /* #include ok */ #define _hdr_stdlib 1 /* #include ok */ #define _typ_long_double 1 /* long double is a type */ #define _typ_size_t 1 /* size_t is a type */ #define _typ_ssize_t 1 /* ssize_t is a type */ #define _hdr_stdio 1 /* #include ok */ #define _typ___va_list 1 /* __va_list is a type */ #define _sys_stat 1 /* #include ok */ #define _sys_socket 1 /* #include ok */ #define _std_proto 1 /* standard C prototypes ok */ #define _ptr_void 1 /* standard C void* ok */ /* disable non-standard linux/gnu inlines */ #ifdef __GNUC__ # undef __OPTIMIZE_SIZE__ # define __OPTIMIZE_SIZE__ 1 #endif /* __STD_C indicates that the language is ANSI-C or C++ */ #if !defined(__STD_C) && __STDC__ # define __STD_C 1 #endif #if !defined(__STD_C) && (__cplusplus || c_plusplus) # define __STD_C 1 #endif #if !defined(__STD_C) && _std_proto # define __STD_C 1 #endif #if !defined(__STD_C) # define __STD_C 0 #endif /* extern symbols must be protected against C++ name mangling */ #ifndef _BEGIN_EXTERNS_ # if __cplusplus || c_plusplus # define _BEGIN_EXTERNS_ extern "C" { # define _END_EXTERNS_ } # else # define _BEGIN_EXTERNS_ # define _END_EXTERNS_ # endif #endif /* _ARG_ simplifies function prototyping among flavors of C */ #ifndef _ARG_ # if __STD_C # define _ARG_(x) x # else # define _ARG_(x) () # endif #endif /* _NIL_ simplifies defining nil pointers to a given type */ #ifndef _NIL_ # define _NIL_(x) ((x)0) #endif /* __INLINE__, if defined, is the inline keyword */ #if !defined(__INLINE__) && defined(__cplusplus) # define __INLINE__ inline #endif #if !defined(__INLINE__) && defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline #endif /* Void_t is defined so that Void_t* can address any type */ #ifndef Void_t # if __STD_C # define Void_t void # else # define Void_t char # endif #endif /* windows variants and veneers */ #if !defined(_WINIX) && (_UWIN || __CYGWIN__ || __EMX__) # define _WINIX 1 #endif /* dynamic linked library external scope handling */ #ifdef __DYNAMIC__ # undef __DYNAMIC__ # ifndef _DLL # define _DLL 1 # endif #endif #if _dll_import # if _BLD_STATIC && !_BLD_DLL # undef _DLL # else # if !_UWIN && !defined(_DLL) # define _DLL 1 # endif # endif # if !defined(__EXPORT__) && _BLD_DLL # define __EXPORT__ __declspec(dllexport) # endif # if !defined(__IMPORT__) && ( _BLD_DLL || defined(_DLL) ) # define __IMPORT__ __declspec(dllimport) # endif # if _BLD_DLL && _UWIN # define __DYNAMIC__(v) (_ast_getdll()->_ast_ ## v) # endif #endif #if !defined(_astimport) # if defined(__IMPORT__) && defined(_DLL) # define _astimport __IMPORT__ # else # define _astimport extern # endif #endif #if _dll_import && ( !_BLD_DLL || _WINIX && !_UWIN ) # ifdef __STDC__ # define __EXTERN__(T,obj) extern T obj; T* _imp__ ## obj = &obj # define __DEFINE__(T,obj,val) T obj = val; T* _imp__ ## obj = &obj # else # define __EXTERN__(T,obj) extern T obj; T* _imp__/**/obj = &obj # define __DEFINE__(T,obj,val) T obj = val; T* _imp__/**/obj = &obj # endif #else # define __EXTERN__(T,obj) extern T obj # define __DEFINE__(T,obj,val) T obj = val #endif #define _ast_LL 1 /* LL numeric suffix supported */ #define _ast_int1_t char #define _ast_int2_t short #define _ast_int4_t int #define _ast_int8_t long #define _ast_intmax_t _ast_int8_t #define _ast_intmax_long 1 #define _ast_intswap 7 #define _ast_sizeof_short 2 /* sizeof(short) */ #define _ast_sizeof_int 4 /* sizeof(int) */ #define _ast_sizeof_long 8 /* sizeof(long) */ #define _ast_sizeof_size_t 8 /* sizeof(size_t) */ #define _ast_sizeof_pointer 8 /* sizeof(pointer) */ #define _ast_sizeof_float 4 /* sizeof(float) */ #define _ast_sizeof_double 8 /* sizeof(double) */ #define _ast_sizeof_long_double 16 /* sizeof(long_double) */ #define _ast_flt4_t float #define _ast_flt8_t double #define _ast_flt16_t long double #define _ast_fltmax_t _ast_flt16_t #define _typ_int8_t 1 /* int8_t is a type */ #define _typ_uint8_t 1 /* uint8_t is a type */ #define _typ_int16_t 1 /* int16_t is a type */ #define _typ_uint16_t 1 /* uint16_t is a type */ #define _typ_int32_t 1 /* int32_t is a type */ #define _typ_uint32_t 1 /* uint32_t is a type */ #define _typ_int64_t 1 /* int64_t is a type */ #define _typ_uint64_t 1 /* uint64_t is a type */ #define _typ_intmax_t 1 /* intmax_t is a type */ #define _typ_uintmax_t 1 /* uintmax_t is a type */ #define _typ_uintptr_t 1 /* uintptr_t is a type */ #ifndef va_listref #ifndef va_start #if __STD_C #include #else #include #endif #endif #define va_listref(p) (&(p)) /* pass va_list to varargs function */ #define va_listval(p) (*(p)) /* retrieve va_list from va_arg(ap,va_listarg) */ #define va_listarg va_list* /* va_arg() va_list type */ #endif #ifndef _AST_STD_H # if __STD_C && _hdr_stddef # include # endif # if _sys_types # include # endif # if _hdr_stdint # include # else # if _hdr_inttypes # include # endif # endif #endif #if !_typ_size_t # define _typ_size_t 1 typedef int size_t; #endif #if !_typ_ssize_t # define _typ_ssize_t 1 typedef int ssize_t; #endif #ifndef _AST_STD_H # define _def_map_ast 1 # if !_def_map_ast # include # endif #endif #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/dirent by iffe version 2012-07-17 : : */ #ifndef _def_dirent_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_dirent_ast 1 #define _lib_opendir 1 /* opendir() in default lib(s) */ #define _hdr_dirent 1 /* #include ok */ #define _nxt_dirent <../include/dirent.h> /* include path for the native */ #define _nxt_dirent_str "../include/dirent.h" /* include string for the native */ /* * for systems with ok */ #ifndef _DIRENT_H #include <../include/dirent.h> /* the native */ #ifndef _DIRENT_H #define _DIRENT_H #endif #endif #endif /* : : generated from contrib/ast/src/lib/libast/features/eaccess by iffe version 2012-07-17 : : */ #ifndef _def_eaccess_ast #define _def_eaccess_ast 1 #define _sys_types 1 /* #include ok */ #endif /* : : generated from contrib/ast/src/lib/libast/features/errno by iffe version 2012-07-17 : : */ #ifndef _def_errno_ast #define _def_errno_ast 1 #define _sys_types 1 /* #include ok */ #define _dat_sys_nerr 1 /* sys_nerr in default libs */ #define _dat_sys_errlist 1 /* sys_errlist in default libs */ #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/fcntl.c by iffe version 2012-07-17 : : */ #ifndef _def_fcntl_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_fcntl_ast 1 #define _sys_types 1 /* #include ok */ #if _typ_off64_t #undef off_t #ifdef __STDC__ #define off_t off_t #endif #endif #include #if _typ_off64_t #undef off_t #ifdef __STDC__ #define off_t off_t #endif #endif #include #include #define F_dupfd_cloexec F_DUPFD_CLOEXEC #define O_BINARY 0 #define O_cloexec O_CLOEXEC #define O_TEMPORARY 0 #define O_TEXT 0 #include #if _typ_off64_t #undef off_t #define off_t off64_t #endif #if _lib_fstat64 #define fstat fstat64 #endif #if _lib_lstat64 #define lstat lstat64 #endif #if _lib_stat64 #define stat stat64 #endif #if _lib_creat64 #define creat creat64 #endif #if _lib_mmap64 #define mmap mmap64 #endif #if _lib_open64 #undef open #define open open64 #endif #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/float by iffe version 2012-07-17 : : */ #ifndef _def_float_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_float_ast 1 #define _sys_types 1 /* #include ok */ #define _hdr_float 1 /* #include ok */ #define _hdr_limits 1 /* #include ok */ #define _hdr_math 1 /* #include ok */ #define _hdr_values 1 /* #include ok */ #define _LIB_m 1 /* -lm is a library */ #define _lib_frexp 1 /* frexp() in default lib(s) */ #define _lib_frexpl 1 /* frexpl() in default lib(s) */ #define _lib_ldexp 1 /* ldexp() in default lib(s) */ #define _lib_ldexpl 1 /* ldexpl() in default lib(s) */ #define _lib_finite 1 /* finite() in default lib(s) */ #define _lib_isnanl 1 /* isnanl() in default lib(s) */ #define _lib_copysign 1 /* copysign() in default lib(s) */ #define _lib_copysignl 1 /* copysignl() in default lib(s) */ #define _npt_finite 1 /* finite() needs a prototype */ #define _npt_finitel 1 /* finitel() needs a prototype */ #define _npt_isinfl 1 /* isinfl() needs a prototype */ #define _lib_fpclassify 1 /* fpclassify present and works */ #define _lib_isinf 1 /* isinf present and works */ #define _lib_isnan 1 /* isnan present and works */ #define _lib_signbit 1 /* signbit present and works */ #include #include #include #ifndef FLT_DIG #define FLT_DIG 6 #endif #ifndef FLT_MAX #define FLT_MAX 3.4028234663852885981170E+38F #endif #ifndef FLT_MAX_10_EXP #define FLT_MAX_10_EXP (+38) #endif #ifndef FLT_MAX_EXP #define FLT_MAX_EXP (+128) #endif #ifndef FLT_MIN #define FLT_MIN 1.1754943508222875079688E-38F #endif #ifndef FLT_MIN_10_EXP #define FLT_MIN_10_EXP (-37) #endif #ifndef FLT_MIN_EXP #define FLT_MIN_EXP (-125) #endif #ifndef DBL_DIG #define DBL_DIG 15 #endif #ifndef DBL_MAX #define DBL_MAX 1.7976931348623157081452E+308 #endif #ifndef DBL_MAX_10_EXP #define DBL_MAX_10_EXP (+308) #endif #ifndef DBL_MAX_EXP #define DBL_MAX_EXP (+1024) #endif #ifndef DBL_MIN #define DBL_MIN 2.2250738585072013830903E-308 #endif #ifndef DBL_MIN_10_EXP #define DBL_MIN_10_EXP (-307) #endif #ifndef DBL_MIN_EXP #define DBL_MIN_EXP (-1021) #endif #ifndef LDBL_DIG #define LDBL_DIG 18 #endif #ifndef LDBL_MAX #define LDBL_MAX 1.1897314953572317650213E+4932L #endif #ifndef LDBL_MAX_10_EXP #define LDBL_MAX_10_EXP (+4932) #endif #ifndef LDBL_MAX_EXP #define LDBL_MAX_EXP (+16384) #endif #ifndef LDBL_MIN #define LDBL_MIN 3.3621031431120935062627E-4932L #endif #ifndef LDBL_MIN_10_EXP #define LDBL_MIN_10_EXP (-4931) #endif #ifndef LDBL_MIN_EXP #define LDBL_MIN_EXP (-16381) #endif #define USHRT_DIG 4 #define UINT_DIG 9 #define ULONG_DIG 19 #define UINTMAX_DIG ULONG_DIG #define FLT_ULONG_MAX 18446744073709551615.0F #define FLT_ULLONG_MAX FLT_ULONG_MAX #define FLT_UINTMAX_MAX FLT_ULONG_MAX #define FLT_LONG_MAX 9223372036854775807.0F #define FLT_LLONG_MAX FLT_LONG_MAX #define FLT_INTMAX_MAX FLT_LONG_MAX #define FLT_LONG_MIN (-9223372036854775808.0F) #define FLT_LLONG_MIN FLT_LONG_MIN #define FLT_INTMAX_MIN FLT_LONG_MIN #define DBL_ULONG_MAX 18446744073709551615.0 #define DBL_ULLONG_MAX DBL_ULONG_MAX #define DBL_UINTMAX_MAX DBL_ULONG_MAX #define DBL_LONG_MAX 9223372036854775807.0 #define DBL_LLONG_MAX DBL_LONG_MAX #define DBL_INTMAX_MAX DBL_LONG_MAX #define DBL_LONG_MIN (-9223372036854775808.0) #define DBL_LLONG_MIN DBL_LONG_MIN #define DBL_INTMAX_MIN DBL_LONG_MIN #define LDBL_ULONG_MAX 18446744073709551615.0L #define LDBL_ULLONG_MAX LDBL_ULONG_MAX #define LDBL_UINTMAX_MAX LDBL_ULONG_MAX #define LDBL_LONG_MAX 9223372036854775807.0L #define LDBL_LLONG_MAX LDBL_LONG_MAX #define LDBL_INTMAX_MAX LDBL_LONG_MAX #define LDBL_LONG_MIN (-9223372036854775808.0L) #define LDBL_LLONG_MIN LDBL_LONG_MIN #define LDBL_INTMAX_MIN LDBL_LONG_MIN #define FLTMAX_UINTMAX_MAX LDBL_UINTMAX_MAX #define FLTMAX_INTMAX_MAX LDBL_INTMAX_MAX #define FLTMAX_INTMAX_MIN LDBL_INTMAX_MIN typedef union _ast_dbl_exp_u { uint32_t e[sizeof(double)/4]; double f; } _ast_dbl_exp_t; #define _ast_dbl_exp_index 1 #define _ast_dbl_exp_shift 20 #define _ast_flt_unsigned_max_t unsigned long long #define _ast_flt_nan_init 0xff,0xff,0xff,0x7f #define _ast_flt_inf_init 0x00,0x00,0x80,0x7f #define _ast_dbl_nan_init 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f #define _ast_dbl_inf_init 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x7f #define _ast_ldbl_nan_init 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00 #define _ast_ldbl_inf_init 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00 #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/fs by iffe version 2012-07-17 : : */ #ifndef _def_fs_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_fs_ast 1 #define _sys_types 1 /* #include ok */ #define _sys_stat 1 /* #include ok */ #define _lib_lstat 1 /* lstat() in default lib(s) */ #define _lib_mknod 1 /* mknod() in default lib(s) */ #define _lib_sync 1 /* sync() in default lib(s) */ #include #include #define FS_default "ufs" #if defined(__STDPP__directive) && defined(__STDPP__initial) __STDPP__directive pragma pp:noinitial #endif #define _hdr_stdio 1 /* #include ok */ #define _sys_mntent 1 /* #include ok */ #define _sys_mnttab 1 /* #include ok */ #define _sys_param 1 /* #include ok */ #define _sys_ucred 1 /* #include ok */ #define _sys_mount 1 /* #include ok */ #define _sys_statfs 1 /* #include ok */ #define _sys_statvfs 1 /* #include ok */ #define _sys_vfs 1 /* #include ok */ #define _mem_st_blocks_stat 1 /* st_blocks is a member of struct stat */ #define _mem_st_blksize_stat 1 /* st_blksize is a member of struct stat */ #define _mem_st_rdev_stat 1 /* st_rdev is a member of struct stat */ #define _mem_f_files_statfs 1 /* f_files is a member of struct statfs */ #define _mem_f_basetype_statvfs 1 /* f_basetype is a member of struct statvfs */ #define _mem_f_frsize_statvfs 1 /* f_frsize is a member of struct statvfs */ #define _lib_getmntent 1 /* getmntent() in default lib(s) */ #define _lib_statfs 1 /* statfs() in default lib(s) */ #define _lib_statvfs 1 /* statvfs() in default lib(s) */ #define _lib_statfs4 1 /* compile{\ passed */ #if _sys_statvfs #include #if !_mem_statvfs_f_basetype #if _ary_f_reserved7 #define f_basetype f_reserved7 #endif #endif #else #define _mem_f_basetype_statvfs 1 #define _mem_f_frsize_statvfs 1 struct statvfs { unsigned long f_bsize; /* fundamental file system block size */ unsigned long f_frsize; /* fragment size */ unsigned long f_blocks; /* total # of blocks of f_frsize on fs */ unsigned long f_bfree; /* total # of free blocks of f_frsize */ unsigned long f_bavail; /* # of free blocks avail to non-superuser */ unsigned long f_files; /* total # of file nodes (inodes) */ unsigned long f_ffree; /* total # of free file nodes */ unsigned long f_favail; /* # of free nodes avail to non-superuser */ unsigned long f_fsid; /* file system id (dev for now) */ char f_basetype[16]; /* target fs type name, null-terminated */ unsigned long f_flag; /* bit-mask of flags */ unsigned long f_namemax; /* maximum file name length */ char f_fstr[32]; /* filesystem-specific string */ unsigned long f_filler[16]; /* reserved for future expansion */ }; extern __MANGLE__ int fstatvfs __PROTO__((int, struct statvfs*)); extern __MANGLE__ int statvfs __PROTO__((const char*, struct statvfs*)); #endif #if _typ_off64_t #undef off_t #define off_t off64_t #endif #if _lib_statvfs64 && !defined(statvfs) #define statvfs statvfs64 #if !defined(__USE_LARGEFILE64) extern __MANGLE__ int statvfs64 __PROTO__((const char*, struct statvfs64*)); #endif #endif #if _lib_fstatvfs64 && !defined(fstatvfs) #define fstatvfs fstatvfs64 #if !defined(__USE_LARGEFILE64) extern __MANGLE__ int fstatvfs64 __PROTO__((int, struct statvfs64*)); #endif #endif #define _str_st_fstype 1 /* stat.st_fstype is a string */ #endif /* : : generated from contrib/ast/src/lib/libast/features/hack by iffe version 2012-07-17 : : */ #ifndef _def_hack_ast #define _def_hack_ast 1 #define _sys_types 1 /* #include ok */ #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/iconv by iffe version 2012-07-17 : : */ #ifndef _def_iconv_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_iconv_ast 1 #define _sys_types 1 /* #include ok */ #define _hdr_iconv 1 /* #include ok */ #define _lib_iconv_open 1 /* iconv_open() in default lib(s) */ #define _lib_iconv_close 1 /* iconv_close() in default lib(s) */ #define _lib_iconv 1 /* iconv() in default lib(s) */ #define _nxt_iconv <../include/iconv.h> /* include path for the native */ #define _nxt_iconv_str "../include/iconv.h" /* include string for the native */ #include #include #include <../include/iconv.h> /* the native iconv.h */ #define ICONV_VERSION 20110111L #define ICONV_FATAL 0x02 #define ICONV_OMIT 0x04 #define CC_ICONV (-1) #define CC_UCS (-2) #define CC_SCU (-3) #define CC_UTF (-4) #define CC_UME (-5) #ifndef _ICONV_LIST_PRIVATE_ #undef iconv_t #define iconv_t _ast_iconv_t #undef iconv_f #define iconv_f _ast_iconv_f #undef iconv_list_t #define iconv_list_t _ast_iconv_list_t #undef iconv_open #define iconv_open _ast_iconv_open #undef iconv #define iconv _ast_iconv #undef iconv_close #define iconv_close _ast_iconv_close #undef iconv_list #define iconv_list _ast_iconv_list #undef iconv_move #define iconv_move _ast_iconv_move #undef iconv_name #define iconv_name _ast_iconv_name #undef iconv_write #define iconv_write _ast_iconv_write #endif typedef int (*Iconv_error_f) __PROTO__((__V_*, __V_*, int, ...)); typedef struct Iconv_disc_s { uint32_t version; Iconv_error_f errorf; size_t errors; uint32_t flags; int fill; } Iconv_disc_t; typedef Ccmap_t _ast_iconv_list_t; typedef __V_* _ast_iconv_t; typedef size_t (*_ast_iconv_f) __PROTO__((_ast_iconv_t, char**, size_t*, char**, size_t*)); #define iconv_init(d,e) (memset(d,0,sizeof(*(d))),(d)->version=ICONV_VERSION,(d)->errorf=(Iconv_error_f)(e),(d)->fill=(-1)) #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif extern __MANGLE__ _ast_iconv_t _ast_iconv_open __PROTO__((const char*, const char*)); extern __MANGLE__ size_t _ast_iconv __PROTO__((_ast_iconv_t, char**, size_t*, char**, size_t*)); extern __MANGLE__ int _ast_iconv_close __PROTO__((_ast_iconv_t)); extern __MANGLE__ _ast_iconv_list_t* _ast_iconv_list __PROTO__((_ast_iconv_list_t*)); extern __MANGLE__ int _ast_iconv_name __PROTO__((const char*, char*, size_t)); #if _SFIO_H extern __MANGLE__ ssize_t _ast_iconv_move __PROTO__((_ast_iconv_t, Sfio_t*, Sfio_t*, size_t, Iconv_disc_t*)); extern __MANGLE__ ssize_t _ast_iconv_write __PROTO__((_ast_iconv_t, Sfio_t*, char**, size_t*, Iconv_disc_t*)); #else #if _SFSTDIO_H extern __MANGLE__ ssize_t _ast_iconv_move __PROTO__((_ast_iconv_t, FILE*, FILE*, size_t, Iconv_disc_t*)); extern __MANGLE__ ssize_t _ast_iconv_write __PROTO__((_ast_iconv_t, FILE*, char**, size_t*, Iconv_disc_t*)); #endif #endif #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #endif /* : : generated from contrib/ast/src/lib/libast/features/lib by iffe version 2012-07-17 : : */ #ifndef _def_lib_ast #define _def_lib_ast 1 #define _sys_types 1 /* #include ok */ #define _hdr_dirent 1 /* #include ok */ #define _hdr_fmtmsg 1 /* #include ok */ #define _hdr_fnmatch 1 /* #include ok */ #define _hdr_libgen 1 /* #include ok */ #define _hdr_limits 1 /* #include ok */ #define _hdr_locale 1 /* #include ok */ #define _hdr_nl_types 1 /* #include ok */ #define _hdr_spawn 1 /* #include ok */ #define _hdr_syslog 1 /* #include ok */ #define _hdr_utime 1 /* #include ok */ #define _hdr_wchar 1 /* and isw*() really work */ #define _hdr_wchar 1 /* #include ok */ #define _hdr_wctype 1 /* #include ok */ #define _dat__tzname 1 /* _tzname in default lib(s) */ #define _dat_tzname 1 /* tzname in default lib(s) */ #define _lib__cleanup 1 /* _cleanup() in default lib(s) */ #define _lib_atexit 1 /* atexit() in default lib(s) */ #define _lib_bcopy 1 /* bcopy() in default lib(s) */ #define _lib_bzero 1 /* bzero() in default lib(s) */ #define _lib_catclose 1 /* catclose() in default lib(s) */ #define _lib_catgets 1 /* catgets() in default lib(s) */ #define _lib_catopen 1 /* catopen() in default lib(s) */ #define _lib_confstr 1 /* confstr() in default lib(s) */ #define _lib_dup2 1 /* dup2() in default lib(s) */ #define _lib_execlp 1 /* execlp() in default lib(s) */ #define _lib_execve 1 /* execve() in default lib(s) */ #define _lib_execvp 1 /* execvp() in default lib(s) */ #define _lib_execvpe 1 /* execvpe() in default lib(s) */ #define _lib_fchmod 1 /* fchmod() in default lib(s) */ #define _lib_fcntl 1 /* fcntl() in default lib(s) */ #define _lib_fmtmsg 1 /* fmtmsg() in default lib(s) */ #define _lib_fnmatch 1 /* fnmatch() in default lib(s) */ #define _lib_fork 1 /* fork() in default lib(s) */ #define _lib_fsync 1 /* fsync() in default lib(s) */ #define _lib_getdents 1 /* getdents() in default lib(s) */ #define _lib_getdtablesize 1 /* getdtablesize() in default lib(s) */ #define _lib_getdate 1 /* getdate() in default lib(s) */ #define _lib_getgroups 1 /* getgroups() in default lib(s) */ #define _lib_gethostname 1 /* gethostname() in default lib(s) */ #define _lib_getlogin 1 /* getlogin() in default lib(s) */ #define _lib_getpagesize 1 /* getpagesize() in default lib(s) */ #define _lib_getrlimit 1 /* getrlimit() in default lib(s) */ #define _lib_getopt 1 /* getopt() in default lib(s) */ #define _lib_getsubopt 1 /* getsubopt() in default lib(s) */ #define _lib_getopt_long 1 /* getopt_long() in default lib(s) */ #define _lib_getopt_long_only 1 /* getopt_long_only() in default lib(s) */ #define _lib_glob 1 /* glob() in default lib(s) */ #define _lib_index 1 /* index() in default lib(s) */ #define _lib_iswblank 1 /* iswblank() in default lib(s) */ #define _lib_iswctype 1 /* iswctype() in default lib(s) */ #define _lib_killpg 1 /* killpg() in default lib(s) */ #define _lib_link 1 /* link() in default lib(s) */ #define _lib_localeconv 1 /* localeconv() in default lib(s) */ #define _lib_madvise 1 /* madvise() in default lib(s) */ #define _lib_mbtowc 1 /* mbtowc() in default lib(s) */ #define _lib_mbrtowc 1 /* mbrtowc() in default lib(s) */ #define _lib_memalign 1 /* memalign() in default lib(s) */ #define _lib_memchr 1 /* memchr() in default lib(s) */ #define _lib_memcpy 1 /* memcpy() in default lib(s) */ #define _lib_memmove 1 /* memmove() in default lib(s) */ #define _lib_memset 1 /* memset() in default lib(s) */ #define _lib_mkdir 1 /* mkdir() in default lib(s) */ #define _lib_mkfifo 1 /* mkfifo() in default lib(s) */ #define _lib_mktemp 1 /* mktemp() in default lib(s) */ #define _lib_mktime 1 /* mktime() in default lib(s) */ #define _lib_mount 1 /* mount() in default lib(s) */ #define _lib_opendir 1 /* opendir() in default lib(s) */ #define _lib_pathconf 1 /* pathconf() in default lib(s) */ #define _lib_readlink 1 /* readlink() in default lib(s) */ #define _lib_remove 1 /* remove() in default lib(s) */ #define _lib_rename 1 /* rename() in default lib(s) */ #define _lib_rewinddir 1 /* rewinddir() in default lib(s) */ #define _lib_rindex 1 /* rindex() in default lib(s) */ #define _lib_rmdir 1 /* rmdir() in default lib(s) */ #define _lib_setlocale 1 /* setlocale() in default lib(s) */ #define _lib_setpgid 1 /* setpgid() in default lib(s) */ #define _lib_setpgrp 1 /* setpgrp() in default lib(s) */ #define _lib_setreuid 1 /* setreuid() in default lib(s) */ #define _lib_setsid 1 /* setsid() in default lib(s) */ #define _lib_setuid 1 /* setuid() in default lib(s) */ #define _lib_sigaction 1 /* sigaction() in default lib(s) */ #define _lib_sigprocmask 1 /* sigprocmask() in default lib(s) */ #define _lib_socketpair 1 /* socketpair() in default lib(s) */ #define _lib_strchr 1 /* strchr() in default lib(s) */ #define _lib_strcoll 1 /* strcoll() in default lib(s) */ #define _lib_strdup 1 /* strdup() in default lib(s) */ #define _lib_strerror 1 /* strerror() in default lib(s) */ #define _lib_strcasecmp 1 /* strcasecmp() in default lib(s) */ #define _lib_strncasecmp 1 /* strncasecmp() in default lib(s) */ #define _lib_strrchr 1 /* strrchr() in default lib(s) */ #define _lib_strstr 1 /* strstr() in default lib(s) */ #define _lib_strxfrm 1 /* strxfrm() in default lib(s) */ #define _lib_strftime 1 /* strftime() in default lib(s) */ #define _lib_swab 1 /* swab() in default lib(s) */ #define _lib_symlink 1 /* symlink() in default lib(s) */ #define _lib_sysconf 1 /* sysconf() in default lib(s) */ #define _lib_sysinfo 1 /* sysinfo() in default lib(s) */ #define _lib_syslog 1 /* syslog() in default lib(s) */ #define _lib_telldir 1 /* telldir() in default lib(s) */ #define _lib_tmpnam 1 /* tmpnam() in default lib(s) */ #define _lib_tzset 1 /* tzset() in default lib(s) */ #define _lib_unlink 1 /* unlink() in default lib(s) */ #define _lib_utime 1 /* utime() in default lib(s) */ #define _lib_wctype 1 /* wctype() in default lib(s) */ #define _lib_ftruncate 1 /* ftruncate() in default lib(s) */ #define _lib_truncate 1 /* truncate() in default lib(s) */ #define _hdr_stdlib 1 /* #include ok */ #define _lib_strtod 1 /* strtod() in default lib(s) */ #define _lib_strtold 1 /* strtold() in default lib(s) */ #define _lib_strtol 1 /* strtol() in default lib(s) */ #define _lib_strtoll 1 /* strtoll() in default lib(s) */ #define _lib_strtoul 1 /* strtoul() in default lib(s) */ #define _lib_strtoull 1 /* strtoull() in default lib(s) */ #define _hdr_signal 1 /* #include ok */ #define _lib_sigflag 1 /* sigflag() in default lib(s) */ #define _npt_sigflag 1 /* sigflag() needs a prototype */ #define _mem_d_ino_dirent 1 /* d_ino is a member of struct dirent */ #define _mem_d_off_dirent 1 /* d_off is a member of struct dirent */ #define _mem_d_reclen_dirent 1 /* d_reclen is a member of struct dirent */ #define _mem_DIR 1 /* DIR is a non-opaque struct */ #define _mem_dd_fd_DIR 1 /* dd_fd is a member of DIR */ #define _sys_filio 1 /* #include ok */ #define _sys_jioctl 1 /* #include ok */ #define _sys_resource 1 /* #include ok */ #define _sys_socket 1 /* #include ok */ #define _sys_stream 1 /* #include ok */ #define _sys_systeminfo 1 /* #include ok */ #define _hdr_time 1 /* #include ok */ #define _sys_time 1 /* #include ok */ #define _sys_times 1 /* #include ok */ #define _hdr_stddef 1 /* #include ok */ #define _typ_ino64_t 1 /* ino64_t is a type */ #define _typ_off64_t 1 /* off64_t is a type */ #define _typ_struct_dirent64 1 /* struct dirent64 is a type */ #define _tst_errno 1 /* errno can be assigned */ #define _lib_poll_fd_1 1 /* fd is first arg to poll() */ #define _lib_poll 1 /* _lib_poll_fd_1||_lib_poll_fd_2 is true */ #define _sys_select 1 /* #include ok */ #define _lib_select 1 /* select() has standard 5 arg interface */ #define _sys_select 1 /* select() requires */ #define _pipe_rw 1 /* full duplex pipes */ #define _hdr_unistd 1 /* #include ok */ #define _lib_vfork 1 /* vfork exists and it works */ #define _real_vfork 1 /* vfork child shares data with parent */ #define _lib_posix_spawn 2 /* posix_spawn exists and it works and its worth using */ #define _stream_peek 1 /* ioctl(I_PEEK) works on pipe() */ #define _socket_peek 1 /* recv(MSG_PEEK) works on socketpair() */ #define _hdr_string 1 /* #include ok */ #define _lib_memcmp 1 /* standard memcmp interface that works */ #define _hdr_fcntl 1 /* #include ok */ #define _sys_stat 1 /* #include ok */ #define _sys_mman 1 /* #include ok */ #define _lib_memccpy 1 /* standard memccpy interface that works */ #define _lib_utime_now 1 /* utime works with 0 time vector */ #define _UNIV_DEFAULT "att" /* default universe name */ #define _std_cleanup 1 /* stuck with standard _cleanup */ #define _std_strcoll 1 /* standard strcoll works */ #if !_AST_no_spawnveg #define _use_spawnveg 1 #endif #endif /* : : generated from contrib/ast/src/lib/libast/features/libpath.sh by iffe version 2012-07-17 : : */ #ifndef _def_libpath_ast #define _def_libpath_ast 1 #define _sys_types 1 /* #include ok */ #define CONF_LIBPATH "lib/64:LD_LIBRARY_PATH_64:sol.*64*,lib/32:LD_LIBRARY_PATH_32,lib:LD_LIBRARY_PATH" #endif /* : : generated from contrib/ast/src/lib/libast/features/limits.c by iffe version 2012-07-17 : : */ #ifndef _def_limits_ast #define _def_limits_ast 1 #define _sys_types 1 /* #include ok */ #ifndef CHAR_BIT #define CHAR_BIT 8 #endif #ifndef CHAR_MAX #define CHAR_MAX 127 #endif #ifndef CHAR_MIN #define CHAR_MIN -128 #endif #ifndef CLOCKS_PER_SEC #define CLOCKS_PER_SEC 1000000 #endif #ifndef INT_MIN #define INT_MIN -2147483648 #endif #ifndef LLONG_MAX #define LLONG_MAX 9223372036854775807 #endif #ifndef LLONG_MIN #define LLONG_MIN -9223372036854775808 #endif #ifndef LONG_MAX #define LONG_MAX 2147483647 #endif #ifndef LONG_MIN #define LONG_MIN -2147483648 #endif #ifndef MB_LEN_MAX #define MB_LEN_MAX 5 #endif #ifndef OPEN_MAX_CEIL #ifndef OPEN_MAX #define OPEN_MAX 256 #endif #define OPEN_MAX_CEIL OPEN_MAX #endif #ifndef PTHREAD_STACK_MIN #define PTHREAD_STACK_MIN 4096 #endif #ifndef PTRDIFF_MAX #define PTRDIFF_MAX 9223372036854775807 #endif #ifndef PTRDIFF_MIN #define PTRDIFF_MIN -9223372036854775808 #endif #ifndef SCHAR_MAX #define SCHAR_MAX 127 #endif #ifndef SCHAR_MIN #define SCHAR_MIN -128 #endif #ifndef SHRT_MIN #define SHRT_MIN -32768 #endif #ifndef SIG_ATOMIC_MAX #define SIG_ATOMIC_MAX 2147483647 #endif #ifndef SIG_ATOMIC_MIN #define SIG_ATOMIC_MIN -2147483648 #endif #ifndef SIZE_MAX #ifndef UINT_MAX #define UINT_MAX 4294967295 #endif #define SIZE_MAX UINT_MAX #endif #ifndef SSIZE_MAX #ifndef INT_MAX #define INT_MAX 2147483647 #endif #define SSIZE_MAX INT_MAX #endif #ifndef TMP_MAX #define TMP_MAX 17576 #endif #ifndef UCHAR_MAX #define UCHAR_MAX 255 #endif #ifndef ULLONG_MAX #define ULLONG_MAX 18446744073709551615 #endif #ifndef ULONG_MAX #define ULONG_MAX 4294967295 #endif #ifndef USHRT_MAX #define USHRT_MAX 65535 #endif #ifndef WCHAR_MAX #define WCHAR_MAX 2147483647 #endif #ifndef WCHAR_MIN #define WCHAR_MIN -2147483648 #endif #ifndef WINT_MAX #define WINT_MAX 2147483647 #endif #ifndef WINT_MIN #define WINT_MIN -2147483648 #endif #endif /* : : generated from contrib/ast/src/lib/libast/features/locale by iffe version 2012-07-17 : : */ #ifndef _def_locale_ast #define _def_locale_ast 1 #define _sys_types 1 /* #include ok */ #define _locale_utf8_str "UTF-8" #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/map.c by iffe version 2012-07-17 : : */ #ifndef _def_map_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_map_ast 1 #define _sys_types 1 /* #include ok */ /* * prototypes provided for standard interfaces hijacked * by ast and mapped to _ast_* but already prototyped * unmapped in native headers included by */ #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif #define _map_libc 1 #undef basename #define basename _ast_basename #undef dirname #define dirname _ast_dirname #undef eaccess #define eaccess _ast_eaccess #undef fnmatch #define fnmatch _ast_fnmatch #undef fts_children #define fts_children _ast_fts_children #undef fts_close #define fts_close _ast_fts_close #undef fts_flags #define fts_flags _ast_fts_flags #undef fts_notify #define fts_notify _ast_fts_notify #undef fts_open #define fts_open _ast_fts_open #undef fts_read #define fts_read _ast_fts_read #undef fts_set #define fts_set _ast_fts_set #undef ftw #define ftw _ast_ftw #undef ftwalk #define ftwalk _ast_ftwalk #undef ftwflags #define ftwflags _ast_ftwflags #undef getcwd #define getcwd _ast_getcwd extern __MANGLE__ char* getcwd __PROTO__((char*, size_t)); #undef getdate #define getdate _ast_getdate #undef getopt #define getopt _ast_getopt #undef getsubopt #define getsubopt _ast_getsubopt #undef getopt_long #define getopt_long _ast_getopt_long #undef getopt_long_only #define getopt_long_only _ast_getopt_long_only #undef optopt #define optopt _ast_optopt #undef optarg #define optarg _ast_optarg #undef optind #define optind _ast_optind #undef opterr #define opterr _ast_opterr #undef getwd #define getwd _ast_getwd extern __MANGLE__ char* getwd __PROTO__((char*)); #undef glob #define glob _ast_glob #undef globfree #define globfree _ast_globfree #undef memdup #define memdup _ast_memdup #undef memfatal #define memfatal _ast_memfatal #undef memhash #define memhash _ast_memhash #undef memsum #define memsum _ast_memsum #undef mkstemp #define mkstemp _ast_mkstemp extern __MANGLE__ int mkstemp __PROTO__((char*)); #undef mktemp #define mktemp _ast_mktemp extern __MANGLE__ char* mktemp __PROTO__((char*)); #undef mktime #define mktime _ast_mktime #undef nftw #define nftw _ast_nftw #undef optctx #define optctx _ast_optctx #undef optesc #define optesc _ast_optesc #undef optget #define optget _ast_optget #undef opthelp #define opthelp _ast_opthelp #undef optjoin #define optjoin _ast_optjoin #undef optstr #define optstr _ast_optstr #undef optusage #define optusage _ast_optusage #undef pathaccess #define pathaccess _ast_pathaccess #undef pathbin #define pathbin _ast_pathbin #undef pathcanon #define pathcanon _ast_pathcanon #undef pathcat #define pathcat _ast_pathcat #undef pathcd #define pathcd _ast_pathcd #undef pathcheck #define pathcheck _ast_pathcheck #undef pathexists #define pathexists _ast_pathexists #undef pathfind #define pathfind _ast_pathfind #undef pathgetlink #define pathgetlink _ast_pathgetlink #undef pathinclude #define pathinclude _ast_pathinclude #undef pathkey #define pathkey _ast_pathkey #undef pathnative #define pathnative _ast_pathnative #undef pathpath #define pathpath _ast_pathpath #undef pathposix #define pathposix _ast_pathposix #undef pathprobe #define pathprobe _ast_pathprobe #undef pathprog #define pathprog _ast_pathprog #undef pathrepl #define pathrepl _ast_pathrepl #undef pathsetlink #define pathsetlink _ast_pathsetlink #undef pathshell #define pathshell _ast_pathshell #undef pathstat #define pathstat _ast_pathstat #undef pathtemp #define pathtemp _ast_pathtemp #undef pathtmp #define pathtmp _ast_pathtmp #undef procclose #define procclose _ast_procclose #undef procfree #define procfree _ast_procfree #undef procopen #define procopen _ast_procopen #undef procrun #define procrun _ast_procrun #undef putenv #define putenv _ast_putenv #undef re_comp #define re_comp _ast_re_comp #undef re_exec #define re_exec _ast_re_exec #undef realpath #define realpath _ast_realpath extern __MANGLE__ char* realpath __PROTO__((const char*, char*)); #undef regaddclass #define regaddclass _ast_regaddclass #undef regalloc #define regalloc _ast_regalloc #undef regcache #define regcache _ast_regcache #undef regclass #define regclass _ast_regclass #undef regcmp #define regcmp _ast_regcmp #undef regcollate #define regcollate _ast_regcollate #undef regcomb #define regcomb _ast_regcomb #undef regcomp #define regcomp _ast_regcomp #undef regdecomp #define regdecomp _ast_regdecomp #undef regdup #define regdup _ast_regdup #undef regerror #define regerror _ast_regerror #undef regex #define regex _ast_regex #undef regexec #define regexec _ast_regexec #undef regfatal #define regfatal _ast_regfatal #undef regfatalpat #define regfatalpat _ast_regfatalpat #undef regfree #define regfree _ast_regfree #undef regncomp #define regncomp _ast_regncomp #undef regnexec #define regnexec _ast_regnexec #undef regrecord #define regrecord _ast_regrecord #undef regrexec #define regrexec _ast_regrexec #undef regstat #define regstat _ast_regstat #undef regsub #define regsub _ast_regsub #undef regsubcomp #define regsubcomp _ast_regsubcomp #undef regsubexec #define regsubexec _ast_regsubexec #undef regsubflags #define regsubflags _ast_regsubflags #undef regsubfree #define regsubfree _ast_regsubfree #undef remove #define remove _ast_remove extern __MANGLE__ int remove __PROTO__((const char*)); #undef resolvepath #define resolvepath _ast_resolvepath extern __MANGLE__ int resolvepath __PROTO__((const char*, char*, size_t)); #undef setenv #define setenv _ast_setenv extern __MANGLE__ int setenv __PROTO__((const char*, const char*, int)); #undef setenviron #define setenviron _ast_setenviron #undef sigcritical #define sigcritical _ast_sigcritical #undef signal #define signal _ast_signal #undef sigunblock #define sigunblock _ast_sigunblock #undef stracmp #define stracmp _ast_stracmp #undef strcopy #define strcopy _ast_strcopy #undef strelapsed #define strelapsed _ast_strelapsed #undef stresc #define stresc _ast_stresc #undef streval #define streval _ast_streval #undef strexpr #define strexpr _ast_strexpr #undef strftime #define strftime _ast_strftime #undef strgid #define strgid _ast_strgid #undef strgrpmatch #define strgrpmatch _ast_strgrpmatch #undef strhash #define strhash _ast_strhash #undef strkey #define strkey _ast_strkey #undef strlcat #define strlcat _ast_strlcat extern __MANGLE__ size_t strlcat __PROTO__((char*, const char*, size_t)); #undef strlcpy #define strlcpy _ast_strlcpy extern __MANGLE__ size_t strlcpy __PROTO__((char*, const char*, size_t)); #undef strlook #define strlook _ast_strlook #undef strmatch #define strmatch _ast_strmatch #undef strmode #define strmode _ast_strmode #undef strnacmp #define strnacmp _ast_strnacmp #undef strncopy #define strncopy _ast_strncopy #undef strntod #define strntod _ast_strntod #undef strntol #define strntol _ast_strntol #undef strntold #define strntold _ast_strntold #undef strntoll #define strntoll _ast_strntoll #undef strntoul #define strntoul _ast_strntoul #undef strntoull #define strntoull _ast_strntoull #undef stropt #define stropt _ast_stropt #undef strperm #define strperm _ast_strperm #undef strpsearch #define strpsearch _ast_strpsearch #undef strptime #define strptime _ast_strptime #undef strsearch #define strsearch _ast_strsearch #undef strsort #define strsort _ast_strsort #undef strsubmatch #define strsubmatch _ast_strsubmatch #undef strsum #define strsum _ast_strsum #undef strtape #define strtape _ast_strtape #undef strtoip4 #define strtoip4 _ast_strtoip4 #undef strton #define strton _ast_strton #undef strtonll #define strtonll _ast_strtonll #undef struid #define struid _ast_struid #undef struniq #define struniq _ast_struniq #undef system #define system _ast_system extern __MANGLE__ int system __PROTO__((const char*)); #undef tempnam #define tempnam _ast_tempnam extern __MANGLE__ char* tempnam __PROTO__((const char*, const char*)); #undef tmpnam #define tmpnam _ast_tmpnam extern __MANGLE__ char* tmpnam __PROTO__((char*)); #undef touch #define touch _ast_touch #undef wordexp #define wordexp _ast_wordexp #undef wordfree #define wordfree _ast_wordfree #undef unsetenv #define unsetenv _ast_unsetenv /* cannot override local malloc */ #define _map_malloc 1 #undef calloc #define calloc _ast_calloc extern __MANGLE__ __V_* calloc __PROTO__((size_t, size_t)); #undef cfree #define cfree _ast_cfree extern __MANGLE__ void cfree __PROTO__((__V_*)); #undef free #define free _ast_free extern __MANGLE__ void free __PROTO__((__V_*)); #undef malloc #define malloc _ast_malloc extern __MANGLE__ __V_* malloc __PROTO__((size_t)); #undef memalign #define memalign _ast_memalign extern __MANGLE__ __V_* memalign __PROTO__((size_t, size_t)); #undef realloc #define realloc _ast_realloc extern __MANGLE__ __V_* realloc __PROTO__((__V_*, size_t)); #undef strdup #define strdup _ast_strdup extern __MANGLE__ char* strdup __PROTO__((const char*)); #undef valloc #define valloc _ast_valloc extern __MANGLE__ __V_* valloc __PROTO__((size_t)); #undef strtol #define strtol _ast_strtol #undef strtoul #define strtoul _ast_strtoul #undef strtoll #define strtoll _ast_strtoll #undef strtoull #define strtoull _ast_strtoull #undef strtod #define strtod _ast_strtod #undef strtold #define strtold _ast_strtold extern __MANGLE__ long strtol __PROTO__((const char*, char**, int)); extern __MANGLE__ unsigned long strtoul __PROTO__((const char*, char**, int)); extern __MANGLE__ double strtod __PROTO__((const char*, char**)); #if !_UWIN #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #endif extern __MANGLE__ _ast_fltmax_t strtold __PROTO__((const char*, char**)); #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ extern __MANGLE__ _ast_intmax_t strtoll __PROTO__((const char*, char**, int)); extern __MANGLE__ unsigned _ast_intmax_t strtoull __PROTO__((const char*, char**, int)); #define cmdopen_20120411 _ast_cmdopen_20120411 #define cmdopen_20110505 _ast_cmdopen_20110505 #define pathaccess_20100601 _ast_pathaccess_20100601 #define pathcanon_20100601 _ast_pathcanon_20100601 #define pathcat_20100601 _ast_pathcat_20100601 #define pathkey_20100601 _ast_pathkey_20100601 #define pathpath_20100601 _ast_pathpath_20100601 #define pathprobe_20100601 _ast_pathprobe_20100601 #define pathrepl_20100601 _ast_pathrepl_20100601 #define regexec_20120528 _ast_regexec_20120528 #define regnexec_20120528 _ast_regnexec_20120528 #define regrexec_20120528 _ast_regrexec_20120528 #define regsubexec_20120528 _ast_regsubexec_20120528 #define sfkeyprintf_20000308 _ast_sfkeyprintf_20000308 #define strgrpmatch_20120528 _ast_strgrpmatch_20120528 #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #endif /* : : generated from contrib/ast/src/lib/libast/features/mmap by iffe version 2012-07-17 : : */ #ifndef _def_mmap_ast #define _def_mmap_ast 1 #define _sys_types 1 /* #include ok */ #define _sys_mman 1 /* #include ok */ #define _lib_mmap 1 /* standard mmap interface that works */ #define _lib_mmap64 1 /* mmap64 interface and implementation work */ #define _mmap_anon 1 /* use mmap MAP_ANON to get raw memory */ #define _mmap_devzero 1 /* use mmap on /dev/zero to get raw memory */ /* some systems get it wrong but escape concise detection */ #ifndef _NO_MMAP #if __CYGWIN__ #define _NO_MMAP 1 #endif #endif #if _NO_MMAP #undef _lib_mmap #undef _lib_mmap64 #undef _mmap_anon #undef _mmap_devzero #undef _mmap_worthy #endif #endif /* : : generated from contrib/ast/src/lib/libast/features/mode.c by iffe version 2012-07-17 : : */ #ifndef _def_mode_ast #define _def_mode_ast 1 #define _sys_types 1 /* #include ok */ #define S_ITYPE(m) ((m)&S_IFMT) #define S_IPERM (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) #define _S_IDPERM 1 #define _S_IDTYPE 1 #define BUFFERSIZE 8192 #endif /* : : generated from contrib/ast/src/lib/libast/features/ndbm by iffe version 2012-07-17 : : */ #ifndef _def_ndbm_ast #define _def_ndbm_ast 1 #define _sys_types 1 /* #include ok */ #define _hdr_ndbm 1 /* #include ok */ #include #define _use_ndbm 1 #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/nl_types by iffe version 2012-07-17 : : */ #ifndef _def_nl_types_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_nl_types_ast 1 #define _sys_types 1 /* #include ok */ #define _lib_catopen 1 /* catopen() in default lib(s) */ #define _lib_nl_langinfo 1 /* nl_langinfo() in default lib(s) */ #define _hdr_nl_types 1 /* #include ok */ #define _hdr_langinfo 1 /* #include ok */ #define _nxt_nl_types <../include/nl_types.h> /* include path for the native */ #define _nxt_nl_types_str "../include/nl_types.h" /* include string for the native */ #include #include <../include/nl_types.h> /* the native nl_types.h */ #undef NL_SETMAX #define NL_SETMAX 1023 #undef NL_MSGMAX #define NL_MSGMAX 32767 #undef nl_catd #define nl_catd _ast_nl_catd #undef catopen #define catopen _ast_catopen #undef catgets #define catgets _ast_catgets #undef catclose #define catclose _ast_catclose typedef __V_* nl_catd; #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif extern __MANGLE__ nl_catd catopen __PROTO__((const char*, int)); extern __MANGLE__ char* catgets __PROTO__((nl_catd, int, int, const char*)); extern __MANGLE__ int catclose __PROTO__((nl_catd)); #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #endif /* : : generated from contrib/ast/src/lib/libast/features/omitted by iffe version 2012-07-17 : : */ #ifndef _def_omitted_ast #define _def_omitted_ast 1 #define _sys_types 1 /* #include ok */ #endif /* : : generated from contrib/ast/src/lib/libast/features/options by iffe version 2012-07-17 : : */ #ifndef _def_options_ast #define _def_options_ast 1 #define _sys_types 1 /* #include ok */ #endif /* : : generated from contrib/ast/src/lib/libast/features/param.sh by iffe version 2012-07-17 : : */ #ifndef _def_param_ast #define _def_param_ast 1 #define _sys_types 1 /* #include ok */ #include #ifndef S_IFDIR #include #endif #endif /* : : generated from contrib/ast/src/lib/libast/features/preroot.sh by iffe version 2012-07-17 : : */ #ifndef _def_preroot_ast #define _def_preroot_ast 1 #define _sys_types 1 /* #include ok */ /* preroot not enabled */ #endif /* : : generated from contrib/ast/src/lib/libast/features/prog by iffe version 2012-07-17 : : */ #ifndef _def_prog_ast #define _def_prog_ast 1 #define _sys_types 1 /* #include ok */ #define _lib_getexecname 1 /* getexecname() in default lib(s) */ #define _PROC_PROG "/proc/self/path/a.out" #endif /* : : generated from contrib/ast/src/lib/libast/features/sfinit.c by iffe version 2012-07-17 : : */ #ifndef _def_sfinit_ast #define _def_sfinit_ast 1 #define _sys_types 1 /* #include ok */ static const float sf_flt_pow10[] = { 1E0F, 1E1F, 1E2F, 1E3F, 1E4F, 1E5F, 1E6F, 1E7F, 1E8F, 1E9F, 1E10F, 1E11F, 1E12F, 1E13F, 1E14F, 1E15F, 1E16F, 1E17F, 1E18F, 1E19F, 1E20F, 1E21F, 1E22F, 1E23F, 1E24F, 1E25F, 1E26F, 1E27F, 1E28F, 1E29F, 1E30F, 1E31F, 1E32F, 1E33F, 1E34F, 1E35F, 1E36F, 1E37F, 1E38F, }; static const double sf_dbl_pow10[] = { 1E0, 1E1, 1E2, 1E3, 1E4, 1E5, 1E6, 1E7, 1E8, 1E9, 1E10, 1E11, 1E12, 1E13, 1E14, 1E15, 1E16, 1E17, 1E18, 1E19, 1E20, 1E21, 1E22, 1E23, 1E24, 1E25, 1E26, 1E27, 1E28, 1E29, 1E30, 1E31, 1E32, 1E33, 1E34, 1E35, 1E36, 1E37, 1E38, 1E39, 1E40, 1E41, 1E42, 1E43, 1E44, 1E45, 1E46, 1E47, 1E48, 1E49, 1E50, 1E51, 1E52, 1E53, 1E54, 1E55, 1E56, 1E57, 1E58, 1E59, 1E60, 1E61, 1E62, 1E63, 1E64, 1E65, 1E66, 1E67, 1E68, 1E69, 1E70, 1E71, 1E72, 1E73, 1E74, 1E75, 1E76, 1E77, 1E78, 1E79, 1E80, 1E81, 1E82, 1E83, 1E84, 1E85, 1E86, 1E87, 1E88, 1E89, 1E90, 1E91, 1E92, 1E93, 1E94, 1E95, 1E96, 1E97, 1E98, 1E99, 1E100, 1E101, 1E102, 1E103, 1E104, 1E105, 1E106, 1E107, 1E108, 1E109, 1E110, 1E111, 1E112, 1E113, 1E114, 1E115, 1E116, 1E117, 1E118, 1E119, 1E120, 1E121, 1E122, 1E123, 1E124, 1E125, 1E126, 1E127, 1E128, 1E129, 1E130, 1E131, 1E132, 1E133, 1E134, 1E135, 1E136, 1E137, 1E138, 1E139, 1E140, 1E141, 1E142, 1E143, 1E144, 1E145, 1E146, 1E147, 1E148, 1E149, 1E150, 1E151, 1E152, 1E153, 1E154, 1E155, 1E156, 1E157, 1E158, 1E159, 1E160, 1E161, 1E162, 1E163, 1E164, 1E165, 1E166, 1E167, 1E168, 1E169, 1E170, 1E171, 1E172, 1E173, 1E174, 1E175, 1E176, 1E177, 1E178, 1E179, 1E180, 1E181, 1E182, 1E183, 1E184, 1E185, 1E186, 1E187, 1E188, 1E189, 1E190, 1E191, 1E192, 1E193, 1E194, 1E195, 1E196, 1E197, 1E198, 1E199, 1E200, 1E201, 1E202, 1E203, 1E204, 1E205, 1E206, 1E207, 1E208, 1E209, 1E210, 1E211, 1E212, 1E213, 1E214, 1E215, 1E216, 1E217, 1E218, 1E219, 1E220, 1E221, 1E222, 1E223, 1E224, 1E225, 1E226, 1E227, 1E228, 1E229, 1E230, 1E231, 1E232, 1E233, 1E234, 1E235, 1E236, 1E237, 1E238, 1E239, 1E240, 1E241, 1E242, 1E243, 1E244, 1E245, 1E246, 1E247, 1E248, 1E249, 1E250, 1E251, 1E252, 1E253, 1E254, 1E255, 1E256, 1E257, 1E258, 1E259, 1E260, 1E261, 1E262, 1E263, 1E264, 1E265, 1E266, 1E267, 1E268, 1E269, 1E270, 1E271, 1E272, 1E273, 1E274, 1E275, 1E276, 1E277, 1E278, 1E279, 1E280, 1E281, 1E282, 1E283, 1E284, 1E285, 1E286, 1E287, 1E288, 1E289, 1E290, 1E291, 1E292, 1E293, 1E294, 1E295, 1E296, 1E297, 1E298, 1E299, 1E300, 1E301, 1E302, 1E303, 1E304, 1E305, 1E306, 1E307, 1E308, }; static const _ast_fltmax_t sf_ldbl_pow10[] = { 1E0L, 1E1L, 1E2L, 1E3L, 1E4L, 1E5L, 1E6L, 1E7L, 1E8L, 1E9L, 1E10L, 1E11L, 1E12L, 1E13L, 1E14L, 1E15L, 1E16L, 1E17L, 1E18L, 1E19L, 1E20L, 1E21L, 1E22L, 1E23L, 1E24L, 1E25L, 1E26L, 1E27L, 1E28L, 1E29L, 1E30L, 1E31L, 1E32L, 1E33L, 1E34L, 1E35L, 1E36L, 1E37L, 1E38L, 1E39L, 1E40L, 1E41L, 1E42L, 1E43L, 1E44L, 1E45L, 1E46L, 1E47L, 1E48L, 1E49L, 1E50L, 1E51L, 1E52L, 1E53L, 1E54L, 1E55L, 1E56L, 1E57L, 1E58L, 1E59L, 1E60L, 1E61L, 1E62L, 1E63L, 1E64L, 1E65L, 1E66L, 1E67L, 1E68L, 1E69L, 1E70L, 1E71L, 1E72L, 1E73L, 1E74L, 1E75L, 1E76L, 1E77L, 1E78L, 1E79L, 1E80L, 1E81L, 1E82L, 1E83L, 1E84L, 1E85L, 1E86L, 1E87L, 1E88L, 1E89L, 1E90L, 1E91L, 1E92L, 1E93L, 1E94L, 1E95L, 1E96L, 1E97L, 1E98L, 1E99L, 1E100L, 1E101L, 1E102L, 1E103L, 1E104L, 1E105L, 1E106L, 1E107L, 1E108L, 1E109L, 1E110L, 1E111L, 1E112L, 1E113L, 1E114L, 1E115L, 1E116L, 1E117L, 1E118L, 1E119L, 1E120L, 1E121L, 1E122L, 1E123L, 1E124L, 1E125L, 1E126L, 1E127L, 1E128L, 1E129L, 1E130L, 1E131L, 1E132L, 1E133L, 1E134L, 1E135L, 1E136L, 1E137L, 1E138L, 1E139L, 1E140L, 1E141L, 1E142L, 1E143L, 1E144L, 1E145L, 1E146L, 1E147L, 1E148L, 1E149L, 1E150L, 1E151L, 1E152L, 1E153L, 1E154L, 1E155L, 1E156L, 1E157L, 1E158L, 1E159L, 1E160L, 1E161L, 1E162L, 1E163L, 1E164L, 1E165L, 1E166L, 1E167L, 1E168L, 1E169L, 1E170L, 1E171L, 1E172L, 1E173L, 1E174L, 1E175L, 1E176L, 1E177L, 1E178L, 1E179L, 1E180L, 1E181L, 1E182L, 1E183L, 1E184L, 1E185L, 1E186L, 1E187L, 1E188L, 1E189L, 1E190L, 1E191L, 1E192L, 1E193L, 1E194L, 1E195L, 1E196L, 1E197L, 1E198L, 1E199L, 1E200L, 1E201L, 1E202L, 1E203L, 1E204L, 1E205L, 1E206L, 1E207L, 1E208L, 1E209L, 1E210L, 1E211L, 1E212L, 1E213L, 1E214L, 1E215L, 1E216L, 1E217L, 1E218L, 1E219L, 1E220L, 1E221L, 1E222L, 1E223L, 1E224L, 1E225L, 1E226L, 1E227L, 1E228L, 1E229L, 1E230L, 1E231L, 1E232L, 1E233L, 1E234L, 1E235L, 1E236L, 1E237L, 1E238L, 1E239L, 1E240L, 1E241L, 1E242L, 1E243L, 1E244L, 1E245L, 1E246L, 1E247L, 1E248L, 1E249L, 1E250L, 1E251L, 1E252L, 1E253L, 1E254L, 1E255L, 1E256L, 1E257L, 1E258L, 1E259L, 1E260L, 1E261L, 1E262L, 1E263L, 1E264L, 1E265L, 1E266L, 1E267L, 1E268L, 1E269L, 1E270L, 1E271L, 1E272L, 1E273L, 1E274L, 1E275L, 1E276L, 1E277L, 1E278L, 1E279L, 1E280L, 1E281L, 1E282L, 1E283L, 1E284L, 1E285L, 1E286L, 1E287L, 1E288L, 1E289L, 1E290L, 1E291L, 1E292L, 1E293L, 1E294L, 1E295L, 1E296L, 1E297L, 1E298L, 1E299L, 1E300L, 1E301L, 1E302L, 1E303L, 1E304L, 1E305L, 1E306L, 1E307L, 1E308L, 1E309L, 1E310L, 1E311L, 1E312L, 1E313L, 1E314L, 1E315L, 1E316L, 1E317L, 1E318L, 1E319L, 1E320L, 1E321L, 1E322L, 1E323L, 1E324L, 1E325L, 1E326L, 1E327L, 1E328L, 1E329L, 1E330L, 1E331L, 1E332L, 1E333L, 1E334L, 1E335L, 1E336L, 1E337L, 1E338L, 1E339L, 1E340L, 1E341L, 1E342L, 1E343L, 1E344L, 1E345L, 1E346L, 1E347L, 1E348L, 1E349L, 1E350L, 1E351L, 1E352L, 1E353L, 1E354L, 1E355L, 1E356L, 1E357L, 1E358L, 1E359L, 1E360L, 1E361L, 1E362L, 1E363L, 1E364L, 1E365L, 1E366L, 1E367L, 1E368L, 1E369L, 1E370L, 1E371L, 1E372L, 1E373L, 1E374L, 1E375L, 1E376L, 1E377L, 1E378L, 1E379L, 1E380L, 1E381L, 1E382L, 1E383L, 1E384L, 1E385L, 1E386L, 1E387L, 1E388L, 1E389L, 1E390L, 1E391L, 1E392L, 1E393L, 1E394L, 1E395L, 1E396L, 1E397L, 1E398L, 1E399L, 1E400L, 1E401L, 1E402L, 1E403L, 1E404L, 1E405L, 1E406L, 1E407L, 1E408L, 1E409L, 1E410L, 1E411L, 1E412L, 1E413L, 1E414L, 1E415L, 1E416L, 1E417L, 1E418L, 1E419L, 1E420L, 1E421L, 1E422L, 1E423L, 1E424L, 1E425L, 1E426L, 1E427L, 1E428L, 1E429L, 1E430L, 1E431L, 1E432L, 1E433L, 1E434L, 1E435L, 1E436L, 1E437L, 1E438L, 1E439L, 1E440L, 1E441L, 1E442L, 1E443L, 1E444L, 1E445L, 1E446L, 1E447L, 1E448L, 1E449L, 1E450L, 1E451L, 1E452L, 1E453L, 1E454L, 1E455L, 1E456L, 1E457L, 1E458L, 1E459L, 1E460L, 1E461L, 1E462L, 1E463L, 1E464L, 1E465L, 1E466L, 1E467L, 1E468L, 1E469L, 1E470L, 1E471L, 1E472L, 1E473L, 1E474L, 1E475L, 1E476L, 1E477L, 1E478L, 1E479L, 1E480L, 1E481L, 1E482L, 1E483L, 1E484L, 1E485L, 1E486L, 1E487L, 1E488L, 1E489L, 1E490L, 1E491L, 1E492L, 1E493L, 1E494L, 1E495L, 1E496L, 1E497L, 1E498L, 1E499L, 1E500L, 1E501L, 1E502L, 1E503L, 1E504L, 1E505L, 1E506L, 1E507L, 1E508L, 1E509L, 1E510L, 1E511L, 1E512L, 1E513L, 1E514L, 1E515L, 1E516L, 1E517L, 1E518L, 1E519L, 1E520L, 1E521L, 1E522L, 1E523L, 1E524L, 1E525L, 1E526L, 1E527L, 1E528L, 1E529L, 1E530L, 1E531L, 1E532L, 1E533L, 1E534L, 1E535L, 1E536L, 1E537L, 1E538L, 1E539L, 1E540L, 1E541L, 1E542L, 1E543L, 1E544L, 1E545L, 1E546L, 1E547L, 1E548L, 1E549L, 1E550L, 1E551L, 1E552L, 1E553L, 1E554L, 1E555L, 1E556L, 1E557L, 1E558L, 1E559L, 1E560L, 1E561L, 1E562L, 1E563L, 1E564L, 1E565L, 1E566L, 1E567L, 1E568L, 1E569L, 1E570L, 1E571L, 1E572L, 1E573L, 1E574L, 1E575L, 1E576L, 1E577L, 1E578L, 1E579L, 1E580L, 1E581L, 1E582L, 1E583L, 1E584L, 1E585L, 1E586L, 1E587L, 1E588L, 1E589L, 1E590L, 1E591L, 1E592L, 1E593L, 1E594L, 1E595L, 1E596L, 1E597L, 1E598L, 1E599L, 1E600L, 1E601L, 1E602L, 1E603L, 1E604L, 1E605L, 1E606L, 1E607L, 1E608L, 1E609L, 1E610L, 1E611L, 1E612L, 1E613L, 1E614L, 1E615L, 1E616L, 1E617L, 1E618L, 1E619L, 1E620L, 1E621L, 1E622L, 1E623L, 1E624L, 1E625L, 1E626L, 1E627L, 1E628L, 1E629L, 1E630L, 1E631L, 1E632L, 1E633L, 1E634L, 1E635L, 1E636L, 1E637L, 1E638L, 1E639L, 1E640L, 1E641L, 1E642L, 1E643L, 1E644L, 1E645L, 1E646L, 1E647L, 1E648L, 1E649L, 1E650L, 1E651L, 1E652L, 1E653L, 1E654L, 1E655L, 1E656L, 1E657L, 1E658L, 1E659L, 1E660L, 1E661L, 1E662L, 1E663L, 1E664L, 1E665L, 1E666L, 1E667L, 1E668L, 1E669L, 1E670L, 1E671L, 1E672L, 1E673L, 1E674L, 1E675L, 1E676L, 1E677L, 1E678L, 1E679L, 1E680L, 1E681L, 1E682L, 1E683L, 1E684L, 1E685L, 1E686L, 1E687L, 1E688L, 1E689L, 1E690L, 1E691L, 1E692L, 1E693L, 1E694L, 1E695L, 1E696L, 1E697L, 1E698L, 1E699L, 1E700L, 1E701L, 1E702L, 1E703L, 1E704L, 1E705L, 1E706L, 1E707L, 1E708L, 1E709L, 1E710L, 1E711L, 1E712L, 1E713L, 1E714L, 1E715L, 1E716L, 1E717L, 1E718L, 1E719L, 1E720L, 1E721L, 1E722L, 1E723L, 1E724L, 1E725L, 1E726L, 1E727L, 1E728L, 1E729L, 1E730L, 1E731L, 1E732L, 1E733L, 1E734L, 1E735L, 1E736L, 1E737L, 1E738L, 1E739L, 1E740L, 1E741L, 1E742L, 1E743L, 1E744L, 1E745L, 1E746L, 1E747L, 1E748L, 1E749L, 1E750L, 1E751L, 1E752L, 1E753L, 1E754L, 1E755L, 1E756L, 1E757L, 1E758L, 1E759L, 1E760L, 1E761L, 1E762L, 1E763L, 1E764L, 1E765L, 1E766L, 1E767L, 1E768L, 1E769L, 1E770L, 1E771L, 1E772L, 1E773L, 1E774L, 1E775L, 1E776L, 1E777L, 1E778L, 1E779L, 1E780L, 1E781L, 1E782L, 1E783L, 1E784L, 1E785L, 1E786L, 1E787L, 1E788L, 1E789L, 1E790L, 1E791L, 1E792L, 1E793L, 1E794L, 1E795L, 1E796L, 1E797L, 1E798L, 1E799L, 1E800L, 1E801L, 1E802L, 1E803L, 1E804L, 1E805L, 1E806L, 1E807L, 1E808L, 1E809L, 1E810L, 1E811L, 1E812L, 1E813L, 1E814L, 1E815L, 1E816L, 1E817L, 1E818L, 1E819L, 1E820L, 1E821L, 1E822L, 1E823L, 1E824L, 1E825L, 1E826L, 1E827L, 1E828L, 1E829L, 1E830L, 1E831L, 1E832L, 1E833L, 1E834L, 1E835L, 1E836L, 1E837L, 1E838L, 1E839L, 1E840L, 1E841L, 1E842L, 1E843L, 1E844L, 1E845L, 1E846L, 1E847L, 1E848L, 1E849L, 1E850L, 1E851L, 1E852L, 1E853L, 1E854L, 1E855L, 1E856L, 1E857L, 1E858L, 1E859L, 1E860L, 1E861L, 1E862L, 1E863L, 1E864L, 1E865L, 1E866L, 1E867L, 1E868L, 1E869L, 1E870L, 1E871L, 1E872L, 1E873L, 1E874L, 1E875L, 1E876L, 1E877L, 1E878L, 1E879L, 1E880L, 1E881L, 1E882L, 1E883L, 1E884L, 1E885L, 1E886L, 1E887L, 1E888L, 1E889L, 1E890L, 1E891L, 1E892L, 1E893L, 1E894L, 1E895L, 1E896L, 1E897L, 1E898L, 1E899L, 1E900L, 1E901L, 1E902L, 1E903L, 1E904L, 1E905L, 1E906L, 1E907L, 1E908L, 1E909L, 1E910L, 1E911L, 1E912L, 1E913L, 1E914L, 1E915L, 1E916L, 1E917L, 1E918L, 1E919L, 1E920L, 1E921L, 1E922L, 1E923L, 1E924L, 1E925L, 1E926L, 1E927L, 1E928L, 1E929L, 1E930L, 1E931L, 1E932L, 1E933L, 1E934L, 1E935L, 1E936L, 1E937L, 1E938L, 1E939L, 1E940L, 1E941L, 1E942L, 1E943L, 1E944L, 1E945L, 1E946L, 1E947L, 1E948L, 1E949L, 1E950L, 1E951L, 1E952L, 1E953L, 1E954L, 1E955L, 1E956L, 1E957L, 1E958L, 1E959L, 1E960L, 1E961L, 1E962L, 1E963L, 1E964L, 1E965L, 1E966L, 1E967L, 1E968L, 1E969L, 1E970L, 1E971L, 1E972L, 1E973L, 1E974L, 1E975L, 1E976L, 1E977L, 1E978L, 1E979L, 1E980L, 1E981L, 1E982L, 1E983L, 1E984L, 1E985L, 1E986L, 1E987L, 1E988L, 1E989L, 1E990L, 1E991L, 1E992L, 1E993L, 1E994L, 1E995L, 1E996L, 1E997L, 1E998L, 1E999L, 1E1000L, 1E1001L, 1E1002L, 1E1003L, 1E1004L, 1E1005L, 1E1006L, 1E1007L, 1E1008L, 1E1009L, 1E1010L, 1E1011L, 1E1012L, 1E1013L, 1E1014L, 1E1015L, 1E1016L, 1E1017L, 1E1018L, 1E1019L, 1E1020L, 1E1021L, 1E1022L, 1E1023L, 1E1024L, 1E1025L, 1E1026L, 1E1027L, 1E1028L, 1E1029L, 1E1030L, 1E1031L, 1E1032L, 1E1033L, 1E1034L, 1E1035L, 1E1036L, 1E1037L, 1E1038L, 1E1039L, 1E1040L, 1E1041L, 1E1042L, 1E1043L, 1E1044L, 1E1045L, 1E1046L, 1E1047L, 1E1048L, 1E1049L, 1E1050L, 1E1051L, 1E1052L, 1E1053L, 1E1054L, 1E1055L, 1E1056L, 1E1057L, 1E1058L, 1E1059L, 1E1060L, 1E1061L, 1E1062L, 1E1063L, 1E1064L, 1E1065L, 1E1066L, 1E1067L, 1E1068L, 1E1069L, 1E1070L, 1E1071L, 1E1072L, 1E1073L, 1E1074L, 1E1075L, 1E1076L, 1E1077L, 1E1078L, 1E1079L, 1E1080L, 1E1081L, 1E1082L, 1E1083L, 1E1084L, 1E1085L, 1E1086L, 1E1087L, 1E1088L, 1E1089L, 1E1090L, 1E1091L, 1E1092L, 1E1093L, 1E1094L, 1E1095L, 1E1096L, 1E1097L, 1E1098L, 1E1099L, 1E1100L, 1E1101L, 1E1102L, 1E1103L, 1E1104L, 1E1105L, 1E1106L, 1E1107L, 1E1108L, 1E1109L, 1E1110L, 1E1111L, 1E1112L, 1E1113L, 1E1114L, 1E1115L, 1E1116L, 1E1117L, 1E1118L, 1E1119L, 1E1120L, 1E1121L, 1E1122L, 1E1123L, 1E1124L, 1E1125L, 1E1126L, 1E1127L, 1E1128L, 1E1129L, 1E1130L, 1E1131L, 1E1132L, 1E1133L, 1E1134L, 1E1135L, 1E1136L, 1E1137L, 1E1138L, 1E1139L, 1E1140L, 1E1141L, 1E1142L, 1E1143L, 1E1144L, 1E1145L, 1E1146L, 1E1147L, 1E1148L, 1E1149L, 1E1150L, 1E1151L, 1E1152L, 1E1153L, 1E1154L, 1E1155L, 1E1156L, 1E1157L, 1E1158L, 1E1159L, 1E1160L, 1E1161L, 1E1162L, 1E1163L, 1E1164L, 1E1165L, 1E1166L, 1E1167L, 1E1168L, 1E1169L, 1E1170L, 1E1171L, 1E1172L, 1E1173L, 1E1174L, 1E1175L, 1E1176L, 1E1177L, 1E1178L, 1E1179L, 1E1180L, 1E1181L, 1E1182L, 1E1183L, 1E1184L, 1E1185L, 1E1186L, 1E1187L, 1E1188L, 1E1189L, 1E1190L, 1E1191L, 1E1192L, 1E1193L, 1E1194L, 1E1195L, 1E1196L, 1E1197L, 1E1198L, 1E1199L, 1E1200L, 1E1201L, 1E1202L, 1E1203L, 1E1204L, 1E1205L, 1E1206L, 1E1207L, 1E1208L, 1E1209L, 1E1210L, 1E1211L, 1E1212L, 1E1213L, 1E1214L, 1E1215L, 1E1216L, 1E1217L, 1E1218L, 1E1219L, 1E1220L, 1E1221L, 1E1222L, 1E1223L, 1E1224L, 1E1225L, 1E1226L, 1E1227L, 1E1228L, 1E1229L, 1E1230L, 1E1231L, 1E1232L, 1E1233L, 1E1234L, 1E1235L, 1E1236L, 1E1237L, 1E1238L, 1E1239L, 1E1240L, 1E1241L, 1E1242L, 1E1243L, 1E1244L, 1E1245L, 1E1246L, 1E1247L, 1E1248L, 1E1249L, 1E1250L, 1E1251L, 1E1252L, 1E1253L, 1E1254L, 1E1255L, 1E1256L, 1E1257L, 1E1258L, 1E1259L, 1E1260L, 1E1261L, 1E1262L, 1E1263L, 1E1264L, 1E1265L, 1E1266L, 1E1267L, 1E1268L, 1E1269L, 1E1270L, 1E1271L, 1E1272L, 1E1273L, 1E1274L, 1E1275L, 1E1276L, 1E1277L, 1E1278L, 1E1279L, 1E1280L, 1E1281L, 1E1282L, 1E1283L, 1E1284L, 1E1285L, 1E1286L, 1E1287L, 1E1288L, 1E1289L, 1E1290L, 1E1291L, 1E1292L, 1E1293L, 1E1294L, 1E1295L, 1E1296L, 1E1297L, 1E1298L, 1E1299L, 1E1300L, 1E1301L, 1E1302L, 1E1303L, 1E1304L, 1E1305L, 1E1306L, 1E1307L, 1E1308L, 1E1309L, 1E1310L, 1E1311L, 1E1312L, 1E1313L, 1E1314L, 1E1315L, 1E1316L, 1E1317L, 1E1318L, 1E1319L, 1E1320L, 1E1321L, 1E1322L, 1E1323L, 1E1324L, 1E1325L, 1E1326L, 1E1327L, 1E1328L, 1E1329L, 1E1330L, 1E1331L, 1E1332L, 1E1333L, 1E1334L, 1E1335L, 1E1336L, 1E1337L, 1E1338L, 1E1339L, 1E1340L, 1E1341L, 1E1342L, 1E1343L, 1E1344L, 1E1345L, 1E1346L, 1E1347L, 1E1348L, 1E1349L, 1E1350L, 1E1351L, 1E1352L, 1E1353L, 1E1354L, 1E1355L, 1E1356L, 1E1357L, 1E1358L, 1E1359L, 1E1360L, 1E1361L, 1E1362L, 1E1363L, 1E1364L, 1E1365L, 1E1366L, 1E1367L, 1E1368L, 1E1369L, 1E1370L, 1E1371L, 1E1372L, 1E1373L, 1E1374L, 1E1375L, 1E1376L, 1E1377L, 1E1378L, 1E1379L, 1E1380L, 1E1381L, 1E1382L, 1E1383L, 1E1384L, 1E1385L, 1E1386L, 1E1387L, 1E1388L, 1E1389L, 1E1390L, 1E1391L, 1E1392L, 1E1393L, 1E1394L, 1E1395L, 1E1396L, 1E1397L, 1E1398L, 1E1399L, 1E1400L, 1E1401L, 1E1402L, 1E1403L, 1E1404L, 1E1405L, 1E1406L, 1E1407L, 1E1408L, 1E1409L, 1E1410L, 1E1411L, 1E1412L, 1E1413L, 1E1414L, 1E1415L, 1E1416L, 1E1417L, 1E1418L, 1E1419L, 1E1420L, 1E1421L, 1E1422L, 1E1423L, 1E1424L, 1E1425L, 1E1426L, 1E1427L, 1E1428L, 1E1429L, 1E1430L, 1E1431L, 1E1432L, 1E1433L, 1E1434L, 1E1435L, 1E1436L, 1E1437L, 1E1438L, 1E1439L, 1E1440L, 1E1441L, 1E1442L, 1E1443L, 1E1444L, 1E1445L, 1E1446L, 1E1447L, 1E1448L, 1E1449L, 1E1450L, 1E1451L, 1E1452L, 1E1453L, 1E1454L, 1E1455L, 1E1456L, 1E1457L, 1E1458L, 1E1459L, 1E1460L, 1E1461L, 1E1462L, 1E1463L, 1E1464L, 1E1465L, 1E1466L, 1E1467L, 1E1468L, 1E1469L, 1E1470L, 1E1471L, 1E1472L, 1E1473L, 1E1474L, 1E1475L, 1E1476L, 1E1477L, 1E1478L, 1E1479L, 1E1480L, 1E1481L, 1E1482L, 1E1483L, 1E1484L, 1E1485L, 1E1486L, 1E1487L, 1E1488L, 1E1489L, 1E1490L, 1E1491L, 1E1492L, 1E1493L, 1E1494L, 1E1495L, 1E1496L, 1E1497L, 1E1498L, 1E1499L, 1E1500L, 1E1501L, 1E1502L, 1E1503L, 1E1504L, 1E1505L, 1E1506L, 1E1507L, 1E1508L, 1E1509L, 1E1510L, 1E1511L, 1E1512L, 1E1513L, 1E1514L, 1E1515L, 1E1516L, 1E1517L, 1E1518L, 1E1519L, 1E1520L, 1E1521L, 1E1522L, 1E1523L, 1E1524L, 1E1525L, 1E1526L, 1E1527L, 1E1528L, 1E1529L, 1E1530L, 1E1531L, 1E1532L, 1E1533L, 1E1534L, 1E1535L, 1E1536L, 1E1537L, 1E1538L, 1E1539L, 1E1540L, 1E1541L, 1E1542L, 1E1543L, 1E1544L, 1E1545L, 1E1546L, 1E1547L, 1E1548L, 1E1549L, 1E1550L, 1E1551L, 1E1552L, 1E1553L, 1E1554L, 1E1555L, 1E1556L, 1E1557L, 1E1558L, 1E1559L, 1E1560L, 1E1561L, 1E1562L, 1E1563L, 1E1564L, 1E1565L, 1E1566L, 1E1567L, 1E1568L, 1E1569L, 1E1570L, 1E1571L, 1E1572L, 1E1573L, 1E1574L, 1E1575L, 1E1576L, 1E1577L, 1E1578L, 1E1579L, 1E1580L, 1E1581L, 1E1582L, 1E1583L, 1E1584L, 1E1585L, 1E1586L, 1E1587L, 1E1588L, 1E1589L, 1E1590L, 1E1591L, 1E1592L, 1E1593L, 1E1594L, 1E1595L, 1E1596L, 1E1597L, 1E1598L, 1E1599L, 1E1600L, 1E1601L, 1E1602L, 1E1603L, 1E1604L, 1E1605L, 1E1606L, 1E1607L, 1E1608L, 1E1609L, 1E1610L, 1E1611L, 1E1612L, 1E1613L, 1E1614L, 1E1615L, 1E1616L, 1E1617L, 1E1618L, 1E1619L, 1E1620L, 1E1621L, 1E1622L, 1E1623L, 1E1624L, 1E1625L, 1E1626L, 1E1627L, 1E1628L, 1E1629L, 1E1630L, 1E1631L, 1E1632L, 1E1633L, 1E1634L, 1E1635L, 1E1636L, 1E1637L, 1E1638L, 1E1639L, 1E1640L, 1E1641L, 1E1642L, 1E1643L, 1E1644L, 1E1645L, 1E1646L, 1E1647L, 1E1648L, 1E1649L, 1E1650L, 1E1651L, 1E1652L, 1E1653L, 1E1654L, 1E1655L, 1E1656L, 1E1657L, 1E1658L, 1E1659L, 1E1660L, 1E1661L, 1E1662L, 1E1663L, 1E1664L, 1E1665L, 1E1666L, 1E1667L, 1E1668L, 1E1669L, 1E1670L, 1E1671L, 1E1672L, 1E1673L, 1E1674L, 1E1675L, 1E1676L, 1E1677L, 1E1678L, 1E1679L, 1E1680L, 1E1681L, 1E1682L, 1E1683L, 1E1684L, 1E1685L, 1E1686L, 1E1687L, 1E1688L, 1E1689L, 1E1690L, 1E1691L, 1E1692L, 1E1693L, 1E1694L, 1E1695L, 1E1696L, 1E1697L, 1E1698L, 1E1699L, 1E1700L, 1E1701L, 1E1702L, 1E1703L, 1E1704L, 1E1705L, 1E1706L, 1E1707L, 1E1708L, 1E1709L, 1E1710L, 1E1711L, 1E1712L, 1E1713L, 1E1714L, 1E1715L, 1E1716L, 1E1717L, 1E1718L, 1E1719L, 1E1720L, 1E1721L, 1E1722L, 1E1723L, 1E1724L, 1E1725L, 1E1726L, 1E1727L, 1E1728L, 1E1729L, 1E1730L, 1E1731L, 1E1732L, 1E1733L, 1E1734L, 1E1735L, 1E1736L, 1E1737L, 1E1738L, 1E1739L, 1E1740L, 1E1741L, 1E1742L, 1E1743L, 1E1744L, 1E1745L, 1E1746L, 1E1747L, 1E1748L, 1E1749L, 1E1750L, 1E1751L, 1E1752L, 1E1753L, 1E1754L, 1E1755L, 1E1756L, 1E1757L, 1E1758L, 1E1759L, 1E1760L, 1E1761L, 1E1762L, 1E1763L, 1E1764L, 1E1765L, 1E1766L, 1E1767L, 1E1768L, 1E1769L, 1E1770L, 1E1771L, 1E1772L, 1E1773L, 1E1774L, 1E1775L, 1E1776L, 1E1777L, 1E1778L, 1E1779L, 1E1780L, 1E1781L, 1E1782L, 1E1783L, 1E1784L, 1E1785L, 1E1786L, 1E1787L, 1E1788L, 1E1789L, 1E1790L, 1E1791L, 1E1792L, 1E1793L, 1E1794L, 1E1795L, 1E1796L, 1E1797L, 1E1798L, 1E1799L, 1E1800L, 1E1801L, 1E1802L, 1E1803L, 1E1804L, 1E1805L, 1E1806L, 1E1807L, 1E1808L, 1E1809L, 1E1810L, 1E1811L, 1E1812L, 1E1813L, 1E1814L, 1E1815L, 1E1816L, 1E1817L, 1E1818L, 1E1819L, 1E1820L, 1E1821L, 1E1822L, 1E1823L, 1E1824L, 1E1825L, 1E1826L, 1E1827L, 1E1828L, 1E1829L, 1E1830L, 1E1831L, 1E1832L, 1E1833L, 1E1834L, 1E1835L, 1E1836L, 1E1837L, 1E1838L, 1E1839L, 1E1840L, 1E1841L, 1E1842L, 1E1843L, 1E1844L, 1E1845L, 1E1846L, 1E1847L, 1E1848L, 1E1849L, 1E1850L, 1E1851L, 1E1852L, 1E1853L, 1E1854L, 1E1855L, 1E1856L, 1E1857L, 1E1858L, 1E1859L, 1E1860L, 1E1861L, 1E1862L, 1E1863L, 1E1864L, 1E1865L, 1E1866L, 1E1867L, 1E1868L, 1E1869L, 1E1870L, 1E1871L, 1E1872L, 1E1873L, 1E1874L, 1E1875L, 1E1876L, 1E1877L, 1E1878L, 1E1879L, 1E1880L, 1E1881L, 1E1882L, 1E1883L, 1E1884L, 1E1885L, 1E1886L, 1E1887L, 1E1888L, 1E1889L, 1E1890L, 1E1891L, 1E1892L, 1E1893L, 1E1894L, 1E1895L, 1E1896L, 1E1897L, 1E1898L, 1E1899L, 1E1900L, 1E1901L, 1E1902L, 1E1903L, 1E1904L, 1E1905L, 1E1906L, 1E1907L, 1E1908L, 1E1909L, 1E1910L, 1E1911L, 1E1912L, 1E1913L, 1E1914L, 1E1915L, 1E1916L, 1E1917L, 1E1918L, 1E1919L, 1E1920L, 1E1921L, 1E1922L, 1E1923L, 1E1924L, 1E1925L, 1E1926L, 1E1927L, 1E1928L, 1E1929L, 1E1930L, 1E1931L, 1E1932L, 1E1933L, 1E1934L, 1E1935L, 1E1936L, 1E1937L, 1E1938L, 1E1939L, 1E1940L, 1E1941L, 1E1942L, 1E1943L, 1E1944L, 1E1945L, 1E1946L, 1E1947L, 1E1948L, 1E1949L, 1E1950L, 1E1951L, 1E1952L, 1E1953L, 1E1954L, 1E1955L, 1E1956L, 1E1957L, 1E1958L, 1E1959L, 1E1960L, 1E1961L, 1E1962L, 1E1963L, 1E1964L, 1E1965L, 1E1966L, 1E1967L, 1E1968L, 1E1969L, 1E1970L, 1E1971L, 1E1972L, 1E1973L, 1E1974L, 1E1975L, 1E1976L, 1E1977L, 1E1978L, 1E1979L, 1E1980L, 1E1981L, 1E1982L, 1E1983L, 1E1984L, 1E1985L, 1E1986L, 1E1987L, 1E1988L, 1E1989L, 1E1990L, 1E1991L, 1E1992L, 1E1993L, 1E1994L, 1E1995L, 1E1996L, 1E1997L, 1E1998L, 1E1999L, 1E2000L, 1E2001L, 1E2002L, 1E2003L, 1E2004L, 1E2005L, 1E2006L, 1E2007L, 1E2008L, 1E2009L, 1E2010L, 1E2011L, 1E2012L, 1E2013L, 1E2014L, 1E2015L, 1E2016L, 1E2017L, 1E2018L, 1E2019L, 1E2020L, 1E2021L, 1E2022L, 1E2023L, 1E2024L, 1E2025L, 1E2026L, 1E2027L, 1E2028L, 1E2029L, 1E2030L, 1E2031L, 1E2032L, 1E2033L, 1E2034L, 1E2035L, 1E2036L, 1E2037L, 1E2038L, 1E2039L, 1E2040L, 1E2041L, 1E2042L, 1E2043L, 1E2044L, 1E2045L, 1E2046L, 1E2047L, 1E2048L, 1E2049L, 1E2050L, 1E2051L, 1E2052L, 1E2053L, 1E2054L, 1E2055L, 1E2056L, 1E2057L, 1E2058L, 1E2059L, 1E2060L, 1E2061L, 1E2062L, 1E2063L, 1E2064L, 1E2065L, 1E2066L, 1E2067L, 1E2068L, 1E2069L, 1E2070L, 1E2071L, 1E2072L, 1E2073L, 1E2074L, 1E2075L, 1E2076L, 1E2077L, 1E2078L, 1E2079L, 1E2080L, 1E2081L, 1E2082L, 1E2083L, 1E2084L, 1E2085L, 1E2086L, 1E2087L, 1E2088L, 1E2089L, 1E2090L, 1E2091L, 1E2092L, 1E2093L, 1E2094L, 1E2095L, 1E2096L, 1E2097L, 1E2098L, 1E2099L, 1E2100L, 1E2101L, 1E2102L, 1E2103L, 1E2104L, 1E2105L, 1E2106L, 1E2107L, 1E2108L, 1E2109L, 1E2110L, 1E2111L, 1E2112L, 1E2113L, 1E2114L, 1E2115L, 1E2116L, 1E2117L, 1E2118L, 1E2119L, 1E2120L, 1E2121L, 1E2122L, 1E2123L, 1E2124L, 1E2125L, 1E2126L, 1E2127L, 1E2128L, 1E2129L, 1E2130L, 1E2131L, 1E2132L, 1E2133L, 1E2134L, 1E2135L, 1E2136L, 1E2137L, 1E2138L, 1E2139L, 1E2140L, 1E2141L, 1E2142L, 1E2143L, 1E2144L, 1E2145L, 1E2146L, 1E2147L, 1E2148L, 1E2149L, 1E2150L, 1E2151L, 1E2152L, 1E2153L, 1E2154L, 1E2155L, 1E2156L, 1E2157L, 1E2158L, 1E2159L, 1E2160L, 1E2161L, 1E2162L, 1E2163L, 1E2164L, 1E2165L, 1E2166L, 1E2167L, 1E2168L, 1E2169L, 1E2170L, 1E2171L, 1E2172L, 1E2173L, 1E2174L, 1E2175L, 1E2176L, 1E2177L, 1E2178L, 1E2179L, 1E2180L, 1E2181L, 1E2182L, 1E2183L, 1E2184L, 1E2185L, 1E2186L, 1E2187L, 1E2188L, 1E2189L, 1E2190L, 1E2191L, 1E2192L, 1E2193L, 1E2194L, 1E2195L, 1E2196L, 1E2197L, 1E2198L, 1E2199L, 1E2200L, 1E2201L, 1E2202L, 1E2203L, 1E2204L, 1E2205L, 1E2206L, 1E2207L, 1E2208L, 1E2209L, 1E2210L, 1E2211L, 1E2212L, 1E2213L, 1E2214L, 1E2215L, 1E2216L, 1E2217L, 1E2218L, 1E2219L, 1E2220L, 1E2221L, 1E2222L, 1E2223L, 1E2224L, 1E2225L, 1E2226L, 1E2227L, 1E2228L, 1E2229L, 1E2230L, 1E2231L, 1E2232L, 1E2233L, 1E2234L, 1E2235L, 1E2236L, 1E2237L, 1E2238L, 1E2239L, 1E2240L, 1E2241L, 1E2242L, 1E2243L, 1E2244L, 1E2245L, 1E2246L, 1E2247L, 1E2248L, 1E2249L, 1E2250L, 1E2251L, 1E2252L, 1E2253L, 1E2254L, 1E2255L, 1E2256L, 1E2257L, 1E2258L, 1E2259L, 1E2260L, 1E2261L, 1E2262L, 1E2263L, 1E2264L, 1E2265L, 1E2266L, 1E2267L, 1E2268L, 1E2269L, 1E2270L, 1E2271L, 1E2272L, 1E2273L, 1E2274L, 1E2275L, 1E2276L, 1E2277L, 1E2278L, 1E2279L, 1E2280L, 1E2281L, 1E2282L, 1E2283L, 1E2284L, 1E2285L, 1E2286L, 1E2287L, 1E2288L, 1E2289L, 1E2290L, 1E2291L, 1E2292L, 1E2293L, 1E2294L, 1E2295L, 1E2296L, 1E2297L, 1E2298L, 1E2299L, 1E2300L, 1E2301L, 1E2302L, 1E2303L, 1E2304L, 1E2305L, 1E2306L, 1E2307L, 1E2308L, 1E2309L, 1E2310L, 1E2311L, 1E2312L, 1E2313L, 1E2314L, 1E2315L, 1E2316L, 1E2317L, 1E2318L, 1E2319L, 1E2320L, 1E2321L, 1E2322L, 1E2323L, 1E2324L, 1E2325L, 1E2326L, 1E2327L, 1E2328L, 1E2329L, 1E2330L, 1E2331L, 1E2332L, 1E2333L, 1E2334L, 1E2335L, 1E2336L, 1E2337L, 1E2338L, 1E2339L, 1E2340L, 1E2341L, 1E2342L, 1E2343L, 1E2344L, 1E2345L, 1E2346L, 1E2347L, 1E2348L, 1E2349L, 1E2350L, 1E2351L, 1E2352L, 1E2353L, 1E2354L, 1E2355L, 1E2356L, 1E2357L, 1E2358L, 1E2359L, 1E2360L, 1E2361L, 1E2362L, 1E2363L, 1E2364L, 1E2365L, 1E2366L, 1E2367L, 1E2368L, 1E2369L, 1E2370L, 1E2371L, 1E2372L, 1E2373L, 1E2374L, 1E2375L, 1E2376L, 1E2377L, 1E2378L, 1E2379L, 1E2380L, 1E2381L, 1E2382L, 1E2383L, 1E2384L, 1E2385L, 1E2386L, 1E2387L, 1E2388L, 1E2389L, 1E2390L, 1E2391L, 1E2392L, 1E2393L, 1E2394L, 1E2395L, 1E2396L, 1E2397L, 1E2398L, 1E2399L, 1E2400L, 1E2401L, 1E2402L, 1E2403L, 1E2404L, 1E2405L, 1E2406L, 1E2407L, 1E2408L, 1E2409L, 1E2410L, 1E2411L, 1E2412L, 1E2413L, 1E2414L, 1E2415L, 1E2416L, 1E2417L, 1E2418L, 1E2419L, 1E2420L, 1E2421L, 1E2422L, 1E2423L, 1E2424L, 1E2425L, 1E2426L, 1E2427L, 1E2428L, 1E2429L, 1E2430L, 1E2431L, 1E2432L, 1E2433L, 1E2434L, 1E2435L, 1E2436L, 1E2437L, 1E2438L, 1E2439L, 1E2440L, 1E2441L, 1E2442L, 1E2443L, 1E2444L, 1E2445L, 1E2446L, 1E2447L, 1E2448L, 1E2449L, 1E2450L, 1E2451L, 1E2452L, 1E2453L, 1E2454L, 1E2455L, 1E2456L, 1E2457L, 1E2458L, 1E2459L, 1E2460L, 1E2461L, 1E2462L, 1E2463L, 1E2464L, 1E2465L, 1E2466L, 1E2467L, 1E2468L, 1E2469L, 1E2470L, 1E2471L, 1E2472L, 1E2473L, 1E2474L, 1E2475L, 1E2476L, 1E2477L, 1E2478L, 1E2479L, 1E2480L, 1E2481L, 1E2482L, 1E2483L, 1E2484L, 1E2485L, 1E2486L, 1E2487L, 1E2488L, 1E2489L, 1E2490L, 1E2491L, 1E2492L, 1E2493L, 1E2494L, 1E2495L, 1E2496L, 1E2497L, 1E2498L, 1E2499L, 1E2500L, 1E2501L, 1E2502L, 1E2503L, 1E2504L, 1E2505L, 1E2506L, 1E2507L, 1E2508L, 1E2509L, 1E2510L, 1E2511L, 1E2512L, 1E2513L, 1E2514L, 1E2515L, 1E2516L, 1E2517L, 1E2518L, 1E2519L, 1E2520L, 1E2521L, 1E2522L, 1E2523L, 1E2524L, 1E2525L, 1E2526L, 1E2527L, 1E2528L, 1E2529L, 1E2530L, 1E2531L, 1E2532L, 1E2533L, 1E2534L, 1E2535L, 1E2536L, 1E2537L, 1E2538L, 1E2539L, 1E2540L, 1E2541L, 1E2542L, 1E2543L, 1E2544L, 1E2545L, 1E2546L, 1E2547L, 1E2548L, 1E2549L, 1E2550L, 1E2551L, 1E2552L, 1E2553L, 1E2554L, 1E2555L, 1E2556L, 1E2557L, 1E2558L, 1E2559L, 1E2560L, 1E2561L, 1E2562L, 1E2563L, 1E2564L, 1E2565L, 1E2566L, 1E2567L, 1E2568L, 1E2569L, 1E2570L, 1E2571L, 1E2572L, 1E2573L, 1E2574L, 1E2575L, 1E2576L, 1E2577L, 1E2578L, 1E2579L, 1E2580L, 1E2581L, 1E2582L, 1E2583L, 1E2584L, 1E2585L, 1E2586L, 1E2587L, 1E2588L, 1E2589L, 1E2590L, 1E2591L, 1E2592L, 1E2593L, 1E2594L, 1E2595L, 1E2596L, 1E2597L, 1E2598L, 1E2599L, 1E2600L, 1E2601L, 1E2602L, 1E2603L, 1E2604L, 1E2605L, 1E2606L, 1E2607L, 1E2608L, 1E2609L, 1E2610L, 1E2611L, 1E2612L, 1E2613L, 1E2614L, 1E2615L, 1E2616L, 1E2617L, 1E2618L, 1E2619L, 1E2620L, 1E2621L, 1E2622L, 1E2623L, 1E2624L, 1E2625L, 1E2626L, 1E2627L, 1E2628L, 1E2629L, 1E2630L, 1E2631L, 1E2632L, 1E2633L, 1E2634L, 1E2635L, 1E2636L, 1E2637L, 1E2638L, 1E2639L, 1E2640L, 1E2641L, 1E2642L, 1E2643L, 1E2644L, 1E2645L, 1E2646L, 1E2647L, 1E2648L, 1E2649L, 1E2650L, 1E2651L, 1E2652L, 1E2653L, 1E2654L, 1E2655L, 1E2656L, 1E2657L, 1E2658L, 1E2659L, 1E2660L, 1E2661L, 1E2662L, 1E2663L, 1E2664L, 1E2665L, 1E2666L, 1E2667L, 1E2668L, 1E2669L, 1E2670L, 1E2671L, 1E2672L, 1E2673L, 1E2674L, 1E2675L, 1E2676L, 1E2677L, 1E2678L, 1E2679L, 1E2680L, 1E2681L, 1E2682L, 1E2683L, 1E2684L, 1E2685L, 1E2686L, 1E2687L, 1E2688L, 1E2689L, 1E2690L, 1E2691L, 1E2692L, 1E2693L, 1E2694L, 1E2695L, 1E2696L, 1E2697L, 1E2698L, 1E2699L, 1E2700L, 1E2701L, 1E2702L, 1E2703L, 1E2704L, 1E2705L, 1E2706L, 1E2707L, 1E2708L, 1E2709L, 1E2710L, 1E2711L, 1E2712L, 1E2713L, 1E2714L, 1E2715L, 1E2716L, 1E2717L, 1E2718L, 1E2719L, 1E2720L, 1E2721L, 1E2722L, 1E2723L, 1E2724L, 1E2725L, 1E2726L, 1E2727L, 1E2728L, 1E2729L, 1E2730L, 1E2731L, 1E2732L, 1E2733L, 1E2734L, 1E2735L, 1E2736L, 1E2737L, 1E2738L, 1E2739L, 1E2740L, 1E2741L, 1E2742L, 1E2743L, 1E2744L, 1E2745L, 1E2746L, 1E2747L, 1E2748L, 1E2749L, 1E2750L, 1E2751L, 1E2752L, 1E2753L, 1E2754L, 1E2755L, 1E2756L, 1E2757L, 1E2758L, 1E2759L, 1E2760L, 1E2761L, 1E2762L, 1E2763L, 1E2764L, 1E2765L, 1E2766L, 1E2767L, 1E2768L, 1E2769L, 1E2770L, 1E2771L, 1E2772L, 1E2773L, 1E2774L, 1E2775L, 1E2776L, 1E2777L, 1E2778L, 1E2779L, 1E2780L, 1E2781L, 1E2782L, 1E2783L, 1E2784L, 1E2785L, 1E2786L, 1E2787L, 1E2788L, 1E2789L, 1E2790L, 1E2791L, 1E2792L, 1E2793L, 1E2794L, 1E2795L, 1E2796L, 1E2797L, 1E2798L, 1E2799L, 1E2800L, 1E2801L, 1E2802L, 1E2803L, 1E2804L, 1E2805L, 1E2806L, 1E2807L, 1E2808L, 1E2809L, 1E2810L, 1E2811L, 1E2812L, 1E2813L, 1E2814L, 1E2815L, 1E2816L, 1E2817L, 1E2818L, 1E2819L, 1E2820L, 1E2821L, 1E2822L, 1E2823L, 1E2824L, 1E2825L, 1E2826L, 1E2827L, 1E2828L, 1E2829L, 1E2830L, 1E2831L, 1E2832L, 1E2833L, 1E2834L, 1E2835L, 1E2836L, 1E2837L, 1E2838L, 1E2839L, 1E2840L, 1E2841L, 1E2842L, 1E2843L, 1E2844L, 1E2845L, 1E2846L, 1E2847L, 1E2848L, 1E2849L, 1E2850L, 1E2851L, 1E2852L, 1E2853L, 1E2854L, 1E2855L, 1E2856L, 1E2857L, 1E2858L, 1E2859L, 1E2860L, 1E2861L, 1E2862L, 1E2863L, 1E2864L, 1E2865L, 1E2866L, 1E2867L, 1E2868L, 1E2869L, 1E2870L, 1E2871L, 1E2872L, 1E2873L, 1E2874L, 1E2875L, 1E2876L, 1E2877L, 1E2878L, 1E2879L, 1E2880L, 1E2881L, 1E2882L, 1E2883L, 1E2884L, 1E2885L, 1E2886L, 1E2887L, 1E2888L, 1E2889L, 1E2890L, 1E2891L, 1E2892L, 1E2893L, 1E2894L, 1E2895L, 1E2896L, 1E2897L, 1E2898L, 1E2899L, 1E2900L, 1E2901L, 1E2902L, 1E2903L, 1E2904L, 1E2905L, 1E2906L, 1E2907L, 1E2908L, 1E2909L, 1E2910L, 1E2911L, 1E2912L, 1E2913L, 1E2914L, 1E2915L, 1E2916L, 1E2917L, 1E2918L, 1E2919L, 1E2920L, 1E2921L, 1E2922L, 1E2923L, 1E2924L, 1E2925L, 1E2926L, 1E2927L, 1E2928L, 1E2929L, 1E2930L, 1E2931L, 1E2932L, 1E2933L, 1E2934L, 1E2935L, 1E2936L, 1E2937L, 1E2938L, 1E2939L, 1E2940L, 1E2941L, 1E2942L, 1E2943L, 1E2944L, 1E2945L, 1E2946L, 1E2947L, 1E2948L, 1E2949L, 1E2950L, 1E2951L, 1E2952L, 1E2953L, 1E2954L, 1E2955L, 1E2956L, 1E2957L, 1E2958L, 1E2959L, 1E2960L, 1E2961L, 1E2962L, 1E2963L, 1E2964L, 1E2965L, 1E2966L, 1E2967L, 1E2968L, 1E2969L, 1E2970L, 1E2971L, 1E2972L, 1E2973L, 1E2974L, 1E2975L, 1E2976L, 1E2977L, 1E2978L, 1E2979L, 1E2980L, 1E2981L, 1E2982L, 1E2983L, 1E2984L, 1E2985L, 1E2986L, 1E2987L, 1E2988L, 1E2989L, 1E2990L, 1E2991L, 1E2992L, 1E2993L, 1E2994L, 1E2995L, 1E2996L, 1E2997L, 1E2998L, 1E2999L, 1E3000L, 1E3001L, 1E3002L, 1E3003L, 1E3004L, 1E3005L, 1E3006L, 1E3007L, 1E3008L, 1E3009L, 1E3010L, 1E3011L, 1E3012L, 1E3013L, 1E3014L, 1E3015L, 1E3016L, 1E3017L, 1E3018L, 1E3019L, 1E3020L, 1E3021L, 1E3022L, 1E3023L, 1E3024L, 1E3025L, 1E3026L, 1E3027L, 1E3028L, 1E3029L, 1E3030L, 1E3031L, 1E3032L, 1E3033L, 1E3034L, 1E3035L, 1E3036L, 1E3037L, 1E3038L, 1E3039L, 1E3040L, 1E3041L, 1E3042L, 1E3043L, 1E3044L, 1E3045L, 1E3046L, 1E3047L, 1E3048L, 1E3049L, 1E3050L, 1E3051L, 1E3052L, 1E3053L, 1E3054L, 1E3055L, 1E3056L, 1E3057L, 1E3058L, 1E3059L, 1E3060L, 1E3061L, 1E3062L, 1E3063L, 1E3064L, 1E3065L, 1E3066L, 1E3067L, 1E3068L, 1E3069L, 1E3070L, 1E3071L, 1E3072L, 1E3073L, 1E3074L, 1E3075L, 1E3076L, 1E3077L, 1E3078L, 1E3079L, 1E3080L, 1E3081L, 1E3082L, 1E3083L, 1E3084L, 1E3085L, 1E3086L, 1E3087L, 1E3088L, 1E3089L, 1E3090L, 1E3091L, 1E3092L, 1E3093L, 1E3094L, 1E3095L, 1E3096L, 1E3097L, 1E3098L, 1E3099L, 1E3100L, 1E3101L, 1E3102L, 1E3103L, 1E3104L, 1E3105L, 1E3106L, 1E3107L, 1E3108L, 1E3109L, 1E3110L, 1E3111L, 1E3112L, 1E3113L, 1E3114L, 1E3115L, 1E3116L, 1E3117L, 1E3118L, 1E3119L, 1E3120L, 1E3121L, 1E3122L, 1E3123L, 1E3124L, 1E3125L, 1E3126L, 1E3127L, 1E3128L, 1E3129L, 1E3130L, 1E3131L, 1E3132L, 1E3133L, 1E3134L, 1E3135L, 1E3136L, 1E3137L, 1E3138L, 1E3139L, 1E3140L, 1E3141L, 1E3142L, 1E3143L, 1E3144L, 1E3145L, 1E3146L, 1E3147L, 1E3148L, 1E3149L, 1E3150L, 1E3151L, 1E3152L, 1E3153L, 1E3154L, 1E3155L, 1E3156L, 1E3157L, 1E3158L, 1E3159L, 1E3160L, 1E3161L, 1E3162L, 1E3163L, 1E3164L, 1E3165L, 1E3166L, 1E3167L, 1E3168L, 1E3169L, 1E3170L, 1E3171L, 1E3172L, 1E3173L, 1E3174L, 1E3175L, 1E3176L, 1E3177L, 1E3178L, 1E3179L, 1E3180L, 1E3181L, 1E3182L, 1E3183L, 1E3184L, 1E3185L, 1E3186L, 1E3187L, 1E3188L, 1E3189L, 1E3190L, 1E3191L, 1E3192L, 1E3193L, 1E3194L, 1E3195L, 1E3196L, 1E3197L, 1E3198L, 1E3199L, 1E3200L, 1E3201L, 1E3202L, 1E3203L, 1E3204L, 1E3205L, 1E3206L, 1E3207L, 1E3208L, 1E3209L, 1E3210L, 1E3211L, 1E3212L, 1E3213L, 1E3214L, 1E3215L, 1E3216L, 1E3217L, 1E3218L, 1E3219L, 1E3220L, 1E3221L, 1E3222L, 1E3223L, 1E3224L, 1E3225L, 1E3226L, 1E3227L, 1E3228L, 1E3229L, 1E3230L, 1E3231L, 1E3232L, 1E3233L, 1E3234L, 1E3235L, 1E3236L, 1E3237L, 1E3238L, 1E3239L, 1E3240L, 1E3241L, 1E3242L, 1E3243L, 1E3244L, 1E3245L, 1E3246L, 1E3247L, 1E3248L, 1E3249L, 1E3250L, 1E3251L, 1E3252L, 1E3253L, 1E3254L, 1E3255L, 1E3256L, 1E3257L, 1E3258L, 1E3259L, 1E3260L, 1E3261L, 1E3262L, 1E3263L, 1E3264L, 1E3265L, 1E3266L, 1E3267L, 1E3268L, 1E3269L, 1E3270L, 1E3271L, 1E3272L, 1E3273L, 1E3274L, 1E3275L, 1E3276L, 1E3277L, 1E3278L, 1E3279L, 1E3280L, 1E3281L, 1E3282L, 1E3283L, 1E3284L, 1E3285L, 1E3286L, 1E3287L, 1E3288L, 1E3289L, 1E3290L, 1E3291L, 1E3292L, 1E3293L, 1E3294L, 1E3295L, 1E3296L, 1E3297L, 1E3298L, 1E3299L, 1E3300L, 1E3301L, 1E3302L, 1E3303L, 1E3304L, 1E3305L, 1E3306L, 1E3307L, 1E3308L, 1E3309L, 1E3310L, 1E3311L, 1E3312L, 1E3313L, 1E3314L, 1E3315L, 1E3316L, 1E3317L, 1E3318L, 1E3319L, 1E3320L, 1E3321L, 1E3322L, 1E3323L, 1E3324L, 1E3325L, 1E3326L, 1E3327L, 1E3328L, 1E3329L, 1E3330L, 1E3331L, 1E3332L, 1E3333L, 1E3334L, 1E3335L, 1E3336L, 1E3337L, 1E3338L, 1E3339L, 1E3340L, 1E3341L, 1E3342L, 1E3343L, 1E3344L, 1E3345L, 1E3346L, 1E3347L, 1E3348L, 1E3349L, 1E3350L, 1E3351L, 1E3352L, 1E3353L, 1E3354L, 1E3355L, 1E3356L, 1E3357L, 1E3358L, 1E3359L, 1E3360L, 1E3361L, 1E3362L, 1E3363L, 1E3364L, 1E3365L, 1E3366L, 1E3367L, 1E3368L, 1E3369L, 1E3370L, 1E3371L, 1E3372L, 1E3373L, 1E3374L, 1E3375L, 1E3376L, 1E3377L, 1E3378L, 1E3379L, 1E3380L, 1E3381L, 1E3382L, 1E3383L, 1E3384L, 1E3385L, 1E3386L, 1E3387L, 1E3388L, 1E3389L, 1E3390L, 1E3391L, 1E3392L, 1E3393L, 1E3394L, 1E3395L, 1E3396L, 1E3397L, 1E3398L, 1E3399L, 1E3400L, 1E3401L, 1E3402L, 1E3403L, 1E3404L, 1E3405L, 1E3406L, 1E3407L, 1E3408L, 1E3409L, 1E3410L, 1E3411L, 1E3412L, 1E3413L, 1E3414L, 1E3415L, 1E3416L, 1E3417L, 1E3418L, 1E3419L, 1E3420L, 1E3421L, 1E3422L, 1E3423L, 1E3424L, 1E3425L, 1E3426L, 1E3427L, 1E3428L, 1E3429L, 1E3430L, 1E3431L, 1E3432L, 1E3433L, 1E3434L, 1E3435L, 1E3436L, 1E3437L, 1E3438L, 1E3439L, 1E3440L, 1E3441L, 1E3442L, 1E3443L, 1E3444L, 1E3445L, 1E3446L, 1E3447L, 1E3448L, 1E3449L, 1E3450L, 1E3451L, 1E3452L, 1E3453L, 1E3454L, 1E3455L, 1E3456L, 1E3457L, 1E3458L, 1E3459L, 1E3460L, 1E3461L, 1E3462L, 1E3463L, 1E3464L, 1E3465L, 1E3466L, 1E3467L, 1E3468L, 1E3469L, 1E3470L, 1E3471L, 1E3472L, 1E3473L, 1E3474L, 1E3475L, 1E3476L, 1E3477L, 1E3478L, 1E3479L, 1E3480L, 1E3481L, 1E3482L, 1E3483L, 1E3484L, 1E3485L, 1E3486L, 1E3487L, 1E3488L, 1E3489L, 1E3490L, 1E3491L, 1E3492L, 1E3493L, 1E3494L, 1E3495L, 1E3496L, 1E3497L, 1E3498L, 1E3499L, 1E3500L, 1E3501L, 1E3502L, 1E3503L, 1E3504L, 1E3505L, 1E3506L, 1E3507L, 1E3508L, 1E3509L, 1E3510L, 1E3511L, 1E3512L, 1E3513L, 1E3514L, 1E3515L, 1E3516L, 1E3517L, 1E3518L, 1E3519L, 1E3520L, 1E3521L, 1E3522L, 1E3523L, 1E3524L, 1E3525L, 1E3526L, 1E3527L, 1E3528L, 1E3529L, 1E3530L, 1E3531L, 1E3532L, 1E3533L, 1E3534L, 1E3535L, 1E3536L, 1E3537L, 1E3538L, 1E3539L, 1E3540L, 1E3541L, 1E3542L, 1E3543L, 1E3544L, 1E3545L, 1E3546L, 1E3547L, 1E3548L, 1E3549L, 1E3550L, 1E3551L, 1E3552L, 1E3553L, 1E3554L, 1E3555L, 1E3556L, 1E3557L, 1E3558L, 1E3559L, 1E3560L, 1E3561L, 1E3562L, 1E3563L, 1E3564L, 1E3565L, 1E3566L, 1E3567L, 1E3568L, 1E3569L, 1E3570L, 1E3571L, 1E3572L, 1E3573L, 1E3574L, 1E3575L, 1E3576L, 1E3577L, 1E3578L, 1E3579L, 1E3580L, 1E3581L, 1E3582L, 1E3583L, 1E3584L, 1E3585L, 1E3586L, 1E3587L, 1E3588L, 1E3589L, 1E3590L, 1E3591L, 1E3592L, 1E3593L, 1E3594L, 1E3595L, 1E3596L, 1E3597L, 1E3598L, 1E3599L, 1E3600L, 1E3601L, 1E3602L, 1E3603L, 1E3604L, 1E3605L, 1E3606L, 1E3607L, 1E3608L, 1E3609L, 1E3610L, 1E3611L, 1E3612L, 1E3613L, 1E3614L, 1E3615L, 1E3616L, 1E3617L, 1E3618L, 1E3619L, 1E3620L, 1E3621L, 1E3622L, 1E3623L, 1E3624L, 1E3625L, 1E3626L, 1E3627L, 1E3628L, 1E3629L, 1E3630L, 1E3631L, 1E3632L, 1E3633L, 1E3634L, 1E3635L, 1E3636L, 1E3637L, 1E3638L, 1E3639L, 1E3640L, 1E3641L, 1E3642L, 1E3643L, 1E3644L, 1E3645L, 1E3646L, 1E3647L, 1E3648L, 1E3649L, 1E3650L, 1E3651L, 1E3652L, 1E3653L, 1E3654L, 1E3655L, 1E3656L, 1E3657L, 1E3658L, 1E3659L, 1E3660L, 1E3661L, 1E3662L, 1E3663L, 1E3664L, 1E3665L, 1E3666L, 1E3667L, 1E3668L, 1E3669L, 1E3670L, 1E3671L, 1E3672L, 1E3673L, 1E3674L, 1E3675L, 1E3676L, 1E3677L, 1E3678L, 1E3679L, 1E3680L, 1E3681L, 1E3682L, 1E3683L, 1E3684L, 1E3685L, 1E3686L, 1E3687L, 1E3688L, 1E3689L, 1E3690L, 1E3691L, 1E3692L, 1E3693L, 1E3694L, 1E3695L, 1E3696L, 1E3697L, 1E3698L, 1E3699L, 1E3700L, 1E3701L, 1E3702L, 1E3703L, 1E3704L, 1E3705L, 1E3706L, 1E3707L, 1E3708L, 1E3709L, 1E3710L, 1E3711L, 1E3712L, 1E3713L, 1E3714L, 1E3715L, 1E3716L, 1E3717L, 1E3718L, 1E3719L, 1E3720L, 1E3721L, 1E3722L, 1E3723L, 1E3724L, 1E3725L, 1E3726L, 1E3727L, 1E3728L, 1E3729L, 1E3730L, 1E3731L, 1E3732L, 1E3733L, 1E3734L, 1E3735L, 1E3736L, 1E3737L, 1E3738L, 1E3739L, 1E3740L, 1E3741L, 1E3742L, 1E3743L, 1E3744L, 1E3745L, 1E3746L, 1E3747L, 1E3748L, 1E3749L, 1E3750L, 1E3751L, 1E3752L, 1E3753L, 1E3754L, 1E3755L, 1E3756L, 1E3757L, 1E3758L, 1E3759L, 1E3760L, 1E3761L, 1E3762L, 1E3763L, 1E3764L, 1E3765L, 1E3766L, 1E3767L, 1E3768L, 1E3769L, 1E3770L, 1E3771L, 1E3772L, 1E3773L, 1E3774L, 1E3775L, 1E3776L, 1E3777L, 1E3778L, 1E3779L, 1E3780L, 1E3781L, 1E3782L, 1E3783L, 1E3784L, 1E3785L, 1E3786L, 1E3787L, 1E3788L, 1E3789L, 1E3790L, 1E3791L, 1E3792L, 1E3793L, 1E3794L, 1E3795L, 1E3796L, 1E3797L, 1E3798L, 1E3799L, 1E3800L, 1E3801L, 1E3802L, 1E3803L, 1E3804L, 1E3805L, 1E3806L, 1E3807L, 1E3808L, 1E3809L, 1E3810L, 1E3811L, 1E3812L, 1E3813L, 1E3814L, 1E3815L, 1E3816L, 1E3817L, 1E3818L, 1E3819L, 1E3820L, 1E3821L, 1E3822L, 1E3823L, 1E3824L, 1E3825L, 1E3826L, 1E3827L, 1E3828L, 1E3829L, 1E3830L, 1E3831L, 1E3832L, 1E3833L, 1E3834L, 1E3835L, 1E3836L, 1E3837L, 1E3838L, 1E3839L, 1E3840L, 1E3841L, 1E3842L, 1E3843L, 1E3844L, 1E3845L, 1E3846L, 1E3847L, 1E3848L, 1E3849L, 1E3850L, 1E3851L, 1E3852L, 1E3853L, 1E3854L, 1E3855L, 1E3856L, 1E3857L, 1E3858L, 1E3859L, 1E3860L, 1E3861L, 1E3862L, 1E3863L, 1E3864L, 1E3865L, 1E3866L, 1E3867L, 1E3868L, 1E3869L, 1E3870L, 1E3871L, 1E3872L, 1E3873L, 1E3874L, 1E3875L, 1E3876L, 1E3877L, 1E3878L, 1E3879L, 1E3880L, 1E3881L, 1E3882L, 1E3883L, 1E3884L, 1E3885L, 1E3886L, 1E3887L, 1E3888L, 1E3889L, 1E3890L, 1E3891L, 1E3892L, 1E3893L, 1E3894L, 1E3895L, 1E3896L, 1E3897L, 1E3898L, 1E3899L, 1E3900L, 1E3901L, 1E3902L, 1E3903L, 1E3904L, 1E3905L, 1E3906L, 1E3907L, 1E3908L, 1E3909L, 1E3910L, 1E3911L, 1E3912L, 1E3913L, 1E3914L, 1E3915L, 1E3916L, 1E3917L, 1E3918L, 1E3919L, 1E3920L, 1E3921L, 1E3922L, 1E3923L, 1E3924L, 1E3925L, 1E3926L, 1E3927L, 1E3928L, 1E3929L, 1E3930L, 1E3931L, 1E3932L, 1E3933L, 1E3934L, 1E3935L, 1E3936L, 1E3937L, 1E3938L, 1E3939L, 1E3940L, 1E3941L, 1E3942L, 1E3943L, 1E3944L, 1E3945L, 1E3946L, 1E3947L, 1E3948L, 1E3949L, 1E3950L, 1E3951L, 1E3952L, 1E3953L, 1E3954L, 1E3955L, 1E3956L, 1E3957L, 1E3958L, 1E3959L, 1E3960L, 1E3961L, 1E3962L, 1E3963L, 1E3964L, 1E3965L, 1E3966L, 1E3967L, 1E3968L, 1E3969L, 1E3970L, 1E3971L, 1E3972L, 1E3973L, 1E3974L, 1E3975L, 1E3976L, 1E3977L, 1E3978L, 1E3979L, 1E3980L, 1E3981L, 1E3982L, 1E3983L, 1E3984L, 1E3985L, 1E3986L, 1E3987L, 1E3988L, 1E3989L, 1E3990L, 1E3991L, 1E3992L, 1E3993L, 1E3994L, 1E3995L, 1E3996L, 1E3997L, 1E3998L, 1E3999L, 1E4000L, 1E4001L, 1E4002L, 1E4003L, 1E4004L, 1E4005L, 1E4006L, 1E4007L, 1E4008L, 1E4009L, 1E4010L, 1E4011L, 1E4012L, 1E4013L, 1E4014L, 1E4015L, 1E4016L, 1E4017L, 1E4018L, 1E4019L, 1E4020L, 1E4021L, 1E4022L, 1E4023L, 1E4024L, 1E4025L, 1E4026L, 1E4027L, 1E4028L, 1E4029L, 1E4030L, 1E4031L, 1E4032L, 1E4033L, 1E4034L, 1E4035L, 1E4036L, 1E4037L, 1E4038L, 1E4039L, 1E4040L, 1E4041L, 1E4042L, 1E4043L, 1E4044L, 1E4045L, 1E4046L, 1E4047L, 1E4048L, 1E4049L, 1E4050L, 1E4051L, 1E4052L, 1E4053L, 1E4054L, 1E4055L, 1E4056L, 1E4057L, 1E4058L, 1E4059L, 1E4060L, 1E4061L, 1E4062L, 1E4063L, 1E4064L, 1E4065L, 1E4066L, 1E4067L, 1E4068L, 1E4069L, 1E4070L, 1E4071L, 1E4072L, 1E4073L, 1E4074L, 1E4075L, 1E4076L, 1E4077L, 1E4078L, 1E4079L, 1E4080L, 1E4081L, 1E4082L, 1E4083L, 1E4084L, 1E4085L, 1E4086L, 1E4087L, 1E4088L, 1E4089L, 1E4090L, 1E4091L, 1E4092L, 1E4093L, 1E4094L, 1E4095L, 1E4096L, 1E4097L, 1E4098L, 1E4099L, 1E4100L, 1E4101L, 1E4102L, 1E4103L, 1E4104L, 1E4105L, 1E4106L, 1E4107L, 1E4108L, 1E4109L, 1E4110L, 1E4111L, 1E4112L, 1E4113L, 1E4114L, 1E4115L, 1E4116L, 1E4117L, 1E4118L, 1E4119L, 1E4120L, 1E4121L, 1E4122L, 1E4123L, 1E4124L, 1E4125L, 1E4126L, 1E4127L, 1E4128L, 1E4129L, 1E4130L, 1E4131L, 1E4132L, 1E4133L, 1E4134L, 1E4135L, 1E4136L, 1E4137L, 1E4138L, 1E4139L, 1E4140L, 1E4141L, 1E4142L, 1E4143L, 1E4144L, 1E4145L, 1E4146L, 1E4147L, 1E4148L, 1E4149L, 1E4150L, 1E4151L, 1E4152L, 1E4153L, 1E4154L, 1E4155L, 1E4156L, 1E4157L, 1E4158L, 1E4159L, 1E4160L, 1E4161L, 1E4162L, 1E4163L, 1E4164L, 1E4165L, 1E4166L, 1E4167L, 1E4168L, 1E4169L, 1E4170L, 1E4171L, 1E4172L, 1E4173L, 1E4174L, 1E4175L, 1E4176L, 1E4177L, 1E4178L, 1E4179L, 1E4180L, 1E4181L, 1E4182L, 1E4183L, 1E4184L, 1E4185L, 1E4186L, 1E4187L, 1E4188L, 1E4189L, 1E4190L, 1E4191L, 1E4192L, 1E4193L, 1E4194L, 1E4195L, 1E4196L, 1E4197L, 1E4198L, 1E4199L, 1E4200L, 1E4201L, 1E4202L, 1E4203L, 1E4204L, 1E4205L, 1E4206L, 1E4207L, 1E4208L, 1E4209L, 1E4210L, 1E4211L, 1E4212L, 1E4213L, 1E4214L, 1E4215L, 1E4216L, 1E4217L, 1E4218L, 1E4219L, 1E4220L, 1E4221L, 1E4222L, 1E4223L, 1E4224L, 1E4225L, 1E4226L, 1E4227L, 1E4228L, 1E4229L, 1E4230L, 1E4231L, 1E4232L, 1E4233L, 1E4234L, 1E4235L, 1E4236L, 1E4237L, 1E4238L, 1E4239L, 1E4240L, 1E4241L, 1E4242L, 1E4243L, 1E4244L, 1E4245L, 1E4246L, 1E4247L, 1E4248L, 1E4249L, 1E4250L, 1E4251L, 1E4252L, 1E4253L, 1E4254L, 1E4255L, 1E4256L, 1E4257L, 1E4258L, 1E4259L, 1E4260L, 1E4261L, 1E4262L, 1E4263L, 1E4264L, 1E4265L, 1E4266L, 1E4267L, 1E4268L, 1E4269L, 1E4270L, 1E4271L, 1E4272L, 1E4273L, 1E4274L, 1E4275L, 1E4276L, 1E4277L, 1E4278L, 1E4279L, 1E4280L, 1E4281L, 1E4282L, 1E4283L, 1E4284L, 1E4285L, 1E4286L, 1E4287L, 1E4288L, 1E4289L, 1E4290L, 1E4291L, 1E4292L, 1E4293L, 1E4294L, 1E4295L, 1E4296L, 1E4297L, 1E4298L, 1E4299L, 1E4300L, 1E4301L, 1E4302L, 1E4303L, 1E4304L, 1E4305L, 1E4306L, 1E4307L, 1E4308L, 1E4309L, 1E4310L, 1E4311L, 1E4312L, 1E4313L, 1E4314L, 1E4315L, 1E4316L, 1E4317L, 1E4318L, 1E4319L, 1E4320L, 1E4321L, 1E4322L, 1E4323L, 1E4324L, 1E4325L, 1E4326L, 1E4327L, 1E4328L, 1E4329L, 1E4330L, 1E4331L, 1E4332L, 1E4333L, 1E4334L, 1E4335L, 1E4336L, 1E4337L, 1E4338L, 1E4339L, 1E4340L, 1E4341L, 1E4342L, 1E4343L, 1E4344L, 1E4345L, 1E4346L, 1E4347L, 1E4348L, 1E4349L, 1E4350L, 1E4351L, 1E4352L, 1E4353L, 1E4354L, 1E4355L, 1E4356L, 1E4357L, 1E4358L, 1E4359L, 1E4360L, 1E4361L, 1E4362L, 1E4363L, 1E4364L, 1E4365L, 1E4366L, 1E4367L, 1E4368L, 1E4369L, 1E4370L, 1E4371L, 1E4372L, 1E4373L, 1E4374L, 1E4375L, 1E4376L, 1E4377L, 1E4378L, 1E4379L, 1E4380L, 1E4381L, 1E4382L, 1E4383L, 1E4384L, 1E4385L, 1E4386L, 1E4387L, 1E4388L, 1E4389L, 1E4390L, 1E4391L, 1E4392L, 1E4393L, 1E4394L, 1E4395L, 1E4396L, 1E4397L, 1E4398L, 1E4399L, 1E4400L, 1E4401L, 1E4402L, 1E4403L, 1E4404L, 1E4405L, 1E4406L, 1E4407L, 1E4408L, 1E4409L, 1E4410L, 1E4411L, 1E4412L, 1E4413L, 1E4414L, 1E4415L, 1E4416L, 1E4417L, 1E4418L, 1E4419L, 1E4420L, 1E4421L, 1E4422L, 1E4423L, 1E4424L, 1E4425L, 1E4426L, 1E4427L, 1E4428L, 1E4429L, 1E4430L, 1E4431L, 1E4432L, 1E4433L, 1E4434L, 1E4435L, 1E4436L, 1E4437L, 1E4438L, 1E4439L, 1E4440L, 1E4441L, 1E4442L, 1E4443L, 1E4444L, 1E4445L, 1E4446L, 1E4447L, 1E4448L, 1E4449L, 1E4450L, 1E4451L, 1E4452L, 1E4453L, 1E4454L, 1E4455L, 1E4456L, 1E4457L, 1E4458L, 1E4459L, 1E4460L, 1E4461L, 1E4462L, 1E4463L, 1E4464L, 1E4465L, 1E4466L, 1E4467L, 1E4468L, 1E4469L, 1E4470L, 1E4471L, 1E4472L, 1E4473L, 1E4474L, 1E4475L, 1E4476L, 1E4477L, 1E4478L, 1E4479L, 1E4480L, 1E4481L, 1E4482L, 1E4483L, 1E4484L, 1E4485L, 1E4486L, 1E4487L, 1E4488L, 1E4489L, 1E4490L, 1E4491L, 1E4492L, 1E4493L, 1E4494L, 1E4495L, 1E4496L, 1E4497L, 1E4498L, 1E4499L, 1E4500L, 1E4501L, 1E4502L, 1E4503L, 1E4504L, 1E4505L, 1E4506L, 1E4507L, 1E4508L, 1E4509L, 1E4510L, 1E4511L, 1E4512L, 1E4513L, 1E4514L, 1E4515L, 1E4516L, 1E4517L, 1E4518L, 1E4519L, 1E4520L, 1E4521L, 1E4522L, 1E4523L, 1E4524L, 1E4525L, 1E4526L, 1E4527L, 1E4528L, 1E4529L, 1E4530L, 1E4531L, 1E4532L, 1E4533L, 1E4534L, 1E4535L, 1E4536L, 1E4537L, 1E4538L, 1E4539L, 1E4540L, 1E4541L, 1E4542L, 1E4543L, 1E4544L, 1E4545L, 1E4546L, 1E4547L, 1E4548L, 1E4549L, 1E4550L, 1E4551L, 1E4552L, 1E4553L, 1E4554L, 1E4555L, 1E4556L, 1E4557L, 1E4558L, 1E4559L, 1E4560L, 1E4561L, 1E4562L, 1E4563L, 1E4564L, 1E4565L, 1E4566L, 1E4567L, 1E4568L, 1E4569L, 1E4570L, 1E4571L, 1E4572L, 1E4573L, 1E4574L, 1E4575L, 1E4576L, 1E4577L, 1E4578L, 1E4579L, 1E4580L, 1E4581L, 1E4582L, 1E4583L, 1E4584L, 1E4585L, 1E4586L, 1E4587L, 1E4588L, 1E4589L, 1E4590L, 1E4591L, 1E4592L, 1E4593L, 1E4594L, 1E4595L, 1E4596L, 1E4597L, 1E4598L, 1E4599L, 1E4600L, 1E4601L, 1E4602L, 1E4603L, 1E4604L, 1E4605L, 1E4606L, 1E4607L, 1E4608L, 1E4609L, 1E4610L, 1E4611L, 1E4612L, 1E4613L, 1E4614L, 1E4615L, 1E4616L, 1E4617L, 1E4618L, 1E4619L, 1E4620L, 1E4621L, 1E4622L, 1E4623L, 1E4624L, 1E4625L, 1E4626L, 1E4627L, 1E4628L, 1E4629L, 1E4630L, 1E4631L, 1E4632L, 1E4633L, 1E4634L, 1E4635L, 1E4636L, 1E4637L, 1E4638L, 1E4639L, 1E4640L, 1E4641L, 1E4642L, 1E4643L, 1E4644L, 1E4645L, 1E4646L, 1E4647L, 1E4648L, 1E4649L, 1E4650L, 1E4651L, 1E4652L, 1E4653L, 1E4654L, 1E4655L, 1E4656L, 1E4657L, 1E4658L, 1E4659L, 1E4660L, 1E4661L, 1E4662L, 1E4663L, 1E4664L, 1E4665L, 1E4666L, 1E4667L, 1E4668L, 1E4669L, 1E4670L, 1E4671L, 1E4672L, 1E4673L, 1E4674L, 1E4675L, 1E4676L, 1E4677L, 1E4678L, 1E4679L, 1E4680L, 1E4681L, 1E4682L, 1E4683L, 1E4684L, 1E4685L, 1E4686L, 1E4687L, 1E4688L, 1E4689L, 1E4690L, 1E4691L, 1E4692L, 1E4693L, 1E4694L, 1E4695L, 1E4696L, 1E4697L, 1E4698L, 1E4699L, 1E4700L, 1E4701L, 1E4702L, 1E4703L, 1E4704L, 1E4705L, 1E4706L, 1E4707L, 1E4708L, 1E4709L, 1E4710L, 1E4711L, 1E4712L, 1E4713L, 1E4714L, 1E4715L, 1E4716L, 1E4717L, 1E4718L, 1E4719L, 1E4720L, 1E4721L, 1E4722L, 1E4723L, 1E4724L, 1E4725L, 1E4726L, 1E4727L, 1E4728L, 1E4729L, 1E4730L, 1E4731L, 1E4732L, 1E4733L, 1E4734L, 1E4735L, 1E4736L, 1E4737L, 1E4738L, 1E4739L, 1E4740L, 1E4741L, 1E4742L, 1E4743L, 1E4744L, 1E4745L, 1E4746L, 1E4747L, 1E4748L, 1E4749L, 1E4750L, 1E4751L, 1E4752L, 1E4753L, 1E4754L, 1E4755L, 1E4756L, 1E4757L, 1E4758L, 1E4759L, 1E4760L, 1E4761L, 1E4762L, 1E4763L, 1E4764L, 1E4765L, 1E4766L, 1E4767L, 1E4768L, 1E4769L, 1E4770L, 1E4771L, 1E4772L, 1E4773L, 1E4774L, 1E4775L, 1E4776L, 1E4777L, 1E4778L, 1E4779L, 1E4780L, 1E4781L, 1E4782L, 1E4783L, 1E4784L, 1E4785L, 1E4786L, 1E4787L, 1E4788L, 1E4789L, 1E4790L, 1E4791L, 1E4792L, 1E4793L, 1E4794L, 1E4795L, 1E4796L, 1E4797L, 1E4798L, 1E4799L, 1E4800L, 1E4801L, 1E4802L, 1E4803L, 1E4804L, 1E4805L, 1E4806L, 1E4807L, 1E4808L, 1E4809L, 1E4810L, 1E4811L, 1E4812L, 1E4813L, 1E4814L, 1E4815L, 1E4816L, 1E4817L, 1E4818L, 1E4819L, 1E4820L, 1E4821L, 1E4822L, 1E4823L, 1E4824L, 1E4825L, 1E4826L, 1E4827L, 1E4828L, 1E4829L, 1E4830L, 1E4831L, 1E4832L, 1E4833L, 1E4834L, 1E4835L, 1E4836L, 1E4837L, 1E4838L, 1E4839L, 1E4840L, 1E4841L, 1E4842L, 1E4843L, 1E4844L, 1E4845L, 1E4846L, 1E4847L, 1E4848L, 1E4849L, 1E4850L, 1E4851L, 1E4852L, 1E4853L, 1E4854L, 1E4855L, 1E4856L, 1E4857L, 1E4858L, 1E4859L, 1E4860L, 1E4861L, 1E4862L, 1E4863L, 1E4864L, 1E4865L, 1E4866L, 1E4867L, 1E4868L, 1E4869L, 1E4870L, 1E4871L, 1E4872L, 1E4873L, 1E4874L, 1E4875L, 1E4876L, 1E4877L, 1E4878L, 1E4879L, 1E4880L, 1E4881L, 1E4882L, 1E4883L, 1E4884L, 1E4885L, 1E4886L, 1E4887L, 1E4888L, 1E4889L, 1E4890L, 1E4891L, 1E4892L, 1E4893L, 1E4894L, 1E4895L, 1E4896L, 1E4897L, 1E4898L, 1E4899L, 1E4900L, 1E4901L, 1E4902L, 1E4903L, 1E4904L, 1E4905L, 1E4906L, 1E4907L, 1E4908L, 1E4909L, 1E4910L, 1E4911L, 1E4912L, 1E4913L, 1E4914L, 1E4915L, 1E4916L, 1E4917L, 1E4918L, 1E4919L, 1E4920L, 1E4921L, 1E4922L, 1E4923L, 1E4924L, 1E4925L, 1E4926L, 1E4927L, 1E4928L, 1E4929L, 1E4930L, 1E4931L, 1E4932L, }; Sftab_t _Sftable = { { 1E1L, 1E2L, 1E4L, 1E8L, 1E16L, 1E32L }, { 1E-1L, 1E-2L, 1E-4L, 1E-8L, 1E-16L, 1E-32L }, { '0','0', '0','1', '0','2', '0','3', '0','4', '0','5', '0','6', '0','7', '0','8', '0','9', '1','0', '1','1', '1','2', '1','3', '1','4', '1','5', '1','6', '1','7', '1','8', '1','9', '2','0', '2','1', '2','2', '2','3', '2','4', '2','5', '2','6', '2','7', '2','8', '2','9', '3','0', '3','1', '3','2', '3','3', '3','4', '3','5', '3','6', '3','7', '3','8', '3','9', '4','0', '4','1', '4','2', '4','3', '4','4', '4','5', '4','6', '4','7', '4','8', '4','9', '5','0', '5','1', '5','2', '5','3', '5','4', '5','5', '5','6', '5','7', '5','8', '5','9', '6','0', '6','1', '6','2', '6','3', '6','4', '6','5', '6','6', '6','7', '6','8', '6','9', '7','0', '7','1', '7','2', '7','3', '7','4', '7','5', '7','6', '7','7', '7','8', '7','9', '8','0', '8','1', '8','2', '8','3', '8','4', '8','5', '8','6', '8','7', '8','8', '8','9', '9','0', '9','1', '9','2', '9','3', '9','4', '9','5', '9','6', '9','7', '9','8', '9','9', }, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_", sfcvinit, 0, sffmtpos, sffmtint, (float*)&sf_flt_pow10[0], (double*)&sf_dbl_pow10[0], (_ast_fltmax_t*)&sf_ldbl_pow10[0], }; #endif /* : : generated from contrib/ast/src/lib/libast/features/sfio by iffe version 2012-07-17 : : */ #ifndef _def_sfio_ast #define _def_sfio_ast 1 #define _sys_types 1 /* #include ok */ #define _hdr_float 1 /* #include ok */ #define _hdr_floatingpoint 1 /* #include ok */ #define _hdr_math 1 /* #include ok */ #define _hdr_values 1 /* #include ok */ #define _sys_filio 1 /* #include ok */ #define _sys_ioctl 1 /* #include ok */ #define _key_signed 1 /* signed is a reserved keyword */ #define _ptr_bits 64 #define _more_void_int 1 /* voidptr is larger than int */ #define _more_long_int 1 /* long is larger than int */ #define _lib_cvt 1 /* native floating point conversions ok */ #define _xopen_stdio 1 /* Stdio fseek/fflush are X/Open-compliant */ #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/sig.sh by iffe version 2012-07-17 : : */ #ifndef _def_sig_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_sig_ast 1 #define _sys_types 1 /* #include ok */ #define sig_info _sig_info_ #if defined(__STDPP__directive) && defined(__STDPP__hide) __STDPP__directive pragma pp:hide kill killpg #else #define kill ______kill #define killpg ______killpg #endif #include #if defined(__STDPP__directive) && defined(__STDPP__hide) __STDPP__directive pragma pp:nohide kill killpg #else #undef kill #undef killpg #endif #ifndef sigmask #define sigmask(s) (1<<((s)-1)) #endif typedef void (*Sig_handler_t) __PROTO__((int)); #define Handler_t Sig_handler_t #define SIG_REG_PENDING (-1) #define SIG_REG_POP 0 #define SIG_REG_EXEC 00001 #define SIG_REG_PROC 00002 #define SIG_REG_TERM 00004 #define SIG_REG_ALL 00777 #define SIG_REG_SET 01000 typedef struct { char** name; char** text; int sigmax; } Sig_info_t; extern __MANGLE__ int kill __PROTO__((pid_t, int)); extern __MANGLE__ int killpg __PROTO__((pid_t, int)); #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif #if !_BLD_ast && defined(__IMPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __IMPORT__ #endif extern __MANGLE__ Sig_info_t sig_info; #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #if _lib_sigflag && _npt_sigflag extern __MANGLE__ int sigflag __PROTO__((int, int, int)); #endif #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif #if !_lib_sigflag extern __MANGLE__ int sigflag __PROTO__((int, int, int)); #endif extern __MANGLE__ int sigcritical __PROTO__((int)); extern __MANGLE__ int sigunblock __PROTO__((int)); #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #endif /* : : generated from contrib/ast/src/lib/libast/features/siglist by iffe version 2012-07-17 : : */ #ifndef _def_siglist_ast #define _def_siglist_ast 1 #define _sys_types 1 /* #include ok */ #define _hdr_string 1 /* #include ok */ #define _hdr_signal 1 /* #include ok */ #define _lib_strsignal 1 /* strsignal() in default lib(s) */ #if defined(SIGHUP) && !defined(HAD_SIGHUP) 0,"HUP",SIGHUP, #endif #if defined(SIGINT) && !defined(HAD_SIGINT) 0,"INT",SIGINT, #endif #if defined(SIGQUIT) && !defined(HAD_SIGQUIT) 0,"QUIT",SIGQUIT, #endif #if defined(SIGILL) && !defined(HAD_SIGILL) 0,"ILL",SIGILL, #endif #if defined(SIGTRAP) && !defined(HAD_SIGTRAP) 0,"TRAP",SIGTRAP, #endif #if defined(SIGIOT) && !defined(HAD_SIGIOT) 0,"IOT",SIGIOT, #endif #if defined(SIGEMT) && !defined(HAD_SIGEMT) 0,"EMT",SIGEMT, #endif #if defined(SIGFPE) && !defined(HAD_SIGFPE) 0,"FPE",SIGFPE, #endif #if defined(SIGKILL) && !defined(HAD_SIGKILL) 0,"KILL",SIGKILL, #endif #if defined(SIGBUS) && !defined(HAD_SIGBUS) 0,"BUS",SIGBUS, #endif #if defined(SIGSEGV) && !defined(HAD_SIGSEGV) 0,"SEGV",SIGSEGV, #endif #if defined(SIGSYS) && !defined(HAD_SIGSYS) 0,"SYS",SIGSYS, #endif #if defined(SIGPIPE) && !defined(HAD_SIGPIPE) 0,"PIPE",SIGPIPE, #endif #if defined(SIGALRM) && !defined(HAD_SIGALRM) 0,"ALRM",SIGALRM, #endif #if defined(SIGTERM) && !defined(HAD_SIGTERM) 0,"TERM",SIGTERM, #endif #if defined(SIGUSR1) && !defined(HAD_SIGUSR1) 0,"USR1",SIGUSR1, #endif #if defined(SIGUSR2) && !defined(HAD_SIGUSR2) 0,"USR2",SIGUSR2, #endif #if defined(SIGCHLD) && !defined(HAD_SIGCHLD) 0,"CHLD",SIGCHLD, #endif #if defined(SIGPWR) && !defined(HAD_SIGPWR) 0,"PWR",SIGPWR, #endif #if defined(SIGWINCH) && !defined(HAD_SIGWINCH) 0,"WINCH",SIGWINCH, #endif #if defined(SIGURG) && !defined(HAD_SIGURG) 0,"URG",SIGURG, #endif #if defined(SIGPOLL) && !defined(HAD_SIGPOLL) 0,"POLL",SIGPOLL, #endif #if defined(SIGSTOP) && !defined(HAD_SIGSTOP) 0,"STOP",SIGSTOP, #endif #if defined(SIGTSTP) && !defined(HAD_SIGTSTP) 0,"TSTP",SIGTSTP, #endif #if defined(SIGCONT) && !defined(HAD_SIGCONT) 0,"CONT",SIGCONT, #endif #if defined(SIGTTIN) && !defined(HAD_SIGTTIN) 0,"TTIN",SIGTTIN, #endif #if defined(SIGTTOU) && !defined(HAD_SIGTTOU) 0,"TTOU",SIGTTOU, #endif #if defined(SIGVTALRM) && !defined(HAD_SIGVTALRM) 0,"VTALRM",SIGVTALRM, #endif #if defined(SIGPROF) && !defined(HAD_SIGPROF) 0,"PROF",SIGPROF, #endif #if defined(SIGXCPU) && !defined(HAD_SIGXCPU) 0,"XCPU",SIGXCPU, #endif #if defined(SIGXFSZ) && !defined(HAD_SIGXFSZ) 0,"XFSZ",SIGXFSZ, #endif #if defined(SIGWAITING) && !defined(HAD_SIGWAITING) 0,"WAITING",SIGWAITING, #endif #if defined(SIGLWP) && !defined(HAD_SIGLWP) 0,"LWP",SIGLWP, #endif #if defined(SIGFREEZE) && !defined(HAD_SIGFREEZE) 0,"FREEZE",SIGFREEZE, #endif #if defined(SIGTHAW) && !defined(HAD_SIGTHAW) 0,"THAW",SIGTHAW, #endif #if defined(SIGCANCEL) && !defined(HAD_SIGCANCEL) 0,"CANCEL",SIGCANCEL, #endif #if defined(SIGLOST) && !defined(HAD_SIGLOST) 0,"LOST",SIGLOST, #endif #if defined(SIGXRES) && !defined(HAD_SIGXRES) 0,"XRES",SIGXRES, #endif #if defined(SIGJVM1) && !defined(HAD_SIGJVM1) 0,"JVM1",SIGJVM1, #endif #if defined(SIGJVM2) && !defined(HAD_SIGJVM2) 0,"JVM2",SIGJVM2, #endif #if defined(SIGINFO) && !defined(HAD_SIGINFO) 0,"INFO",SIGINFO, #endif #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/signal.c by iffe version 2012-07-17 : : */ #ifndef _def_signal_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_signal_ast 1 #define _sys_types 1 /* #include ok */ #define SIG_MAX 73 static const char* const sig_name[] = { "0", "HUP", "INT", "QUIT", "ILL", "TRAP", "IOT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "USR1", "USR2", "CHLD", "PWR", "WINCH", "URG", "IO", "STOP", "TSTP", "CONT", "TTIN", "TTOU", "VTALRM", "PROF", "XCPU", "XFSZ", "WAITING", "LWP", "FREEZE", "THAW", "CANCEL", "LOST", "XRES", "JVM1", "JVM2", "INFO", "RTMIN", "RTMIN+1", "RTMIN+2", "RTMIN+3", "RTMIN+4", "RTMIN+5", "RTMIN+6", "RTMIN+7", "RTMIN+8", "RTMIN+9", "RTMIN+10", "RTMIN+11", "RTMIN+12", "RTMIN+13", "RTMIN+14", "RTMIN+15", "RTMAX-15", "RTMAX-14", "RTMAX-13", "RTMAX-12", "RTMAX-11", "RTMAX-10", "RTMAX-9", "RTMAX-8", "RTMAX-7", "RTMAX-6", "RTMAX-5", "RTMAX-4", "RTMAX-3", "RTMAX-2", "RTMAX-1", "RTMAX", 0 }; static const char* const sig_text[] = { "Signal 0", "Hangup", "Interrupt", "Quit", "Illegal instruction", "Trace trap", "IOT trap", "EMT trap", "Floating exception", "Killed", "Bus error", "Memory fault", "Bad system call", "Broken pipe", "Alarm call", "Terminated", "User signal 1", "User signal 2", "Child status change", "Power fail", "Window change", "Urgent IO", "IO possible", "Stopped (signal)", "Stopped", "Stopped process continued", "Stopped (tty input)", "Stopped (tty output)", "Virtual timer alarm", "Profile timer alarm", "CPU time limit", "File size limit", "All threads blocked", "Thread event", "CPR freeze", "CPR thaw", "Thread Cancellation", "Resources lost", "Resource Control Exceeded", "Reserved for JVM 1", "Reserved for JVM 2", "Information Request", "Realtime priority 0 (lo)", "Realtime priority 1", "Realtime priority 2", "Realtime priority 3", "Realtime priority 4", "Realtime priority 5", "Realtime priority 6", "Realtime priority 7", "Realtime priority 8", "Realtime priority 9", "Realtime priority 10", "Realtime priority 11", "Realtime priority 12", "Realtime priority 13", "Realtime priority 14", "Realtime priority 15", "Realtime priority 16", "Realtime priority 17", "Realtime priority 18", "Realtime priority 19", "Realtime priority 20", "Realtime priority 21", "Realtime priority 22", "Realtime priority 23", "Realtime priority 24", "Realtime priority 25", "Realtime priority 26", "Realtime priority 27", "Realtime priority 28", "Realtime priority 29", "Realtime priority 30", "Realtime priority 31 (hi)", 0 }; #endif /* : : generated from contrib/ast/src/lib/libast/features/sizeof by iffe version 2012-07-17 : : */ #ifndef _def_sizeof_ast #define _def_sizeof_ast 1 #define _sys_types 1 /* #include ok */ #define _ast_sizeof_char 1 #define _ast_sizeof_short 2 #define _ast_sizeof_int 4 #define _ast_sizeof_long 8 #define _ast_sizeof_intmax_t 8 #endif /* : : generated from contrib/ast/src/lib/libast/features/standards by iffe version 2012-07-17 : : */ #ifndef _def_standards_ast #define _def_standards_ast 1 #define _sys_types 1 /* #include ok */ /* _ALL_SOURCE & _POSIX_SOURCE & _POSIX_C_SOURCE & _XOPEN_SOURCE & __EXTENSIONS__ works */ #ifndef _ALL_SOURCE #define _ALL_SOURCE 1 #endif #ifndef _POSIX_SOURCE #define _POSIX_SOURCE 1 #endif #ifndef _POSIX_C_SOURCE #define _POSIX_C_SOURCE 21000101L #endif #ifndef _XOPEN_SOURCE #define _XOPEN_SOURCE 9900 #endif #ifndef _GNU_SOURCE #define _GNU_SOURCE 1 #endif #ifndef __EXTENSIONS__ #define __EXTENSIONS__ 1 #endif #define _LIB_m 1 /* -lm is a library */ /* _ISOC99_SOURCE plays nice */ #ifndef _ISOC99_SOURCE #define _ISOC99_SOURCE 1 #endif /* * this is a nasty game we all play to honor standards symbol visibility * it would help if all implementations had * _KITCHEN_SINK_SOURCE * that enabled all symbols from the latest implemented standards * that's probably the most useful but least portable request */ #if __MACH__ #undef _POSIX_SOURCE #endif #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/stdio by iffe version 2012-07-17 : : */ #ifndef _SFSTDIO_H #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _SFSTDIO_H 1 #define _sys_types 1 /* #include ok */ #define __FILE_typedef 1 #define _FILE_DEFINED 1 #define _FILE_defined 1 #define _FILEDEFED 1 #ifndef __FILE_TAG #define __FILE_TAG _sfio_s #endif #undef FILE #undef _FILE #undef fpos_t #undef fpos64_t typedef struct _sfio_s _sfio_FILE; #define FILE _sfio_FILE #define _FILE FILE #if !defined(__FILE) && !__CYGWIN__ #undef __FILE #define __FILE FILE #endif #if defined(_AST_H) || defined(_SFIO_H) #define BUFSIZ SF_BUFSIZE #else #ifndef BUFSIZ #define BUFSIZ 8192 #endif #ifndef EOF #define EOF (-1) #endif #ifndef NULL #define NULL 0 #endif #ifndef SEEK_SET #define SEEK_SET 0 #define SEEK_CUR 1 #define SEEK_END 2 #endif #include #include #if __cplusplus #define _sf_(f) (f) #else #define _sf_(f) ((struct _sfio_s*)(f)) #endif #define _SF_EOF 0000200 #define _SF_ERROR 0000400 #endif #ifdef _NO_LARGEFILE64_SOURCE #undef _LARGEFILE64_SOURCE #endif #ifdef _LARGEFILE64_SOURCE #undef off_t #endif #define fpos_t _ast_fpos_t #if _typ_int64_t #define fpos64_t _ast_fpos_t #endif typedef struct _ast_fpos_s { intmax_t _sf_offset; unsigned char _sf_state[64 - sizeof(intmax_t)]; } _ast_fpos_t; #define _base _data #define _ptr _next #define _IOFBF 0 #define _IONBF 1 #define _IOLBF 2 #if defined(__cplusplus) && defined(__THROW) && !defined(_UWIN) #undef FILE #define FILE FILE typedef struct _sfio_s FILE; #undef strerror extern __MANGLE__ char* strerror(int) __THROW; extern __MANGLE__ int _doprnt __PROTO__((const char*, va_list, FILE*)); extern __MANGLE__ int _doscan __PROTO__((FILE*, const char*, va_list)); extern __MANGLE__ int asprintf __PROTO__((char**, const char*, ...)); extern __MANGLE__ int clearerr __PROTO__((FILE*)); extern __MANGLE__ int fclose __PROTO__((FILE*)); extern __MANGLE__ FILE* fdopen __PROTO__((int, const char*)); extern __MANGLE__ int feof __PROTO__((FILE*)); extern __MANGLE__ int ferror __PROTO__((FILE*)); extern __MANGLE__ int fflush __PROTO__((FILE*)); extern __MANGLE__ int fgetc __PROTO__((FILE*)); extern __MANGLE__ int fgetpos __PROTO__((FILE*, fpos_t*)); extern __MANGLE__ char* fgets __PROTO__((char*, int, FILE*)); extern __MANGLE__ int fileno __PROTO__((FILE*)); extern __MANGLE__ FILE* fopen __PROTO__((const char*, const char*)); extern __MANGLE__ int fprintf __PROTO__((FILE*, const char*, ...)); extern __MANGLE__ int fpurge __PROTO__((FILE*)); extern __MANGLE__ int fputc __PROTO__((int, FILE*)); extern __MANGLE__ int fputs __PROTO__((const char*, FILE*)); extern __MANGLE__ size_t fread __PROTO__((__V_*, size_t, size_t, FILE*)); extern __MANGLE__ FILE* freopen __PROTO__((const char*, const char*, FILE*)); extern __MANGLE__ int fscanf __PROTO__((FILE*, const char*, ...)); extern __MANGLE__ int fseek __PROTO__((FILE*, long, int)); extern __MANGLE__ int fseeko __PROTO__((FILE*, off_t, int)); extern __MANGLE__ int fsetpos __PROTO__((FILE*, const fpos_t*)); extern __MANGLE__ long ftell __PROTO__((FILE*)); extern __MANGLE__ off_t ftello __PROTO__((FILE*)); extern __MANGLE__ size_t fwrite __PROTO__((const __V_*, size_t, size_t, FILE*)); extern __MANGLE__ int getc __PROTO__((FILE*)); extern __MANGLE__ int getchar __PROTO__((void)); extern __MANGLE__ char* gets __PROTO__((char*)); extern __MANGLE__ int getw __PROTO__((FILE*)); extern __MANGLE__ int pclose __PROTO__((FILE*)); extern __MANGLE__ FILE* popen __PROTO__((const char*, const char*)); extern __MANGLE__ int printf __PROTO__((const char*, ...)); extern __MANGLE__ int putc __PROTO__((int, FILE*)); extern __MANGLE__ int putchar __PROTO__((int)); extern __MANGLE__ int puts __PROTO__((const char*)); extern __MANGLE__ int putw __PROTO__((int, FILE*)); extern __MANGLE__ void rewind __PROTO__((FILE*)); extern __MANGLE__ int scanf __PROTO__((const char*, ...)); extern __MANGLE__ void setbuf __PROTO__((FILE*, char*)); extern __MANGLE__ int setbuffer __PROTO__((FILE*, char*, int)); extern __MANGLE__ int setlinebuf __PROTO__((FILE*)); extern __MANGLE__ int setvbuf __PROTO__((FILE*, char*, int, size_t)); extern __MANGLE__ int snprintf __PROTO__((char*, int, const char*, ...)); extern __MANGLE__ int sprintf __PROTO__((char*, const char*, ...)); extern __MANGLE__ int sscanf __PROTO__((const char*, const char*, ...)); extern __MANGLE__ FILE* tmpfile __PROTO__((void)); extern __MANGLE__ int ungetc __PROTO__((int, FILE*)); extern __MANGLE__ int vasprintf __PROTO__((char**, const char*, va_list)); extern __MANGLE__ int vfprintf __PROTO__((FILE*, const char*, va_list)); extern __MANGLE__ int vfscanf __PROTO__((FILE*, const char*, va_list)); extern __MANGLE__ int vprintf __PROTO__((const char*, va_list)); extern __MANGLE__ int vscanf __PROTO__((const char*, va_list)); extern __MANGLE__ int vsnprintf __PROTO__((char*, int, const char*, va_list)); extern __MANGLE__ int vsprintf __PROTO__((char*, const char*, va_list)); extern __MANGLE__ int vsscanf __PROTO__((const char*, const char*, va_list)); #if _typ_int64_t extern __MANGLE__ int fgetpos64 __PROTO__((FILE*, fpos64_t*)); extern __MANGLE__ int fsetpos64 __PROTO__((FILE*, const fpos64_t*)); extern __MANGLE__ int fseek64 __PROTO__((FILE*, int64_t, int)); extern __MANGLE__ int fseeko64 __PROTO__((FILE*, int64_t, int)); extern __MANGLE__ int64_t ftell64 __PROTO__((FILE*)); extern __MANGLE__ int64_t ftello64 __PROTO__((FILE*)); #endif extern __MANGLE__ void clearerr_unlocked __PROTO__((FILE*)); extern __MANGLE__ int feof_unlocked __PROTO__((FILE*)); extern __MANGLE__ int ferror_unlocked __PROTO__((FILE*)); extern __MANGLE__ int fflush_unlocked __PROTO__((FILE*)); extern __MANGLE__ int fgetc_unlocked __PROTO__((FILE*)); extern __MANGLE__ char* fgets_unlocked __PROTO__((char*, int, FILE*)); extern __MANGLE__ int fileno_unlocked __PROTO__((FILE*)); extern __MANGLE__ int fputc_unlocked __PROTO__((int, FILE*)); extern __MANGLE__ int fputs_unlocked __PROTO__((char*, FILE*)); extern __MANGLE__ size_t fread_unlocked __PROTO__((__V_*, size_t, size_t, FILE*)); extern __MANGLE__ size_t fwrite_unlocked __PROTO__((__V_*, size_t, size_t, FILE*)); extern __MANGLE__ int getc_unlocked __PROTO__((FILE*)); extern __MANGLE__ int getchar_unlocked __PROTO__((void)); extern __MANGLE__ int putc_unlocked __PROTO__((int, FILE*)); extern __MANGLE__ int putchar_unlocked __PROTO__((int)); extern __MANGLE__ void flockfile __PROTO__((FILE*)); extern __MANGLE__ int ftrylockfile __PROTO__((FILE*)); extern __MANGLE__ void funlockfile __PROTO__((FILE*)); #ifdef _USE_GNU extern __MANGLE__ int fcloseall __PROTO__((void)); extern __MANGLE__ FILE* fmemopen __PROTO__((__V_*, size_t, const char*)); extern __MANGLE__ ssize_t __getdelim __PROTO__((char**, size_t*, int, FILE*)); extern __MANGLE__ ssize_t getdelim __PROTO__((char**, size_t*, int, FILE*)); extern __MANGLE__ ssize_t getline __PROTO__((char**, size_t*, FILE*)); #endif #endif #ifndef FILENAME_MAX #define FILENAME_MAX 1024 #endif #ifndef FOPEN_MAX #define FOPEN_MAX 20 #endif #ifndef TMP_MAX #define TMP_MAX 17576 #endif #define _doprnt _ast_doprnt #define _doscan _ast_doscan #define asprintf _ast_asprintf #define clearerr _ast_clearerr #define fclose _ast_fclose #define fdopen _ast_fdopen #define fflush _ast_fflush #define fgetc _ast_fgetc #define fgetpos _ast_fgetpos #define fgetpos64 _ast_fgetpos64 #define fgets _ast_fgets #define fopen _ast_fopen #define fprintf _ast_fprintf #define fpurge _ast_fpurge #define fputs _ast_fputs #define fread _ast_fread #define freopen _ast_freopen #define fscanf _ast_fscanf #define fseek _ast_fseek #define fseek64 _ast_fseek64 #define fseeko _ast_fseeko #define fseeko64 _ast_fseeko64 #define fsetpos _ast_fsetpos #define fsetpos64 _ast_fsetpos64 #define ftell _ast_ftell #define ftell64 _ast_ftell64 #define ftello _ast_ftello #define ftello64 _ast_ftello64 #define fwrite _ast_fwrite #define gets _ast_gets #define getw _ast_getw #define pclose _ast_pclose #define popen _ast_popen #define printf _ast_printf #define puts _ast_puts #define putw _ast_putw #define rewind _ast_rewind #define scanf _ast_scanf #define setbuf _ast_setbuf #undef setbuffer #define setbuffer _ast_setbuffer #define setlinebuf _ast_setlinebuf #define setvbuf _ast_setvbuf #define snprintf _ast_snprintf #define sprintf _ast_sprintf #define sscanf _ast_sscanf #define tmpfile _ast_tmpfile #define ungetc _ast_ungetc #define vasprintf _ast_vasprintf #define vfprintf _ast_vfprintf #define vfscanf _ast_vfscanf #define vprintf _ast_vprintf #define vscanf _ast_vscanf #define vsnprintf _ast_vsnprintf #define vsprintf _ast_vsprintf #define vsscanf _ast_vsscanf #define fcloseall _ast_fcloseall #define _filbuf _ast__filbuf #define fmemopen _ast_fmemopen #define __getdelim _ast___getdelim #define getdelim _ast_getdelim #define getline _ast_getline #define clearerr_unlocked _ast_clearerr_unlocked #define feof_unlocked _ast_feof_unlocked #define ferror_unlocked _ast_ferror_unlocked #define fflush_unlocked _ast_fflush_unlocked #define fgetc_unlocked _ast_fgetc_unlocked #define fgets_unlocked _ast_fgets_unlocked #define fileno_unlocked _ast_fileno_unlocked #define fputc_unlocked _ast_fputc_unlocked #define fputs_unlocked _ast_fputs_unlocked #define fread_unlocked _ast_fread_unlocked #define fwrite_unlocked _ast_fwrite_unlocked #define getc_unlocked _ast_getc_unlocked #define getchar_unlocked _ast_getchar_unlocked #define putc_unlocked _ast_putc_unlocked #define putchar_unlocked _ast_putchar_unlocked #define flockfile _ast_flockfile #define ftrylockfile _ast_ftrylockfile #define funlockfile _ast_funlockfile #if defined(__STDPP__directive) && defined(__STDPP__initial) __STDPP__directive pragma pp:initial #endif #ifndef P_tmpdir #define P_tmpdir "/var/tmp/" /*NOCATLITERAL*/ #endif #ifndef L_ctermid #define L_ctermid 9 #endif #ifndef L_tmpnam #define L_tmpnam 25 #endif #if defined(__STDPP__directive) && defined(__STDPP__initial) __STDPP__directive pragma pp:noinitial #endif #if defined(__cplusplus) && defined(__THROW) extern __MANGLE__ char* ctermid(char*) __THROW; #else extern __MANGLE__ char* ctermid __PROTO__((char*)); #endif extern __MANGLE__ char* tmpnam __PROTO__((char*)); extern __MANGLE__ char* tempnam __PROTO__((const char*, const char*)); extern __MANGLE__ void perror __PROTO__((const char*)); #ifndef _AST_STD_H #ifndef remove extern __MANGLE__ int remove __PROTO__((const char*)); #endif #ifndef rename extern __MANGLE__ int rename __PROTO__((const char*, const char*)); #endif #endif #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif extern __MANGLE__ int _doprnt __PROTO__((const char*, va_list, FILE*)); extern __MANGLE__ int _doscan __PROTO__((FILE*, const char*, va_list)); extern __MANGLE__ int asprintf __PROTO__((char**, const char*, ...)); extern __MANGLE__ int clearerr __PROTO__((FILE*)); extern __MANGLE__ int fclose __PROTO__((FILE*)); extern __MANGLE__ FILE* fdopen __PROTO__((int, const char*)); extern __MANGLE__ int feof __PROTO__((FILE*)); extern __MANGLE__ int ferror __PROTO__((FILE*)); extern __MANGLE__ int fflush __PROTO__((FILE*)); extern __MANGLE__ int fgetc __PROTO__((FILE*)); extern __MANGLE__ int fgetpos __PROTO__((FILE*, fpos_t*)); extern __MANGLE__ char* fgets __PROTO__((char*, int, FILE*)); extern __MANGLE__ int fileno __PROTO__((FILE*)); extern __MANGLE__ FILE* fopen __PROTO__((const char*, const char*)); extern __MANGLE__ int fprintf __PROTO__((FILE*, const char*, ...)); extern __MANGLE__ int fpurge __PROTO__((FILE*)); extern __MANGLE__ int fputc __PROTO__((int, FILE*)); extern __MANGLE__ int fputs __PROTO__((const char*, FILE*)); extern __MANGLE__ size_t fread __PROTO__((__V_*, size_t, size_t, FILE*)); extern __MANGLE__ FILE* freopen __PROTO__((const char*, const char*, FILE*)); extern __MANGLE__ int fscanf __PROTO__((FILE*, const char*, ...)); extern __MANGLE__ int fseek __PROTO__((FILE*, long, int)); extern __MANGLE__ int fseeko __PROTO__((FILE*, off_t, int)); extern __MANGLE__ int fsetpos __PROTO__((FILE*, const fpos_t*)); extern __MANGLE__ long ftell __PROTO__((FILE*)); extern __MANGLE__ off_t ftello __PROTO__((FILE*)); extern __MANGLE__ size_t fwrite __PROTO__((const __V_*, size_t, size_t, FILE*)); extern __MANGLE__ int getc __PROTO__((FILE*)); extern __MANGLE__ int getchar __PROTO__((void)); extern __MANGLE__ char* gets __PROTO__((char*)); extern __MANGLE__ int getw __PROTO__((FILE*)); extern __MANGLE__ int pclose __PROTO__((FILE*)); extern __MANGLE__ FILE* popen __PROTO__((const char*, const char*)); extern __MANGLE__ int printf __PROTO__((const char*, ...)); extern __MANGLE__ int putc __PROTO__((int, FILE*)); extern __MANGLE__ int putchar __PROTO__((int)); extern __MANGLE__ int puts __PROTO__((const char*)); extern __MANGLE__ int putw __PROTO__((int, FILE*)); extern __MANGLE__ void rewind __PROTO__((FILE*)); extern __MANGLE__ int scanf __PROTO__((const char*, ...)); extern __MANGLE__ void setbuf __PROTO__((FILE*, char*)); extern __MANGLE__ int setbuffer __PROTO__((FILE*, char*, int)); extern __MANGLE__ int setlinebuf __PROTO__((FILE*)); extern __MANGLE__ int setvbuf __PROTO__((FILE*, char*, int, size_t)); extern __MANGLE__ int snprintf __PROTO__((char*, int, const char*, ...)); extern __MANGLE__ int sprintf __PROTO__((char*, const char*, ...)); extern __MANGLE__ int sscanf __PROTO__((const char*, const char*, ...)); extern __MANGLE__ FILE* tmpfile __PROTO__((void)); extern __MANGLE__ int ungetc __PROTO__((int, FILE*)); extern __MANGLE__ int vasprintf __PROTO__((char**, const char*, va_list)); extern __MANGLE__ int vfprintf __PROTO__((FILE*, const char*, va_list)); extern __MANGLE__ int vfscanf __PROTO__((FILE*, const char*, va_list)); extern __MANGLE__ int vprintf __PROTO__((const char*, va_list)); extern __MANGLE__ int vscanf __PROTO__((const char*, va_list)); extern __MANGLE__ int vsnprintf __PROTO__((char*, int, const char*, va_list)); extern __MANGLE__ int vsprintf __PROTO__((char*, const char*, va_list)); extern __MANGLE__ int vsscanf __PROTO__((const char*, const char*, va_list)); #if _typ_int64_t extern __MANGLE__ int fgetpos64 __PROTO__((FILE*, fpos64_t*)); extern __MANGLE__ int fsetpos64 __PROTO__((FILE*, const fpos64_t*)); extern __MANGLE__ int fseek64 __PROTO__((FILE*, int64_t, int)); extern __MANGLE__ int fseeko64 __PROTO__((FILE*, int64_t, int)); extern __MANGLE__ int64_t ftell64 __PROTO__((FILE*)); extern __MANGLE__ int64_t ftello64 __PROTO__((FILE*)); #ifdef _LARGEFILE64_SOURCE #undef fpos_t #undef off_t #undef fgetpos #undef fsetpos #undef fseek #undef fseeko #undef ftell #undef ftello #define fpos_t fpos64_t #if _typ_off64_t #define off_t off64_t #else #define off_t int64_t #endif #define fgetpos fgetpos64 #define fsetpos fsetpos64 #define fseek fseek64 #define fseeko fseeko64 #define ftell ftell64 #define ftello ftello64 #endif #endif extern __MANGLE__ void clearerr_unlocked __PROTO__((FILE*)); extern __MANGLE__ int feof_unlocked __PROTO__((FILE*)); extern __MANGLE__ int ferror_unlocked __PROTO__((FILE*)); extern __MANGLE__ int fflush_unlocked __PROTO__((FILE*)); extern __MANGLE__ int fgetc_unlocked __PROTO__((FILE*)); extern __MANGLE__ char* fgets_unlocked __PROTO__((char*, int, FILE*)); extern __MANGLE__ int fileno_unlocked __PROTO__((FILE*)); extern __MANGLE__ int fputc_unlocked __PROTO__((int, FILE*)); extern __MANGLE__ int fputs_unlocked __PROTO__((char*, FILE*)); extern __MANGLE__ size_t fread_unlocked __PROTO__((__V_*, size_t, size_t, FILE*)); extern __MANGLE__ size_t fwrite_unlocked __PROTO__((__V_*, size_t, size_t, FILE*)); extern __MANGLE__ int getc_unlocked __PROTO__((FILE*)); extern __MANGLE__ int getchar_unlocked __PROTO__((void)); extern __MANGLE__ int putc_unlocked __PROTO__((int, FILE*)); extern __MANGLE__ int putchar_unlocked __PROTO__((int)); #ifdef _USE_GNU extern __MANGLE__ int fcloseall __PROTO__((void)); extern __MANGLE__ FILE* fmemopen __PROTO__((__V_*, size_t, const char*)); extern __MANGLE__ ssize_t __getdelim __PROTO__((char**, size_t*, int, FILE*)); extern __MANGLE__ ssize_t getdelim __PROTO__((char**, size_t*, int, FILE*)); extern __MANGLE__ ssize_t getline __PROTO__((char**, size_t*, FILE*)); #endif #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #if _BLD_DLL && _DLL_INDIRECT_DATA #define stdin ((FILE*)_ast_dll->_ast_stdin) #define stdout ((FILE*)_ast_dll->_ast_stdout) #define stderr ((FILE*)_ast_dll->_ast_stderr) #else #define stdin (&_Sfstdin) #define stdout (&_Sfstdout) #define stderr (&_Sfstderr) #endif #if defined(_AST_H) || defined(_SFIO_H) #define feof(f) sfeof(f) #define ferror(f) sferror(f) #define fileno(f) sffileno(f) #define fputc(c,f) sfputc(f,c) #define getc(f) sfgetc(f) #define getchar() sfgetc(sfstdin) #define putc(c,f) sfputc(f,c) #define putchar(c) sfputc(sfstdout,c) #else #if !_UWIN #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif #if !_BLD_ast && defined(__IMPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __IMPORT__ #endif #endif extern __MANGLE__ FILE _Sfstdin; extern __MANGLE__ FILE _Sfstdout; extern __MANGLE__ FILE _Sfstderr; #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #define feof(f) (_sf_(f)->_flags&_SF_EOF) #define ferror(f) (_sf_(f)->_flags&_SF_ERROR) #define fileno(f) (_sf_(f)->_file) #define fputc(c,f) (_sf_(f)->_next>=_sf_(f)->_endw?_sfflsbuf(_sf_(f),(int)((unsigned char)(c))):(int)(*_sf_(f)->_next++=(unsigned char)(c))) #define getc(f) (_sf_(f)->_next>=_sf_(f)->_endr?_sffilbuf(_sf_(f),0):(int)(*_sf_(f)->_next++)) #define getchar() getc(stdin) #define putc(c,f) fputc(c,f) #define putchar(c) fputc(c,stdout) #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif extern __MANGLE__ int _sffilbuf __PROTO__((FILE*, int)); extern __MANGLE__ int _sfflsbuf __PROTO__((FILE*, int)); #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #endif #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/sys by iffe version 2012-07-17 : : */ #ifndef _AST_SYS_H #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _AST_SYS_H 1 #define _sys_types 1 /* #include ok */ #if __mips == 2 && !defined(_NO_LARGEFILE64_SOURCE) #define _NO_LARGEFILE64_SOURCE 1 #endif #if !defined(_NO_LARGEFILE64_SOURCE) && _typ_off64_t && _lib_lseek64 && _lib_stat64 #if !defined(_LARGEFILE64_SOURCE) #define _LARGEFILE64_SOURCE 1 #endif #if !defined(_LARGEFILE_SOURCE) #define _LARGEFILE_SOURCE 1 #endif #if !defined(_LARGE_FILE_API) #define _LARGE_FILE_API 1 #endif #else #undef _LARGEFILE64_SOURCE #undef _LARGEFILE_SOURCE #undef _LARGE_FILE_API #undef _typ_ino64_t #undef _typ_off64_t #undef _typ_struct_dirent64 #undef _lib_creat64 #undef _lib_fstat64 #undef _lib_fstatvfs64 #undef _lib_ftruncate64 #undef _lib_lseek64 #undef _lib_lstat64 #undef _lib_mmap64 #undef _lib_open64 #undef _lib_readdir64 #undef _lib_stat64 #undef _lib_statvfs64 #undef _lib_truncate64 #endif #if !_lib_readdir64 #undef _typ_ino64_t #endif #if defined(__STDC__) && !defined(__USE_FIXED_PROTOTYPES__) #define __USE_FIXED_PROTOTYPES__ 1 /* kick gcc out of the past */ #endif #include #include #include #include #include #include #include #include #include #include #define _hdr_time 1 /* #include ok */ #define _sys_time 1 /* #include ok */ #define _sys_times 1 /* #include ok */ #define _typ_dev_t 1 /* dev_t is a type */ #define _typ_nlink_t 1 /* nlink_t is a type */ #define _typ_gid_t 1 /* gid_t is a type */ #define _typ_mode_t 1 /* mode_t is a type */ #define _typ_uid_t 1 /* uid_t is a type */ #define _hdr_stdio 1 /* #include ok */ #define _hdr_wchar 1 /* #include ok */ #define _typ_wchar_t 1 /* wchar_t is a type */ #define _typ_pid_t 1 /* pid_t is a type */ #define _typ_ssize_t 1 /* ssize_t is a type */ #define _typ_wint_t 1 /* wint_t is a type */ #define _sys_socket 1 /* #include ok */ #define _typ_socklen_t 1 /* socklen_t is a type */ #define _typ_size_t 1 /* size_t is a type */ #define _typ_clock_t 1 /* clock_t is a type */ #define _typ_ino_t 1 /* ino_t is a type */ #define _typ_off_t 1 /* off_t is a type */ #define _typ_ptrdiff_t 1 /* ptrdiff_t is a type */ #define _typ_time_t 1 /* time_t is a type */ #define _typ_div_t 1 /* div_t is a type */ #define _typ_ldiv_t 1 /* ldiv_t is a type */ #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif extern __MANGLE__ void cfree __PROTO__((__V_*)); extern __MANGLE__ size_t confstr __PROTO__((int, char*, size_t)); extern __MANGLE__ int eaccess __PROTO__((const char*, int)); extern __MANGLE__ __V_* pvalloc __PROTO__((size_t)); extern __MANGLE__ pid_t spawnveg __PROTO__((const char*, char* const[], char* const[], pid_t)); #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #if !defined(va_start) #if defined(__STDARG__) #include #else #include #endif #endif #endif /* : : generated from contrib/ast/src/lib/libast/features/syscall by iffe version 2012-07-17 : : */ #ifndef _def_syscall_ast #define _def_syscall_ast 1 #define _sys_types 1 /* #include ok */ #define _lib_sysgetcwd 1 /* syscall(SYS_getcwd,buf,len) implemented */ #include #define SYSGETCWD(a,b) syscall(SYS_getcwd,a,b) #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/time by iffe version 2012-07-17 : : */ #ifndef _def_time_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_time_ast 1 #define _sys_types 1 /* #include ok */ #define _lib_nanosleep 1 /* nanosleep() in default lib(s) */ #define _lib_usleep 1 /* usleep() in default lib(s) */ #define _hdr_time 1 /* #include ok */ #define _sys_time 1 /* #include ok */ #define _sys_times 1 /* #include ok */ #define _hdr_stddef 1 /* #include ok */ #define _hdr_stdlib 1 /* #include ok */ #define _typ_clock_t 1 /* clock_t is a type */ #define _typ_time_t 1 /* time_t is a type */ #include #include #if !defined(CLOCKS_PER_SEC) && defined(CLK_TCK) #define CLOCKS_PER_SEC CLK_TCK #endif #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/tmlib by iffe version 2012-07-17 : : */ #ifndef _def_tmlib_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_tmlib_ast 1 #define _sys_types 1 /* #include ok */ #define _tzset_environ 1 /* tzset() bypasses user getenv() */ #define tmlocaltime(p) _tm_localtime(p) extern __MANGLE__ struct tm* _tm_localtime __PROTO__((const time_t*)); #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/tmx by iffe version 2012-07-17 : : */ #ifndef _TMX_H #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _TMX_H 1 /* * AT&T Research * * high resolution Time_t support */ #include #include #define TMX_MAXDATE "2554-07-21+23:34:33.709551614 UTC" #define TMX_MAXYEAR 2554 #define TMX_MAXSEC ((Time_t)18446744073) #define TMX_MAXNSEC 709551614 #define TMX_RESOLUTION 1000000000 typedef uint64_t Time_t; typedef uint64_t Tmxsec_t; typedef uint32_t Tmxnsec_t; #define tmxsec(t) ((Tmxsec_t)((t)/1000000000)) #define tmxnsec(t) ((Tmxnsec_t)((t)%1000000000)) #define tmxsns(s,n) (((((Time_t)(s))*1000000000))+((Time_t)(n))) #define TMX_NOTIME ((Time_t)(-1)) #define TMX_NOW tmxgettime() #define TMX_MAXTIME tmxsns(TMX_MAXSEC,TMX_MAXNSEC) #define tmx2tv(t,v) ((v)->tv_nsec=tmxnsec(t),(v)->tv_sec=tmxsec(t)) #define tv2tmx(v) tmxsns((v)->tv_sec,(v)->tv_nsec) #define tmxclock(p) tmxsns(((p)?*(p):time(NiL)),0) #define tmxgetatime(s) tmxsns((s)->st_atime,ST_ATIME_NSEC_GET(s)) #define tmxgetctime(s) tmxsns((s)->st_ctime,ST_CTIME_NSEC_GET(s)) #define tmxgetmtime(s) tmxsns((s)->st_mtime,ST_MTIME_NSEC_GET(s)) #define tmxsetatime(s,t) ((s)->st_atime=tmxsec(t),ST_ATIME_NSEC_SET(s,tmxnsec(t))) #define tmxsetctime(s,t) ((s)->st_ctime=tmxsec(t),ST_CTIME_NSEC_SET(s,tmxnsec(t))) #define tmxsetmtime(s,t) ((s)->st_mtime=tmxsec(t),ST_MTIME_NSEC_SET(s,tmxnsec(t))) #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif extern __MANGLE__ Time_t tmxdate __PROTO__((const char*, char**, Time_t)); extern __MANGLE__ Time_t tmxduration __PROTO__((const char*, char**)); extern __MANGLE__ char* tmxfmt __PROTO__((char*, size_t, const char*, Time_t)); extern __MANGLE__ Time_t tmxleap __PROTO__((Time_t)); extern __MANGLE__ Tm_t* tmxmake __PROTO__((Time_t)); extern __MANGLE__ Time_t tmxscan __PROTO__((const char*, char**, const char*, char**, Time_t, long)); extern __MANGLE__ int tmxsleep __PROTO__((Time_t)); extern __MANGLE__ Time_t tmxtime __PROTO__((Tm_t*, int)); extern __MANGLE__ Tm_t* tmxtm __PROTO__((Tm_t*, Time_t, Tm_zone_t*)); extern __MANGLE__ Time_t tmxgettime __PROTO__((void)); extern __MANGLE__ int tmxsettime __PROTO__((Time_t)); extern __MANGLE__ int tmxtouch __PROTO__((const char*, Time_t, Time_t, Time_t, int)); extern __MANGLE__ char* fmttmx __PROTO__((const char*, Time_t)); #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #endif /* : : generated from contrib/ast/src/lib/libast/features/tty by iffe version 2012-07-17 : : */ #ifndef _def_tty_ast #define _def_tty_ast 1 #define _sys_types 1 /* #include ok */ #define _hdr_termios 1 /* #include ok */ #define _hdr_termio 1 /* #include ok */ #define _hdr_sgtty 1 /* #include ok */ #define _sys_termios 1 /* #include ok */ #define _sys_termio 1 /* #include ok */ #define _sys_ioctl 1 /* #include ok */ #define _lib_tcgetattr 1 /* tcgetattr() in default lib(s) */ #define _lib_tcgetpgrp 1 /* tcgetpgrp() in default lib(s) */ #define _mac__POSIX_VDISABLE 1 /* _POSIX_VDISABLE is a macro */ #ifdef _hdr_termios # if _mac__POSIX_VDISABLE # undef _POSIX_VDISABLE # endif # include #else # if defined(_sys_termios) && defined(_lib_tcgetattr) # include # define _hdr_termios 1 # else # undef _sys_termios # endif /* _sys_termios */ #endif /* _hdr_termios */ #ifdef _hdr_termios # undef _hdr_sgtty # undef tcgetattr # undef tcsetattr # undef tcgetpgrp # undef tcsetpgrp # undef cfgetospeed # ifndef TCSANOW # define TCSANOW TCSETS # define TCSADRAIN TCSETSW # define TCSAFLUSH TCSETSF # endif /* TCSANOW */ /* The following corrects bugs in some implementations */ # if defined(TCSADFLUSH) && !defined(TCSAFLUSH) # define TCSAFLUSH TCSADFLUSH # endif /* TCSADFLUSH */ # ifndef _lib_tcgetattr # undef tcgetattr # define tcgetattr(fd,tty) ioctl(fd, TCGETS, tty) # undef tcsetattr # define tcsetattr(fd,action,tty) ioctl(fd, action, tty) # undef cfgetospeed # define cfgetospeed(tp) ((tp)->c_cflag & CBAUD) # endif /* _lib_tcgetattr */ # undef TIOCGETC #else # define cfgetospeed(tp) ((tp)->c_cflag & CBAUD) # define cfgetispeed(tp) ((tp)->c_cflag & CBAUD) # define cfsetispeed(tp,val) ((tp)->c_cflag &=~ CBAUD,(tp)->c_cflag|=(val)) # define cfsetospeed(tp,val) ((tp)->c_cflag &=~ CBAUD,(tp)->c_cflag|=(val)) # ifdef _hdr_termio # include # else # ifdef _sys_termio # include # define _hdr_termio 1 # endif /* _sys_termio */ # endif /* _hdr_termio */ # ifdef _hdr_termio # define termios termio # undef TIOCGETC # define tcgetattr(fd,tty) ioctl(fd, TCGETA, tty) # define tcsetattr(fd,action,tty) ioctl(fd, action, tty) # ifdef _sys_bsdtty # include # endif /* _sys_bsdtty */ # else # ifdef _hdr_sgtty # include # ifndef LPENDIN # ifdef _sys_nttyio # include # endif /* _sys_nttyio */ # endif /* LPENDIN */ # define termios sgttyb # ifdef TIOCSETN # undef TCSETAW # endif /* TIOCSETN */ # ifdef TIOCGETP # define tcgetattr(fd,tty) ioctl(fd, TIOCGETP, tty) # define tcsetattr(fd,action,tty) ioctl(fd, action, tty) # else # define tcgetattr(fd,tty) gtty(fd, tty) # define tcsetattr(fd,action,tty) stty(fd, tty) # endif /* TIOCGETP */ # else # ifdef _sys_ttyio # include # endif # endif /* _hdr_sgtty */ # endif /* hdr_termio */ # ifndef TCSANOW # ifdef TCSETAW # define TCSANOW TCSETA # define TCSAFLUSH TCSETAF # else # ifdef TIOCSETN # define TCSANOW TIOCSETN # define TCSADRAIN TIOCSETN # define TCSAFLUSH TIOCSETP # endif /* TIOCSETN */ # endif /* TCSETAW */ # endif /* TCSANOW */ #endif /* _hdr_termios */ /* set ECHOCTL if driver can echo control charaters as ^c */ #ifdef LCTLECH # ifndef ECHOCTL # define ECHOCTL LCTLECH # endif /* !ECHOCTL */ #endif /* LCTLECH */ #ifdef LNEW_CTLECH # ifndef ECHOCTL # define ECHOCTL LNEW_CTLECH # endif /* !ECHOCTL */ #endif /* LNEW_CTLECH */ #ifdef LNEW_PENDIN # ifndef PENDIN # define PENDIN LNEW_PENDIN # endif /* !PENDIN */ #endif /* LNEW_PENDIN */ #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/tv by iffe version 2012-07-17 : : */ #ifndef _TV_H #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _TV_H 1 /* * AT&T Research * * high resolution Tv_t interface definitions */ #include #define TV_NSEC_IGNORE (1000000000L) #define TV_TOUCH_RETAIN ((Tv_t*)1) typedef struct Tv_s { uint32_t tv_sec; uint32_t tv_nsec; } Tv_t; #define ST_ATIME_NSEC_GET(st) ((st)->st_atim.tv_nsec) #define ST_CTIME_NSEC_GET(st) ((st)->st_ctim.tv_nsec) #define ST_MTIME_NSEC_GET(st) ((st)->st_mtim.tv_nsec) #define ST_ATIME_NSEC_SET(st,n) (ST_ATIME_NSEC_GET(st)=(n)) #define ST_CTIME_NSEC_SET(st,n) (ST_CTIME_NSEC_GET(st)=(n)) #define ST_MTIME_NSEC_SET(st,n) (ST_MTIME_NSEC_GET(st)=(n)) #define tvgetatime(t,s) ((t)->tv_nsec=ST_ATIME_NSEC_GET(s),(t)->tv_sec=(s)->st_atime) #define tvgetmtime(t,s) ((t)->tv_nsec=ST_MTIME_NSEC_GET(s),(t)->tv_sec=(s)->st_mtime) #define tvgetctime(t,s) ((t)->tv_nsec=ST_CTIME_NSEC_GET(s),(t)->tv_sec=(s)->st_ctime) #define tvsetatime(t,s) (ST_ATIME_NSEC_SET(s,(t)->tv_nsec),(s)->st_atime=(t)->tv_sec) #define tvsetmtime(t,s) (ST_MTIME_NSEC_SET(s,(t)->tv_nsec),(s)->st_mtime=(t)->tv_sec) #define tvsetctime(t,s) (ST_CTIME_NSEC_SET(s,(t)->tv_nsec),(s)->st_ctime=(t)->tv_sec) #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif extern __MANGLE__ int tvgettime __PROTO__((Tv_t*)); extern __MANGLE__ int tvsettime __PROTO__((const Tv_t*)); extern __MANGLE__ int tvcmp __PROTO__((const Tv_t*, const Tv_t*)); extern __MANGLE__ int tvtouch __PROTO__((const char*, const Tv_t*, const Tv_t*, const Tv_t*, int)); extern __MANGLE__ int tvsleep __PROTO__((const Tv_t*, Tv_t*)); extern __MANGLE__ char* fmttv __PROTO__((const char*, Tv_t*)); #endif /* : : generated from contrib/ast/src/lib/libast/features/tvlib by iffe version 2012-07-17 : : */ #ifndef _def_tvlib_ast #define _def_tvlib_ast 1 #define _sys_types 1 /* #include ok */ #define _hdr_time 1 /* #include ok */ #define _lib_clock_settime 1 /* clock_settime() in default lib(s) */ #define _lib_gettimeofday 1 /* gettimeofday() in default lib(s) */ #define _lib_settimeofday 1 /* settimeofday() in default lib(s) */ #define _lib_stime 1 /* stime() in default lib(s) */ #define _lib_utimes 1 /* utimes() in default lib(s) */ #define _lib_nanosleep 1 /* nanosleep() in default lib(s) */ #define _lib_usleep 1 /* usleep() in default lib(s) */ #define _sys_stat 1 /* #include ok */ #define _lib_utimensat 1 /* complete utimensat implementation */ #define _sys_time 1 /* #include ok */ #define _lib_clock_gettime 1 /* execute{\ passed */ #define tmgettimeofday(p) gettimeofday(p,(struct timezone*)0) #define tmsettimeofday(p) settimeofday(p,(struct timezone*)0) #endif /* : : generated from contrib/ast/src/lib/libast/features/uwin by iffe version 2012-07-17 : : */ #ifndef _def_uwin_ast #define _def_uwin_ast 1 #define _sys_types 1 /* #include ok */ #define _lib_a64l 1 /* a64l() in default lib(s) */ #define _lib_acosh 1 /* acosh() in default lib(s) */ #define _lib_asinh 1 /* asinh() in default lib(s) */ #define _lib_atanh 1 /* atanh() in default lib(s) */ #define _lib_cbrt 1 /* cbrt() in default lib(s) */ #define _lib_ceil 1 /* ceil() in default lib(s) */ #define _lib_crypt 1 /* crypt() in default lib(s) */ #define _lib_erf 1 /* erf() in default lib(s) */ #define _lib_exp 1 /* exp() in default lib(s) */ #define _lib_expm1 1 /* expm1() in default lib(s) */ #define _lib_floor 1 /* floor() in default lib(s) */ #define _lib_gamma 1 /* gamma() in default lib(s) */ #define _lib_getpass 1 /* getpass() in default lib(s) */ #define _lib_lgamma 1 /* lgamma() in default lib(s) */ #define _lib_log 1 /* log() in default lib(s) */ #define _lib_log1p 1 /* log1p() in default lib(s) */ #define _lib_random 1 /* random() in default lib(s) */ #define _lib_rcmd 1 /* rcmd() in default lib(s) */ #define _lib_rint 1 /* rint() in default lib(s) */ #define _lib_srand48 1 /* srand48() in default lib(s) */ #define _lib_copysign 1 /* copysign() in default lib(s) */ #define _lib_logb 1 /* logb() in default lib(s) */ #define _lib_finite 1 /* finite() in default lib(s) */ #define _lib_sqrt 1 /* sqrt() in default lib(s) */ #define _lib_ilogb 1 /* ilogb() in default lib(s) */ #define _lib_remainder 1 /* remainder() in default lib(s) */ #define _lib_scalb 1 /* scalb() in default lib(s) */ #define _lib__finite 1 /* _finite() in default lib(s) */ #define _lib__scalb 1 /* _scalb() in default lib(s) */ #define _dat__iob 1 /* _iob in default lib(s) */ #define stricmp strcasecmp #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/vfork by iffe version 2012-07-17 : : */ #ifndef _def_vfork_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_vfork_ast 1 #define _sys_types 1 /* #include ok */ extern __MANGLE__ pid_t vfork(void) __attribute__((__returns_twice__)); #pragma unknown_control_flow(vfork) #endif /* : : generated from contrib/ast/src/lib/libast/features/vmalloc by iffe version 2012-07-17 : : */ #ifndef _def_vmalloc_ast #define _def_vmalloc_ast 1 #define _sys_types 1 /* #include ok */ #define _lib_atexit 1 /* atexit() in default lib(s) */ #define _lib_getpagesize 1 /* getpagesize() in default lib(s) */ #define _lib_memalign 1 /* memalign() in default lib(s) */ #define _lib_strdup 1 /* strdup() in default lib(s) */ #define _lib_valloc 1 /* valloc() in default lib(s) */ #define _hdr_alloca 1 /* #include ok */ #define _hdr_malloc 1 /* #include ok */ #define _hdr_stdlib 1 /* #include ok */ #define _hdr_unistd 1 /* #include ok */ #define _mem_arena_mallinfo 1 /* arena is a member of struct mallinfo */ #define _sys_stat 1 /* #include ok */ #define _hdr_time 1 /* #include ok */ #define _sys_time 1 /* #include ok */ #define _sys_times 1 /* #include ok */ #define _hdr_stddef 1 /* #include ok */ #define _typ_ssize_t 1 /* ssize_t is a type */ #define _mem_sbrk 1 /* brk()/sbrk() work as expected */ #define _lib_alloca 1 /* alloca exists */ #define _stk_down 1 /* stack grows downward */ #include "FEATURE/mmap" #if _BLD_INSTRUMENT || cray || _UWIN && _BLD_ast #undef _map_malloc #define _std_malloc 1 /* defer to standard malloc */ #endif #if _mmap_anon #define _mem_mmap_anon 1 #endif #if _mmap_devzero #define _mem_mmap_zero 1 #endif #endif /* : : generated from contrib/ast/src/lib/libast/features/wait by iffe version 2012-07-17 : : */ #ifndef _def_wait_ast #define _def_wait_ast 1 #define _sys_types 1 /* #include ok */ #define _lib_wait 1 /* wait() in default lib(s) */ #define _lib_wait3 1 /* wait3() in default lib(s) */ #define _lib_wait4 1 /* wait4() in default lib(s) */ #define _lib_waitpid 1 /* waitpid() in default lib(s) */ #define _sys_wait 1 /* #include ok */ #define _ok_wif 1 /* posix wait macros ok */ #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/wchar by iffe version 2012-07-17 : : */ #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _sys_types 1 /* #include ok */ #ifndef _AST_WCHAR_H #define _AST_WCHAR_H 1 #define _hdr_stdlib 1 /* #include ok */ #define _hdr_stdio 1 /* #include ok */ #define _hdr_wchar 1 /* #include ok */ #define _lib_mbstowcs 1 /* mbstowcs() in default lib(s) */ #define _lib_wctomb 1 /* wctomb() in default lib(s) */ #define _lib_wcrtomb 1 /* wcrtomb() in default lib(s) */ #define _lib_wcslen 1 /* wcslen() in default lib(s) */ #define _lib_wcstombs 1 /* wcstombs() in default lib(s) */ #define _lib_wcwidth 1 /* wcwidth() in default lib(s) */ #define _lib_towlower 1 /* towlower() in default lib(s) */ #define _lib_towupper 1 /* towupper() in default lib(s) */ #define _hdr_time 1 /* #include ok */ #define _sys_time 1 /* #include ok */ #define _sys_times 1 /* #include ok */ #define _hdr_stddef 1 /* #include ok */ #define _typ_mbstate_t 1 /* mbstate_t is a type */ #define _nxt_wchar <../include/wchar.h> /* include path for the native */ #define _nxt_wchar_str "../include/wchar.h" /* include string for the native */ #ifndef _SFSTDIO_H #include #include #endif #define _hdr_unistd 1 /* #include ok */ #include /* includes */ #if _hdr_wchar && defined(_nxt_wchar) #include <../include/wchar.h> /* the native wchar.h */ #endif #ifndef WEOF #define WEOF (-1) #endif #undef fgetwc #undef fgetws #undef fputwc #undef fputws #undef getwc #undef getwchar #undef getws #undef putwc #undef putwchar #undef ungetwc #define fgetwc _ast_fgetwc #define fgetws _ast_fgetws #define fputwc _ast_fputwc #define fputws _ast_fputws #define fwide _ast_fwide #define fwprintf _ast_fwprintf #define fwscanf _ast_fwscanf #define getwc _ast_getwc #define getwchar _ast_getwchar #define getws _ast_getws #define putwc _ast_putwc #define putwchar _ast_putwchar #define swprintf _ast_swprintf #define swscanf _ast_swscanf #define ungetwc _ast_ungetwc #define vfwprintf _ast_vfwprintf #define vfwscanf _ast_vfwscanf #define vswprintf _ast_vswprintf #define vswscanf _ast_vswscanf #define vwprintf _ast_vwprintf #define vwscanf _ast_vwscanf #define wprintf _ast_wprintf #define wscanf _ast_wscanf #if !_typ_mbstate_t #undef _typ_mbstate_t #define _typ_mbstate_t 1 typedef char mbstate_t; #endif #if _BLD_ast && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif #if !_lib_mbstowcs extern __MANGLE__ size_t mbstowcs __PROTO__((wchar_t*, const char*, size_t)); #endif #if !_lib_wctomb extern __MANGLE__ int wctomb __PROTO__((char*, wchar_t)); #endif #if !_lib_wcrtomb extern __MANGLE__ size_t wcrtomb __PROTO__((char*, wchar_t, mbstate_t*)); #endif #if !_lib_wcslen extern __MANGLE__ size_t wcslen __PROTO__((const wchar_t*)); #endif #if !_lib_wcstombs extern __MANGLE__ size_t wcstombs __PROTO__((char*, const wchar_t*, size_t)); #endif extern __MANGLE__ int fwprintf __PROTO__((FILE*, const wchar_t*, ...)); extern __MANGLE__ int fwscanf __PROTO__((FILE*, const wchar_t*, ...)); extern __MANGLE__ wint_t fgetwc __PROTO__((FILE*)); extern __MANGLE__ wchar_t* fgetws __PROTO__((wchar_t*, int, FILE*)); extern __MANGLE__ wint_t fputwc __PROTO__((wchar_t, FILE*)); extern __MANGLE__ int fputws __PROTO__((const wchar_t*, FILE*)); extern __MANGLE__ int fwide __PROTO__((FILE*, int)); extern __MANGLE__ wint_t getwc __PROTO__((FILE*)); extern __MANGLE__ wint_t getwchar __PROTO__((void)); extern __MANGLE__ wchar_t* getws __PROTO__((wchar_t*)); extern __MANGLE__ wint_t putwc __PROTO__((wchar_t, FILE*)); extern __MANGLE__ wint_t putwchar __PROTO__((wchar_t)); extern __MANGLE__ int swprintf __PROTO__((wchar_t*, size_t, const wchar_t*, ...)); extern __MANGLE__ int swscanf __PROTO__((const wchar_t*, const wchar_t*, ...)); extern __MANGLE__ wint_t ungetwc __PROTO__((wint_t, FILE*)); extern __MANGLE__ int vfwprintf __PROTO__((FILE*, const wchar_t*, va_list)); extern __MANGLE__ int vfwscanf __PROTO__((FILE*, const wchar_t*, va_list)); extern __MANGLE__ int vwprintf __PROTO__((const wchar_t*, va_list)); extern __MANGLE__ int vwscanf __PROTO__((const wchar_t*, va_list)); extern __MANGLE__ int vswprintf __PROTO__((wchar_t*, size_t, const wchar_t*, va_list)); extern __MANGLE__ int vswscanf __PROTO__((const wchar_t*, const wchar_t*, va_list)); extern __MANGLE__ int wprintf __PROTO__((const wchar_t*, ...)); extern __MANGLE__ int wscanf __PROTO__((const wchar_t*, ...)); #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #else /* on some systems is included multiple times with multiple effects */ #if _hdr_wchar && defined(_nxt_wchar) #include <../include/wchar.h> /* the native wchar.h */ #endif #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libast/features/wctype by iffe version 2012-07-17 : : */ #ifndef _def_wctype_ast #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_wctype_ast 1 #define _sys_types 1 /* #include ok */ #define _nxt_wctype <../include/wctype.h> /* include path for the native */ #define _nxt_wctype_str "../include/wctype.h" /* include string for the native */ #if _hdr_wctype && defined(_nxt_wctype) #include <../include/wctype.h> /* the native wctype.h */ #endif #undef iswalpha #define iswalpha(w) (ast.mb_alpha?(*ast.mb_alpha)(w):isalpha(w)) #endif # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # Platform-specific config # Note that "HOSTTYPE" matches the value used by AT&T upstream. ASTPLATFORMCPPFLAGS= '-DHOSTTYPE="sol$(RELEASE_MINOR).i386"' # platform-specific sources OBJECTS= conftab.o lctab.o include ../Makefile.com include $(SRC)/lib/Makefile.lib.64 # Use big PIC since libast is too big for pic on 64bit # (and on 32bit it is close to the barrier) amd64_C_PICFLAGS = $(C_BIGPICFLAGS) install: all $(ROOTLIBS64) $(ROOTLINKS64) # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # include ../Makefile.iffe include $(SRC)/lib/Makefile.lib.64 /* : : generated by conf from contrib/ast/src/lib/libast/comp/conf.tab : : */ /* * supplemental values */ printf("#ifndef CHAR_BIT\n"); printf("#define CHAR_BIT 8\n"); printf("#endif\n"); printf("#ifndef CHAR_MAX\n"); printf("#define CHAR_MAX 127\n"); printf("#endif\n"); printf("#ifndef CHAR_MIN\n"); printf("#define CHAR_MIN -128\n"); printf("#endif\n"); printf("#ifndef CLOCKS_PER_SEC\n"); printf("#define CLOCKS_PER_SEC 1000000\n"); printf("#endif\n"); printf("#ifndef INT_MIN\n"); printf("#define INT_MIN -2147483648\n"); printf("#endif\n"); printf("#ifndef LLONG_MAX\n"); printf("#define LLONG_MAX 9223372036854775807\n"); printf("#endif\n"); printf("#ifndef LLONG_MIN\n"); printf("#define LLONG_MIN -9223372036854775808\n"); printf("#endif\n"); printf("#ifndef LONG_MAX\n"); printf("#define LONG_MAX 2147483647\n"); printf("#endif\n"); printf("#ifndef LONG_MIN\n"); printf("#define LONG_MIN -2147483648\n"); printf("#endif\n"); printf("#ifndef MB_LEN_MAX\n"); printf("#define MB_LEN_MAX 5\n"); printf("#endif\n"); printf("#ifndef OPEN_MAX_CEIL\n"); printf("#ifndef OPEN_MAX\n"); printf("#define OPEN_MAX %ld\n", OPEN_MAX); printf("#endif\n"); printf("#define OPEN_MAX_CEIL OPEN_MAX\n"); printf("#endif\n"); printf("#ifndef PTHREAD_STACK_MIN\n"); printf("#define PTHREAD_STACK_MIN 4096\n"); printf("#endif\n"); printf("#ifndef PTRDIFF_MAX\n"); printf("#define PTRDIFF_MAX 9223372036854775807\n"); printf("#endif\n"); printf("#ifndef PTRDIFF_MIN\n"); printf("#define PTRDIFF_MIN -9223372036854775808\n"); printf("#endif\n"); printf("#ifndef SCHAR_MAX\n"); printf("#define SCHAR_MAX 127\n"); printf("#endif\n"); printf("#ifndef SCHAR_MIN\n"); printf("#define SCHAR_MIN -128\n"); printf("#endif\n"); printf("#ifndef SHRT_MIN\n"); printf("#define SHRT_MIN -32768\n"); printf("#endif\n"); printf("#ifndef SIG_ATOMIC_MAX\n"); printf("#define SIG_ATOMIC_MAX 2147483647\n"); printf("#endif\n"); printf("#ifndef SIG_ATOMIC_MIN\n"); printf("#define SIG_ATOMIC_MIN -2147483648\n"); printf("#endif\n"); printf("#ifndef SIZE_MAX\n"); printf("#ifndef UINT_MAX\n"); printf("#define UINT_MAX %lu\n", UINT_MAX); printf("#endif\n"); printf("#define SIZE_MAX UINT_MAX\n"); printf("#endif\n"); printf("#ifndef SSIZE_MAX\n"); printf("#ifndef INT_MAX\n"); printf("#define INT_MAX %ld\n", INT_MAX); printf("#endif\n"); printf("#define SSIZE_MAX INT_MAX\n"); printf("#endif\n"); printf("#ifndef TMP_MAX\n"); printf("#define TMP_MAX 17576\n"); printf("#endif\n"); printf("#ifndef UCHAR_MAX\n"); printf("#define UCHAR_MAX 255\n"); printf("#endif\n"); printf("#ifndef ULLONG_MAX\n"); printf("#define ULLONG_MAX 18446744073709551615\n"); printf("#endif\n"); printf("#ifndef ULONG_MAX\n"); printf("#define ULONG_MAX 4294967295\n"); printf("#endif\n"); printf("#ifndef USHRT_MAX\n"); printf("#define USHRT_MAX 65535\n"); printf("#endif\n"); printf("#ifndef WCHAR_MAX\n"); printf("#define WCHAR_MAX 2147483647\n"); printf("#endif\n"); printf("#ifndef WCHAR_MIN\n"); printf("#define WCHAR_MIN -2147483648\n"); printf("#endif\n"); printf("#ifndef WINT_MAX\n"); printf("#define WINT_MAX 2147483647\n"); printf("#endif\n"); printf("#ifndef WINT_MIN\n"); printf("#define WINT_MIN -2147483648\n"); printf("#endif\n"); #include "FEATURE/standards" #include "FEATURE/common" #include #include #include #if !defined(SYS_NMLEN) #define SYS_NMLEN 9 #endif #include #include "FEATURE/param" #include "conftab.h" /* : : generated by conf from contrib/ast/src/lib/libast/comp/conf.tab : : */ /* * prefix strings -- the first few are indexed by Conf_t.standard */ const Prefix_t prefix[] = { "C", 1, CONF_C, -1, "POSIX", 5, CONF_POSIX, -1, "SVID", 4, CONF_SVID, -1, "XOPEN", 5, CONF_XOPEN, -1, "SUN", 3, CONF_SUN, -1, "XBS5", 4, CONF_XBS5, -1, "SCO", 3, CONF_SCO, -1, "AST", 3, CONF_AST, -1, "AES", 3, CONF_AES, -1, "XPG", 3, CONF_XPG, -1, "GNU", 3, CONF_GNU, -1, "TRUSTEDBSD", 10, CONF_TRUSTEDBSD, -1, "SOL", 3, CONF_SOL, -1, "XX", 2, CONF_POSIX, CONF_nop, "CS", 2, CONF_POSIX, CONF_confstr, "PC", 2, CONF_POSIX, CONF_pathconf, "SC", 2, CONF_POSIX, CONF_sysconf, "SI", 2, CONF_SVID, CONF_sysinfo, }; const int prefix_elements = (int)sizeof(prefix) / (int)sizeof(prefix[0]); /* * conf strings sorted in ascending order */ const Conf_t conf[] = { { "ABI_AIO_XFER_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "ABI_ASYNCHRONOUS_IO", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "ABI_ASYNC_IO", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "ACCESS_FILTERING", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_pathconf, _PC_ACCESS_FILTERING }, { "ACL_ENABLED", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_pathconf, _PC_ACL_ENABLED }, { "ADDRESS_WIDTH", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_STRING, CONF_SOL, 1, CONF_sysinfo, SI_ADDRESS_WIDTH }, { "ADVISORY_INFO", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_ADVISORY_INFO }, { "AIO_LISTIO_MAX", { 0UL, 0 }, { _POSIX_AIO_LISTIO_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_AIO_LISTIO_MAX }, { "AIO_MAX", { 0UL, 0 }, { _POSIX_AIO_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_AIO_MAX }, { "AIO_PRIO_DELTA_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_AIO_PRIO_DELTA_MAX }, { "ALLOC_SIZE_MIN", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_UNDERSCORE|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_pathconf, _PC_ALLOC_SIZE_MIN }, { "ARCHITECTURE", { 0, 0 }, { 0, 0 }, CONF_STRING, CONF_SVID, 1, CONF_sysinfo, SI_ARCHITECTURE }, { "ARCHITECTURE_32", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_STRING, CONF_SOL, 1, CONF_sysinfo, SI_ARCHITECTURE_32 }, { "ARCHITECTURE_64", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_STRING, CONF_SOL, 1, CONF_sysinfo, SI_ARCHITECTURE_64 }, { "ARCHITECTURE_K", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_STRING, CONF_SOL, 1, CONF_sysinfo, SI_ARCHITECTURE_K }, { "ARCHITECTURE_NATIVE", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_STRING, CONF_SOL, 1, CONF_sysinfo, SI_ARCHITECTURE_NATIVE }, { "ARG_MAX", { 0UL, 0 }, { _POSIX_ARG_MAX, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_ARG_MAX }, { "ASYNCHRONOUS_IO", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_ASYNCHRONOUS_IO }, { "ASYNC_IO", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_pathconf, _PC_ASYNC_IO }, { "ATEXIT_MAX", { 0UL, 0 }, { 32UL, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_XOPEN, 1, CONF_sysconf, _SC_ATEXIT_MAX }, { "AUDIT", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "AVAIL_PROCESSORS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "AVPHYS_PAGES", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SUN, 1, CONF_sysconf, _SC_AVPHYS_PAGES }, { "BARRIERS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_BARRIERS }, { "BC_BASE_MAX", { 0UL, 0 }, { _POSIX2_BC_BASE_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_NOSECTION|CONF_MINMAX_DEF, CONF_POSIX, 2, CONF_sysconf, _SC_BC_BASE_MAX }, { "BC_DIM_MAX", { 0UL, 0 }, { _POSIX2_BC_DIM_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_NOSECTION|CONF_MINMAX_DEF, CONF_POSIX, 2, CONF_sysconf, _SC_BC_DIM_MAX }, { "BC_SCALE_MAX", { 0UL, 0 }, { _POSIX2_BC_SCALE_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_NOSECTION|CONF_MINMAX_DEF, CONF_POSIX, 2, CONF_sysconf, _SC_BC_SCALE_MAX }, { "BC_STRING_MAX", { 0UL, 0 }, { _POSIX2_BC_STRING_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_NOSECTION|CONF_MINMAX_DEF, CONF_POSIX, 2, CONF_sysconf, _SC_BC_STRING_MAX }, { "BUSTYPES", { 0, 0 }, { 0, 0 }, CONF_STRING, CONF_SVID, 1, CONF_sysinfo, -1 }, { "CASE_BEHAVIOR", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_pathconf, _PC_CASE_BEHAVIOR }, { "CHARCLASS_NAME_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_XOPEN, 1, CONF_nop, -1 }, { "CHAR_BIT", { 8UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "CHAR_MAX", { 127UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "CHAR_MIN", { -127L-1L, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "CHAR_TERM", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_CHAR_TERM }, { "CHILD_MAX", { 0UL, 0 }, { _POSIX_CHILD_MAX, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_CHILD_MAX }, { "CHOWN_RESTRICTED", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_pathconf, _PC_CHOWN_RESTRICTED }, { "CKPT", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "CLK_TCK", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_POSIX, 1, CONF_sysconf, _SC_CLK_TCK }, { "CLOCKRES_MIN", { 0UL, 0 }, { _POSIX_CLOCKRES_MIN, 0 }, CONF_MINMAX|CONF_UNDERSCORE|CONF_PREFIX_ONLY|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, -1 }, { "CLOCKS_PER_SEC", { 1000000UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_LIMIT|CONF_LIMIT_DEF, CONF_POSIX, 1, CONF_nop, -1 }, { "CLOCK_SELECTION", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_CLOCK_SELECTION }, { "COHER_BLKSZ", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_COHER_BLKSZ }, { "COLL_WEIGHTS_MAX", { 0UL, 0 }, { _POSIX2_COLL_WEIGHTS_MAX, 0 }, CONF_DEFER_MM|CONF_LIMIT|CONF_MINMAX|CONF_NOSECTION|CONF_MINMAX_DEF, CONF_POSIX, 2, CONF_sysconf, _SC_COLL_WEIGHTS_MAX }, { "CPUID_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_CPUID_MAX }, { "CPUTIME", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_CPUTIME }, { "CPU_KEYBITS1", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "CPU_VERSION", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "CRYPT", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_STANDARD|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_XOPEN, 1, CONF_sysconf, _SC_XOPEN_CRYPT }, { "C_BIND", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 2, CONF_sysconf, _SC_2_C_BIND }, { "C_DEV", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 2, CONF_sysconf, _SC_2_C_DEV }, { "C_VERSION", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 2, CONF_sysconf, _SC_2_C_VERSION }, { "DATAKEYS_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "DCACHE_ASSOC", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_DCACHE_ASSOC }, { "DCACHE_BLKSZ", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_DCACHE_BLKSZ }, { "DCACHE_LINESZ", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_DCACHE_LINESZ }, { "DCACHE_SZ", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_DCACHE_SZ }, { "DCACHE_TBLKSZ", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_DCACHE_TBLKSZ }, { "DELAYTIMER_MAX", { 0UL, 0 }, { _POSIX_DELAYTIMER_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_DELAYTIMER_MAX }, { "DHCP_CACHE", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_STRING, CONF_SOL, 1, CONF_sysinfo, SI_DHCP_CACHE }, { "ENH_I18N", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_STANDARD|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_XOPEN, 1, CONF_sysconf, _SC_XOPEN_ENH_I18N }, { "EPHID_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_EPHID_MAX }, { "EQUIV_CLASS_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "EXEC_INTERPRETER_LENGTH", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "EXPR_NEST_MAX", { 0UL, 0 }, { _POSIX2_EXPR_NEST_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_NOSECTION|CONF_MINMAX_DEF, CONF_POSIX, 2, CONF_sysconf, _SC_EXPR_NEST_MAX }, { "FCHR_MAX", { 0UL, 0 }, { LONG_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_SVID, 1, CONF_sysconf, -1 }, { "FILESIZEBITS", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_pathconf, _PC_FILESIZEBITS }, { "FILE_LOCKING", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "FORT_DEV", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_FORT_DEV }, { "FORT_RUN", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_FORT_RUN }, { "FSYNC", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_FSYNC }, { "GETGR_R_SIZE_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_C, 1, CONF_sysconf, _SC_GETGR_R_SIZE_MAX }, { "GETPW_R_SIZE_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_C, 1, CONF_sysconf, _SC_GETPW_R_SIZE_MAX }, { "HOSTID", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "HOSTNAME", { 0, 0 }, { 0, 0 }, CONF_STRING, CONF_SVID, 1, CONF_sysinfo, SI_HOSTNAME }, { "HOST_NAME_MAX", { 0UL, 0 }, { _POSIX_HOST_NAME_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_HOST_NAME_MAX }, { "HW_PROVIDER", { 0, 0 }, { 0, 0 }, CONF_STRING, CONF_SVID, 1, CONF_sysinfo, SI_HW_PROVIDER }, { "HW_SERIAL", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "ICACHE_ASSOC", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_ICACHE_ASSOC }, { "ICACHE_BLKSZ", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_ICACHE_BLKSZ }, { "ICACHE_LINESZ", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_ICACHE_LINESZ }, { "ICACHE_SZ", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_ICACHE_SZ }, { "ILP32_OFF32", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_XBS5, 1, CONF_sysconf, -1 }, { "ILP32_OFF32_CFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "ILP32_OFF32_LDFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "ILP32_OFF32_LIBS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "ILP32_OFF32_LINTFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "ILP32_OFFBIG", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_XBS5, 1, CONF_sysconf, -1 }, { "ILP32_OFFBIG_CFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "ILP32_OFFBIG_LDFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "ILP32_OFFBIG_LIBS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "ILP32_OFFBIG_LINTFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "INITTAB_NAME", { 0, 0 }, { 0, 0 }, CONF_STRING, CONF_SVID, 1, CONF_sysinfo, -1 }, { "INT_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_C, 1, CONF_nop, -1 }, { "INT_MIN", { -2147483647L-1L, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "IOV_MAX", { 0UL, 0 }, { _XOPEN_IOV_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_XOPEN, 1, CONF_sysconf, _SC_IOV_MAX }, { "IO_TYPE", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "IPV6", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_IPV6 }, { "IP_SECOPTS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "ISALIST", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_STRING, CONF_SOL, 1, CONF_sysinfo, SI_ISALIST }, { "JOB_CONTROL", { 0UL, 0 }, { 1UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_JOB_CONTROL }, { "KERNEL_CLIST", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_CLIST_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_DISK", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_DISK_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_DMABUF", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_DMABUF_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_FILE", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_FILE_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_FLCKREC", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_FLCKREC_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_INODE", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_INODE_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_MOUNT", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_MOUNT_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_PINODE", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_PINODE_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_PROC", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_PROC_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_REGION", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_REGION_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_S5INODE", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_S5INODE_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SCO, 1, CONF_sysconf, -1 }, { "KERNEL_STAMP", { 0, 0 }, { 0, 0 }, CONF_STRING, CONF_SVID, 1, CONF_sysinfo, -1 }, { "KERN_POINTERS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "KERN_SIM", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "LEGACY", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_XOPEN, 1, CONF_sysconf, -1 }, { "LFS64_CFLAGS", { 0, 0 }, { 0, 0 }, CONF_MINMAX|CONF_UNDERSCORE|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_LFS64_CFLAGS }, { "LFS64_LDFLAGS", { 0, 0 }, { 0, 0 }, CONF_MINMAX|CONF_UNDERSCORE|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_LFS64_LDFLAGS }, { "LFS64_LIBS", { 0, 0 }, { 0, 0 }, CONF_MINMAX|CONF_UNDERSCORE|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_LFS64_LIBS }, { "LFS64_LINTFLAGS", { 0, 0 }, { 0, 0 }, CONF_MINMAX|CONF_UNDERSCORE|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_LFS64_LINTFLAGS }, { "LFS_CFLAGS", { 0, 0 }, { 0, 0 }, CONF_MINMAX|CONF_UNDERSCORE|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_LFS_CFLAGS }, { "LFS_LDFLAGS", { 0, 0 }, { 0, 0 }, CONF_MINMAX|CONF_UNDERSCORE|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_LFS_LDFLAGS }, { "LFS_LIBS", { 0, 0 }, { 0, 0 }, CONF_MINMAX|CONF_UNDERSCORE|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_LFS_LIBS }, { "LFS_LINTFLAGS", { 0, 0 }, { 0, 0 }, CONF_MINMAX|CONF_UNDERSCORE|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_LFS_LINTFLAGS }, { "LINE_MAX", { 0UL, 0 }, { _POSIX2_LINE_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_NOSECTION|CONF_MINMAX_DEF, CONF_POSIX, 2, CONF_sysconf, _SC_LINE_MAX }, { "LINK_MAX", { 0UL, 0 }, { _POSIX_LINK_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_pathconf, _PC_LINK_MAX }, { "LLONG_MAX", { 9223372036854775807UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "LLONG_MIN", { -9223372036854775807L-1L, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "LOCALEDEF", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_LOCALEDEF }, { "LOGIN_NAME_MAX", { 0UL, 0 }, { _POSIX_LOGIN_NAME_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_LOGIN_NAME_MAX }, { "LOGNAME_MAX", { 0UL, 0 }, { 8UL, 0 }, CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_SVID, 1, CONF_sysconf, _SC_LOGNAME_MAX }, { "LONG_BIT", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_XOPEN, 1, CONF_nop, -1 }, { "LONG_MAX", { 2147483647UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "LONG_MIN", { -2147483647L-1L, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "LP64_OFF64", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_XBS5, 1, CONF_sysconf, -1 }, { "LP64_OFF64_CFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "LP64_OFF64_LDFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "LP64_OFF64_LIBS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "LP64_OFF64_LINTFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "LPBIG_OFFBIG", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_XBS5, 1, CONF_sysconf, -1 }, { "LPBIG_OFFBIG_CFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "LPBIG_OFFBIG_LDFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "LPBIG_OFFBIG_LIBS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "LPBIG_OFFBIG_LINTFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_STRING, CONF_XBS5, 1, CONF_confstr, -1 }, { "MACHINE", { 0, 0 }, { 0, 0 }, CONF_STRING, CONF_SVID, 1, CONF_sysinfo, SI_MACHINE }, { "MAPPED_FILES", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_MAPPED_FILES }, { "MAXPID", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_MAXPID }, { "MAX_CANON", { 0UL, 0 }, { _POSIX_MAX_CANON, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_pathconf, _PC_MAX_CANON }, { "MAX_INPUT", { 0UL, 0 }, { _POSIX_MAX_INPUT, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_pathconf, _PC_MAX_INPUT }, { "MB_LEN_MAX", { 5UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "MCAS_OFFSET", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "MEMLOCK", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_MEMLOCK }, { "MEMLOCK_RANGE", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_MEMLOCK_RANGE }, { "MEMORY_PROTECTION", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_MEMORY_PROTECTION }, { "MESSAGE_PASSING", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_MESSAGE_PASSING }, { "MIN_HOLE_SIZE", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_pathconf, _PC_MIN_HOLE_SIZE }, { "MMAP_FIXED_ALIGNMENT", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "MONOTONIC_CLOCK", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_MONOTONIC_CLOCK }, { "MQ_OPEN_MAX", { 0UL, 0 }, { _POSIX_MQ_OPEN_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_MQ_OPEN_MAX }, { "MQ_PRIO_MAX", { 0UL, 0 }, { _POSIX_MQ_PRIO_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_MQ_PRIO_MAX }, { "MSEM_LOCKID", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "MULTI_PROCESS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "NACLS_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SVID, 1, CONF_sysconf, -1 }, { "NAME_MAX", { 0UL, 0 }, { _POSIX_NAME_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_pathconf, _PC_NAME_MAX }, { "NGROUPS_MAX", { 0UL, 0 }, { _POSIX_NGROUPS_MAX, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_NGROUPS_MAX }, { "NL_ARGMAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_XOPEN, 1, CONF_nop, -1 }, { "NL_LANGMAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_XOPEN, 1, CONF_nop, -1 }, { "NL_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "NL_MSGMAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_XOPEN, 1, CONF_nop, -1 }, { "NL_NMAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_XOPEN, 1, CONF_nop, -1 }, { "NL_SETMAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_XOPEN, 1, CONF_nop, -1 }, { "NL_SPECMAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "NL_TEXTMAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_XOPEN, 1, CONF_nop, -1 }, { "NO_TRUNC", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_pathconf, _PC_NO_TRUNC }, { "NPROCESSORS_CONF", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SVID, 1, CONF_sysconf, _SC_NPROCESSORS_CONF }, { "NPROCESSORS_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SVID, 1, CONF_sysconf, _SC_NPROCESSORS_MAX }, { "NPROCESSORS_ONLN", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SVID, 1, CONF_sysconf, _SC_NPROCESSORS_ONLN }, { "NPROC_CONF", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "NPROC_ONLN", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "NSS_BUFLEN_GROUP", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "NSS_BUFLEN_PASSWD", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "NUM_PROCESSORS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "NZERO", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_XOPEN, 1, CONF_nop, -1 }, { "OPEN_MAX", { 0UL, 0 }, { _POSIX_OPEN_MAX, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_OPEN_MAX }, { "OPEN_MAX_CEIL", { OPEN_MAX, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_AST, 1, CONF_nop, -1 }, { "OSREL_MAJ", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "OSREL_MIN", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "OSREL_PATCH", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "OS_BASE", { 0, 0 }, { 0, 0 }, CONF_STRING, CONF_SVID, 1, CONF_sysinfo, -1 }, { "OS_PROVIDER", { 0, 0 }, { 0, 0 }, CONF_STRING, CONF_SVID, 1, CONF_sysinfo, -1 }, { "OS_VERSION", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_STANDARD|CONF_UNDERSCORE, CONF_AES, 1, CONF_sysconf, -1 }, { "PAGESIZE", { 0UL, 0 }, { 4096UL, 0 }, CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_PAGESIZE }, { "PAGE_SIZE", { 0UL, 0 }, { 0UL, 0 }, CONF_MINMAX|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_PAGE_SIZE }, { "PASS_MAX", { 0UL, 0 }, { 8UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_SVID, 1, CONF_sysconf, _SC_PASS_MAX }, { "PATH", { 0, 0 }, { 0, "/bin:/usr/bin" }, CONF_DEFER_CALL|CONF_MINMAX|CONF_UNDERSCORE|CONF_STRING|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_confstr, _CS_PATH }, { "PATH_MAX", { 0UL, 0 }, { _POSIX_PATH_MAX, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_pathconf, _PC_PATH_MAX }, { "PBS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_PBS }, { "PBS_ACCOUNTING", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_PBS_ACCOUNTING }, { "PBS_CHECKPOINT", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_PBS_CHECKPOINT }, { "PBS_LOCATE", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_PBS_LOCATE }, { "PBS_MESSAGE", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_PBS_MESSAGE }, { "PBS_TRACK", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_PBS_TRACK }, { "PHYS_PAGES", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SUN, 1, CONF_sysconf, _SC_PHYS_PAGES }, { "PID_MAX", { 0UL, 0 }, { 999999UL, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_SVID, 1, CONF_sysconf, -1 }, { "PII", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "PII_INTERNET", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "PII_INTERNET_DGRAM", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "PII_INTERNET_STREAM", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "PII_OSI", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "PII_OSI_CLTS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "PII_OSI_COTS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "PII_OSI_M", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "PII_SOCKET", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "PII_XTI", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "PIPE_BUF", { 0UL, 0 }, { _POSIX_PIPE_BUF, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_pathconf, _PC_PIPE_BUF }, { "PLATFORM", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_STRING, CONF_SOL, 1, CONF_sysinfo, SI_PLATFORM }, { "POLL", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "PRIORITIZED_IO", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_PRIORITIZED_IO }, { "PRIORITY_SCHEDULING", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_PRIORITY_SCHEDULING }, { "PRIO_IO", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_pathconf, _PC_PRIO_IO }, { "PROC_RSRC_MGR", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "PTHREAD_DESTRUCTOR_ITERATIONS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "PTHREAD_KEYS_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "PTHREAD_STACK_MIN", { 4096UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_LIMIT|CONF_LIMIT_DEF, CONF_POSIX, 1, CONF_nop, -1 }, { "PTHREAD_THREADS_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "PTRDIFF_MAX", { 9223372036854775807UL, 0 }, { 65535UL, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_LIMIT_DEF|CONF_MINMAX_DEF, CONF_C, 1, CONF_nop, -1 }, { "PTRDIFF_MIN", { -9223372036854775807L-1L, 0 }, { -65535L, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_LIMIT_DEF|CONF_MINMAX_DEF, CONF_C, 1, CONF_nop, -1 }, { "RAW_SOCKETS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_RAW_SOCKETS }, { "READER_WRITER_LOCKS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_READER_WRITER_LOCKS }, { "REALTIME", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_XOPEN, 1, CONF_sysconf, -1 }, { "REALTIME_SIGNALS", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_REALTIME_SIGNALS }, { "REALTIME_THREADS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_XOPEN, 1, CONF_sysconf, -1 }, { "REC_INCR_XFER_SIZE", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_pathconf, _PC_REC_INCR_XFER_SIZE }, { "REC_MAX_XFER_SIZE", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_pathconf, _PC_REC_MAX_XFER_SIZE }, { "REC_MIN_XFER_SIZE", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_pathconf, _PC_REC_MIN_XFER_SIZE }, { "REC_XFER_ALIGN", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_pathconf, _PC_REC_XFER_ALIGN }, { "REENTRANT_FUNCTIONS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "REGEXP", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_REGEXP }, { "REGEX_VERSION", { 0UL, 0 }, { 20030916UL, 0 }, CONF_FEATURE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "RELEASE", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_AST, 1, CONF_nop, -1 }, { "RESOURCE_LIMITS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "RE_DUP_MAX", { 0UL, 0 }, { _POSIX2_RE_DUP_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_NOSECTION|CONF_MINMAX_DEF, CONF_POSIX, 2, CONF_sysconf, _SC_RE_DUP_MAX }, { "RTSIG_MAX", { 0UL, 0 }, { _POSIX_RTSIG_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_RTSIG_MAX }, { "SATTR_ENABLED", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_pathconf, _PC_SATTR_ENABLED }, { "SATTR_EXISTS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_pathconf, _PC_SATTR_EXISTS }, { "SAVED_IDS", { 0UL, 0 }, { 1UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_SAVED_IDS }, { "SCHAR_MAX", { 127UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "SCHAR_MIN", { -127L-1L, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "SECURITY_CLASS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "SELECT", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "SEMAPHORES", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_SEMAPHORES }, { "SEM_NSEMS_MAX", { 0UL, 0 }, { _POSIX_SEM_NSEMS_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_SEM_NSEMS_MAX }, { "SEM_VALUE_MAX", { 0UL, 0 }, { _POSIX_SEM_VALUE_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_SEM_VALUE_MAX }, { "SF_BUFSIZE", { 0UL, 0 }, { 0UL, 0 }, CONF_MINMAX|CONF_UNDERSCORE, CONF_AST, 1, CONF_nop, -1 }, { "SH", { 0, 0 }, { 0, "/bin/sh" }, CONF_MINMAX|CONF_UNDERSCORE|CONF_STRING|CONF_MINMAX_DEF, CONF_AST, 1, CONF_confstr, -1 }, { "SHARED_MEMORY_OBJECTS", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_SHARED_MEMORY_OBJECTS }, { "SHELL", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_SHELL }, { "SHM", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_STANDARD|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_XOPEN, 1, CONF_sysconf, _SC_XOPEN_SHM }, { "SHRT_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_C, 1, CONF_nop, -1 }, { "SHRT_MIN", { -32767L-1L, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "SIGQUEUE_MAX", { 0UL, 0 }, { _POSIX_SIGQUEUE_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_SIGQUEUE_MAX }, { "SIGRT_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SVID, 1, CONF_sysconf, _SC_SIGRT_MAX }, { "SIGRT_MIN", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_SVID, 1, CONF_sysconf, _SC_SIGRT_MIN }, { "SIG_ATOMIC_MAX", { 2147483647UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "SIG_ATOMIC_MIN", { -2147483647L-1L, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "SIZE_MAX", { UINT_MAX, 0 }, { 65535UL, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_LIMIT_DEF|CONF_MINMAX_DEF, CONF_C, 1, CONF_nop, -1 }, { "SLVM_MAXNODES", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "SOCK_MAXBUF", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "SOFTPOWER", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "SPAWN", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_SPAWN }, { "SPIN_LOCKS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_SPIN_LOCKS }, { "SPLIT_CACHE", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_SPLIT_CACHE }, { "SPORADIC_SERVER", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_SPORADIC_SERVER }, { "SRPC_DOMAIN", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "SSIZE_MAX", { INT_MAX, 0 }, { _POSIX_SSIZE_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_LIMIT_DEF|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_nop, -1 }, { "SS_REPL_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_SS_REPL_MAX }, { "STACK_PROT", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_STACK_PROT }, { "STD_BLK", { 0UL, 0 }, { 1024UL, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_SVID, 1, CONF_sysconf, -1 }, { "STREAMS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_STANDARD|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_XOPEN, 1, CONF_sysconf, _SC_XOPEN_STREAMS }, { "STREAM_MAX", { 0UL, 0 }, { _POSIX_STREAM_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_STREAM_MAX }, { "SW_DEV", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_SW_DEV }, { "SYMLINKS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_pathconf, _PC_2_SYMLINKS }, { "SYMLINK_MAX", { 0UL, 0 }, { _POSIX_SYMLINK_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_pathconf, _PC_SYMLINK_MAX }, { "SYMLOOP_MAX", { 0UL, 0 }, { _POSIX_SYMLOOP_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_SYMLOOP_MAX }, { "SYNCHRONIZED_IO", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_SYNCHRONIZED_IO }, { "SYNC_IO", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_pathconf, _PC_SYNC_IO }, { "SYSNAME", { 0, 0 }, { 0, 0 }, CONF_STRING, CONF_SVID, 1, CONF_sysinfo, SI_SYSNAME }, { "SYSPID_MAX", { 0UL, 0 }, { 2UL, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_SVID, 1, CONF_sysconf, -1 }, { "THREADS", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_THREADS }, { "THREADS_PRIO_CEILING", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, -1 }, { "THREADS_PRIO_INHERIT", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, -1 }, { "THREAD_ATTR_STACKADDR", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_ATTR_STACKADDR }, { "THREAD_ATTR_STACKSIZE", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_ATTR_STACKSIZE }, { "THREAD_CPUTIME", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_CPUTIME }, { "THREAD_DESTRUCTOR_ITERATIONS", { 0UL, 0 }, { _POSIX_THREAD_DESTRUCTOR_ITERATIONS, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_PREFIX_ONLY|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_DESTRUCTOR_ITERATIONS }, { "THREAD_KEYS_MAX", { 0UL, 0 }, { _POSIX_THREAD_KEYS_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_PREFIX_ONLY|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_KEYS_MAX }, { "THREAD_PRIORITY_SCHEDULING", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_PRIORITY_SCHEDULING }, { "THREAD_PRIO_INHERIT", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_PRIO_INHERIT }, { "THREAD_PRIO_PROTECT", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_PRIO_PROTECT }, { "THREAD_PROCESS_SHARED", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_PROCESS_SHARED }, { "THREAD_SAFE_FUNCTIONS", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_SAFE_FUNCTIONS }, { "THREAD_SPORADIC_SERVER", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_SPORADIC_SERVER }, { "THREAD_STACK_MIN", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_STACK_MIN }, { "THREAD_THREADS_MAX", { 0UL, 0 }, { _POSIX_THREAD_THREADS_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_PREFIX_ONLY|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_THREAD_THREADS_MAX }, { "TIMEOUTS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_TIMEOUTS }, { "TIMERS", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_TIMERS }, { "TIMER_MAX", { 0UL, 0 }, { _POSIX_TIMER_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_TIMER_MAX }, { "TIMESTAMP_RESOLUTION", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_pathconf, _PC_TIMESTAMP_RESOLUTION }, { "TMP", { 0, 0 }, { 0, "/tmp" }, CONF_MINMAX|CONF_UNDERSCORE|CONF_STRING|CONF_MINMAX_DEF, CONF_AST, 1, CONF_confstr, -1 }, { "TMP_MAX", { 17576UL, 0 }, { 10000UL, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_LIMIT_DEF|CONF_MINMAX_DEF, CONF_C, 1, CONF_sysconf, -1 }, { "TRACE", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_TRACE }, { "TRACE_EVENT_FILTER", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_TRACE_EVENT_FILTER }, { "TRACE_EVENT_NAME_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_TRACE_EVENT_NAME_MAX }, { "TRACE_INHERIT", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_TRACE_INHERIT }, { "TRACE_LOG", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_TRACE_LOG }, { "TRACE_NAME_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_TRACE_NAME_MAX }, { "TRACE_SYS_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_TRACE_SYS_MAX }, { "TRACE_USER_EVENT_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_TRACE_USER_EVENT_MAX }, { "TTY_NAME_MAX", { 0UL, 0 }, { _POSIX_TTY_NAME_MAX, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_TTY_NAME_MAX }, { "TYPED_MEMORY_OBJECTS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_TYPED_MEMORY_OBJECTS }, { "TZNAME_MAX", { 0UL, 0 }, { _POSIX_TZNAME_MAX, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_POSIX, 1, CONF_sysconf, _SC_TZNAME_MAX }, { "T_IOV_MAX", { 0UL, 0 }, { 0UL, 0 }, 0, CONF_C, 1, CONF_sysconf, _SC_T_IOV_MAX }, { "UADDR_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_UADDR_MAX }, { "UCHAR_MAX", { 255UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "UCHAR_MIN", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_C, 1, CONF_nop, -1 }, { "UID_MAX", { 0UL, 0 }, { 60002UL, 0 }, CONF_LIMIT|CONF_MINMAX|CONF_UNDERSCORE|CONF_MINMAX_DEF, CONF_SVID, 1, CONF_sysconf, -1 }, { "UINT_MAX", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_C, 1, CONF_nop, -1 }, { "UIO_MAXIOV", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_nop, -1 }, { "ULLONG_MAX", { 18446744073709551615UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "ULONG_MAX", { 4294967295UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "UNIX", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_STANDARD|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_XOPEN, 1, CONF_sysconf, _SC_XOPEN_UNIX }, { "UPE", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 2, CONF_sysconf, _SC_2_UPE }, { "USER_LIMIT", { 0, 0 }, { 0, 0 }, CONF_STRING, CONF_SVID, 1, CONF_sysinfo, -1 }, { "USHRT_MAX", { 65535UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "V6_ILP32_OFF32", { 0UL, 0 }, { 0UL, 0 }, CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_V6_ILP32_OFF32 }, { "V6_ILP32_OFF32_CFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_ILP32_OFF32_CFLAGS }, { "V6_ILP32_OFF32_LDFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_ILP32_OFF32_LDFLAGS }, { "V6_ILP32_OFF32_LIBS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_ILP32_OFF32_LIBS }, { "V6_ILP32_OFF32_LINTFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS }, { "V6_ILP32_OFFBIG", { 0UL, 0 }, { 0UL, 0 }, CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_V6_ILP32_OFFBIG }, { "V6_ILP32_OFFBIG_CFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS }, { "V6_ILP32_OFFBIG_LDFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS }, { "V6_ILP32_OFFBIG_LIBS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_ILP32_OFFBIG_LIBS }, { "V6_ILP32_OFFBIG_LINTFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS }, { "V6_LP64_OFF64", { 0UL, 0 }, { 0UL, 0 }, CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_V6_LP64_OFF64 }, { "V6_LP64_OFF64_CFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_LP64_OFF64_CFLAGS }, { "V6_LP64_OFF64_LDFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_LP64_OFF64_LDFLAGS }, { "V6_LP64_OFF64_LIBS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_LP64_OFF64_LIBS }, { "V6_LP64_OFF64_LINTFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_LP64_OFF64_LINTFLAGS }, { "V6_LPBIG_OFFBIG", { 0UL, 0 }, { 0UL, 0 }, CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_sysconf, _SC_V6_LPBIG_OFFBIG }, { "V6_LPBIG_OFFBIG_CFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS }, { "V6_LPBIG_OFFBIG_LDFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS }, { "V6_LPBIG_OFFBIG_LIBS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_LPBIG_OFFBIG_LIBS }, { "V6_LPBIG_OFFBIG_LINTFLAGS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS }, { "V6_WIDTH_RESTRICTED_ENVS", { 0, 0 }, { 0, 0 }, CONF_FEATURE|CONF_PREFIXED|CONF_NOUNDERSCORE|CONF_PREFIX_ONLY|CONF_STRING, CONF_POSIX, 1, CONF_confstr, _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS }, { "VDISABLE", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE|CONF_PREFIX_ONLY, CONF_POSIX, 1, CONF_pathconf, _PC_VDISABLE }, { "VERSION", { 0, 0 }, { 0, 0 }, CONF_PREFIXED|CONF_STANDARD|CONF_STRING, CONF_SVID, 1, CONF_sysinfo, -1 }, { "VERSION", { 0UL, 0 }, { 200112UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_PREFIXED|CONF_STANDARD|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, _SC_VERSION }, { "VERSION", { 0UL, 0 }, { 200112UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_PREFIXED|CONF_STANDARD|CONF_UNDERSCORE, CONF_POSIX, 2, CONF_sysconf, _SC_VERSION }, { "VERSION", { 0UL, 0 }, { 600UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_PREFIXED|CONF_STANDARD|CONF_UNDERSCORE, CONF_XOPEN, 1, CONF_sysconf, _SC_XOPEN_VERSION }, { "VERSION", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_MM|CONF_FEATURE|CONF_PREFIXED|CONF_STANDARD|CONF_UNDERSCORE, CONF_XPG, 3, CONF_sysconf, _SC_VERSION }, { "VERSION", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_MM|CONF_FEATURE|CONF_PREFIXED|CONF_STANDARD|CONF_UNDERSCORE, CONF_XPG, 4, CONF_sysconf, _SC_VERSION }, { "VERSION", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_AST, 1, CONF_nop, -1 }, { "VERSION", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_GNU, 1, CONF_nop, -1 }, { "VERSION", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_TRUSTEDBSD, 1, CONF_nop, -1 }, { "VERSION_88", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_LIMIT|CONF_STANDARD|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "VERSION_88", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_C, 1, CONF_nop, -1 }, { "VERSION_90", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_LIMIT|CONF_STANDARD|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "VERSION_90", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_C, 1, CONF_nop, -1 }, { "VERSION_93", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_LIMIT|CONF_STANDARD|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_sysconf, -1 }, { "VERSION_93", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_C, 1, CONF_nop, -1 }, { "WCHAR_MAX", { 2147483647UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "WCHAR_MIN", { -2147483647L-1L, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "WINT_MAX", { 2147483647UL, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "WINT_MIN", { -2147483647L-1L, 0 }, { 0UL, 0 }, CONF_LIMIT|CONF_LIMIT_DEF, CONF_C, 1, CONF_nop, -1 }, { "WORD_BIT", { 0UL, 0 }, { 0UL, 0 }, CONF_LIMIT, CONF_XOPEN, 1, CONF_nop, -1 }, { "XATTR_ENABLED", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_pathconf, _PC_XATTR_ENABLED }, { "XATTR_EXISTS", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_POSIX, 1, CONF_pathconf, _PC_XATTR_EXISTS }, { "XCU_VERSION", { 0UL, 0 }, { 0UL, 0 }, CONF_DEFER_CALL|CONF_DEFER_MM|CONF_FEATURE|CONF_STANDARD|CONF_UNDERSCORE, CONF_XOPEN, 1, CONF_sysconf, _SC_XOPEN_XCU_VERSION }, { "XPG2", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_XOPEN, 1, CONF_nop, -1 }, { "XPG3", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_XOPEN, 1, CONF_nop, -1 }, { "XPG4", { 0UL, 0 }, { 0UL, 0 }, CONF_FEATURE|CONF_UNDERSCORE, CONF_XOPEN, 1, CONF_nop, -1 }, }; const int conf_elements = (int)sizeof(conf) / (int)sizeof(conf[0]); #ifndef _CONFTAB_H #define _CONFTAB_H #if !defined(SYS_NMLEN) #define SYS_NMLEN 9 #endif #include /* : : generated by conf from contrib/ast/src/lib/libast/comp/conf.tab : : */ #if !defined(const) && !defined(__STDC__) && !defined(__cplusplus) && !defined(c_plusplus) #define const #endif #define conf _ast_conf_data #define conf_elements _ast_conf_ndata #define prefix _ast_conf_prefix #define prefix_elements _ast_conf_nprefix #define CONF_nop 0 #define CONF_confstr 1 #define CONF_pathconf 2 #define CONF_sysconf 3 #define CONF_sysinfo 4 #define CONF_C 0 #define CONF_POSIX 1 #define CONF_SVID 2 #define CONF_XOPEN 3 #define CONF_SUN 4 #define CONF_XBS5 5 #define CONF_SCO 6 #define CONF_AST 7 #define CONF_AES 8 #define CONF_XPG 9 #define CONF_GNU 10 #define CONF_TRUSTEDBSD 11 #define CONF_SOL 12 #define CONF_call 13 #define _pth_getconf "/usr/bin/getconf" #define _pth_getconf_a "-a" #define CONF_DEFER_CALL 0x0001 #define CONF_DEFER_MM 0x0002 #define CONF_FEATURE 0x0004 #define CONF_LIMIT 0x0008 #define CONF_LIMIT_DEF 0x0010 #define CONF_MINMAX 0x0020 #define CONF_MINMAX_DEF 0x0040 #define CONF_NOSECTION 0x0080 #define CONF_NOUNDERSCORE 0x0100 #define CONF_PREFIX_ONLY 0x0200 #define CONF_PREFIXED 0x0400 #define CONF_STANDARD 0x0800 #define CONF_STRING 0x1000 #define CONF_UNDERSCORE 0x2000 #define CONF_USER 0x4000 struct Conf_s; typedef struct Conf_s Conf_t; typedef struct Value_s { intmax_t number; const char* string; } Value_t; struct Conf_s { const char name[32]; Value_t limit; Value_t minmax; unsigned int flags; short standard; short section; short call; short op; }; typedef struct Prefix_s { const char name[16]; short length; short standard; short call; } Prefix_t; extern const Conf_t conf[]; extern const int conf_elements; extern const Prefix_t prefix[]; extern const int prefix_elements; #endif /* : : generated by cmd/ast/tools/lcgen : : */ #pragma prototyped #ifndef _LC_H #define _LC_H 1 #include #define LC_abbreviated 0x00001 #define LC_checked 0x00002 #define LC_debug 0x00004 #define LC_default 0x00008 #define LC_defined 0x00010 #define LC_local 0x00020 #define LC_primary 0x00040 #define LC_qualified 0x00080 #define LC_undefined 0x00100 #define LC_utf8 0x00200 #define LC_verbose 0x00400 #define LC_setlocale 0x10000 #define LC_setenv 0x20000 #define LC_user 0x40000 #define LC_language_attribute_max 2 #define LC_territory_language_max 4 struct Lc_s; typedef struct Lc_info_s { const struct Lc_s* lc; unsigned long number; void* data; } Lc_info_t; typedef struct Lc_attribute_s { const char* name; unsigned long flags; unsigned long index; } Lc_attribute_t; typedef struct Lc_charset_s { const char* code; const char* alternates; const char* ms; unsigned long index; } Lc_charset_t; typedef struct Lc_language_s { const char* code; const char* name; const char* alternates; const Lc_charset_t* charset; unsigned long flags; unsigned long index; const Lc_attribute_t* attributes[LC_language_attribute_max]; } Lc_language_t; typedef struct Lc_territory_s { const char* code; const char* name; unsigned long flags; unsigned long index; const Lc_language_t* languages[LC_territory_language_max]; #ifdef _LC_TERRITORY_PRIVATE_ _LC_TERRITORY_PRIVATE_ #endif } Lc_territory_t; typedef struct Lc_map_s { const char* code; const Lc_language_t* language; const Lc_territory_t* territory; const Lc_charset_t* charset; const Lc_attribute_t* attribute; } Lc_map_t; typedef struct Lc_attribute_list_s { struct Lc_attribute_list_s* next; const Lc_attribute_t* attribute; } Lc_attribute_list_t; typedef struct Lc_s { const char* name; const char* code; const Lc_language_t* language; const Lc_territory_t* territory; const Lc_charset_t* charset; const Lc_attribute_list_t* attributes; unsigned long flags; unsigned long index; #ifdef _LC_PRIVATE_ _LC_PRIVATE_ #endif } Lc_t; struct Lc_category_s; typedef int (*Lc_category_set_f)(struct Lc_category_s*); typedef struct Lc_category_s { const char* name; int external; int internal; Lc_category_set_f setf; Lc_t* prev; unsigned int flags; } Lc_category_t; #if _BLD_ast && defined(__EXPORT__) #define extern __EXPORT__ #endif extern size_t lccanon(Lc_t*, unsigned long flags, char*, size_t); extern Lc_category_t* lccategories(void); extern int lcindex(int, int); extern Lc_info_t* lcinfo(int); extern Lc_t* lcmake(const char*); extern Lc_t* lcscan(Lc_t*); #undef extern #endif /* : : generated by cmd/ast/tools/lcgen : : */ #include "lclib.h" #include "lclang.h" const Lc_attribute_t attribute_es[] = { {"traditional",LC_default, #ifdef SUBLANG_SPANISH_TRADITIONAL SUBLANG_SPANISH_TRADITIONAL, #else 0, #endif }, {"modern",0, #ifdef SUBLANG_SPANISH_MODERN SUBLANG_SPANISH_MODERN, #else 0, #endif }, }; const Lc_charset_t lc_charsets[] = { {"iso8859-1","latin1|west-europe","1252",}, {"iso8859-2","latin2|east-europe","1250",}, {"iso8859-3","latin3|south-europe","1257",}, {"iso8859-4","latin4|north-europe",0}, {"iso8859-5","cyrillic","1251",}, {"iso8859-6","arabic","1256",}, {"iso8859-7","greek","1253",}, {"iso8859-8","hebrew","1255",}, {"iso8859-9","latin5|turkish","1254",}, {"iso8859-10","latin6|nordic",0}, {"iso8859-13","latin7",0}, {"iso8859-14","latin8|celtic",0}, {"iso8859-15","latin0",0}, {"iso2022","japanese|korean",0}, {"iso4873","japanese-ascii|korean-ascii",0}, {"koi8-r","russian",0}, {"utf8","plan9",0}, 0 }; const Lc_language_t lc_languages[] = { {"C","C","POSIX",&lc_charsets[0],LC_default,0,0,0,}, {"debug","debug",0,&lc_charsets[0],LC_debug,0,0,0,}, {"aa","afar",0,&lc_charsets[0],0, #ifdef LANG_AFAR LANG_AFAR, #else 0, #endif 0,0, }, {"ab","abkhazian",0,&lc_charsets[0],0, #ifdef LANG_ABKHAZIAN LANG_ABKHAZIAN, #else 0, #endif 0,0, }, {"af","afrikaans","afr",&lc_charsets[0],0, #ifdef LANG_AFRIKAANS LANG_AFRIKAANS, #else 0, #endif 0,0, }, {"am","amharic",0,&lc_charsets[0],0, #ifdef LANG_AMHARIC LANG_AMHARIC, #else 0, #endif 0,0, }, {"ar","arabic","ara",&lc_charsets[5],0, #ifdef LANG_ARABIC LANG_ARABIC, #else 0, #endif 0,0, }, {"as","assamese",0,&lc_charsets[0],0, #ifdef LANG_ASSAMESE LANG_ASSAMESE, #else 0, #endif 0,0, }, {"ay","aymara",0,&lc_charsets[0],0, #ifdef LANG_AYMARA LANG_AYMARA, #else 0, #endif 0,0, }, {"az","azerbaijani",0,&lc_charsets[0],0, #ifdef LANG_AZERBAIJANI LANG_AZERBAIJANI, #else 0, #endif 0,0, }, {"ba","bashkir",0,&lc_charsets[0],0, #ifdef LANG_BASHKIR LANG_BASHKIR, #else 0, #endif 0,0, }, {"be","belarusian","bel",&lc_charsets[0],0, #ifdef LANG_BELARUSIAN LANG_BELARUSIAN, #else 0, #endif 0,0, }, {"bg","bulgarian","bul",&lc_charsets[4],0, #ifdef LANG_BULGARIAN LANG_BULGARIAN, #else 0, #endif 0,0, }, {"bh","bihari",0,&lc_charsets[0],0, #ifdef LANG_BIHARI LANG_BIHARI, #else 0, #endif 0,0, }, {"bi","bislama",0,&lc_charsets[0],0, #ifdef LANG_BISLAMA LANG_BISLAMA, #else 0, #endif 0,0, }, {"bn","bengali-bangla",0,&lc_charsets[0],0, #ifdef LANG_BENGALI_BANGLA LANG_BENGALI_BANGLA, #else 0, #endif 0,0, }, {"bo","tibetan",0,&lc_charsets[0],0, #ifdef LANG_TIBETAN LANG_TIBETAN, #else 0, #endif 0,0, }, {"br","breton",0,&lc_charsets[0],0, #ifdef LANG_BRETON LANG_BRETON, #else 0, #endif 0,0, }, {"ca","catalan","cat",&lc_charsets[0],0, #ifdef LANG_CATALAN LANG_CATALAN, #else 0, #endif 0,0, }, {"co","corsican",0,&lc_charsets[0],0, #ifdef LANG_CORSICAN LANG_CORSICAN, #else 0, #endif 0,0, }, {"cs","czech","ces|cze",&lc_charsets[1],0, #ifdef LANG_CZECH LANG_CZECH, #else 0, #endif 0,0, }, {"cy","welsh",0,&lc_charsets[0],0, #ifdef LANG_WELSH LANG_WELSH, #else 0, #endif 0,0, }, {"da","danish","dan",&lc_charsets[0],0, #ifdef LANG_DANISH LANG_DANISH, #else 0, #endif 0,0, }, {"de","german","deu|ger",&lc_charsets[0],0, #ifdef LANG_GERMAN LANG_GERMAN, #else 0, #endif 0,0, }, {"dz","bhutani",0,&lc_charsets[0],0, #ifdef LANG_BHUTANI LANG_BHUTANI, #else 0, #endif 0,0, }, {"el","greek","ell|gre",&lc_charsets[6],0, #ifdef LANG_GREEK LANG_GREEK, #else 0, #endif 0,0, }, {"en","english","eng",&lc_charsets[0],0, #ifdef LANG_ENGLISH LANG_ENGLISH, #else 0, #endif 0,0, }, {"eo","esperanto",0,&lc_charsets[0],0, #ifdef LANG_ESPERANTO LANG_ESPERANTO, #else 0, #endif 0,0, }, {"es","spanish","spa",&lc_charsets[0],0, #ifdef LANG_SPANISH LANG_SPANISH, #else 0, #endif &attribute_es[0],&attribute_es[1], }, {"et","estonian","est",&lc_charsets[2],0, #ifdef LANG_ESTONIAN LANG_ESTONIAN, #else 0, #endif 0,0, }, {"eu","basque","eus|baq",&lc_charsets[0],0, #ifdef LANG_BASQUE LANG_BASQUE, #else 0, #endif 0,0, }, {"fa","persian",0,&lc_charsets[0],0, #ifdef LANG_PERSIAN LANG_PERSIAN, #else 0, #endif 0,0, }, {"fi","finnish","fin",&lc_charsets[0],0, #ifdef LANG_FINNISH LANG_FINNISH, #else 0, #endif 0,0, }, {"fj","fiji",0,&lc_charsets[0],0, #ifdef LANG_FIJI LANG_FIJI, #else 0, #endif 0,0, }, {"fo","faeroese",0,&lc_charsets[0],0, #ifdef LANG_FAEROESE LANG_FAEROESE, #else 0, #endif 0,0, }, {"fr","french","fra|fre",&lc_charsets[0],0, #ifdef LANG_FRENCH LANG_FRENCH, #else 0, #endif 0,0, }, {"fy","frisian",0,&lc_charsets[0],0, #ifdef LANG_FRISIAN LANG_FRISIAN, #else 0, #endif 0,0, }, {"ga","irish",0,&lc_charsets[11],0, #ifdef LANG_IRISH LANG_IRISH, #else 0, #endif 0,0, }, {"gd","scots-gaelic",0,&lc_charsets[11],0, #ifdef LANG_SCOTS_GAELIC LANG_SCOTS_GAELIC, #else 0, #endif 0,0, }, {"gl","galician",0,&lc_charsets[0],0, #ifdef LANG_GALICIAN LANG_GALICIAN, #else 0, #endif 0,0, }, {"gn","guarani",0,&lc_charsets[0],0, #ifdef LANG_GUARANI LANG_GUARANI, #else 0, #endif 0,0, }, {"gu","gujarati",0,&lc_charsets[0],0, #ifdef LANG_GUJARATI LANG_GUJARATI, #else 0, #endif 0,0, }, {"ha","hausa",0,&lc_charsets[0],0, #ifdef LANG_HAUSA LANG_HAUSA, #else 0, #endif 0,0, }, {"he","hebrew","heb",&lc_charsets[7],0, #ifdef LANG_HEBREW LANG_HEBREW, #else 0, #endif 0,0, }, {"hi","hindi",0,&lc_charsets[0],0, #ifdef LANG_HINDI LANG_HINDI, #else 0, #endif 0,0, }, {"hr","croatian","hrv|scr",&lc_charsets[1],0, #ifdef LANG_CROATIAN LANG_CROATIAN, #else 0, #endif 0,0, }, {"hu","hungarian","hun",&lc_charsets[1],0, #ifdef LANG_HUNGARIAN LANG_HUNGARIAN, #else 0, #endif 0,0, }, {"hy","armenian",0,&lc_charsets[0],0, #ifdef LANG_ARMENIAN LANG_ARMENIAN, #else 0, #endif 0,0, }, {"ia","interlingua",0,&lc_charsets[0],0, #ifdef LANG_INTERLINGUA LANG_INTERLINGUA, #else 0, #endif 0,0, }, {"id","indonesian","ind",&lc_charsets[0],0, #ifdef LANG_INDONESIAN LANG_INDONESIAN, #else 0, #endif 0,0, }, {"ie","interlingue",0,&lc_charsets[0],0, #ifdef LANG_INTERLINGUE LANG_INTERLINGUE, #else 0, #endif 0,0, }, {"ik","inupiak",0,&lc_charsets[0],0, #ifdef LANG_INUPIAK LANG_INUPIAK, #else 0, #endif 0,0, }, {"in","indonesian",0,&lc_charsets[0],0, #ifdef LANG_INDONESIAN LANG_INDONESIAN, #else 0, #endif 0,0, }, {"is","icelandic","isl|ice",&lc_charsets[0],0, #ifdef LANG_ICELANDIC LANG_ICELANDIC, #else 0, #endif 0,0, }, {"it","italian","ita",&lc_charsets[0],0, #ifdef LANG_ITALIAN LANG_ITALIAN, #else 0, #endif 0,0, }, {"iw","hebrew",0,&lc_charsets[0],0, #ifdef LANG_HEBREW LANG_HEBREW, #else 0, #endif 0,0, }, {"ja","japanese","jpn",&lc_charsets[0],0, #ifdef LANG_JAPANESE LANG_JAPANESE, #else 0, #endif 0,0, }, {"ji","yiddish",0,&lc_charsets[0],0, #ifdef LANG_YIDDISH LANG_YIDDISH, #else 0, #endif 0,0, }, {"jw","javanese",0,&lc_charsets[0],0, #ifdef LANG_JAVANESE LANG_JAVANESE, #else 0, #endif 0,0, }, {"ka","georgian",0,&lc_charsets[0],0, #ifdef LANG_GEORGIAN LANG_GEORGIAN, #else 0, #endif 0,0, }, {"kk","kazakh","kaz",&lc_charsets[0],0, #ifdef LANG_KAZAKH LANG_KAZAKH, #else 0, #endif 0,0, }, {"kl","greenlandic",0,&lc_charsets[0],0, #ifdef LANG_GREENLANDIC LANG_GREENLANDIC, #else 0, #endif 0,0, }, {"km","cambodian",0,&lc_charsets[0],0, #ifdef LANG_CAMBODIAN LANG_CAMBODIAN, #else 0, #endif 0,0, }, {"kn","kannada",0,&lc_charsets[0],0, #ifdef LANG_KANNADA LANG_KANNADA, #else 0, #endif 0,0, }, {"ko","korean","kor",&lc_charsets[0],0, #ifdef LANG_KOREAN LANG_KOREAN, #else 0, #endif 0,0, }, {"ks","kashmiri",0,&lc_charsets[0],0, #ifdef LANG_KASHMIRI LANG_KASHMIRI, #else 0, #endif 0,0, }, {"ku","kurdish",0,&lc_charsets[0],0, #ifdef LANG_KURDISH LANG_KURDISH, #else 0, #endif 0,0, }, {"ky","kirghiz",0,&lc_charsets[0],0, #ifdef LANG_KIRGHIZ LANG_KIRGHIZ, #else 0, #endif 0,0, }, {"la","latin",0,&lc_charsets[0],0, #ifdef LANG_LATIN LANG_LATIN, #else 0, #endif 0,0, }, {"ln","lingala",0,&lc_charsets[0],0, #ifdef LANG_LINGALA LANG_LINGALA, #else 0, #endif 0,0, }, {"lo","laothian",0,&lc_charsets[0],0, #ifdef LANG_LAOTHIAN LANG_LAOTHIAN, #else 0, #endif 0,0, }, {"lt","lithuanian","lit",&lc_charsets[10],0, #ifdef LANG_LITHUANIAN LANG_LITHUANIAN, #else 0, #endif 0,0, }, {"lv","latvian","lav",&lc_charsets[10],0, #ifdef LANG_LATVIAN LANG_LATVIAN, #else 0, #endif 0,0, }, {"mg","malagasy",0,&lc_charsets[0],0, #ifdef LANG_MALAGASY LANG_MALAGASY, #else 0, #endif 0,0, }, {"mi","maori",0,&lc_charsets[0],0, #ifdef LANG_MAORI LANG_MAORI, #else 0, #endif 0,0, }, {"mk","macedonian","mkd|mac",&lc_charsets[0],0, #ifdef LANG_MACEDONIAN LANG_MACEDONIAN, #else 0, #endif 0,0, }, {"ml","malayalam","mal",&lc_charsets[0],0, #ifdef LANG_MALAYALAM LANG_MALAYALAM, #else 0, #endif 0,0, }, {"mn","mongolian",0,&lc_charsets[0],0, #ifdef LANG_MONGOLIAN LANG_MONGOLIAN, #else 0, #endif 0,0, }, {"mo","moldavian",0,&lc_charsets[0],0, #ifdef LANG_MOLDAVIAN LANG_MOLDAVIAN, #else 0, #endif 0,0, }, {"mr","marathi",0,&lc_charsets[0],0, #ifdef LANG_MARATHI LANG_MARATHI, #else 0, #endif 0,0, }, {"ms","malay","msa|may",&lc_charsets[0],0, #ifdef LANG_MALAY LANG_MALAY, #else 0, #endif 0,0, }, {"mt","maltese",0,&lc_charsets[0],0, #ifdef LANG_MALTESE LANG_MALTESE, #else 0, #endif 0,0, }, {"my","burmese",0,&lc_charsets[0],0, #ifdef LANG_BURMESE LANG_BURMESE, #else 0, #endif 0,0, }, {"na","nauru",0,&lc_charsets[0],0, #ifdef LANG_NAURU LANG_NAURU, #else 0, #endif 0,0, }, {"nb","norwegian-bokmal","nob",&lc_charsets[0],0, #ifdef LANG_NORWEGIAN_BOKMAL LANG_NORWEGIAN_BOKMAL, #else 0, #endif 0,0, }, {"ne","nepali",0,&lc_charsets[0],0, #ifdef LANG_NEPALI LANG_NEPALI, #else 0, #endif 0,0, }, {"nl","dutch","nld|dut",&lc_charsets[0],0, #ifdef LANG_DUTCH LANG_DUTCH, #else 0, #endif 0,0, }, {"nn","norwegian-nynorsk","nno|non",&lc_charsets[0],0, #ifdef LANG_NORWEGIAN_NYNORSK LANG_NORWEGIAN_NYNORSK, #else 0, #endif 0,0, }, {"no","norwegian","nor",&lc_charsets[0],0, #ifdef LANG_NORWEGIAN LANG_NORWEGIAN, #else 0, #endif 0,0, }, {"oc","occitan",0,&lc_charsets[0],0, #ifdef LANG_OCCITAN LANG_OCCITAN, #else 0, #endif 0,0, }, {"om","oromo",0,&lc_charsets[0],0, #ifdef LANG_OROMO LANG_OROMO, #else 0, #endif 0,0, }, {"or","oriya",0,&lc_charsets[0],0, #ifdef LANG_ORIYA LANG_ORIYA, #else 0, #endif 0,0, }, {"pa","punjabi",0,&lc_charsets[0],0, #ifdef LANG_PUNJABI LANG_PUNJABI, #else 0, #endif 0,0, }, {"pl","polish","pol",&lc_charsets[1],0, #ifdef LANG_POLISH LANG_POLISH, #else 0, #endif 0,0, }, {"ps","pushto",0,&lc_charsets[0],0, #ifdef LANG_PUSHTO LANG_PUSHTO, #else 0, #endif 0,0, }, {"pt","portuguese","por",&lc_charsets[0],0, #ifdef LANG_PORTUGUESE LANG_PORTUGUESE, #else 0, #endif 0,0, }, {"qu","quechua",0,&lc_charsets[0],0, #ifdef LANG_QUECHUA LANG_QUECHUA, #else 0, #endif 0,0, }, {"rm","rhaeto-romance",0,&lc_charsets[0],0, #ifdef LANG_RHAETO_ROMANCE LANG_RHAETO_ROMANCE, #else 0, #endif 0,0, }, {"rn","kirundi",0,&lc_charsets[0],0, #ifdef LANG_KIRUNDI LANG_KIRUNDI, #else 0, #endif 0,0, }, {"ro","romanian","ron|rum",&lc_charsets[1],0, #ifdef LANG_ROMANIAN LANG_ROMANIAN, #else 0, #endif 0,0, }, {"ru","russian","rus",&lc_charsets[4],0, #ifdef LANG_RUSSIAN LANG_RUSSIAN, #else 0, #endif 0,0, }, {"rw","kinyarwanda",0,&lc_charsets[0],0, #ifdef LANG_KINYARWANDA LANG_KINYARWANDA, #else 0, #endif 0,0, }, {"sa","sanskrit",0,&lc_charsets[0],0, #ifdef LANG_SANSKRIT LANG_SANSKRIT, #else 0, #endif 0,0, }, {"sd","sindhi",0,&lc_charsets[0],0, #ifdef LANG_SINDHI LANG_SINDHI, #else 0, #endif 0,0, }, {"sg","sangro",0,&lc_charsets[0],0, #ifdef LANG_SANGRO LANG_SANGRO, #else 0, #endif 0,0, }, {"sh","serbo-croatian",0,&lc_charsets[0],0, #ifdef LANG_SERBO_CROATIAN LANG_SERBO_CROATIAN, #else 0, #endif 0,0, }, {"si","singhalese",0,&lc_charsets[0],0, #ifdef LANG_SINGHALESE LANG_SINGHALESE, #else 0, #endif 0,0, }, {"sk","slovak","slk|slo",&lc_charsets[1],0, #ifdef LANG_SLOVAK LANG_SLOVAK, #else 0, #endif 0,0, }, {"sl","slovenian","slv",&lc_charsets[1],0, #ifdef LANG_SLOVENIAN LANG_SLOVENIAN, #else 0, #endif 0,0, }, {"sm","samoan",0,&lc_charsets[0],0, #ifdef LANG_SAMOAN LANG_SAMOAN, #else 0, #endif 0,0, }, {"sn","shona",0,&lc_charsets[0],0, #ifdef LANG_SHONA LANG_SHONA, #else 0, #endif 0,0, }, {"so","somali",0,&lc_charsets[0],0, #ifdef LANG_SOMALI LANG_SOMALI, #else 0, #endif 0,0, }, {"sq","albanian","sqi|alb",&lc_charsets[0],0, #ifdef LANG_ALBANIAN LANG_ALBANIAN, #else 0, #endif 0,0, }, {"sr","serbian","srp",&lc_charsets[1],0, #ifdef LANG_SERBIAN LANG_SERBIAN, #else 0, #endif 0,0, }, {"ss","siswati",0,&lc_charsets[0],0, #ifdef LANG_SISWATI LANG_SISWATI, #else 0, #endif 0,0, }, {"st","sesotho",0,&lc_charsets[0],0, #ifdef LANG_SESOTHO LANG_SESOTHO, #else 0, #endif 0,0, }, {"su","sudanese",0,&lc_charsets[0],0, #ifdef LANG_SUDANESE LANG_SUDANESE, #else 0, #endif 0,0, }, {"sv","swedish","swe",&lc_charsets[0],0, #ifdef LANG_SWEDISH LANG_SWEDISH, #else 0, #endif 0,0, }, {"sw","swahili","swa",&lc_charsets[0],0, #ifdef LANG_SWAHILI LANG_SWAHILI, #else 0, #endif 0,0, }, {"ta","tamil",0,&lc_charsets[0],0, #ifdef LANG_TAMIL LANG_TAMIL, #else 0, #endif 0,0, }, {"te","telugu",0,&lc_charsets[0],0, #ifdef LANG_TELUGU LANG_TELUGU, #else 0, #endif 0,0, }, {"tg","tajik",0,&lc_charsets[0],0, #ifdef LANG_TAJIK LANG_TAJIK, #else 0, #endif 0,0, }, {"th","thai","tha",&lc_charsets[0],0, #ifdef LANG_THAI LANG_THAI, #else 0, #endif 0,0, }, {"ti","tigrinya",0,&lc_charsets[0],0, #ifdef LANG_TIGRINYA LANG_TIGRINYA, #else 0, #endif 0,0, }, {"tk","turkmen",0,&lc_charsets[0],0, #ifdef LANG_TURKMEN LANG_TURKMEN, #else 0, #endif 0,0, }, {"tl","tagalog",0,&lc_charsets[0],0, #ifdef LANG_TAGALOG LANG_TAGALOG, #else 0, #endif 0,0, }, {"tn","setswana",0,&lc_charsets[0],0, #ifdef LANG_SETSWANA LANG_SETSWANA, #else 0, #endif 0,0, }, {"to","tonga",0,&lc_charsets[0],0, #ifdef LANG_TONGA LANG_TONGA, #else 0, #endif 0,0, }, {"tr","turkish","tur",&lc_charsets[8],0, #ifdef LANG_TURKISH LANG_TURKISH, #else 0, #endif 0,0, }, {"ts","tsonga",0,&lc_charsets[0],0, #ifdef LANG_TSONGA LANG_TSONGA, #else 0, #endif 0,0, }, {"tt","tatar","tat",&lc_charsets[0],0, #ifdef LANG_TATAR LANG_TATAR, #else 0, #endif 0,0, }, {"tw","chinese-traditional","cht",&lc_charsets[0],0, #ifdef LANG_CHINESE_TRADITIONAL LANG_CHINESE_TRADITIONAL, #else 0, #endif 0,0, }, {"uk","ukrainian","ukr",&lc_charsets[4],0, #ifdef LANG_UKRAINIAN LANG_UKRAINIAN, #else 0, #endif 0,0, }, {"ur","urdu",0,&lc_charsets[0],0, #ifdef LANG_URDU LANG_URDU, #else 0, #endif 0,0, }, {"uz","uzbek","uzb",&lc_charsets[0],0, #ifdef LANG_UZBEK LANG_UZBEK, #else 0, #endif 0,0, }, {"vi","vietnamese",0,&lc_charsets[0],0, #ifdef LANG_VIETNAMESE LANG_VIETNAMESE, #else 0, #endif 0,0, }, {"vo","volapuk",0,&lc_charsets[0],0, #ifdef LANG_VOLAPUK LANG_VOLAPUK, #else 0, #endif 0,0, }, {"wo","wolof",0,&lc_charsets[0],0, #ifdef LANG_WOLOF LANG_WOLOF, #else 0, #endif 0,0, }, {"xh","xhosa",0,&lc_charsets[0],0, #ifdef LANG_XHOSA LANG_XHOSA, #else 0, #endif 0,0, }, {"yo","yoruba",0,&lc_charsets[0],0, #ifdef LANG_YORUBA LANG_YORUBA, #else 0, #endif 0,0, }, {"zh","chinese-simplified","zho|chi|chs",&lc_charsets[0],0, #ifdef LANG_CHINESE_SIMPLIFIED LANG_CHINESE_SIMPLIFIED, #else 0, #endif 0,0, }, {"zu","zulu",0,&lc_charsets[0],0, #ifdef LANG_ZULU LANG_ZULU, #else 0, #endif 0,0, }, 0 }; const Lc_territory_t lc_territories[] = { {"C","C",LC_default,0,&lc_languages[0],0,0,0,0,0,0,0,}, {"debug","debug",LC_debug,0,&lc_languages[1],0,0,0,0,0,0,0,}, {"eu","euro",0,0,&lc_languages[0],0,0,0,0,0,0,0,}, {"al","albania",0, #ifdef CTRY_ALBANIA CTRY_ALBANIA, #else 0, #endif 0,0,0,0,0,0,0,0, }, {"an","netherlands-antilles",0, #ifdef CTRY_NETHERLANDS_ANTILLES CTRY_NETHERLANDS_ANTILLES, #else 0, #endif &lc_languages[86],0,0,0, #ifdef SUBLANG_DUTCH_NETHERLANDS_ANTILLES SUBLANG_DUTCH_NETHERLANDS_ANTILLES, #else 0, #endif 0,0,0, }, {"ar","argentina",0, #ifdef CTRY_ARGENTINA CTRY_ARGENTINA, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_ARGENTINA SUBLANG_SPANISH_ARGENTINA, #else 0, #endif 0,0,0, }, {"at","austria",0, #ifdef CTRY_AUSTRIA CTRY_AUSTRIA, #else 0, #endif &lc_languages[23],0,0,0, #ifdef SUBLANG_GERMAN_AUSTRIA SUBLANG_GERMAN_AUSTRIA, #else 0, #endif 0,0,0, }, {"au","australia",0, #ifdef CTRY_AUSTRALIA CTRY_AUSTRALIA, #else 0, #endif &lc_languages[26],0,0,0, #ifdef SUBLANG_ENGLISH_AUSTRALIA SUBLANG_ENGLISH_AUSTRALIA, #else 0, #endif 0,0,0, }, {"az","azerbaijan",0, #ifdef CTRY_AZERBAIJAN CTRY_AZERBAIJAN, #else 0, #endif 0,0,0,0,0,0,0,0, }, {"be","belgium",0, #ifdef CTRY_BELGIUM CTRY_BELGIUM, #else 0, #endif &lc_languages[86],&lc_languages[35],&lc_languages[23],0, #ifdef SUBLANG_DUTCH_BELGIUM SUBLANG_DUTCH_BELGIUM, #else 0, #endif #ifdef SUBLANG_FRENCH_BELGIUM SUBLANG_FRENCH_BELGIUM, #else 0, #endif #ifdef SUBLANG_GERMAN_BELGIUM SUBLANG_GERMAN_BELGIUM, #else 0, #endif 0, }, {"bg","bulgaria",0, #ifdef CTRY_BULGARIA CTRY_BULGARIA, #else 0, #endif &lc_languages[12],0,0,0, #ifdef SUBLANG_BULGARIAN_BULGARIA SUBLANG_BULGARIAN_BULGARIA, #else 0, #endif 0,0,0, }, {"bn","brunei-darussalam",0, #ifdef CTRY_BRUNEI_DARUSSALAM CTRY_BRUNEI_DARUSSALAM, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_BRUNEI_DARUSSALAM SUBLANG_ARABIC_BRUNEI_DARUSSALAM, #else 0, #endif 0,0,0, }, {"bo","bolivia",0, #ifdef CTRY_BOLIVIA CTRY_BOLIVIA, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_BOLIVIA SUBLANG_SPANISH_BOLIVIA, #else 0, #endif 0,0,0, }, {"br","brazil",0, #ifdef CTRY_BRAZIL CTRY_BRAZIL, #else 0, #endif &lc_languages[95],0,0,0, #ifdef SUBLANG_PORTUGUESE_BRAZIL SUBLANG_PORTUGUESE_BRAZIL, #else 0, #endif 0,0,0, }, {"bw","botswana",0, #ifdef CTRY_BOTSWANA CTRY_BOTSWANA, #else 0, #endif &lc_languages[26],0,0,0, #ifdef SUBLANG_ENGLISH_BOTSWANA SUBLANG_ENGLISH_BOTSWANA, #else 0, #endif 0,0,0, }, {"by","belarus",0, #ifdef CTRY_BELARUS CTRY_BELARUS, #else 0, #endif &lc_languages[100],0,0,0, #ifdef SUBLANG_RUSSIAN_BELARUS SUBLANG_RUSSIAN_BELARUS, #else 0, #endif 0,0,0, }, {"bz","belize",0, #ifdef CTRY_BELIZE CTRY_BELIZE, #else 0, #endif &lc_languages[26],0,0,0, #ifdef SUBLANG_ENGLISH_BELIZE SUBLANG_ENGLISH_BELIZE, #else 0, #endif 0,0,0, }, {"ca","canada",0, #ifdef CTRY_CANADA CTRY_CANADA, #else 0, #endif &lc_languages[26],&lc_languages[35],0,0, #ifdef SUBLANG_ENGLISH_CANADA SUBLANG_ENGLISH_CANADA, #else 0, #endif #ifdef SUBLANG_FRENCH_CANADA SUBLANG_FRENCH_CANADA, #else 0, #endif 0,0, }, {"ch","switzerland",0, #ifdef CTRY_SWITZERLAND CTRY_SWITZERLAND, #else 0, #endif &lc_languages[35],&lc_languages[23],&lc_languages[54],0, #ifdef SUBLANG_FRENCH_SWITZERLAND SUBLANG_FRENCH_SWITZERLAND, #else 0, #endif #ifdef SUBLANG_GERMAN_SWITZERLAND SUBLANG_GERMAN_SWITZERLAND, #else 0, #endif #ifdef SUBLANG_ITALIAN_SWITZERLAND SUBLANG_ITALIAN_SWITZERLAND, #else 0, #endif 0, }, {"cl","chile",0, #ifdef CTRY_CHILE CTRY_CHILE, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_CHILE SUBLANG_SPANISH_CHILE, #else 0, #endif 0,0,0, }, {"cn","china",LC_primary, #ifdef CTRY_CHINA CTRY_CHINA, #else 0, #endif &lc_languages[140],0,0,0, #ifdef SUBLANG_CHINESE_SIMPLIFIED_CHINA SUBLANG_CHINESE_SIMPLIFIED_CHINA, #else 0, #endif 0,0,0, }, {"co","colombia",0, #ifdef CTRY_COLOMBIA CTRY_COLOMBIA, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_COLOMBIA SUBLANG_SPANISH_COLOMBIA, #else 0, #endif 0,0,0, }, {"cr","costa-rica",0, #ifdef CTRY_COSTA_RICA CTRY_COSTA_RICA, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_COSTA_RICA SUBLANG_SPANISH_COSTA_RICA, #else 0, #endif 0,0,0, }, {"cz","czech-republic",0, #ifdef CTRY_CZECH_REPUBLIC CTRY_CZECH_REPUBLIC, #else 0, #endif &lc_languages[20],0,0,0, #ifdef SUBLANG_CZECH_CZECH_REPUBLIC SUBLANG_CZECH_CZECH_REPUBLIC, #else 0, #endif 0,0,0, }, {"de","germany",0, #ifdef CTRY_GERMANY CTRY_GERMANY, #else 0, #endif &lc_languages[23],0,0,0, #ifdef SUBLANG_GERMAN_GERMANY SUBLANG_GERMAN_GERMANY, #else 0, #endif 0,0,0, }, {"dk","denmark",0, #ifdef CTRY_DENMARK CTRY_DENMARK, #else 0, #endif &lc_languages[22],&lc_languages[26],0,0, #ifdef SUBLANG_DANISH_DENMARK SUBLANG_DANISH_DENMARK, #else 0, #endif #ifdef SUBLANG_ENGLISH_DENMARK SUBLANG_ENGLISH_DENMARK, #else 0, #endif 0,0, }, {"do","dominican-republic",0, #ifdef CTRY_DOMINICAN_REPUBLIC CTRY_DOMINICAN_REPUBLIC, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_DOMINICAN_REPUBLIC SUBLANG_SPANISH_DOMINICAN_REPUBLIC, #else 0, #endif 0,0,0, }, {"dz","algeria",0, #ifdef CTRY_ALGERIA CTRY_ALGERIA, #else 0, #endif 0,0,0,0,0,0,0,0, }, {"ec","ecuador",0, #ifdef CTRY_ECUADOR CTRY_ECUADOR, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_ECUADOR SUBLANG_SPANISH_ECUADOR, #else 0, #endif 0,0,0, }, {"ee","estonia",0, #ifdef CTRY_ESTONIA CTRY_ESTONIA, #else 0, #endif &lc_languages[29],0,0,0, #ifdef SUBLANG_ESTONIAN_ESTONIA SUBLANG_ESTONIAN_ESTONIA, #else 0, #endif 0,0,0, }, {"eg","egypt",0, #ifdef CTRY_EGYPT CTRY_EGYPT, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_EGYPT SUBLANG_ARABIC_EGYPT, #else 0, #endif 0,0,0, }, {"es","spain",0, #ifdef CTRY_SPAIN CTRY_SPAIN, #else 0, #endif &lc_languages[28],&lc_languages[18],&lc_languages[30],&lc_languages[39], #ifdef SUBLANG_SPANISH_SPAIN SUBLANG_SPANISH_SPAIN, #else 0, #endif #ifdef SUBLANG_CATALAN_SPAIN SUBLANG_CATALAN_SPAIN, #else 0, #endif #ifdef SUBLANG_BASQUE_SPAIN SUBLANG_BASQUE_SPAIN, #else 0, #endif #ifdef SUBLANG_GALICIAN_SPAIN SUBLANG_GALICIAN_SPAIN, #else 0, #endif }, {"fi","finland",0, #ifdef CTRY_FINLAND CTRY_FINLAND, #else 0, #endif &lc_languages[117],0,0,0, #ifdef SUBLANG_SWEDISH_FINLAND SUBLANG_SWEDISH_FINLAND, #else 0, #endif 0,0,0, }, {"fo","faroe-islands",0, #ifdef CTRY_FAROE_ISLANDS CTRY_FAROE_ISLANDS, #else 0, #endif &lc_languages[34],0,0,0, #ifdef SUBLANG_FAEROESE_FAROE_ISLANDS SUBLANG_FAEROESE_FAROE_ISLANDS, #else 0, #endif 0,0,0, }, {"fr","france",0, #ifdef CTRY_FRANCE CTRY_FRANCE, #else 0, #endif &lc_languages[35],0,0,0, #ifdef SUBLANG_FRENCH_FRANCE SUBLANG_FRENCH_FRANCE, #else 0, #endif 0,0,0, }, {"gb","united-kingdom|great-britain|england",LC_primary, #ifdef CTRY_UNITED_KINGDOM CTRY_UNITED_KINGDOM, #else #ifdef CTRY_GREAT_BRITAIN CTRY_GREAT_BRITAIN, #else #ifdef CTRY_ENGLAND CTRY_ENGLAND, #else 0, #endif #endif #endif &lc_languages[26],0,0,0, #ifdef SUBLANG_ENGLISH_UNITED_KINGDOM SUBLANG_ENGLISH_UNITED_KINGDOM, #else #ifdef SUBLANG_ENGLISH_GREAT_BRITAIN SUBLANG_ENGLISH_GREAT_BRITAIN, #else #ifdef SUBLANG_ENGLISH_ENGLAND SUBLANG_ENGLISH_ENGLAND, #else 0, #endif #endif #endif 0,0,0, }, {"gl","greenland",0, #ifdef CTRY_GREENLAND CTRY_GREENLAND, #else 0, #endif &lc_languages[61],0,0,0, #ifdef SUBLANG_GREENLANDIC_GREENLAND SUBLANG_GREENLANDIC_GREENLAND, #else 0, #endif 0,0,0, }, {"gr","greece",0, #ifdef CTRY_GREECE CTRY_GREECE, #else 0, #endif &lc_languages[25],0,0,0, #ifdef SUBLANG_GREEK_GREECE SUBLANG_GREEK_GREECE, #else 0, #endif 0,0,0, }, {"gt","guatemala",0, #ifdef CTRY_GUATEMALA CTRY_GUATEMALA, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_GUATEMALA SUBLANG_SPANISH_GUATEMALA, #else 0, #endif 0,0,0, }, {"hk","hong-kong",0, #ifdef CTRY_HONG_KONG CTRY_HONG_KONG, #else 0, #endif &lc_languages[140],0,0,0, #ifdef SUBLANG_CHINESE_SIMPLIFIED_HONG_KONG SUBLANG_CHINESE_SIMPLIFIED_HONG_KONG, #else 0, #endif 0,0,0, }, {"hn","honduras",0, #ifdef CTRY_HONDURAS CTRY_HONDURAS, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_HONDURAS SUBLANG_SPANISH_HONDURAS, #else 0, #endif 0,0,0, }, {"hr","croatia",0, #ifdef CTRY_CROATIA CTRY_CROATIA, #else 0, #endif &lc_languages[45],0,0,0, #ifdef SUBLANG_CROATIAN_CROATIA SUBLANG_CROATIAN_CROATIA, #else 0, #endif 0,0,0, }, {"hu","hungary",0, #ifdef CTRY_HUNGARY CTRY_HUNGARY, #else 0, #endif &lc_languages[46],0,0,0, #ifdef SUBLANG_HUNGARIAN_HUNGARY SUBLANG_HUNGARIAN_HUNGARY, #else 0, #endif 0,0,0, }, {"id","indonesia",0, #ifdef CTRY_INDONESIA CTRY_INDONESIA, #else 0, #endif &lc_languages[49],0,0,0, #ifdef SUBLANG_INDONESIAN_INDONESIA SUBLANG_INDONESIAN_INDONESIA, #else 0, #endif 0,0,0, }, {"ie","ireland",0, #ifdef CTRY_IRELAND CTRY_IRELAND, #else 0, #endif &lc_languages[26],&lc_languages[37],0,0, #ifdef SUBLANG_ENGLISH_IRELAND SUBLANG_ENGLISH_IRELAND, #else 0, #endif #ifdef SUBLANG_IRISH_IRELAND SUBLANG_IRISH_IRELAND, #else 0, #endif 0,0, }, {"il","israel",0, #ifdef CTRY_ISRAEL CTRY_ISRAEL, #else 0, #endif &lc_languages[43],0,0,0, #ifdef SUBLANG_HEBREW_ISRAEL SUBLANG_HEBREW_ISRAEL, #else 0, #endif 0,0,0, }, {"iq","iraq",0, #ifdef CTRY_IRAQ CTRY_IRAQ, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_IRAQ SUBLANG_ARABIC_IRAQ, #else 0, #endif 0,0,0, }, {"is","iceland",0, #ifdef CTRY_ICELAND CTRY_ICELAND, #else 0, #endif &lc_languages[53],0,0,0, #ifdef SUBLANG_ICELANDIC_ICELAND SUBLANG_ICELANDIC_ICELAND, #else 0, #endif 0,0,0, }, {"it","italy",0, #ifdef CTRY_ITALY CTRY_ITALY, #else 0, #endif &lc_languages[54],0,0,0, #ifdef SUBLANG_ITALIAN_ITALY SUBLANG_ITALIAN_ITALY, #else 0, #endif 0,0,0, }, {"jm","jamaica",0, #ifdef CTRY_JAMAICA CTRY_JAMAICA, #else 0, #endif &lc_languages[26],0,0,0, #ifdef SUBLANG_ENGLISH_JAMAICA SUBLANG_ENGLISH_JAMAICA, #else 0, #endif 0,0,0, }, {"jo","jordan",0, #ifdef CTRY_JORDAN CTRY_JORDAN, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_JORDAN SUBLANG_ARABIC_JORDAN, #else 0, #endif 0,0,0, }, {"jp","japan",0, #ifdef CTRY_JAPAN CTRY_JAPAN, #else 0, #endif &lc_languages[56],0,0,0, #ifdef SUBLANG_JAPANESE_JAPAN SUBLANG_JAPANESE_JAPAN, #else 0, #endif 0,0,0, }, {"ke","kenya",0, #ifdef CTRY_KENYA CTRY_KENYA, #else 0, #endif 0,0,0,0,0,0,0,0, }, {"kr","south-korea",0, #ifdef CTRY_SOUTH_KOREA CTRY_SOUTH_KOREA, #else 0, #endif &lc_languages[64],0,0,0, #ifdef SUBLANG_KOREAN_SOUTH_KOREA SUBLANG_KOREAN_SOUTH_KOREA, #else 0, #endif 0,0,0, }, {"kw","kuwait",0, #ifdef CTRY_KUWAIT CTRY_KUWAIT, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_KUWAIT SUBLANG_ARABIC_KUWAIT, #else 0, #endif 0,0,0, }, {"lb","lebanon",0, #ifdef CTRY_LEBANON CTRY_LEBANON, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_LEBANON SUBLANG_ARABIC_LEBANON, #else 0, #endif 0,0,0, }, {"li","liechtenstein",0, #ifdef CTRY_LIECHTENSTEIN CTRY_LIECHTENSTEIN, #else 0, #endif &lc_languages[23],&lc_languages[35],0,0, #ifdef SUBLANG_GERMAN_LIECHTENSTEIN SUBLANG_GERMAN_LIECHTENSTEIN, #else 0, #endif #ifdef SUBLANG_FRENCH_LIECHTENSTEIN SUBLANG_FRENCH_LIECHTENSTEIN, #else 0, #endif 0,0, }, {"lt","lithuania",0, #ifdef CTRY_LITHUANIA CTRY_LITHUANIA, #else 0, #endif &lc_languages[71],0,0,0, #ifdef SUBLANG_LITHUANIAN_LITHUANIA SUBLANG_LITHUANIAN_LITHUANIA, #else 0, #endif 0,0,0, }, {"lu","luxembourg",0, #ifdef CTRY_LUXEMBOURG CTRY_LUXEMBOURG, #else 0, #endif &lc_languages[23],&lc_languages[35],0,0, #ifdef SUBLANG_GERMAN_LUXEMBOURG SUBLANG_GERMAN_LUXEMBOURG, #else 0, #endif #ifdef SUBLANG_FRENCH_LUXEMBOURG SUBLANG_FRENCH_LUXEMBOURG, #else 0, #endif 0,0, }, {"lv","latvia",0, #ifdef CTRY_LATVIA CTRY_LATVIA, #else 0, #endif &lc_languages[72],0,0,0, #ifdef SUBLANG_LATVIAN_LATVIA SUBLANG_LATVIAN_LATVIA, #else 0, #endif 0,0,0, }, {"ly","libya",0, #ifdef CTRY_LIBYA CTRY_LIBYA, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_LIBYA SUBLANG_ARABIC_LIBYA, #else 0, #endif 0,0,0, }, {"ma","morocco",0, #ifdef CTRY_MOROCCO CTRY_MOROCCO, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_MOROCCO SUBLANG_ARABIC_MOROCCO, #else 0, #endif 0,0,0, }, {"mk","macedonia",0, #ifdef CTRY_MACEDONIA CTRY_MACEDONIA, #else 0, #endif &lc_languages[75],0,0,0, #ifdef SUBLANG_MACEDONIAN_MACEDONIA SUBLANG_MACEDONIAN_MACEDONIA, #else 0, #endif 0,0,0, }, {"mo","macau",0, #ifdef CTRY_MACAU CTRY_MACAU, #else 0, #endif &lc_languages[140],0,0,0, #ifdef SUBLANG_CHINESE_SIMPLIFIED_MACAU SUBLANG_CHINESE_SIMPLIFIED_MACAU, #else 0, #endif 0,0,0, }, {"mx","mexico",0, #ifdef CTRY_MEXICO CTRY_MEXICO, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_MEXICO SUBLANG_SPANISH_MEXICO, #else 0, #endif 0,0,0, }, {"my","malaysia",0, #ifdef CTRY_MALAYSIA CTRY_MALAYSIA, #else 0, #endif 0,0,0,0,0,0,0,0, }, {"ni","nicaragua",0, #ifdef CTRY_NICARAGUA CTRY_NICARAGUA, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_NICARAGUA SUBLANG_SPANISH_NICARAGUA, #else 0, #endif 0,0,0, }, {"nl","netherlands",0, #ifdef CTRY_NETHERLANDS CTRY_NETHERLANDS, #else 0, #endif &lc_languages[86],0,0,0, #ifdef SUBLANG_DUTCH_NETHERLANDS SUBLANG_DUTCH_NETHERLANDS, #else 0, #endif 0,0,0, }, {"no","norway",0, #ifdef CTRY_NORWAY CTRY_NORWAY, #else 0, #endif &lc_languages[84],&lc_languages[88],&lc_languages[87],0, #ifdef SUBLANG_NORWEGIAN_BOKMAL_NORWAY SUBLANG_NORWEGIAN_BOKMAL_NORWAY, #else 0, #endif #ifdef SUBLANG_NORWEGIAN_NORWAY SUBLANG_NORWEGIAN_NORWAY, #else 0, #endif #ifdef SUBLANG_NORWEGIAN_NYNORSK_NORWAY SUBLANG_NORWEGIAN_NYNORSK_NORWAY, #else 0, #endif 0, }, {"nz","new-zealand",0, #ifdef CTRY_NEW_ZEALAND CTRY_NEW_ZEALAND, #else 0, #endif &lc_languages[26],0,0,0, #ifdef SUBLANG_ENGLISH_NEW_ZEALAND SUBLANG_ENGLISH_NEW_ZEALAND, #else 0, #endif 0,0,0, }, {"om","oman",0, #ifdef CTRY_OMAN CTRY_OMAN, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_OMAN SUBLANG_ARABIC_OMAN, #else 0, #endif 0,0,0, }, {"pa","panama",0, #ifdef CTRY_PANAMA CTRY_PANAMA, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_PANAMA SUBLANG_SPANISH_PANAMA, #else 0, #endif 0,0,0, }, {"pe","peru",0, #ifdef CTRY_PERU CTRY_PERU, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_PERU SUBLANG_SPANISH_PERU, #else 0, #endif 0,0,0, }, {"pl","poland",0, #ifdef CTRY_POLAND CTRY_POLAND, #else 0, #endif &lc_languages[93],0,0,0, #ifdef SUBLANG_POLISH_POLAND SUBLANG_POLISH_POLAND, #else 0, #endif 0,0,0, }, {"pr","puerto-rico",0, #ifdef CTRY_PUERTO_RICO CTRY_PUERTO_RICO, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_PUERTO_RICO SUBLANG_SPANISH_PUERTO_RICO, #else 0, #endif 0,0,0, }, {"pt","portugal",0, #ifdef CTRY_PORTUGAL CTRY_PORTUGAL, #else 0, #endif &lc_languages[95],0,0,0, #ifdef SUBLANG_PORTUGUESE_PORTUGAL SUBLANG_PORTUGUESE_PORTUGAL, #else 0, #endif 0,0,0, }, {"py","paraguay",0, #ifdef CTRY_PARAGUAY CTRY_PARAGUAY, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_PARAGUAY SUBLANG_SPANISH_PARAGUAY, #else 0, #endif 0,0,0, }, {"ro","romania",0, #ifdef CTRY_ROMANIA CTRY_ROMANIA, #else 0, #endif &lc_languages[99],0,0,0, #ifdef SUBLANG_ROMANIAN_ROMANIA SUBLANG_ROMANIAN_ROMANIA, #else 0, #endif 0,0,0, }, {"ru","russia",0, #ifdef CTRY_RUSSIA CTRY_RUSSIA, #else 0, #endif &lc_languages[100],0,0,0, #ifdef SUBLANG_RUSSIAN_RUSSIA SUBLANG_RUSSIAN_RUSSIA, #else 0, #endif 0,0,0, }, {"sa","saudi-arabia",0, #ifdef CTRY_SAUDI_ARABIA CTRY_SAUDI_ARABIA, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_SAUDI_ARABIA SUBLANG_ARABIC_SAUDI_ARABIA, #else 0, #endif 0,0,0, }, {"se","sweden",LC_primary, #ifdef CTRY_SWEDEN CTRY_SWEDEN, #else 0, #endif &lc_languages[117],0,0,0, #ifdef SUBLANG_SWEDISH_SWEDEN SUBLANG_SWEDISH_SWEDEN, #else 0, #endif 0,0,0, }, {"sg","singapore",0, #ifdef CTRY_SINGAPORE CTRY_SINGAPORE, #else 0, #endif &lc_languages[140],0,0,0, #ifdef SUBLANG_CHINESE_SIMPLIFIED_SINGAPORE SUBLANG_CHINESE_SIMPLIFIED_SINGAPORE, #else 0, #endif 0,0,0, }, {"si","slovenia",0, #ifdef CTRY_SLOVENIA CTRY_SLOVENIA, #else 0, #endif &lc_languages[108],0,0,0, #ifdef SUBLANG_SLOVENIAN_SLOVENIA SUBLANG_SLOVENIAN_SLOVENIA, #else 0, #endif 0,0,0, }, {"sk","slovakia",0, #ifdef CTRY_SLOVAKIA CTRY_SLOVAKIA, #else 0, #endif &lc_languages[107],0,0,0, #ifdef SUBLANG_SLOVAK_SLOVAKIA SUBLANG_SLOVAK_SLOVAKIA, #else 0, #endif 0,0,0, }, {"sp","serbia",0, #ifdef CTRY_SERBIA CTRY_SERBIA, #else 0, #endif &lc_languages[113],0,0,0, #ifdef SUBLANG_SERBIAN_SERBIA SUBLANG_SERBIAN_SERBIA, #else 0, #endif 0,0,0, }, {"sv","el-salvador",0, #ifdef CTRY_EL_SALVADOR CTRY_EL_SALVADOR, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_EL_SALVADOR SUBLANG_SPANISH_EL_SALVADOR, #else 0, #endif 0,0,0, }, {"sy","syria",0, #ifdef CTRY_SYRIA CTRY_SYRIA, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_SYRIA SUBLANG_ARABIC_SYRIA, #else 0, #endif 0,0,0, }, {"th","thailand",0, #ifdef CTRY_THAILAND CTRY_THAILAND, #else 0, #endif &lc_languages[122],0,0,0, #ifdef SUBLANG_THAI_THAILAND SUBLANG_THAI_THAILAND, #else 0, #endif 0,0,0, }, {"tn","tunisia",0, #ifdef CTRY_TUNISIA CTRY_TUNISIA, #else 0, #endif &lc_languages[6],0,0,0, #ifdef SUBLANG_ARABIC_TUNISIA SUBLANG_ARABIC_TUNISIA, #else 0, #endif 0,0,0, }, {"tr","turkey",0, #ifdef CTRY_TURKEY CTRY_TURKEY, #else 0, #endif &lc_languages[128],0,0,0, #ifdef SUBLANG_TURKISH_TURKEY SUBLANG_TURKISH_TURKEY, #else 0, #endif 0,0,0, }, {"tt","trinidad&tobago",0, #ifdef CTRY_TRINIDAD_TOBAGO CTRY_TRINIDAD_TOBAGO, #else 0, #endif &lc_languages[26],0,0,0, #ifdef SUBLANG_ENGLISH_TRINIDAD_TOBAGO SUBLANG_ENGLISH_TRINIDAD_TOBAGO, #else 0, #endif 0,0,0, }, {"tw","taiwan",0, #ifdef CTRY_TAIWAN CTRY_TAIWAN, #else 0, #endif &lc_languages[131],0,0,0, #ifdef SUBLANG_CHINESE_TRADITIONAL_TAIWAN SUBLANG_CHINESE_TRADITIONAL_TAIWAN, #else 0, #endif 0,0,0, }, {"ua","ukraine",0, #ifdef CTRY_UKRAINE CTRY_UKRAINE, #else 0, #endif &lc_languages[132],&lc_languages[100],0,0, #ifdef SUBLANG_UKRAINIAN_UKRAINE SUBLANG_UKRAINIAN_UKRAINE, #else 0, #endif #ifdef SUBLANG_RUSSIAN_UKRAINE SUBLANG_RUSSIAN_UKRAINE, #else 0, #endif 0,0, }, {"uk","united-kingdom",LC_primary, #ifdef CTRY_UNITED_KINGDOM CTRY_UNITED_KINGDOM, #else 0, #endif &lc_languages[26],0,0,0, #ifdef SUBLANG_ENGLISH_UNITED_KINGDOM SUBLANG_ENGLISH_UNITED_KINGDOM, #else 0, #endif 0,0,0, }, {"us","united-states|usa",0, #ifdef CTRY_UNITED_STATES CTRY_UNITED_STATES, #else #ifdef CTRY_USA CTRY_USA, #else 0, #endif #endif &lc_languages[26],0,0,0, #ifdef SUBLANG_ENGLISH_UNITED_STATES SUBLANG_ENGLISH_UNITED_STATES, #else #ifdef SUBLANG_ENGLISH_USA SUBLANG_ENGLISH_USA, #else 0, #endif #endif 0,0,0, }, {"uy","uruguay",0, #ifdef CTRY_URUGUAY CTRY_URUGUAY, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_URUGUAY SUBLANG_SPANISH_URUGUAY, #else 0, #endif 0,0,0, }, {"ve","venezuela",0, #ifdef CTRY_VENEZUELA CTRY_VENEZUELA, #else 0, #endif &lc_languages[28],0,0,0, #ifdef SUBLANG_SPANISH_VENEZUELA SUBLANG_SPANISH_VENEZUELA, #else 0, #endif 0,0,0, }, {"yu","yugoslavia",0, #ifdef CTRY_YUGOSLAVIA CTRY_YUGOSLAVIA, #else 0, #endif &lc_languages[113],0,0,0, #ifdef SUBLANG_SERBIAN_YUGOSLAVIA SUBLANG_SERBIAN_YUGOSLAVIA, #else 0, #endif 0,0,0, }, {"za","south-africa",0, #ifdef CTRY_SOUTH_AFRICA CTRY_SOUTH_AFRICA, #else 0, #endif &lc_languages[4],0,0,0, #ifdef SUBLANG_AFRIKAANS_SOUTH_AFRICA SUBLANG_AFRIKAANS_SOUTH_AFRICA, #else 0, #endif 0,0,0, }, {"zw","zimbabwe",0, #ifdef CTRY_ZIMBABWE CTRY_ZIMBABWE, #else 0, #endif &lc_languages[26],0,0,0, #ifdef SUBLANG_ENGLISH_ZIMBABWE SUBLANG_ENGLISH_ZIMBABWE, #else 0, #endif 0,0,0, }, 0 }; const Lc_map_t lc_maps[] = { {"enu",&lc_languages[26],&lc_territories[94],&lc_charsets[0],0}, {"enz",&lc_languages[26],&lc_territories[69],&lc_charsets[0],0}, {"esm",&lc_languages[28],&lc_territories[64],&lc_charsets[0],0}, {"esn",&lc_languages[28],&lc_territories[31],&lc_charsets[0],&attribute_es[1]}, {"esp",&lc_languages[28],&lc_territories[31],&lc_charsets[0],&attribute_es[0]}, {"usa",&lc_languages[26],&lc_territories[94],&lc_charsets[0],0}, 0 }; # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright 2024 OmniOS Community Edition (OmniOSce) Association. # # # MAPFILE HEADER START # # WARNING: STOP NOW. DO NOT MODIFY THIS FILE. # Object versioning must comply with the rules detailed in # # usr/src/lib/README.mapfiles # # You should not be making modifications here until you've read the most current # copy of that file. If you need help, contact a gatekeeper for guidance. # # MAPFILE HEADER END # $mapfile_version 2 # functions SYMBOL_VERSION SUNWprivate_1.1 { global: $if _ELF64 _Sfextern { ASSERT = { TYPE = OBJECT; SIZE = 184; }; }; $elif _ELF32 _Sfextern { ASSERT = { TYPE = OBJECT; SIZE = 100; }; }; $else $error unknown ELFCLASS $endif _Sfi { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; _Sfmaxr { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; $if _ELF64 _Sftable { ASSERT = { TYPE = OBJECT; SIZE = 1296; }; }; _Vmextern { ASSERT = { TYPE = OBJECT; SIZE = addrsize[9]; }; }; $elif _ELF32 _Sftable { ASSERT = { TYPE = OBJECT; $if _x86 SIZE = 1192; $elif _sparc SIZE = 1248; $else $error Unknown architecture $endif }; }; _Vmextern { ASSERT = { TYPE = OBJECT; SIZE = addrsize[10]; }; }; $else $error unknown ELFCLASS $endif _Vmheap { ASSERT = { TYPE = OBJECT; SIZE = addrsize[14]; }; }; _ast___getdelim; _ast__filbuf; _ast_asprintf; _ast_basename; _ast_calloc; _ast_catclose; _ast_catgets; _ast_catopen; _ast_cfree; _ast_clearerr; _ast_clearerr_unlocked; _ast_dirname; _ast_doprnt; _ast_doscan; _ast_eaccess; _ast_fclose; _ast_fcloseall; _ast_fdopen; _ast_feof_unlocked; _ast_ferror_unlocked; _ast_fflush; _ast_fflush_unlocked; _ast_fgetc; _ast_fgetc_unlocked; _ast_fgetpos64; _ast_fgetpos; _ast_fgets; _ast_fgets_unlocked; _ast_fgetwc; _ast_fgetws; _ast_fileno_unlocked; _ast_flockfile; _ast_fmemopen; _ast_fnmatch; _ast_fopen; _ast_fprintf; _ast_fpurge; _ast_fputc_unlocked; _ast_fputs; _ast_fputs_unlocked; _ast_fputwc; _ast_fputws; _ast_fread; _ast_fread_unlocked; _ast_free; _ast_freopen; _ast_fscanf; _ast_fseek64; _ast_fseek; _ast_fseeko64; _ast_fseeko; _ast_fsetpos64; _ast_fsetpos; _ast_ftell64; _ast_ftell; _ast_ftello64; _ast_ftello; _ast_ftrylockfile; _ast_fts_children; _ast_fts_close; _ast_fts_flags; _ast_fts_notify; _ast_fts_open; _ast_fts_read; _ast_fts_set; _ast_ftw; _ast_ftwalk; _ast_ftwflags; _ast_funlockfile; _ast_fwide; _ast_fwprintf; _ast_fwrite; _ast_fwrite_unlocked; _ast_fwscanf; _ast_getc_unlocked; _ast_getchar_unlocked; _ast_getcwd; _ast_getdate; _ast_getdelim; _ast_getenv; _ast_getline; _ast_getopt; _ast_getopt_long; _ast_getopt_long_only; _ast_getpgrp; _ast_gets; _ast_getsubopt; _ast_getw; _ast_getwc; _ast_getwchar; _ast_getwd; _ast_getws; _ast_glob; _ast_globfree; _ast_iconv; _ast_iconv_close; _ast_iconv_list; _ast_iconv_move; _ast_iconv_name; _ast_iconv_open; _ast_iconv_write; $if _ELF64 _ast_info { ASSERT = { TYPE = OBJECT; SIZE = 1064; }; }; $elif _ELF32 _ast_info { ASSERT = { TYPE = OBJECT; SIZE = 1012; }; }; $else $error unknown ELFCLASS $endif _ast_intercepts { ASSERT = { TYPE = OBJECT; SIZE = addrsize[2]; }; }; $if _ELF64 _ast_lc_categories { ASSERT = { TYPE = OBJECT; SIZE = 560; }; }; $elif _ELF32 _ast_lc_categories { ASSERT = { TYPE = OBJECT; SIZE = 336; }; }; $else $error unknown ELFCLASS $endif _ast_lc_charsets { ASSERT = { TYPE = OBJECT; SIZE = addrsize[72]; }; }; _ast_lc_languages { ASSERT = { TYPE = OBJECT; SIZE = addrsize[1144]; }; }; _ast_lc_maps { ASSERT = { TYPE = OBJECT; SIZE = addrsize[35]; }; }; _ast_lc_territories { ASSERT = { TYPE = OBJECT; SIZE = addrsize[909]; }; }; _ast_localeconv; _ast_locales { ASSERT = { TYPE = OBJECT; SIZE = addrsize[14]; }; }; _ast_malloc; _ast_memalign; _ast_memdup; _ast_memfatal; _ast_memhash; _ast_memsum; _ast_mkstemp; _ast_mktemp; _ast_mktime; _ast_nftw; _ast_optarg { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; _ast_optctx; _ast_opterr { ASSERT = { TYPE = OBJECT; SIZE = 4; }; }; _ast_optesc; _ast_optget; _ast_opthelp; _ast_optind { ASSERT = { TYPE = OBJECT; SIZE = 4; }; }; _ast_optjoin; _ast_optopt { ASSERT = { TYPE = OBJECT; SIZE = 4; }; }; _ast_optstr; _ast_optusage; _ast_pathaccess; _ast_pathaccess_20100601; _ast_pathbin; _ast_pathcanon; _ast_pathcanon_20100601; _ast_pathcat; _ast_pathcd; _ast_pathcheck; _ast_pathexists; _ast_pathfind; _ast_pathgetlink; _ast_pathinclude; _ast_pathkey; _ast_pathnative; _ast_pathpath; _ast_pathpath_20100601; _ast_pathposix; _ast_pathprobe; _ast_pathprobe_20100601; _ast_pathprog; _ast_pathrepl; _ast_pathsetlink; _ast_pathshell; _ast_pathstat; _ast_pathtemp; _ast_pathtmp; _ast_pclose; _ast_popen; _ast_printf; _ast_procclose; _ast_procfree; _ast_procopen; _ast_putc_unlocked; _ast_putchar_unlocked; _ast_putenv; _ast_puts; _ast_putw; _ast_putwc; _ast_putwchar; _ast_re_comp; _ast_re_exec; _ast_realloc; _ast_realpath; _ast_regaddclass; _ast_regalloc; _ast_regcache; _ast_regclass; _ast_regcmp; _ast_regcollate; _ast_regcomb; _ast_regcomp; _ast_regdup; _ast_regerror; _ast_regex; _ast_regexec; _ast_regexec_20120528; _ast_regfatal; _ast_regfatalpat; _ast_regfree; _ast_regncomp; _ast_regnexec; _ast_regrecord; _ast_regrexec; _ast_regstat; _ast_regsub; _ast_regsubcomp; _ast_regsubexec; _ast_regsubexec_20120528; _ast_regsubflags; _ast_regsubfree; _ast_remove; _ast_resolvepath; _ast_rewind; _ast_scanf; _ast_setbuf; _ast_setbuffer; _ast_setenv; _ast_setenviron; _ast_setlinebuf; _ast_setlocale; _ast_setvbuf; _ast_sfkeyprintf_20000308; _ast_sigcritical; _ast_signal; _ast_sigunblock; _ast_snprintf; _ast_sprintf; _ast_sscanf; _ast_stracmp; _ast_strcopy; _ast_strdup; _ast_strelapsed; _ast_strerror; _ast_stresc; _ast_streval; _ast_strexpr; _ast_strftime; _ast_strgid; _ast_strgrpmatch; _ast_strhash; _ast_strkey; _ast_strlcat; _ast_strlcpy; _ast_strlook; _ast_strmatch; _ast_strmode; _ast_strnacmp; _ast_strncopy; _ast_strntod; _ast_strntol; _ast_strntold; _ast_strntoll; _ast_strntoul; _ast_strntoull; _ast_stropt; _ast_strperm; _ast_strpsearch; _ast_strptime; _ast_strsearch; _ast_strsort; _ast_strsubmatch; _ast_strsum; _ast_strtape; _ast_strtod; _ast_strtoip4; _ast_strtol; _ast_strtold; _ast_strtoll; _ast_strton; _ast_strtonll; _ast_strtoul; _ast_strtoull; _ast_struid; _ast_struniq; _ast_swprintf; _ast_swscanf; _ast_system; _ast_tempnam; _ast_tmpfile; _ast_tmpnam; _ast_touch; _ast_translate; _ast_ungetc; _ast_ungetwc; _ast_unsetenv; _ast_valloc; _ast_vasprintf; _ast_vfprintf; _ast_vfscanf; _ast_vfwprintf; _ast_vfwscanf; _ast_vprintf; _ast_vscanf; _ast_vsnprintf; _ast_vsprintf; _ast_vsscanf; _ast_vswprintf; _ast_vswscanf; _ast_vwprintf; _ast_vwscanf; _ast_wordexp; _ast_wordfree; _ast_wprintf; _ast_wscanf; _ccmapcpy; _ccmapstr; _dtopen; $if _ELF64 _error_info_ { ASSERT = { TYPE = OBJECT; SIZE = 176; }; }; $elif _ELF32 _error_info_ { ASSERT = { TYPE = OBJECT; SIZE = 120; }; }; $else $error unknown ELFCLASS $endif _fini; _hash_info_ { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; _iblocks; _init; _mode_permmap_ { ASSERT = { TYPE = OBJECT; SIZE = 96; }; }; $if _ELF64 _mode_table_ { ASSERT = { TYPE = OBJECT; SIZE = 240; }; }; _opt_info_ { ASSERT = { TYPE = OBJECT; SIZE = 176; }; }; _proc_info_ { ASSERT = { TYPE = OBJECT; SIZE = 72; }; }; $elif _ELF32 _mode_table_ { ASSERT = { TYPE = OBJECT; SIZE = 200; }; }; _opt_info_ { ASSERT = { TYPE = OBJECT; SIZE = 128; }; }; _proc_info_ { ASSERT = { TYPE = OBJECT; SIZE = 52; }; }; $else $error unknown ELFCLASS $endif _re_comp; _re_exec; _re_putc; _reg_alloc; _reg_classfun; _reg_drop; _reg_fatal; $if _ELF64 _reg_state { ASSERT = { TYPE = OBJECT; SIZE = 3888; }; }; $elif _ELF32 _reg_state { ASSERT = { TYPE = OBJECT; SIZE = 2784; }; }; $else $error unknown ELFCLASS $endif _sfcvt; _sfdlen; _sfexcept; _sffilbuf; _sfflsbuf; _sfgetl2; _sfgetl; _sfgetu2; _sfgetu; _sfllen; _sfmode; _sfopen; _sfpclose; _sfpopen; _sfputd; _sfputl; _sfputm; _sfputu; _sfrsrv; _sfsetpool; _sfstrtod; _sftype; _sig_info_ { ASSERT = { TYPE = OBJECT; SIZE = addrsize[3]; }; }; _stdgets; _stdopen; _stdprintf; _stdscanf; _stdsetvbuf; _stdsprintf; _stdvsnprintf; _stdvsprintf; _stdvsscanf; _stkseek; _vmbestcheck; astconf; astconfdisc; astconflist; astcopy; astgetconf; astintercept; astlicense; astquery; astwinsize; base64decode; base64encode; ccmapid; ccmaplist; ccmapname; ccnative; chresc; chrexp; chrtoi; conformance; dtclose; dtdisc; dtextract; dtflatten; dtmethod; dtnew; dtopen; dtrestore; dtsize; dtstat; dtstrhash; dtview; dtwalk; error; error_break; errorf; errormsg; errorv; errorx; findclose; findopen; findread; findwrite; fmtbase; fmtbasell; fmtbuf; fmtclock; fmtdev; fmtelapsed; fmterror; fmtesc; fmtesq; fmtfmt; fmtfs; fmtgid; fmtident; fmtint; fmtip4; fmtls; fmtmatch; fmtmode; fmtnesq; fmtnum; fmtperm; fmtquote; fmtre; fmtrec; fmtscale; fmtsignal; fmttime; fmttmx; fmttv; fmtuid; fmtversion; fs3d; fs3d_mount; hashalloc; hashdone; hashdump; hashfree; hashlast; hashlook; hashnext; hashscan; hashsize; hashview; hashwalk; lccanon; lccategories; lcindex; lcinfo; lcmake; lcscan; magicclose; magiclist; magicload; magicopen; magictype; mcclose; mcdump; mcfind; mcget; mcindex; mcopen; mcput; mimeclose; mimecmp; mimehead; mimelist; mimeload; mimeopen; mimeset; mimetype; mimeview; mntclose; mntopen; mntread; mntwrite; modei; modex; recfmt; reclen; recstr; sfaprints; sfclose; sfclrerr; sfclrlock; sfdcdio; sfdcdos; sfdcfilter; sfdcmore; sfdcprefix; sfdcseekable; sfdcslow; sfdcsubstream; sfdctee; sfdcunion; sfdisc; sfdlen; sfecvt; sfeof; sferror; sffcvt; sffileno; sfgetc; sfgetd; sfgetl; sfgetm; sfgetr; sfgetu; sfkeyprintf; sfllen; sfmove; sfmutex; sfnew; sfnotify; sfnputc; sfopen; sfpeek; sfpkrd; sfpoll; sfpool; sfpopen; sfprintf; sfprints; sfpurge; sfputc; sfputd; sfputl; sfputm; sfputr; sfputu; sfraise; sfrd; sfread; sfreserve; sfresize; sfscanf; sfseek; sfset; sfsetbuf; sfsetfd; sfsize; sfsk; sfslen; sfsprintf; sfsscanf; sfstack; sfstacked; sfswap; sfsync; sftell; sftmp; sfulen; sfungetc; sfvalue; sfvaprints; sfvprintf; sfvprints; sfvscanf; sfvsprintf; sfvsscanf; sfwr; sfwrite; spawnlp; spawnve; spawnveg; spawnvp; spawnvpe; stackalloc; stackclear; stackfree; stackget; stackpop; stackpush; stacktell; stkalloc; stkclose; stkcopy; stkfreeze; stkinstall; stklink; stkopen; stkset; swapget; swapmem; swapop; swapput; systrace; tmdate; tmequiv; tmfix; tmfmt; tmform; tmgoff; tminit; tmleap; tmlex; tmlocale; tmmake; tmpoff; tmscan; tmsleep; tmtime; tmtype; tmweek; tmword; tmxdate; tmxfmt; tmxgettime; tmxleap; tmxmake; tmxscan; tmxsettime; tmxsleep; tmxtime; tmxtouch; tmzone; tokclose; tokline; tokopen; tokread; tokscan; tvcmp; tvgettime; tvsettime; tvsleep; tvtouch; typefix; univ_env { ASSERT = { TYPE = OBJECT; SIZE = 13; }; }; vecargs; vecfile; vecfree; vecload; vecstring; vmclear; vmclose; vmdbcheck; vmdbwatch; vmdebug; vmdisc; vmgetmem; vmmopen; vmopen; vmprofile; vmregion; vmsegment; vmset; vmstat; vmstrdup; vmtrace; vmtrbusy; vmwalk; wc2utf8; local: *; }; # data SYMBOL_VERSION SUNWprivate_1.1 { global: Dtbag { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Dthash { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Dtlist { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Dtobag { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Dtoset { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Dtqueue { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Dtset { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Dtstack { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Dttree { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Vmbest { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Vmdcheap { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Vmdcsbrk { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Vmdebug { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Vmheap { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Vmlast { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Vmpool { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Vmprofile { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; Vmregion { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; _DATA_dtlist; _DATA_dttree; _DATA_sigdata; _DATA_vmbest; _DATA_vmdcheap; _DATA_vmdebug; _DATA_vmlast; _DATA_vmpool; _DATA_vmprofile; $if _ELF64 _Sfstderr { ASSERT = { TYPE = OBJECT; SIZE = 176; }; }; _Sfstdin { ASSERT = { TYPE = OBJECT; SIZE = 176; }; }; _Sfstdout { ASSERT = { TYPE = OBJECT; SIZE = 176; }; }; _Stak_data { ASSERT = { TYPE = OBJECT; SIZE = 176; }; }; _ast_conf_data { ASSERT = { TYPE = OBJECT; SIZE = 31440; }; }; $elif _ELF32 _Sfstderr { ASSERT = { TYPE = OBJECT; $if _x86 SIZE = 104; $elif _sparc SIZE = 112; $else $error Unknown architecture $endif }; }; _Sfstdin { ASSERT = { TYPE = OBJECT; $if _x86 SIZE = 104; $elif _sparc SIZE = 112; $else $error Unknown architecture $endif }; }; _Sfstdout { ASSERT = { TYPE = OBJECT; $if _x86 SIZE = 104; $elif _sparc SIZE = 112; $else $error Unknown architecture $endif }; }; _Stak_data { ASSERT = { TYPE = OBJECT; $if _x86 SIZE = 104; $elif _sparc SIZE = 112; $else $error Unknown architecture $endif }; }; _ast_conf_data { ASSERT = { TYPE = OBJECT; $if _x86 SIZE = 26724; $elif _sparc SIZE = 31440; $else $error Unknown architecture $endif }; }; $else $error unknown ELFCLASS $endif _ast_conf_ndata { ASSERT = { TYPE = OBJECT; SIZE = 4; }; }; _ast_conf_nprefix { ASSERT = { TYPE = OBJECT; SIZE = 4; }; }; _ast_conf_prefix { ASSERT = { TYPE = OBJECT; SIZE = 396; }; }; _ccmap; _error_infop_ { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; _opt_infop_ { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; _tm_data_ { ASSERT = { TYPE = OBJECT; SIZE = addrsize[7]; }; }; _tm_datap_ { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; _tm_info_ { ASSERT = { TYPE = OBJECT; SIZE = addrsize[6]; }; }; _tm_infop_ { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; sfstderr { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; sfstdin { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; sfstdout { ASSERT = { TYPE = OBJECT; SIZE = addrsize; }; }; local: *; }; # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # SHELL= /usr/bin/ksh93 include $(SRC)/lib/Makefile.lib # Hammerhead: amd64-only SUBDIRS= $(MACH64) all : TARGET= all clean : TARGET= clean clobber : TARGET= clobber install : TARGET= install install_h : TARGET= install_h _msg : TARGET= _msg _feature : TARGET= _feature .KEEP_STATE: .PARALLEL: $(SUBDIRS) all clean clobber install _feature: $(SUBDIRS) # Hammerhead: amd64-only _msg: $(MACH64) include Makefile.defs HDRS= $(HEADERINSTALL) HDRDIR32= $(MACH)/ast HDRDIR64= $(MACH64)/ast include ../Makefile.asthdr install_h: $(SUBDIRS) .WAIT $(ROOTHDRS) install: install_h $(SUBDIRS): FRC @cd $@; pwd; $(MAKE) $(TARGET) FRC: include $(SRC)/lib/Makefile.targ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. # # Copyright (c) 2018, Joyent, Inc. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. SHELL= /usr/bin/ksh93 LIBRARY= libcmd.a VERS= .1 include ../Makefile.defs OBJECTS += $(LIBOBJS) include $(SRC)/lib/Makefile.lib include ../../Makefile.ast MAPFILES= ../mapfile-vers LIBS= $(DYNLIB) LDLIBS += -lsum -last -lsocket -lnsl -lc # We use "=" here since using $(CPPFLAGS.master) is very tricky in our # case - it MUST come as the last element but future changes in -D options # may then cause silent breakage in the AST sources because the last -D # option specified overrides previous -D options so we prefer the current # way to explicitly list each single flag. CPPFLAGS= \ $(DTEXTDOM) $(DTS_ERRNO) \ -I$(ASTSRC) \ -Iast -I. \ -I$(ROOT)/usr/include/ast \ -I$(ROOT)/usr/include \ -D_BLD_cmd \ -D_PACKAGE_ast \ -D_BLD_DLL \ '-DERROR_CATALOG="libcmd"' \ '-DUSAGE_LICENSE=\ "[-author?Glenn Fowler ]"\ "[-author?David Korn ]"\ "[-copyright?Copyright (c) 1992-2012 AT&T Intellectual Property]"\ "[-license?http://www.eclipse.org/org/documents/epl-v10.html]"\ "[--catalog?libcmd]"' CFLAGS += $(ASTCFLAGS) CFLAGS64 += $(ASTCFLAGS64) CERRWARN += -Wno-unused-value CERRWARN += -Wno-parentheses CERRWARN += $(CNOWARN_UNINIT) CERRWARN += -Wno-unused-variable CERRWARN += -Wno-implicit-function-declaration # not linted SMATCH=off .KEEP_STATE: all: install_h .WAIT $(LIBS) include $(SRC)/lib/Makefile.targ pics/%.o: $(ASTSRC)/%.c $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< $(POST_PROCESS_O) ###################################################################### # Header file generation $(HEADERSRC:%=ast/%): $(HEADERSRC:%=$(ASTSRC)/%) $(MKDIR) -p $(@D) $(CP) $(ASTSRC)/$(@F) $@ # This rule is derived from $(CONTRIB)/ast/src/lib/libcmd/Makefile ast/cmdext.h: $(OBJECTS:%.o=$(ASTSRC)/%.c) $(MKDIR) -p $(@D) echo '#include ' > $@.tmp $(SED) \ -e '/^b_[a-z_][a-z_0-9]*(/!d' \ -e 's/^b_//' \ -e 's/(.*//' \ -e 's/.*/extern int b_&(int, char**, Shbltin_t*);/' \ $(OBJECTS:%.o=$(ASTSRC)/%.c) | \ $(SORT) -u \ >> $@.tmp $(AST_PROTO) -f $@.tmp >> $@ rm -f $@.tmp $(POST_PROCESS_AST) CLOBBERFILES += ast/* install_h: $(HEADERSRC:%=ast/%) $(HEADERGEN:%=ast/%) .PARALLEL: $(HEADERSRC:%=ast/%) $(HEADERGEN:%=ast/%) _feature: FRC $(MAKE) -f Makefile.iffe generate include ../../Makefile.astmsg FRC: # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # These macros should be kept synchronised with those in # usr/src/contrib/ast/src/lib/libcmd/Makefile AST_LICENSE = since=1992,author=gsf+dgk ASTLIB= libcmd ASTSRC= $(C_AST)/src/lib/$(ASTLIB) HDRGUARD= cmd FEATURES= ids sockets symlink utsname HEADERSRC= cmd.h HEADERGEN= cmdext.h HEADERINSTALL= $(HEADERSRC) $(HEADERGEN) LOBJDIRS= LIBOBJS= \ basename.o cat.o chgrp.o cksum.o chmod.o chown.o cmdinit.o \ cmp.o comm.o cp.o cut.o date.o dirname.o expr.o fds.o \ fmt.o fold.o fts_fix.o getconf.o head.o id.o join.o lib.o ln.o \ logname.o md5sum.o mkdir.o mkfifo.o mktemp.o mv.o paste.o \ pathchk.o pids.o rev.o revlib.o rm.o rmdir.o stty.o sum.o \ sync.o tail.o tee.o tty.o uname.o uniq.o vmstate.o wc.o wclib.o # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # include ../Makefile.com include ../../Makefile.iffe cleaniffe: FRC $(RM) $(FEATURES:%=FEATURE/%) generate: cleaniffe $(FEATURES:%=FEATURE/%) /* : : generated from contrib/ast/src/lib/libcmd/features/ids by iffe version 2012-07-17 : : */ #ifndef _def_ids_cmd #define _def_ids_cmd 1 #define _sys_types 1 /* #include ok */ #define _lib_endgrent 1 /* endgrent() in default lib(s) */ #define _lib_getgrent 1 /* getgrent() in default lib(s) */ #define _lib_setgrent 1 /* setgrent() in default lib(s) */ #define _sys_fss 1 /* #include ok */ #define _hdr_unistd 1 /* #include ok */ #define _lib_getsid 1 /* getsid() in default lib(s) */ #if !_lib_fsid && _mac_fsid #define _lib_fsid 1 #endif #endif /* : : generated from contrib/ast/src/lib/libcmd/features/sockets by iffe version 2012-07-17 : : */ #ifndef _def_sockets_cmd #define _def_sockets_cmd 1 #define _sys_types 1 /* #include ok */ #define _sys_socket 1 /* #include ok */ #define _hdr_arpa_inet 1 /* #include ok */ #define _hdr_netinet_in 1 /* #include ok */ #define _lib_getsockname 1 /* getsockname() in default lib(s) */ #define _lib_getsockopt 1 /* getsockopt() in default lib(s) */ #define _lib_inet_ntoa 1 /* inet_ntoa() in default lib(s) */ #endif /* : : generated from contrib/ast/src/lib/libcmd/features/symlink by iffe version 2012-07-17 : : */ #ifndef _def_symlink_cmd #define _def_symlink_cmd 1 #define _sys_types 1 /* #include ok */ #define _lib_lchown 1 /* lchown implemented */ #endif /* : : generated from contrib/ast/src/lib/libcmd/features/utsname by iffe version 2012-07-17 : : */ #ifndef _def_utsname_cmd #define _def_utsname_cmd 1 #define _sys_types 1 /* #include ok */ #define _lib_getdomainname 1 /* getdomainname() in default lib(s) */ #define _lib_gethostid 1 /* gethostid() in default lib(s) */ #define _lib_gethostname 1 /* gethostname() in default lib(s) */ #define _lib_sethostname 1 /* sethostname() in default lib(s) */ #define _lib_syscall 1 /* syscall() in default lib(s) */ #define _lib_uname 1 /* uname() in default lib(s) */ #define _sys_utsname 1 /* #include ok */ #define _sys_syscall 1 /* #include ok */ #define _sys_systeminfo 1 /* #include ok */ #define _UNAME_os_DEFAULT "illumos" /* default os name */ #endif # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License, Version 1.0 only # (the "License"). You may not use this file except in compliance # with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2004 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # include ../Makefile.com include $(SRC)/lib/Makefile.lib.64 install: all $(ROOTLIBS64) $(ROOTLINKS64) # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # include ../Makefile.iffe include $(SRC)/lib/Makefile.lib.64 # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # # MAPFILE HEADER START # # WARNING: STOP NOW. DO NOT MODIFY THIS FILE. # Object versioning must comply with the rules detailed in # # usr/src/lib/README.mapfiles # # You should not be making modifications here until you've read the most current # copy of that file. If you need help, contact a gatekeeper for guidance. # # MAPFILE HEADER END # $mapfile_version 2 # functions by AST/ksh93's version of libcmd SYMBOL_VERSION SUNWprivate_1.1 { global: plugin_version; _cmd_init; b_basename; b_cat; b_chgrp; b_cksum; b_chmod; b_chown; b_cmp; b_comm; b_cp; b_cut; b_date; b_dirname; b_expr; b_fds; b_fmt; b_fold; b_getconf; b_head; b_id; b_join; b_ln; b_logname; b_md5sum; b_mkdir; b_mkfifo; b_mktemp; b_mv; b_paste; b_pathchk; b_pids; b_rev; b_rm; b_rmdir; b_stty; b_sum; b_sync; b_tail; b_tee; b_tty; b_uname; b_uniq; b_wc; b_vmstate; local: *; }; # functions exported by the old Solaris version of libcmd # (the code has been moved to libc starting with Solaris 11/B51) SYMBOL_VERSION SUNWprivate_1.1 { global: defcntl { TYPE = FUNCTION; FILTER = libc.so.1 }; defopen { TYPE = FUNCTION; FILTER = libc.so.1 }; defread { TYPE = FUNCTION; FILTER = libc.so.1 }; local: *; }; # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # SHELL= /usr/bin/ksh93 include $(SRC)/lib/Makefile.lib # Hammerhead: amd64-only SUBDIRS= $(MACH64) all : TARGET= all clean : TARGET= clean clobber : TARGET= clobber install : TARGET= install install_h : TARGET= install_h _msg : TARGET= _msg _feature : TARGET= _feature .KEEP_STATE: .PARALLEL: $(SUBDIRS) all clean clobber install _feature: $(SUBDIRS) # Hammerhead: amd64-only _msg: $(MACH64) include Makefile.defs HDRS= $(HEADERINSTALL) HDRDIR32= $(MACH)/ast HDRDIR64= $(MACH64)/ast include ../Makefile.asthdr install_h: $(SUBDIRS) .WAIT $(ROOTHDRS) install: install_h $(SUBDIRS): FRC @cd $@; pwd; $(MAKE) $(TARGET) FRC: include $(SRC)/lib/Makefile.targ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright (c) 2018, Joyent, Inc. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. SHELL= /usr/bin/ksh93 LIBRARY= libdll.a VERS= .1 include ../Makefile.defs OBJECTS += $(LIBOBJS) include $(SRC)/lib/Makefile.lib include ../../Makefile.ast MAPFILES= ../mapfile-vers LIBS= $(DYNLIB) LDLIBS += -last -lc # We use "=" here since using $(CPPFLAGS.master) is very tricky in our # case - it MUST come as the last element but future changes in -D options # may then cause silent breakage in the AST sources because the last -D # option specified overrides previous -D options so we prefer the current # way to explicitly list each single flag. # Notes: # - "-D_BLD_DLL" comes from ${mam_cc_DLL} in Mamfile CPPFLAGS= \ $(DTEXTDOM) $(DTS_ERRNO) \ $(DLLPLATFORMCPPFLAGS) \ -Iast -I. \ -I$(ROOT)/usr/include/ast \ -I$(ROOT)/usr/include \ '-DCONF_LIBSUFFIX=".so"' \ '-DCONF_LIBPREFIX="lib"' \ -D_PACKAGE_ast \ -D_BLD_DLL \ -D_BLD_dll CFLAGS += $(ASTCFLAGS) CFLAGS64 += $(ASTCFLAGS64) CERRWARN += -Wno-parentheses CERRWARN += $(CNOWARN_UNINIT) # needs work SMOFF += all_func_returns,strcpy_overflow .KEEP_STATE: all: install_h .WAIT $(LIBS) include $(SRC)/lib/Makefile.targ pics/%.o: $(ASTSRC)/%.c $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< $(POST_PROCESS_O) ###################################################################### # Header file generation $(HEADERGEN:%=ast/%): $(FEATURES:%=FEATURE/%) $(MKDIR) -p $(@D) src=`echo $(@F:%.h=%) | sed 's/^ast_//'`; \ [[ $$src = dlldefs ]] && src=dll; \ $(AST_PROTO) FEATURE/$$src > $@ $(POST_PROCESS_AST) install_h: $(HEADERGEN:%=ast/%) CLOBBERFILES += ast/* _feature: FRC $(MAKE) -f Makefile.iffe generate include ../../Makefile.astmsg FRC: # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # These macros should be kept synchronised with those in # usr/src/contrib/ast/src/lib/libdll/Makefile AST_LICENSE = since=1997,author=gsf ASTLIB= libdll ASTSRC= $(C_AST)/src/lib/$(ASTLIB) HDRGUARD= dll FEATURES= dll HEADERSRC= HEADERGEN= dlldefs.h HEADERINSTALL= $(HEADERSRC) $(HEADERGEN) LOBJDIRS= LIBOBJS= \ dlfcn.o dllopen.o dllfind.o dllplug.o dll_lib.o \ dllnext.o dlllook.o dllscan.o dllcheck.o dllerror.o # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # include ../Makefile.com include ../../Makefile.iffe cleaniffe: FRC $(RM) $(FEATURES:%=FEATURE/%) generate: cleaniffe $(FEATURES:%=FEATURE/%) /* : : generated by proto : : */ /* : : generated from contrib/ast/src/lib/libdll/features/dll by iffe version 2012-07-17 : : */ #ifndef _def_dll_dll #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_dll_dll 1 #define _sys_types 1 /* #include ok */ #define _hdr_dlfcn 1 /* #include ok */ #define _LIB_dl 1 /* -ldl is a library */ #define _lib_dlopen 1 /* dlopen() in default lib(s) */ #define _DLL_NEXT_PATH "/usr/lib/libc.so.1" #if defined(__MVS__) && !defined(__SUSV3) #define __SUSV3 1 #endif #include #define DLL_INFO_PREVER 0x0001 /* pre-suffix style version */ #define DLL_INFO_DOTVER 0x0002 /* post-suffix style version */ typedef unsigned long (*Dll_plugin_version_f) __PROTO__((void)); typedef int (*Dllerror_f) __PROTO__((__V_*, __V_*, int, ...)); typedef struct Dllinfo_s { char** sibling; /* sibling dirs on $PATH */ char* prefix; /* library name prefix */ char* suffix; /* library name suffix */ char* env; /* library path env var */ int flags; /* DLL_INFO_* flags */ #ifdef _DLLINFO_PRIVATE_ _DLLINFO_PRIVATE_ #endif } Dllinfo_t; typedef struct Dllnames_s { char* id; char* name; char* base; char* type; char* opts; char* path; char data[1024]; } Dllnames_t; typedef struct Dllent_s { char* path; char* name; #ifdef _DLLENT_PRIVATE_ _DLLENT_PRIVATE_ #endif } Dllent_t; typedef struct Dllscan_s { __V_* pad; #ifdef _DLLSCAN_PRIVATE_ _DLLSCAN_PRIVATE_ #endif } Dllscan_t; #if _BLD_dll && defined(__EXPORT__) #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ __EXPORT__ #endif extern __MANGLE__ Dllinfo_t* dllinfo __PROTO__((void)); extern __MANGLE__ __V_* dllplugin __PROTO__((const char*, const char*, const char*, unsigned long, unsigned long*, int, char*, size_t)); extern __MANGLE__ __V_* dllplug __PROTO__((const char*, const char*, const char*, int, char*, size_t)); extern __MANGLE__ __V_* dllfind __PROTO__((const char*, const char*, int, char*, size_t)); extern __MANGLE__ Dllnames_t* dllnames __PROTO__((const char*, const char*, Dllnames_t*)); extern __MANGLE__ __V_* dll_lib __PROTO__((Dllnames_t*, unsigned long, Dllerror_f, __V_*)); extern __MANGLE__ __V_* dllmeth __PROTO__((const char*, const char*, unsigned long)); extern __MANGLE__ __V_* dllopen __PROTO__((const char*, int)); extern __MANGLE__ __V_* dllnext __PROTO__((int)); extern __MANGLE__ __V_* dlllook __PROTO__((__V_*, const char*)); extern __MANGLE__ int dllcheck __PROTO__((__V_*, const char*, unsigned long, unsigned long*)); extern __MANGLE__ unsigned long dllversion __PROTO__((__V_*, const char*)); extern __MANGLE__ char* dllerror __PROTO__((int)); extern __MANGLE__ Dllscan_t* dllsopen __PROTO__((const char*, const char*, const char*)); extern __MANGLE__ Dllent_t* dllsread __PROTO__((Dllscan_t*)); extern __MANGLE__ int dllsclose __PROTO__((Dllscan_t*)); #undef __MANGLE__ #define __MANGLE__ __LINKAGE__ #endif # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # Platform-specific config # Note that "HOSTTYPE" matches the value used by AT&T upstream. DLLPLATFORMCPPFLAGS= '-DHOSTTYPE="sol$(RELEASE_MINOR).i386"' include ../Makefile.com include $(SRC)/lib/Makefile.lib.64 install: all $(ROOTLIBS64) $(ROOTLINKS64) # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # include ../Makefile.iffe include $(SRC)/lib/Makefile.lib.64 # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # # MAPFILE HEADER START # # WARNING: STOP NOW. DO NOT MODIFY THIS FILE. # Object versioning must comply with the rules detailed in # # usr/src/lib/README.mapfiles # # You should not be making modifications here until you've read the most current # copy of that file. If you need help, contact a gatekeeper for guidance. # # MAPFILE HEADER END # $mapfile_version 2 SYMBOL_VERSION SUNWprivate_1.1 { global: dllerror; dllfind; dllinfo; dlllook; dllnext; dllplug; dllplugin; dllsclose; dllsopen; dllsread; local: *; }; # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # SHELL= /usr/bin/ksh93 include $(SRC)/lib/Makefile.lib # Hammerhead: amd64-only SUBDIRS= $(MACH64) all : TARGET= all clean : TARGET= clean clobber : TARGET= clobber install : TARGET= install _msg : TARGET= _msg .KEEP_STATE: all clean clobber install: $(SUBDIRS) # Hammerhead: amd64-only _msg: $(MACH64) _feature: include ../Makefile.ast include Makefile.defs HDRS= $(HEADERINSTALL) HDRDIR32= $(ASTSRC) HDRDIR64= $(ASTSRC) include ../Makefile.asthdr install_h: $(ROOTHDRS) install: install_h $(SUBDIRS): FRC @cd $@; pwd; $(MAKE) $(TARGET) FRC: include $(SRC)/lib/Makefile.targ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright (c) 2019, Joyent, Inc. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. SHELL= /usr/bin/ksh93 LIBRARY= libpp.a VERS= .1 include ../Makefile.defs OBJECTS += $(LIBOBJS) include $(SRC)/lib/Makefile.lib include ../../Makefile.ast MAPFILES= ../mapfile-vers LIBS= $(DYNLIB) LDLIBS += -last -lc # We use "=" here since using $(CPPFLAGS.master) is very tricky in our # case - it MUST come as the last element but future changes in -D options # may then cause silent breakage in the AST sources because the last -D # option specified overrides previous -D options so we prefer the current # way to explicitly list each single flag. CPPFLAGS= \ $(DTEXTDOM) $(DTS_ERRNO) \ -I. \ -I$(ROOT)/usr/include/ast \ -I$(ROOT)/usr/include \ -D_PACKAGE_ast \ '-DUSAGE_LICENSE=\ "[-author?Glenn Fowler ]"\ "[-copyright?Copyright (c) 1986-2012 AT&T Intellectual Property]"\ "[-license?http://www.eclipse.org/org/documents/epl-v10.html]"\ "[--catalog?libpp]"' CFLAGS += $(ASTCFLAGS) CFLAGS64 += $(ASTCFLAGS64) CERRWARN += -Wno-parentheses CERRWARN += $(CNOWARN_UNINIT) CERRWARN += -Wno-char-subscripts CERRWARN += -Wno-empty-body CERRWARN += -Wno-unused-value CERRWARN += -Wno-pointer-to-int-cast CERRWARN += -Wno-int-to-pointer-cast # "pplex() parse error: turning off implications after 60 seconds" SMATCH = off .KEEP_STATE: all: $(LIBS) include $(SRC)/lib/Makefile.targ ppdef.h: $(ASTSRC)/pp.tab $(AST_TOOLS)/gentab -d $(ASTSRC)/pp.tab > $@ pptab.h: $(ASTSRC)/pp.tab $(AST_TOOLS)/gentab -t $(ASTSRC)/pp.tab > $@ pics/%.o: $(ASTSRC)/%.c ppdef.h pptab.h $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< $(POST_PROCESS_O) CLOBBERFILES += pptab.h ppdef.h include ../../Makefile.astmsg # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # These macros should be kept synchronised with those in # usr/src/contrib/ast/src/lib/libpp/Makefile AST_LICENSE = since=1996,author=gsf ASTLIB= libpp ASTSRC= $(C_AST)/src/lib/$(ASTLIB) HDRGUARD= pp FEATURES= HEADERSRC= pp.h ppkey.h HEADERGEN= HEADERINSTALL= $(HEADERSRC) $(HEADERGEN) LOBJDIRS= LIBOBJS= ppargs.o ppbuiltin.o ppcall.o ppcomment.o ppcontext.o ppcontrol.o \ ppcpp.o ppdata.o pperror.o ppexpr.o ppfsm.o ppincref.o ppinput.o \ ppkey.o pplex.o ppline.o ppmacref.o ppmisc.o ppop.o pppragma.o \ ppprintf.o ppproto.o ppsearch.o pptrace.o # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # Copyright 2025 Hammerhead Project # include ../Makefile.com include $(SRC)/lib/Makefile.lib.64 install: all $(ROOTLIBS64) $(ROOTLINKS64) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # # MAPFILE HEADER START # # WARNING: STOP NOW. DO NOT MODIFY THIS FILE. # Object versioning must comply with the rules detailed in # # usr/src/lib/README.mapfiles # # You should not be making modifications here until you've read the most current # copy of that file. If you need help, contact a gatekeeper for guidance. # # MAPFILE HEADER END # $mapfile_version 2 SYMBOL_VERSION SUNWprivate_1.1 { global: pp { ASSERT = { TYPE = OBJECT; SIZE = 716; }; }; ppop; pplex; ppinput; ppargs; local: *; }; # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # SHELL= /usr/bin/ksh93 include $(SRC)/lib/Makefile.lib # Hammerhead: amd64-only SUBDIRS= $(MACH64) all : TARGET= all clean : TARGET= clean clobber : TARGET= clobber install : TARGET= install install_h : TARGET= install_h _msg : TARGET= _msg _feature : TARGET= _feature .KEEP_STATE: .PARALLEL: $(SUBDIRS) all clean clobber install _feature: $(SUBDIRS) # Hammerhead: amd64-only _msg: $(MACH64) include Makefile.defs HDRS= $(HEADERINSTALL) HDRDIR32= $(MACH)/ast HDRDIR64= $(MACH64)/ast include ../Makefile.asthdr install_h: $(SUBDIRS) .WAIT $(ROOTHDRS) install: install_h $(SUBDIRS): FRC @cd $@; pwd; $(MAKE) $(TARGET) FRC: ASTSRC= $(CONTRIB)/ast/src/cmd/ksh93 include Makefile.tests include $(SRC)/lib/Makefile.targ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2019, Joyent, Inc. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # SHELL= /usr/bin/ksh93 LIBRARY= libshell.a VERS= .1 include ../Makefile.defs OBJECTS += $(LIBOBJS) include $(SRC)/lib/Makefile.lib include ../../Makefile.ast MAPFILES= ../mapfile-vers # Specify the MACH we currently use to build and test ksh LIBSHELLMACH= $(TARGETMACH) LIBSHELLBASE=.. LIBS= $(DYNLIB) LDLIBS += -lcmd -ldll -last -lsocket -lm -lc # We use "=" here since using $(CPPFLAGS.master) is very tricky in our # case - it MUST come as the last element but future changes in -D options # may then cause silent breakage in the AST sources because the last -D # option specified overrides previous -D options so we prefer the current # way to explicitly list each single flag. CPPFLAGS= \ $(DTEXTDOM) $(DTS_ERRNO) \ $(LIBSHELLCPPFLAGS) \ -Iast -I. CFLAGS += $(ASTCFLAGS) CFLAGS64 += $(ASTCFLAGS64) CERRWARN += -Wno-parentheses CERRWARN += -Wno-unused-value CERRWARN += -Wno-unused-variable CERRWARN += -Wno-unused-function CERRWARN += $(CNOWARN_UNINIT) CERRWARN += -Wno-clobbered CERRWARN += -Wno-char-subscripts pics/bltins/print.o : CERRWARN += -Wno-dangling-pointer # smatch gets out of memory on common/sh/macro.c SMATCH= off .KEEP_STATE: all: install_h mkpicdirs .WAIT $(LIBS) mkpicdirs: @mkdir -p $(LOBJDIRS:%=pics/%) include $(SRC)/lib/Makefile.targ pics/%.o: $(ASTSRC)/%.c $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< $(POST_PROCESS_O) ###################################################################### # Header file generation $(HEADERSRC:%=ast/%): $(HEADERSRC:%=$(ASTSRC)/include/%) $(MKDIR) -p $(@D) $(CP) $(ASTSRC)/include/$(@F) $@ CLOBBERFILES += ast/* install_h: $(HEADERSRC:%=ast/%) _feature: FRC $(MAKE) -f Makefile.iffe generate include ../../Makefile.astmsg FRC: # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # These macros should be kept synchronised with those in # usr/src/contrib/ast/src/cmd/ksh93/Makefile AST_LICENSE = since=1982,author=dgk ASTLIB= libshell ASTSRC= $(C_AST)/src/cmd/ksh93 HDRGUARD= ksh93 FEATURES= cmds dynamic externs locale math options poll rlimits setjmp \ sigfeatures time ttys \ acct execargs pstat HEADERSRC= history.h nval.h shell.h HEADERGEN= HEADERINSTALL= $(HEADERSRC) $(HEADERGEN) LOBJDIRS= bltins data edit sh LIBOBJS= \ bltins/alarm.o \ bltins/cd_pwd.o \ bltins/cflow.o \ bltins/enum.o \ bltins/getopts.o \ bltins/hist.o \ bltins/lib.o \ bltins/misc.o \ bltins/poll_solaris.o \ bltins/print.o \ bltins/read.o \ bltins/regress.o \ bltins/shiocmd_solaris.o \ bltins/sleep.o \ bltins/test.o \ bltins/trap.o \ bltins/typeset.o \ bltins/ulimit.o \ bltins/umask.o \ bltins/whence.o \ data/aliases.o \ data/builtins.o \ data/keywords.o \ data/lexstates.o \ data/limits.o \ data/msg.o \ data/options.o \ data/signals.o \ data/strdata.o \ data/testops.o \ data/variables.o \ edit/completion.o \ edit/edit.o \ edit/emacs.o \ edit/hexpand.o \ edit/history.o \ edit/vi.o \ sh/args.o \ sh/arith.o \ sh/array.o \ sh/defs.o \ sh/deparse.o \ sh/expand.o \ sh/fault.o \ sh/fcin.o \ sh/init.o \ sh/io.o \ sh/jobs.o \ sh/lex.o \ sh/macro.o \ sh/main.o \ sh/name.o \ sh/nvdisc.o \ sh/nvtree.o \ sh/nvtype.o \ sh/parse.o \ sh/path.o \ sh/streval.o \ sh/string.o \ sh/subshell.o \ sh/tdump.o \ sh/timers.o \ sh/trestore.o \ sh/waitevent.o \ sh/xec.o # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # include ../Makefile.com include ../../Makefile.iffe FEATURE/acct FEATURE/execargs FEATURE/pstat: PATH=$(IFFEPATH) \ $(AST_IFFE) $(IFFEFLAGS) -c '$(IFFEC)' def $(@F) FEATURE/math : IFFE_EXTRA = $(ASTSRC)/data/math.tab cleaniffe: FRC $(RM) $(FEATURES:%=FEATURE/%) generate: cleaniffe $(FEATURES:%=FEATURE/%) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # # These are tests that come from usr/src/contrib/ast, and the test driver # itself. # DF_TESTS= \ shtests \ tests/alias.sh \ tests/append.sh \ tests/arith.sh \ tests/arrays.sh \ tests/arrays2.sh \ tests/attributes.sh \ tests/basic.sh \ tests/bracket.sh \ tests/builtins.sh \ tests/case.sh \ tests/comvar.sh \ tests/comvario.sh \ tests/coprocess.sh \ tests/cubetype.sh \ tests/enum.sh \ tests/exit.sh \ tests/expand.sh \ tests/functions.sh \ tests/glob.sh \ tests/grep.sh \ tests/heredoc.sh \ tests/io.sh \ tests/leaks.sh \ tests/locale.sh \ tests/math.sh \ tests/nameref.sh \ tests/namespace.sh \ tests/options.sh \ tests/path.sh \ tests/pointtype.sh \ tests/pty.sh \ tests/quoting.sh \ tests/quoting2.sh \ tests/readcsv.sh \ tests/recttype.sh \ tests/restricted.sh \ tests/return.sh \ tests/select.sh \ tests/sigchld.sh \ tests/signal.sh \ tests/statics.sh \ tests/subshell.sh \ tests/substring.sh \ tests/tilde.sh \ tests/timetype.sh \ tests/treemove.sh \ tests/types.sh \ tests/variables.sh \ tests/vartree1.sh \ tests/vartree2.sh # # These are additional illumos tests and the README # DF_XTESTS= \ README.tests \ tests/illumos_13434_chunked_heredoc.sh \ tests/illumos_4149_builtin_head.sh \ tests/sun_solaris_array_default_datatype.sh \ tests/sun_solaris_builtin_poll.sh \ tests/sun_solaris_builtin_sum.sh \ tests/sun_solaris_builtin_tail.sh \ tests/sun_solaris_command_substitution.sh \ tests/sun_solaris_compound_misc.sh \ tests/sun_solaris_compound_nameref.sh \ tests/sun_solaris_compoundvario.sh \ tests/sun_solaris_cr_xxxxxxxx_template.sh \ tests/sun_solaris_cr_6687139_command_substitution_exec_redirection_allocation_loop.sh \ tests/sun_solaris_cr_6713682_compound_var_bleeds_through_subshell.sh \ tests/sun_solaris_cr_6722134_background_CHLD_trap.sh \ tests/sun_solaris_cr_6753538_subshell_leaks_umask.sh \ tests/sun_solaris_cr_6754020_weird_square_bracket_expansion.sh \ tests/sun_solaris_cr_6763594_command_failure_execs_twice.sh \ tests/sun_solaris_cr_6766246_pattern_matching_bug.sh \ tests/sun_solaris_cr_6769332_substitutions_terminate_shell_after_257_iterations.sh \ tests/sun_solaris_cr_6777491_lacks_arithmetric_function_iszero.sh \ tests/sun_solaris_cr_6778077_sigthaw_trap.sh \ tests/sun_solaris_cr_6789247_printf_hexfloat_rounding.sh \ tests/sun_solaris_cr_6800929_large_command_substitution_hang.sh \ tests/sun_solaris_cr_6805792_varmovetest1.sh \ tests/sun_solaris_cr_6805794_character_to_wchar_not_working.sh \ tests/sun_solaris_cr_6805795_negative_zero.sh \ tests/sun_solaris_cr_6807179_shellpattern_uses_getpwnam.sh \ tests/sun_solaris_cr_6835835_builtin_cat_n_broken.sh \ tests/sun_solaris_cr_6848486_echo_test_with_test_undefined_executes_test_builtin.sh \ tests/sun_solaris_cr_6855875_typeset_hexfloat_has_too_few_digits.sh \ tests/sun_solaris_cr_6862121_shbinexec_kernel_module_defunct.sh \ tests/sun_solaris_cr_6881017_background_process_in_subshell_hangs_caller.sh \ tests/sun_solaris_cr_6887363_shell_sometimes_mishandles_return_value_of_its_child_process.sh \ tests/sun_solaris_cr_6904557_wc_no_longer_counts_number_of_bytes_correctly.sh \ tests/sun_solaris_cr_6904575_cut_-d_with_multibyte_character_no_longer_works.sh \ tests/sun_solaris_cr_6904878_join_-t_no_longer_works_with_multibyte_char_separator.sh \ tests/sun_solaris_cr_6907460_EXIT_trap_handlers_are_sometimes_executed_twice.sh \ tests/sun_solaris_getconf.sh \ tests/sun_solaris_locale_misc.sh \ tests/sun_solaris_local_compound_nameref001.sh \ tests/sun_solaris_staticvariables.sh \ tests/sun_solaris_vartree001.sh \ tests/sun_solaris_vartree002.sh \ tests/sun_solaris_vartree003.sh TESTFILES= $(DF_TESTS) $(DF_XTESTS) TESTFILESRCDIR= $(ASTSRC) ROOTTESTDIRBASE= $(ROOT)/opt/ksh93-tests # Rules for executables $(ROOTTESTDIRBASE)/shtests : FILEMODE= 755 $(ROOTTESTDIRBASE)/% $(ROOTTESTDIRBASE)/tests/%: common/tests/% $(INS.file) $(ROOTTESTDIRBASE)/%: $(TESTFILESRCDIR)/% $(INS.file) $(ROOTTESTDIRBASE)/%: $(TESTFILESRCDIR)/tests/% $(INS.file) $(ROOTTESTDIRBASE) $(ROOTTESTDIRBASE)/tests: $(INS.dir) ROOTTESTDIRS= $(ROOTTESTDIRBASE) .WAIT $(ROOTTESTDIRBASE)/tests ROOTTESTFILES= $(TESTFILES:%=$(ROOTTESTDIRBASE)/%) _testinstall: $(ROOTTESTDIRS) .WAIT $(ROOTTESTFILES) install: _testinstall /* : : generated by iffe version 2012-07-17 : : */ #ifndef _def_acct_amd64 #define _def_acct_amd64 1 #define _sys_types 1 /* #include ok */ #define _dat_acct 1 /* acct in default lib(s) */ #define _lib_acct 1 /* acct() in default lib(s) */ #define _sys_acct 1 /* #include ok */ #endif /* : : generated from contrib/ast/src/cmd/ksh93/features/cmds by iffe version 2012-07-17 : : */ #ifndef _def_cmds_ksh93 #define _def_cmds_ksh93 1 #define _sys_types 1 /* #include ok */ #define _cmd_newgrp 1 #define _usr_bin_newgrp 1 #define _cmd_test 1 #define _usr_bin_test 1 #define _cmd_id 1 #define _usr_bin_id 1 #define _cmd_wc 1 #define _usr_bin_wc 1 #define _cmd_cut 1 #define _usr_bin_cut 1 #define _cmd_logname 1 #define _usr_bin_logname 1 #define _cmd_pfexec 1 #define _usr_bin_pfexec 1 #define _cmd_tput 1 #define _usr_bin_tput 1 #define _pth_ed "/bin/ed" #endif /* : : generated from contrib/ast/src/cmd/ksh93/features/dynamic by iffe version 2012-07-17 : : */ #ifndef _def_dynamic_ksh93 #define _def_dynamic_ksh93 1 #define _sys_types 1 /* #include ok */ #if SHOPT_DYNAMIC #include #endif #if !defined(SHOPT_FS_3D) && SHOPT_DYNAMIC # define SHOPT_FS_3D 1 #endif /* !SHOPT_FS_3D */ #if SHOPT_FS_3D # undef mount # include #endif /* SHOPT_FS_3D */ #endif /* : : generated by iffe version 2012-07-17 : : */ #ifndef _def_execargs_amd64 #define _def_execargs_amd64 1 #define _sys_types 1 /* #include ok */ #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/cmd/ksh93/features/externs by iffe version 2012-07-17 : : */ #ifndef _def_externs_ksh93 #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_externs_ksh93 1 #define _sys_types 1 /* #include ok */ #define _hdr_exec_attr 1 /* #include ok */ #define _hdr_math 1 /* #include ok */ #define _mem_name_exception 1 /* name is a member of struct exception */ #define _lib_setreuid 1 /* setreuid() in default lib(s) */ #define _lib_setregid 1 /* setregid() in default lib(s) */ #define _lib_nice 1 /* nice() in default lib(s) */ #define _lib_fork 1 /* fork() in default lib(s) */ #define _lib_spawnveg 1 /* spawnveg() in default lib(s) */ #define _lib_fchdir 1 /* fchdir() in default lib(s) */ #define _sys_mman 1 /* #include ok */ #define _lib_memcntl 1 /* memcntl() in default lib(s) */ #define _LIB_secdb 1 /* -lsecdb is a library */ #define _lib_getexecuser 1 /* getexecuser() in default lib(s) */ #define _lib_free_execattr 1 /* free_execattr() in default lib(s) */ #endif /* : : generated from contrib/ast/src/cmd/ksh93/features/locale by iffe version 2012-07-17 : : */ #ifndef _def_locale_ksh93 #define _def_locale_ksh93 1 #define _sys_types 1 /* #include ok */ #define _hdr_locale 1 /* #include ok */ #define _hdr_wchar 1 /* #include ok */ #define _hdr_wctype 1 /* #include ok */ #define _lib_localeconv 1 /* localeconv() in default lib(s) */ #define _lib_wctype 1 /* wctype() in default lib(s) */ #define _lib_iswctype 1 /* iswctype() in default lib(s) */ #define _lib_iswblank 1 /* iswblank() in default lib(s) */ #define _lib_wctrans 1 /* wctrans() in default lib(s) */ #define _lib_towctrans 1 /* towctrans() in default lib(s) */ #define _hdr_time 1 /* #include ok */ #define _sys_time 1 /* #include ok */ #define _sys_times 1 /* #include ok */ #define _hdr_stddef 1 /* #include ok */ #define _hdr_stdlib 1 /* #include ok */ #define _typ_wctrans_t 1 /* wctrans_t is a type */ #if _PACKAGE_ast # undef _hdr_locale # define _hdr_locale 1 #else # ifdef _hdr_locale # include # ifndef LC_MESSAGES # define LC_MESSAGES LC_ALL # endif /* LC_MESSAGES */ # endif /* _hdr_locale */ #endif /* _PACKAGE_ast */ #ifdef _hdr_locale # ifdef _lib_localeconv static struct lconv *lp; # define GETDECIMAL(x) (((lp=localeconv()) && lp->decimal_point && *lp->decimal_point) ? *lp->decimal_point : '.' ) # else # define GETDECIMAL(x) ('.') # endif /* _lib_localeconv */ #else # define GETDECIMAL(x) ('.') #endif /* _hdr_locale */ #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/cmd/ksh93/features/math.sh by iffe version 2012-07-17 : : */ #ifndef _def_math_ksh93 #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_math_ksh93 1 #define _sys_types 1 /* #include ok */ /* : : generated by cmd/ast/tools/iffe from contrib/ast/src/cmd/ksh93/data/math.tab : : */ typedef Sfdouble_t (*Math_f) __PROTO__((Sfdouble_t,...)); #include #include static Sfdouble_t local_finite __PARAM__((Sfdouble_t a1), (a1)) __OTORP__(Sfdouble_t a1;){return finite(a1);} static int local_fpclassify __PARAM__((Sfdouble_t a1), (a1)) __OTORP__(Sfdouble_t a1;){return fpclassify(a1);} static int local_fpclass __PARAM__((Sfdouble_t a1), (a1)) __OTORP__(Sfdouble_t a1;){return fpclass(a1);} static int local_isfinite __PARAM__((Sfdouble_t a1), (a1)) __OTORP__(Sfdouble_t a1;){return isfinite(a1);} static int local_isgreater __PARAM__((Sfdouble_t a1,Sfdouble_t a2), (a1, a2)) __OTORP__(Sfdouble_t a1;Sfdouble_t a2;){return isgreater(a1,a2);} static int local_isgreaterequal __PARAM__((Sfdouble_t a1,Sfdouble_t a2), (a1, a2)) __OTORP__(Sfdouble_t a1;Sfdouble_t a2;){return isgreaterequal(a1,a2);} static int local_isinf __PARAM__((Sfdouble_t a1), (a1)) __OTORP__(Sfdouble_t a1;){return isinf(a1);} static int local_isless __PARAM__((Sfdouble_t a1,Sfdouble_t a2), (a1, a2)) __OTORP__(Sfdouble_t a1;Sfdouble_t a2;){return isless(a1,a2);} static int local_islessequal __PARAM__((Sfdouble_t a1,Sfdouble_t a2), (a1, a2)) __OTORP__(Sfdouble_t a1;Sfdouble_t a2;){return islessequal(a1,a2);} static int local_islessgreater __PARAM__((Sfdouble_t a1,Sfdouble_t a2), (a1, a2)) __OTORP__(Sfdouble_t a1;Sfdouble_t a2;){return islessgreater(a1,a2);} static int local_isnormal __PARAM__((Sfdouble_t a1), (a1)) __OTORP__(Sfdouble_t a1;){return isnormal(a1);} static int local_issubnormal __PARAM__((Sfdouble_t a1), (a1)) __OTORP__(Sfdouble_t a1;){ int q = fpclassify(a1); return q == FP_SUBNORMAL; } static int local_isunordered __PARAM__((Sfdouble_t a1,Sfdouble_t a2), (a1, a2)) __OTORP__(Sfdouble_t a1;Sfdouble_t a2;){return isunordered(a1,a2);} static int local_iszero __PARAM__((Sfdouble_t a1), (a1)) __OTORP__(Sfdouble_t a1;){ int q = fpclassify(a1); return q == FP_ZERO; } static int local_signbit __PARAM__((Sfdouble_t a1), (a1)) __OTORP__(Sfdouble_t a1;){return signbit(a1);} /* * first byte is two-digit octal number. Last digit is number of args * first digit is 0 if return value is double, 1 for integer */ const struct mathtab shtab_math[] = { "\001acos", (Math_f)(uintptr_t)acosl, "\001acosh", (Math_f)(uintptr_t)acoshl, "\001asin", (Math_f)(uintptr_t)asinl, "\001asinh", (Math_f)(uintptr_t)asinhl, "\001atan", (Math_f)(uintptr_t)atanl, "\002atan2", (Math_f)(uintptr_t)atan2l, "\001atanh", (Math_f)(uintptr_t)atanhl, "\001cbrt", (Math_f)(uintptr_t)cbrtl, "\001ceil", (Math_f)(uintptr_t)ceill, "\002copysign", (Math_f)(uintptr_t)copysignl, "\001cos", (Math_f)(uintptr_t)cosl, "\001cosh", (Math_f)(uintptr_t)coshl, "\001erf", (Math_f)(uintptr_t)erfl, "\001erfc", (Math_f)(uintptr_t)erfcl, "\001exp", (Math_f)(uintptr_t)expl, "\001exp2", (Math_f)(uintptr_t)exp2l, "\001expm1", (Math_f)(uintptr_t)expm1l, "\001fabs", (Math_f)(uintptr_t)fabsl, "\001abs", (Math_f)(uintptr_t)fabsl, "\002fdim", (Math_f)(uintptr_t)fdiml, "\001finite", (Math_f)(uintptr_t)local_finite, "\001floor", (Math_f)(uintptr_t)floorl, "\001int", (Math_f)(uintptr_t)floorl, "\003fma", (Math_f)(uintptr_t)fmal, "\002fmax", (Math_f)(uintptr_t)fmaxl, "\002fmin", (Math_f)(uintptr_t)fminl, "\002fmod", (Math_f)(uintptr_t)fmodl, "\011fpclassify", (Math_f)(uintptr_t)local_fpclassify, "\011fpclass", (Math_f)(uintptr_t)local_fpclass, "\002hypot", (Math_f)(uintptr_t)hypotl, "\011ilogb", (Math_f)(uintptr_t)ilogbl, "\011isfinite", (Math_f)(uintptr_t)local_isfinite, "\012isgreater", (Math_f)(uintptr_t)local_isgreater, "\012isgreaterequal", (Math_f)(uintptr_t)local_isgreaterequal, "\011isinf", (Math_f)(uintptr_t)local_isinf, "\012isless", (Math_f)(uintptr_t)local_isless, "\012islessequal", (Math_f)(uintptr_t)local_islessequal, "\012islessgreater", (Math_f)(uintptr_t)local_islessgreater, "\011isnan", (Math_f)(uintptr_t)isnanl, "\011isnormal", (Math_f)(uintptr_t)local_isnormal, "\011issubnormal", (Math_f)(uintptr_t)local_issubnormal, "\012isunordered", (Math_f)(uintptr_t)local_isunordered, "\011iszero", (Math_f)(uintptr_t)local_iszero, "\001j0", (Math_f)(uintptr_t)j0l, "\001j1", (Math_f)(uintptr_t)j1l, "\002jn", (Math_f)(uintptr_t)jnl, "\042ldexp", (Math_f)(uintptr_t)ldexpl, "\001lgamma", (Math_f)(uintptr_t)lgammal, "\001log", (Math_f)(uintptr_t)logl, "\001log10", (Math_f)(uintptr_t)log10l, "\001log1p", (Math_f)(uintptr_t)log1pl, "\001log2", (Math_f)(uintptr_t)log2l, "\001logb", (Math_f)(uintptr_t)logbl, "\001nearbyint", (Math_f)(uintptr_t)nearbyintl, "\002nextafter", (Math_f)(uintptr_t)nextafterl, "\002nexttoward", (Math_f)(uintptr_t)nexttowardl, "\002pow", (Math_f)(uintptr_t)powl, "\002remainder", (Math_f)(uintptr_t)remainderl, "\001rint", (Math_f)(uintptr_t)rintl, "\001round", (Math_f)(uintptr_t)roundl, "\002scalb", (Math_f)(uintptr_t)scalbl, "\002scalbn", (Math_f)(uintptr_t)scalbnl, "\011signbit", (Math_f)(uintptr_t)local_signbit, "\001sin", (Math_f)(uintptr_t)sinl, "\001sinh", (Math_f)(uintptr_t)sinhl, "\001sqrt", (Math_f)(uintptr_t)sqrtl, "\001tan", (Math_f)(uintptr_t)tanl, "\001tanh", (Math_f)(uintptr_t)tanhl, "\001tgamma", (Math_f)(uintptr_t)tgammal, "\001trunc", (Math_f)(uintptr_t)truncl, "\001y0", (Math_f)(uintptr_t)y0l, "\001y1", (Math_f)(uintptr_t)y1l, "\002yn", (Math_f)(uintptr_t)ynl, "", (Math_f)0 }; #endif /* : : generated from contrib/ast/src/cmd/ksh93/features/options by iffe version 2012-07-17 : : */ #ifndef _def_options_ksh93 #define _def_options_ksh93 1 #define _sys_types 1 /* #include ok */ #define SHELLMAGIC 1 #ifndef SHOPT_DEVFD # define SHOPT_DEVFD 1 #endif #ifndef SHOPT_PFSH # define SHOPT_PFSH 1 #endif #undef SHOPT_TEST_L #ifndef SHOPT_SYSRC # define SHOPT_SYSRC 1 #endif #undef SHOPT_UCB #if !_PACKAGE_ast && ( (MB_LEN_MAX-1)<=0 || !defined(_lib_mbtowc) ) # undef SHOPT_MULTIBYTE #endif #endif /* : : generated by proto : : */ /* : : generated from contrib/ast/src/cmd/ksh93/features/poll by iffe version 2012-07-17 : : */ #ifndef _def_poll_ksh93 #if !defined(__PROTO__) # if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus) # if defined(__cplusplus) # define __LINKAGE__ "C" # else # define __LINKAGE__ # endif # define __STDARG__ # define __PROTO__(x) x # define __OTORP__(x) # define __PARAM__(n,o) n # if !defined(__STDC__) && !defined(__cplusplus) # if !defined(c_plusplus) # define const # endif # define signed # define void int # define volatile # define __V_ char # else # define __V_ void # endif # else # define __PROTO__(x) () # define __OTORP__(x) x # define __PARAM__(n,o) o # define __LINKAGE__ # define __V_ char # define const # define signed # define void int # define volatile # endif # define __MANGLE__ __LINKAGE__ # if defined(__cplusplus) || defined(c_plusplus) # define __VARARG__ ... # else # define __VARARG__ # endif # if defined(__STDARG__) # define __VA_START__(p,a) va_start(p,a) # else # define __VA_START__(p,a) va_start(p) # endif # if !defined(__INLINE__) # if defined(__cplusplus) # define __INLINE__ extern __MANGLE__ inline # else # if defined(_WIN32) && !defined(__GNUC__) # define __INLINE__ __inline # endif # endif # endif #endif #if !defined(__LINKAGE__) #define __LINKAGE__ /* 2004-08-11 transition */ #endif #define _def_poll_ksh93 1 #define _sys_types 1 /* #include ok */ #define _LIB_nsl 1 /* -lnsl is a library */ #define _LIB_socket 1 /* -lsocket is a library */ #define _hdr_poll 1 /* #include ok */ #define _hdr_netinet_in 1 /* #include ok */ #define _sys_poll 1 /* #include ok */ #define _sys_socket 1 /* #include ok */ #define _lib_select 1 /* select() in default lib(s) */ #define _lib_poll 1 /* poll() in default lib(s) */ #define _lib_socket 1 /* socket() in default lib(s) */ #define _lib_htons 1 /* htons() in default lib(s) */ #define _lib_htonl 1 /* htonl() in default lib(s) */ #define _hdr_netdb 1 /* #include ok */ #define _lib_getaddrinfo 1 /* getaddrinfo() in default lib(s) */ #define _hdr_time 1 /* #include ok */ #define _sys_time 1 /* #include ok */ #define _sys_times 1 /* #include ok */ #define _hdr_stddef 1 /* #include ok */ #define _hdr_stdlib 1 /* #include ok */ #define _sys_select 1 /* #include ok */ #define _typ_fd_set 1 /* fd_set is a type */ #define _hdr_unistd 1 /* #include ok */ #define _typ_socklen_t 1 /* socklen_t is a type */ #ifdef _lib_poll # define poll _SYS_poll #else # undef _hdr_poll # undef _sys_poll #endif /* _lib_poll */ #ifdef _hdr_poll # include #else # ifdef _sys_poll # include # endif /* _sys_poll */ #endif /* _hdr_poll */ #ifdef _lib_poll # undef poll extern __MANGLE__ int poll __PROTO__((struct pollfd*,unsigned long,int)); #endif /* _lib_poll */ #ifdef _lib_select # ifndef FD_ZERO # define FD_ZERO(x) (*(x)=0) # endif /* FD_ZERO */ # ifndef FD_SET # define FD_SET(n,x) (*(x)|=(1L<<(n))) # endif /* FD_SET */ # ifndef _typ_fd_set typedef long fd_set; # endif /*_typ_fd_set */ #endif /* _lib_select */ #endif /* : : generated by iffe version 2012-07-17 : : */ #ifndef _def_pstat_amd64 #define _def_pstat_amd64 1 #define _sys_types 1 /* #include ok */ #endif /* : : generated from contrib/ast/src/cmd/ksh93/features/rlimits by iffe version 2012-07-17 : : */ #ifndef _def_rlimits_ksh93 #define _def_rlimits_ksh93 1 #define _sys_types 1 /* #include ok */ #define _sys_time 1 /* #include ok */ #define _sys_resource 1 /* #include ok */ #define _lib_getrlimit 1 /* getrlimit() in default lib(s) */ #define _lib_ulimit 1 /* ulimit() in default lib(s) */ #define _hdr_time 1 /* #include ok */ #define _sys_times 1 /* #include ok */ #define _hdr_stddef 1 /* #include ok */ #define _hdr_stdlib 1 /* #include ok */ #define _typ_rlim_t 1 /* rlim_t is a type */ #define _typ_rlim64_t 1 /* rlim64_t is a type */ #if _sys_resource # include # if _lib_getrlimit64 # undef getrlimit # define getrlimit getrlimit64 # undef setrlimit # define setrlimit setrlimit64 # if _typ_rlim64_t # undef rlimit # define rlimit rlimit64 # undef rlim_t # define rlim_t rlim64_t # endif # ifdef RLIM64_INFINITY # undef RLIM_INFINITY # define RLIM_INFINITY RLIM64_INFINITY # endif # endif #endif #endif /* : : generated from contrib/ast/src/cmd/ksh93/features/setjmp by iffe version 2012-07-17 : : */ #ifndef _def_setjmp_ksh93 #define _def_setjmp_ksh93 1 #define _sys_types 1 /* #include ok */ #define _lib_sigsetjmp 1 /* sigsetjmp() in default lib(s) */ #define _lib__setjmp 1 /* _setjmp() in default lib(s) */ #define _lib__longjmp 1 /* _longjmp() in default lib(s) */ #define _hdr_time 1 /* #include ok */ #define _sys_time 1 /* #include ok */ #define _sys_times 1 /* #include ok */ #define _hdr_stddef 1 /* #include ok */ #define _hdr_stdlib 1 /* #include ok */ #define _hdr_setjmp 1 /* #include ok */ #define _typ_sigjmp_buf 1 /* sigjmp_buf is a type */ #undef sigsetjmp #undef siglongjmp #undef sigjmp_buf #define sigjmp_buf jmp_buf #ifdef _lib__setjmp # define sigsetjmp(a,b) _setjmp(a) #else # define sigsetjmp(a,b) setjmp(a) #endif /* _lib__setjmp */ #ifdef _lib__longjmp # define siglongjmp(a,b) _longjmp(a,b) #else # define siglongjmp(a,b) longjmp(a,b) #endif /* _lib__longjmp */ #endif /* : : generated from contrib/ast/src/cmd/ksh93/features/sigfeatures by iffe version 2012-07-17 : : */ #ifndef _def_sigfeatures_ksh93 #define _def_sigfeatures_ksh93 1 #define _sys_types 1 /* #include ok */ #define _lib_sigrelse 1 /* sigrelse() in default lib(s) */ #define _lib_sigprocmask 1 /* sigprocmask() in default lib(s) */ #define _hdr_time 1 /* #include ok */ #define _sys_time 1 /* #include ok */ #define _sys_times 1 /* #include ok */ #define _hdr_stddef 1 /* #include ok */ #define _hdr_stdlib 1 /* #include ok */ #define _hdr_signal 1 /* #include ok */ #define _typ_sigset_t 1 /* sigset_t is a type */ #ifndef _mem_sigvec_sv_mask # undef _lib_sigvec #endif #ifdef _lib_sigprocmask # define sh_sigaction(s,action) do { sigset_t ss;\ sigemptyset(&ss); \ if(s) sigaddset(&ss,(s)); \ sigprocmask(action,&ss,0); \ }while(0) # define sigrelease(s) sh_sigaction(s,SIG_UNBLOCK) # define sigblock(s) sh_sigaction(s,SIG_BLOCK) # define sig_begin() sh_sigaction(0,SIG_SETMASK) #else # ifndef _lib_sigblock # define sigblock(s) # endif # ifdef _lib_sigsetmask # define sigrelease(s) sigsetmask(0) # define sig_begin() sigsetmask(0) # else # ifdef _lib_sigrelse # define sigrelease sigrelse # define sig_begin() # else # define sig_begin() (0) # define sigrelease(s) (0) # endif /* _lib_sigrelse */ # endif /* _lib_sigsetmask */ #endif /* _lib_sigprocmask */ #undef _SIGRTMIN #define _SIGRTMIN 42 #undef _SIGRTMAX #define _SIGRTMAX 73 #endif /* : : generated from contrib/ast/src/cmd/ksh93/features/time by iffe version 2012-07-17 : : */ #ifndef _def_time_ksh93 #define _def_time_ksh93 1 #define _sys_types 1 /* #include ok */ #define _hdr_utime 1 /* #include ok */ #define _lib_gettimeofday 1 /* gettimeofday() in default lib(s) */ #define _lib_setitimer 1 /* setitimer() in default lib(s) */ #define _sys_time 1 /* #include ok */ #define _mem_tv_usec_timeval 1 /* tv_usec is a member of struct timeval */ #define _lib_2_timeofday 1 /* 2 arg gettimeofday() */ #undef _def_time #include #define _def_time 1 #undef timeofday #if _lib_2_timeofday #define timeofday(p) gettimeofday(p,(struct timezone*)0) #else #if _lib_1_timeofday #define timeofday(p) gettimeofday(p) #endif #endif #endif /* : : generated from contrib/ast/src/cmd/ksh93/features/ttys by iffe version 2012-07-17 : : */ #ifndef _def_ttys_ksh93 #define _def_ttys_ksh93 1 #define _sys_types 1 /* #include ok */ #define _hdr_termios 1 /* #include ok */ #define _hdr_termio 1 /* #include ok */ #define _hdr_sgtty 1 /* #include ok */ #define _sys_termios 1 /* #include ok */ #define _sys_termio 1 /* #include ok */ #define _sys_ioctl 1 /* #include ok */ #define _sys_filio 1 /* #include ok */ #define _lib_tcgetattr 1 /* tcgetattr() in default lib(s) */ #define _lib_tcgetpgrp 1 /* tcgetpgrp() in default lib(s) */ #endif # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # include ../Makefile.com include $(SRC)/lib/Makefile.lib.64 install: all $(ROOTLIBS64) $(ROOTLINKS64) # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # include ../Makefile.iffe include $(SRC)/lib/Makefile.lib.64 /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2021 OmniOS Community Edition (OmniOSce) Association. */ #ifndef _ILLUMOS_KSH_CMDLIST_H #define _ILLUMOS_KSH_CMDLIST_H #ifdef __cplusplus extern "C" { #endif /* * List builtins for illumos. * The list here is partially autogenerated and partially hand-picked * based on compatibility with the native illumos versions of these * tools */ /* * Commands which are 100% compatible with native illumos versions (/bin is * a softlink to ./usr/bin, ksh93 takes care of the lookup) */ #define BINCMDLIST(f) \ { "/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, #define USRBINCMDLIST(f) \ { "/usr/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, #define SBINCMDLIST(f) \ { "/sbin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, #define SUSRBINCMDLIST(f) \ { "/usr/sbin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, /* POSIX compatible commands */ #define XPG6CMDLIST(f) \ { "/usr/xpg6/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, #define XPG4CMDLIST(f) \ { "/usr/xpg4/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, #ifdef SHOPT_USR_GNU_BIN_BUILTINS /* GNU coreutils compatible commands */ #define GNUCMDLIST(f) \ { "/usr/gnu/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) }, #else #define GNUCMDLIST(f) #endif /* * Hammerhead: /usr/ast/bin removed. AST builtins already registered via * BINCMDLIST (/bin/) and USRBINCMDLIST (/usr/bin/). */ #define ASTCMDLIST(f) /* undo ast_map.h #defines to avoid collision */ #undef basename #undef dirname #undef mktemp /* Generated data, do not edit. */ ASTCMDLIST(basename) GNUCMDLIST(basename) XPG4CMDLIST(basename) ASTCMDLIST(cat) BINCMDLIST(cat) ASTCMDLIST(chgrp) // XPG4CMDLIST(chgrp) ASTCMDLIST(chmod) ASTCMDLIST(chown) // XPG4CMDLIST(chown) // BINCMDLIST(chown) ASTCMDLIST(cksum) BINCMDLIST(cksum) GNUCMDLIST(cksum) ASTCMDLIST(cmp) BINCMDLIST(cmp) ASTCMDLIST(comm) BINCMDLIST(comm) GNUCMDLIST(comm) ASTCMDLIST(cp) // XPG4CMDLIST(cp) ASTCMDLIST(cut) BINCMDLIST(cut) GNUCMDLIST(cut) ASTCMDLIST(date) // XPG4CMDLIST(date) ASTCMDLIST(dirname) BINCMDLIST(dirname) GNUCMDLIST(dirname) ASTCMDLIST(expr) GNUCMDLIST(expr) XPG6CMDLIST(expr) ASTCMDLIST(fds) ASTCMDLIST(fmt) ASTCMDLIST(fold) BINCMDLIST(fold) GNUCMDLIST(fold) ASTCMDLIST(head) BINCMDLIST(head) ASTCMDLIST(id) XPG4CMDLIST(id) ASTCMDLIST(join) BINCMDLIST(join) GNUCMDLIST(join) ASTCMDLIST(ln) // XPG4CMDLIST(ln) ASTCMDLIST(logname) BINCMDLIST(logname) GNUCMDLIST(logname) ASTCMDLIST(md5sum) ASTCMDLIST(mkdir) BINCMDLIST(mkdir) GNUCMDLIST(mkdir) ASTCMDLIST(mkfifo) BINCMDLIST(mkfifo) GNUCMDLIST(mkfifo) ASTCMDLIST(mktemp) BINCMDLIST(mktemp) GNUCMDLIST(mktemp) ASTCMDLIST(mv) // XPG4CMDLIST(mv) ASTCMDLIST(paste) BINCMDLIST(paste) GNUCMDLIST(paste) ASTCMDLIST(pathchk) BINCMDLIST(pathchk) GNUCMDLIST(pathchk) ASTCMDLIST(rev) BINCMDLIST(rev) ASTCMDLIST(rm) XPG4CMDLIST(rm) ASTCMDLIST(rmdir) BINCMDLIST(rmdir) GNUCMDLIST(rmdir) GNUCMDLIST(sleep) ASTCMDLIST(stty) // XPG4CMDLIST(stty) ASTCMDLIST(sum) BINCMDLIST(sum) ASTCMDLIST(sync) BINCMDLIST(sync) GNUCMDLIST(sync) SBINCMDLIST(sync) SUSRBINCMDLIST(sync) ASTCMDLIST(tail) BINCMDLIST(tail) XPG4CMDLIST(tail) ASTCMDLIST(tee) BINCMDLIST(tee) GNUCMDLIST(tee) ASTCMDLIST(tty) BINCMDLIST(tty) GNUCMDLIST(tty) ASTCMDLIST(uname) ASTCMDLIST(uniq) BINCMDLIST(uniq) GNUCMDLIST(uniq) ASTCMDLIST(wc) BINCMDLIST(wc) GNUCMDLIST(wc) /* Mandatory for ksh93 test suite and AST scripts */ BINCMDLIST(getconf) #ifdef __cplusplus } #endif #endif /* !_ILLUMOS_KSH_CMDLIST_H */ #### ksh93 test suite ## Introduction The directory /opt/ksh93-tests/ contains the ksh93 test suite which is used to verify the correct behaviour of ksh93. The test suite is split into modules with the ending *.sh and a frontend called "shtests" which is used to run the tests. ## Basic description: /opt/ksh93-tests/shtests By default, with no , each test is run three times: o In the posix/C locale; o In the C.UTF-8 locale; o As a compiled script using $SHCOMP. may be: -c execute test module as compiled shell script only -p execute test module as normal shell script in posix/C only -u execute test module as normal shell script in c.UTF-8 only -t do not print timing information -v use VMDEBUG Sets one or more environment variables to value "value". file name of test module ## Basic usage in illumos: The tests can be executed like this: $ export SHELL= $ export SHCOMP=/usr/bin/shcomp for t in /opt/ksh93-tests/tests/*.sh; do $SHELL /opt/ksh93-tests/shtests "$t" done Note that you MUST NOT use "/usr/bin/ksh93" as value for SHELL since /usr/bin/ksh93 on illumos is a wrapper which selects a suitable executable in /usr/bin//ksh93 based on the hardware capabilities defined via /usr/bin/isalist Valid values for SHELL are: - SHELL=/usr/bin/i86/ksh93 # 32-bit i386 - SHELL=/usr/bin/amd64/ksh93 # 64-bit AMD64 - SHELL=/usr/bin/sparcv7/ksh93 # 32-bit SPARC - SHELL=/usr/bin/sparcv9/ksh93 # 64-bit SPARC # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # # Test whether ksh mishandles a heredoc that spans a 8K chunk and has # a backslash as the last character of the first chunk. # See https://www.illumos.org/issues/13434 # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # ......................................................................... # This comment introduces the correct number of padding characters to that # the \ in the second heredoc below occurs at byte position 8192 of the # script. # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................................... # ......................................................... t1=`mktemp` t2=`mktemp` if [[ ! -f "$t1" || ! -f "$t2" ]]; then # Don't use the global err _ exit function as the test harness uses # calls to that to compute the number of tests present in this file. echo "Could not create temporary files" exit 1 fi cat > "$t1" << EOF \$ EOF cat > "$t2" << EOF \$ EOF if ! cmp -s "$t1" "$t2"; then err_exit "Shell truncates heredoc over chunk boundary" #/bin/od -t x1 "$t1" #/bin/od -t x1 "$t2" fi rm -f "$t1" "$t2" # tests done exit $Errors # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # # Test whether the builtin head command properly handles files which do # not have a trailing newline. # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 builtin head tail t1=`mktemp` t2=`mktemp` t3=`mktemp` if [[ ! -f "$t1" || ! -f "$t2" || ! -f "$t3" ]]; then # Don't use the global err _ exit function as the test harness uses # calls to that to compute the number of tests present in this file. echo "Could not create temporary files" rm -f "$t1" "$t2" "$t3" exit 1 fi for f in test{0..4%02d}; do echo $f done | tee $t1 > $t2 printf "nonewline" >> $t2 printf "nonewline" >> $t3 # Standard file, five lines, with trailing newline [[ $(head -1 $t1) == 'test00' ]] || \ err_exit "Shell head -1 standard file" [[ $(head -2 $t1) == $'test00\ntest01' ]] || \ err_exit "Shell head -2 standard file" [[ $(head -s 2 -n2 $t1) == $'test02\ntest03' ]] || \ err_exit "Shell head -s 2 -n 2 standard file" [[ $(head -5 $t1) == $'test00\ntest01\ntest02\ntest03\ntest04' ]] || \ err_exit "Shell head -5 standard file" [[ $(head -10 $t1) == $'test00\ntest01\ntest02\ntest03\ntest04' ]] || \ err_exit "Shell head -10 standard file" [[ $(tail -1 $t1) == 'test04' ]] || \ err_exit "Shell tail -1 standard file" [[ $(tail -2 $t1) == $'test03\ntest04' ]] || \ err_exit "Shell tail -2 standard file" [[ $(tail -10 $t1) == $'test00\ntest01\ntest02\ntest03\ntest04' ]] || \ err_exit "Shell tail -10 standard file" # File with a single line, no trailing newline [[ $(head -1 $t3) == 'nonewline' ]] || \ err_exit "Shell head -1 one-line file" [[ $(head -2 $t3) == 'nonewline' ]] || \ err_exit "Shell head -2 one-line file" [[ $(tail -1 $t3) == 'nonewline' ]] || \ err_exit "Shell tail -1 one-line file" [[ $(tail -2 $t3) == 'nonewline' ]] || \ err_exit "Shell tail -2 one-line file" # File with six lines, no trailing newline [[ $(head -1 $t2) == "test00" ]] || \ err_exit "Shell head -1 six-line file" [[ $(head -2 $t2) == $'test00\ntest01' ]] || \ err_exit "Shell head -2 six-line file" [[ $(head -s 2 -n2 $t2) == $'test02\ntest03' ]] || \ err_exit "Shell head -s 2 -n 2 six-line file" [[ $(head -5 $t2) == $'test00\ntest01\ntest02\ntest03\ntest04' ]] || \ err_exit "Shell head -5 six-line file" [[ $(head -6 $t2) == $'test00\ntest01\ntest02\ntest03\ntest04\nnonewline' ]] \ || err_exit "Shell head -6 six-line file" [[ $(head -10 $t2) == $'test00\ntest01\ntest02\ntest03\ntest04\nnonewline' ]] \ || err_exit "Shell head -10 six-line file" [[ $(tail -1 $t2) == 'nonewline' ]] || \ err_exit "Shell tail -1 six-line file" [[ $(tail -2 $t2) == $'test04\nnonewline' ]] || \ err_exit "Shell tail -2 six-line file" [[ $(tail -10 $t2) == $'test00\ntest01\ntest02\ntest03\ntest04\nnonewline' ]] \ || err_exit "Shell tail -10 six-line file" rm -f "$t1" "$t2" "$t3" # tests done exit $Errors # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test module checks whether indexed+associative arrays # set the default datatype correctly if someone uses the "+=" # operator to add a value to an array element which does not # exist yet. # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' # the test cannot use "nounset" Command=${0##*/} integer Errors=0 compound bracketstat=( integer bopen=0 integer bclose=0 ) function count_brackets { typeset x="$1" typeset c integer i (( bracketstat.bopen=0 , bracketstat.bclose=0 )) for (( i=0 ; i < ${#x} ; i++ )) ; do c="${x:i:1}" [[ "$c" == "(" ]] && (( bracketstat.bopen++ )) [[ "$c" == ")" ]] && (( bracketstat.bclose++ )) done (( bracketstat.bopen != bracketstat.bclose )) && return 1 return 0 } # function to add the floating-point value 1.1 to array element "34" # floating-point datatypes should increment by 1.1, integers by 1 function add_float { nameref arr=$1 arr[34]+=1.1 return 0 } # function to add a compound variable called "val" to array element arr[34] function add_compound { nameref arr=$1 arr[34]+=( float val=1.1 ) return 0 } # We run the tests in multiple cyles: # First cycle uses a normal compound variable as basis # Second cycle uses a nameref to a compound variable as basis # Third cycle uses a nameref to a nameref to a compound variable as basis for cycle in \ c1 c2 c3 c4 \ c2_sub c3_sub c4_sub \ c2_indexed_array c3_indexed_array c4_indexed_array \ c2_associative_array c3_associative_array c4_associative_array; do case ${cycle} in c1) compound mycpv ;; c2) compound rootcpv nameref mycpv=rootcpv ;; c3) compound rootcpv nameref namereftoroot=rootcpv nameref mycpv=namereftoroot ;; c4) compound rootcpv nameref namereftoroot0=rootcpv nameref namereftoroot1=namereftoroot0 nameref mycpv=namereftoroot1 ;; # same as cX but uses a subvariable of rootcpv c2_sub) compound rootcpv compound rootcpv.sub nameref mycpv=rootcpv.sub ;; c3_sub) compound rootcpv compound rootcpv.sub nameref namereftoroot=rootcpv.sub nameref mycpv=namereftoroot ;; c4_sub) compound rootcpv compound rootcpv.sub nameref namereftoroot0=rootcpv.sub nameref namereftoroot1=namereftoroot0 nameref mycpv=namereftoroot1 ;; # same as cX but uses a subvariable of an indexed array c2_indexed_array) compound -a rootcpv nameref mycpv=rootcpv[4] ;; c3_indexed_array) compound -a rootcpv nameref namereftoroot=rootcpv[4] nameref mycpv=namereftoroot ;; c4_indexed_array) compound -a rootcpv nameref namereftoroot0=rootcpv[4] nameref namereftoroot1=namereftoroot0 nameref mycpv=namereftoroot1 ;; # same as cX but uses a subvariable of an indexed array c2_associative_array) compound -A rootcpv nameref mycpv=rootcpv["hello world"] ;; c3_associative_array) compound -A rootcpv nameref namereftoroot=rootcpv["hello world"] nameref mycpv=namereftoroot ;; c4_associative_array) compound -A rootcpv nameref namereftoroot0=rootcpv["hello world"] nameref namereftoroot1=namereftoroot0 nameref mycpv=namereftoroot1 ;; *) err_exit "${cycle}: Should not happen." ;; esac # Test 001: Test indexed floating-point array float -a mycpv.myindexedfloatarray add_float mycpv.myindexedfloatarray (( mycpv.myindexedfloatarray[34] == 1.1 )) || err_exit "${cycle}: mycpv.myindexedfloatarray[34] == ${mycpv.myindexedfloatarray[34]}, expected 1.1" add_float mycpv.myindexedfloatarray (( mycpv.myindexedfloatarray[34] == 2.2 )) || err_exit "${cycle}: mycpv.myindexedfloatarray[34] == ${mycpv.myindexedfloatarray[34]}, expected 2.2" unset mycpv.myindexedfloatarray[34] (( mycpv.myindexedfloatarray[34] == 0.0 )) || err_exit "${cycle}: mycpv.myindexedfloatarray[34] == ${mycpv.myindexedfloatarray[34]}, expected 0.0" # 2nd try (we do this to check whether "unset" works properly) add_float mycpv.myindexedfloatarray (( mycpv.myindexedfloatarray[34] == 1.1 )) || err_exit "${cycle}: mycpv.myindexedfloatarray[34] == ${mycpv.myindexedfloatarray[34]}, expected 1.1" add_float mycpv.myindexedfloatarray (( mycpv.myindexedfloatarray[34] == 2.2 )) || err_exit "${cycle}: mycpv.myindexedfloatarray[34] == ${mycpv.myindexedfloatarray[34]}, expected 2.2" unset mycpv.myindexedfloatarray[34] (( mycpv.myindexedfloatarray[34] == 0.0 )) || err_exit "${cycle}: mycpv.myindexedfloatarray[34] == ${mycpv.myindexedfloatarray[34]}, expected 0.0" # Test 002: Test associative floating-point array float -A mycpv.myassociativefloatarray add_float mycpv.myassociativefloatarray (( mycpv.myassociativefloatarray[34] == 1.1 )) || err_exit "${cycle}: mycpv.myassociativefloatarray[34] == ${mycpv.myassociativefloatarray[34]}, expected 1.1" add_float mycpv.myassociativefloatarray (( mycpv.myassociativefloatarray[34] == 2.2 )) || err_exit "${cycle}: mycpv.myassociativefloatarray[34] == ${mycpv.myassociativefloatarray[34]}, expected 2.2" unset mycpv.myassociativefloatarray[34] (( mycpv.myassociativefloatarray[34] == 0.0 )) || err_exit "${cycle}: mycpv.myassociativefloatarray[34] == ${mycpv.myassociativefloatarray[34]}, expected 0.0" # 2nd try (we do this to check whether "unset" works properly) add_float mycpv.myassociativefloatarray (( mycpv.myassociativefloatarray[34] == 1.1 )) || err_exit "${cycle}: mycpv.myassociativefloatarray[34] == ${mycpv.myassociativefloatarray[34]}, expected 1.1" add_float mycpv.myassociativefloatarray (( mycpv.myassociativefloatarray[34] == 2.2 )) || err_exit "${cycle}: mycpv.myassociativefloatarray[34] == ${mycpv.myassociativefloatarray[34]}, expected 2.2" unset mycpv.myassociativefloatarray[34] (( mycpv.myassociativefloatarray[34] == 0.0 )) || err_exit "${cycle}: mycpv.myassociativefloatarray[34] == ${mycpv.myassociativefloatarray[34]}, expected 0.0" # Test 003: Test indexed integer array integer -a mycpv.myindexedintegerarray add_float mycpv.myindexedintegerarray (( mycpv.myindexedintegerarray[34] == 1 )) || err_exit "${cycle}: mycpv.myindexedintegerarray[34] == ${mycpv.myindexedintegerarray[34]}, expected 1" add_float mycpv.myindexedintegerarray (( mycpv.myindexedintegerarray[34] == 2 )) || err_exit "${cycle}: mycpv.myindexedintegerarray[34] == ${mycpv.myindexedintegerarray[34]}, expected 2" unset mycpv.myindexedintegerarray[34] (( mycpv.myindexedintegerarray[34] == 0 )) || err_exit "${cycle}: mycpv.myindexedintegerarray[34] == ${mycpv.myindexedintegerarray[34]}, expected 0" # 2nd try (we do this to check whether "unset" works properly) add_float mycpv.myindexedintegerarray (( mycpv.myindexedintegerarray[34] == 1 )) || err_exit "${cycle}: mycpv.myindexedintegerarray[34] == ${mycpv.myindexedintegerarray[34]}, expected 1" add_float mycpv.myindexedintegerarray (( mycpv.myindexedintegerarray[34] == 2 )) || err_exit "${cycle}: mycpv.myindexedintegerarray[34] == ${mycpv.myindexedintegerarray[34]}, expected 2" unset mycpv.myindexedintegerarray[34] (( mycpv.myindexedintegerarray[34] == 0 )) || err_exit "${cycle}: mycpv.myindexedintegerarray[34] == ${mycpv.myindexedintegerarray[34]}, expected 0" # Test 004: Test associative integer array integer -A mycpv.myassociativeintegerarray add_float mycpv.myassociativeintegerarray (( mycpv.myassociativeintegerarray[34] == 1 )) || err_exit "${cycle}: mycpv.myassociativeintegerarray[34] == ${mycpv.myassociativeintegerarray[34]}, expected 1" add_float mycpv.myassociativeintegerarray (( mycpv.myassociativeintegerarray[34] == 2 )) || err_exit "${cycle}: mycpv.myassociativeintegerarray[34] == ${mycpv.myassociativeintegerarray[34]}, expected 2" unset mycpv.myassociativeintegerarray[34] (( mycpv.myassociativeintegerarray[34] == 0 )) || err_exit "${cycle}: mycpv.myassociativeintegerarray[34] == ${mycpv.myassociativeintegerarray[34]}, expected 0" # 2nd try (we do this to check whether "unset" works properly) add_float mycpv.myassociativeintegerarray (( mycpv.myassociativeintegerarray[34] == 1 )) || err_exit "${cycle}: mycpv.myassociativeintegerarray[34] == ${mycpv.myassociativeintegerarray[34]}, expected 1" add_float mycpv.myassociativeintegerarray (( mycpv.myassociativeintegerarray[34] == 2 )) || err_exit "${cycle}: mycpv.myassociativeintegerarray[34] == ${mycpv.myassociativeintegerarray[34]}, expected 2" unset mycpv.myassociativeintegerarray[34] (( mycpv.myassociativeintegerarray[34] == 0 )) || err_exit "${cycle}: mycpv.myassociativeintegerarray[34] == ${mycpv.myassociativeintegerarray[34]}, expected 0" # Test 005: Tested indexed compound variable array compound -a mycpv.myindexedcompoundarray add_compound mycpv.myindexedcompoundarray (( mycpv.myindexedcompoundarray[34].val == 1.1 )) || err_exit "${cycle}: mycpv.myindexedcompoundarray[34].val == ${mycpv.myindexedcompoundarray[34].val}, expected 1.1" # try to add it a 2nd time - since the new element will replace the old # one the value will _not_ be incremented (or better: The compound # variable value "val" will be added, not the value of the "val" # variable) add_compound mycpv.myindexedcompoundarray (( mycpv.myindexedcompoundarray[34].val == 1.1 )) || err_exit "${cycle}: mycpv.myindexedcompoundarray[34].val == ${mycpv.myindexedcompoundarray[34].val}, expected 1.1" unset mycpv.myindexedcompoundarray[34] [[ ! -v mycpv.myindexedcompoundarray[34].val ]] || err_exit "${cycle}: [[ ! -v mycpv.myindexedcompoundarray[34].val ]] should return failure, got $?" (( mycpv.myindexedcompoundarray[34].val == 0.0 )) || err_exit "${cycle}: mycpv.myindexedcompoundarray[34].val == ${mycpv.myindexedcompoundarray[34].val}, expected 0.0" [[ "${mycpv.myindexedcompoundarray[34]}" == "" ]] || err_exit "${cycle}: mycpv.myindexedcompoundarray[34] expected to be equal to an empty string but contains |${mycpv.myindexedcompoundarray[34]}|" # Test 006: Tested associative compound variable array compound -A mycpv.myassociativecompoundarray add_compound mycpv.myassociativecompoundarray (( mycpv.myassociativecompoundarray[34].val == 1.1 )) || err_exit "${cycle}: mycpv.myassociativecompoundarray[34].val == ${mycpv.myassociativecompoundarray[34].val}, expected 1.1" # try to add it a 2nd time - since the new element will replace the old # one the value will _not_ be incremented (or better: The compound # variable value "val" will be added, not the value of the "val" # variable) add_compound mycpv.myassociativecompoundarray (( mycpv.myassociativecompoundarray[34].val == 1.1 )) || err_exit "${cycle}: mycpv.myassociativecompoundarray[34].val == ${mycpv.myassociativecompoundarray[34].val}, expected 1.1" unset mycpv.myassociativecompoundarray[34] [[ ! -v mycpv.myassociativecompoundarray[34].val ]] || err_exit "${cycle}: [[ ! -v mycpv.myassociativecompoundarray[34].val ]] should return failure, got $?" (( mycpv.myassociativecompoundarray[34].val == 0.0 )) || err_exit "${cycle}: mycpv.myassociativecompoundarray[34].val == ${mycpv.myassociativecompoundarray[34].val}, expected 0.0" [[ "${mycpv.myassociativecompoundarray[34]}" == "" ]] || err_exit "${cycle}: mycpv.myassociativecompoundarray[34] expected to be equal to an empty string but contains |${mycpv.myassociativecompoundarray[34]}|" # check whether the compound variable output is still Ok count_brackets "${mycpv}" || err_exit "${cycle}: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -v mycpv)" || err_exit "${cycle}: print -v mycpy: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -C mycpv)" || err_exit "${cycle}: print -C mycpy: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" # reset unset mycpv [[ ! -v mycpv ]] || err_exit "${cycle}: mycpy should not exist" [[ "${mycpv}" == "" ]] || err_exit "${cycle}: mycpv expected to be empty" done # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # # Test whether the ksh93/poll builtin works as expected # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 builtin -f libshell.so.1 poll || err_exit "poll builtin not found." compound d1=( compound -A u=( [y]=( fd=5 events="POLLIN" revents="" ) [x]=( fd=5 events="POLLIN" revents="" ) ) ) # test 1: cat /dev/zero | { redirect 5<&0 ; poll -e d1.res -t 5. d1.u ; } || err_exit "poll returned non-zero exit code $?" [[ "${d1.u[x].revents}" == "POLLIN" ]] || err_exit "d1.u[x].revents contains '${d1.u[x].revents}', not POLLIN" [[ "${d1.u[y].revents}" == "POLLIN" ]] || err_exit "d1.u[y].revents contains '${d1.u[y].revents}', not POLLIN" [[ "${d1.res[*]}" == "x y" ]] || err_exit "d1.res contains '${d1.res[*]}', not 'x y'" # test 2: unset d1.res d1.u[z]=( fd=5 events="POLLOUT" revents="" ) { poll -e d1.res -t 5. d1.u ; } 5/dev/null || err_exit "poll returned non-zero exit code $?" [[ "${d1.u[x].revents}" == "POLLIN" ]] || err_exit "d1.u[x].revents contains '${d1.u[x].revents}', not 'POLLIN'" [[ "${d1.u[y].revents}" == "POLLIN" ]] || err_exit "d1.u[y].revents contains '${d1.u[y].revents}', not 'POLLIN'" [[ "${d1.u[z].revents}" == "POLLOUT|POLLWRNORM" ]] || err_exit "d1.u[z].revents contains '${d1.u[z].revents}', not 'POLLOUT|POLLWRNORM,'" [[ "${d1.res[*]}" == "x y z" ]] || err_exit "d1.res contains '${d1.res[*]}', not 'x y z'" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # # # Test whether the ksh93/libcmd sum builtin is compatible to # Solaris/SystemV /usr/bin/sum # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset x builtin sum || err_exit "sum builtin not found" # Basic tests x="$(print 'hello' | /usr/bin/sum)" || err_exit "/usr/bin/sum pipe failed." [[ "$x" == "542 1" ]] || err_exit "print 'hello' | /usr/bin/sum did not return 542 1, got $x" x="$(print 'hello' | sum)" || err_exit "sum builtin pipe failed." [[ "$x" == "542 1" ]] || err_exit "print 'hello' | sum builtin did not return 542 1, got $x" x="$(print 'hello' | sum -x md5)" || err_exit "sum md5 builtin pipe failed." [[ "$x" == "b1946ac92492d2347c6235b4d2611184" ]] || err_exit "print 'hello' | sum md5 builtin did not return b1946ac92492d2347c6235b4d2611184, got $x" x="$(print 'hello' | sum -x sha1)" || err_exit "sum sha1 builtin pipe failed." [[ "$x" == "f572d396fae9206628714fb2ce00f72e94f2258f" ]] || err_exit "print 'hello' | sum sha1 builtin did not return f572d396fae9206628714fb2ce00f72e94f2258f, got $x" x="$(print 'hello' | sum -x sha256)" || err_exit "sum sha256 builtin pipe failed." [[ "$x" == "5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03" ]] || err_exit "print 'hello' | sum sha256 builtin did not return 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03, got $x" x="$(print 'hello' | sum -x sha512)" || err_exit "sum sha512 builtin pipe failed." [[ "$x" == "e7c22b994c59d9cf2b48e549b1e24666636045930d3da7c1acb299d1c3b7f931f94aae41edda2c2b207a36e10f8bcb8d45223e54878f5b316e7ce3b6bc019629" ]] || err_exit "print 'hello' | sum sha512 builtin did not return e7c22b994c59d9cf2b48e549b1e24666636045930d3da7c1acb299d1c3b7f931f94aae41edda2c2b207a36e10f8bcb8d45223e54878f5b316e7ce3b6bc019629, got $x" # note that Solaris /usr/bin/cksum outputs $'3015617425\t6' (which may be a bug in Solaris /usr/bin/cksum) x="$(print 'hello' | sum -x cksum)" || err_exit "sum cksum builtin pipe failed." [[ "$x" == $'3015617425 6' ]] || err_exit "print 'hello' | sum cksum builtin did not return \$'3015617425 6', got $(printf "%q\n" "$x")" [[ "$(print 'hello' | /usr/bin/sum)" == "$(print 'hello' | sum)" ]] || err_exit "sum hello != /usr/bin/sum hello" [[ "$(print 'fish' | /usr/bin/sum)" == "$(print 'fish' | sum)" ]] || err_exit "sum fish != /usr/bin/sum fish" [[ "$(print '12345' | /usr/bin/sum)" == "$(print '12345' | sum)" ]] || err_exit "sum 12345 != /usr/bin/sum 12345" [[ "$(print '\n\r\n \v' | /usr/bin/sum)" == "$(print '\n\r\n \v' | sum)" ]] || err_exit "sum spaces != /usr/bin/sum spaces" # Test some binary files... x="/bin/ls" [[ "$(cat "$x" | /usr/bin/sum)" == "$(cat "$x" | sum)" ]] || err_exit "pipe: /usr/bin/sum $x != sum $x" [[ "$(/usr/bin/sum "$x")" == "$(sum "$x")" ]] || err_exit "file: /usr/bin/sum $x != sum $x" x="/bin/chmod" [[ "$(cat "$x" | /usr/bin/sum)" == "$(cat "$x" | sum)" ]] || err_exit "pipe: /usr/bin/sum $x != sum $x" [[ "$(/usr/bin/sum "$x")" == "$(sum "$x")" ]] || err_exit "file: /usr/bin/sum $x != sum $x" x="/usr/bin/tee" [[ "$(cat "$x" | /usr/bin/sum)" == "$(cat "$x" | sum)" ]] || err_exit "pipe: /usr/bin/sum $x != sum $x" [[ "$(/usr/bin/sum "$x")" == "$(sum "$x")" ]] || err_exit "file: /usr/bin/sum $x != sum $x" x="/bin/grep" [[ "$(cat "$x" | /usr/bin/sum)" == "$(cat "$x" | sum)" ]] || err_exit "pipe: /usr/bin/sum $x != sum $x" [[ "$(/usr/bin/sum "$x")" == "$(sum "$x")" ]] || err_exit "file: /usr/bin/sum $x != sum $x" x="/bin/egrep" [[ "$(cat "$x" | /usr/bin/sum)" == "$(cat "$x" | sum)" ]] || err_exit "pipe: /usr/bin/sum $x != sum $x" [[ "$(/usr/bin/sum "$x")" == "$(sum "$x")" ]] || err_exit "file: /usr/bin/sum $x != sum $x" x="/bin/awk" [[ "$(cat "$x" | /usr/bin/sum)" == "$(cat "$x" | sum)" ]] || err_exit "pipe: /usr/bin/sum $x != sum $x" [[ "$(/usr/bin/sum "$x")" == "$(sum "$x")" ]] || err_exit "file: /usr/bin/sum $x != sum $x" x="/bin/nawk" [[ "$(cat "$x" | /usr/bin/sum)" == "$(cat "$x" | sum)" ]] || err_exit "pipe: /usr/bin/sum $x != sum $x" [[ "$(/usr/bin/sum "$x")" == "$(sum "$x")" ]] || err_exit "file: /usr/bin/sum $x != sum $x" x="/usr/bin/ksh" [[ "$(cat "$x" | /usr/bin/sum)" == "$(cat "$x" | sum)" ]] || err_exit "pipe: /usr/bin/sum $x != sum $x" [[ "$(/usr/bin/sum "$x")" == "$(sum "$x")" ]] || err_exit "file: /usr/bin/sum $x != sum $x" x="/usr/bin/sh" [[ "$(cat "$x" | /usr/bin/sum)" == "$(cat "$x" | sum)" ]] || err_exit "pipe: /usr/bin/sum $x != sum $x" [[ "$(/usr/bin/sum "$x")" == "$(sum "$x")" ]] || err_exit "file: /usr/bin/sum $x != sum $x" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # Test whether the ksh93/libcmd tail builtin is compatible to # Solaris/SystemV { /bin/tail, /usr/xpg4/bin/tail } and # POSIX "tail" # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # common functions function isvalidpid { kill -0 ${1} 2>/dev/null && return 0 return 1 } function waitpidtimeout { integer pid=$1 float timeout=$2 float i float -r STEP=0.5 # const (( timeout=timeout/STEP )) for (( i=0 ; i < timeout ; i+=STEP )) ; do isvalidpid ${pid} || break sleep ${STEP} done return 0 } function myintseq { integer i case $# in 1) for (( i=1 ; i <= $1 ; i++ )) ; do printf "%d\n" i done ;; 2) for (( i=$1 ; i <= $2 ; i++ )) ; do printf "%d\n" i done ;; 3) for (( i=$1 ; i <= $3 ; i+=$2 )) ; do printf "%d\n" i done ;; *) print -u2 -f "%s: Illegal number of arguments %d\n" "$0" $# return 1 ;; esac return 0 } # quote input string but use single-backslash that "err_exit" prints # the strings correctly function singlebackslashquote { typeset s s="$(printf "%q\n" "$1")" print -r "$s" return 0 } # quote input string but use double-backslash that "err_exit" prints # the strings correctly function doublebackslashquote { typeset s s="$(printf "%q\n" "$1")" s="${s//\\/\\\\}" print -r "$s" return 0 } # main builtin mktemp || err_exit "mktemp builtin not found" builtin rm || err_exit "rm builtin not found" builtin tail || err_exit "tail builtin not found" typeset ocwd typeset tmpdir # create temporary test directory ocwd="$PWD" tmpdir="$(mktemp -t -d "test_sun_solaris_builtin_tail.XXXXXXXX")" || err_exit "Cannot create temporary directory" cd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } # run tests: # test1: basic tests compound -a testcases=( ( name="reverse_n" input=$'hello\nworld' compound -A tail_args=( [legacy]=( argv=( "-r" ) ) ) expected_output=$'world\nhello' ) ( name="revlist0n" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "-0" ) ) [std_like]=( argv=( "-n" "0" ) ) ) expected_output=$'' ) ( name="revlist0nr" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "-0r" ) ) [std_like]=( argv=( "-n" "0" "-r" ) ) [long_options]=( argv=( "--lines" "0" "--reverse" ) ) ) expected_output=$'' ) ( name="revlist1n" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "-1" ) ) [std_like]=( argv=( "-n" "1" ) ) [long_options]=( argv=( "--lines" "1" ) ) ) expected_output=$'4' ) ( name="revlist1nr" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "-1r" ) ) [std_like]=( argv=( "-n" "1" "-r" ) ) [long_options]=( argv=( "--lines" "1" "--reverse" ) ) ) expected_output=$'4' ) ( name="revlist2n" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "-2" ) ) [std_like]=( argv=( "-n" "2" ) ) ) expected_output=$'3\n4' ) ( name="revlist2nr" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "-2r" ) ) [std_like]=( argv=( "-n" "2" "-r" ) ) ) expected_output=$'4\n3' ) ( name="revlist3nr" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "-3r" ) ) [std_like]=( argv=( "-n" "3" "-r" ) ) ) expected_output=$'4\n3\n2' ) ( name="revlist2p" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "+2" ) ) [std_like]=( argv=( "-n" "+2" ) ) ) expected_output=$'2\n3\n4' ) ( name="revlist2pr" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "+2r" ) ) [std_like]=( argv=( "-n" "+2" "-r" ) ) ) expected_output=$'4\n3\n2' ) ( name="revlist3p" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "+3" ) ) [std_like]=( argv=( "-n" "+3" ) ) ) expected_output=$'3\n4' ) ( name="revlist3pr" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "+3r" ) ) [std_like]=( argv=( "-n" "+3" "-r" ) ) ) expected_output=$'4\n3' ) ( name="revlist4p" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "+4" ) ) [std_like]=( argv=( "-n" "+4" ) ) ) expected_output=$'4' ) ( name="revlist4pr" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "+4r" ) ) [std_like]=( argv=( "-n" "+4" "-r" ) ) ) expected_output=$'4' ) ( name="revlist5p" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "+5" ) ) [std_like]=( argv=( "-n" "+5" ) ) ) expected_output=$'' ) ( name="revlist5pr" input=$'1\n2\n3\n4' compound -A tail_args=( [legacy]=( argv=( "+5r" ) ) [std_like]=( argv=( "-n" "+5" "-r" ) ) ) expected_output=$'' ) ) for testid in "${!testcases[@]}" ; do nameref tc=testcases[${testid}] for argv_variants in "${!tc.tail_args[@]}" ; do nameref argv=tc.tail_args[${argv_variants}].argv output=$( set -o pipefail (trap "" PIPE ; print -r -- "${tc.input}") | tail "${argv[@]}" ) || err_exit "test ${tc.name}/${argv_variants}: command failed with exit code $?" [[ "${output}" == "${tc.expected_output}" ]] || err_exit "test ${tc.name}/${argv_variants}: Expected $(doublebackslashquote "${tc.expected_output}"), got $(doublebackslashquote "${output}")" done done # test2: test "tail -r /dev/null 2>&1 (( $? == 2 )) || err_exit "expected exit code 2 for unsupported long option, got $?" # test 4: FIFO tests # FIFO test functions # (we use functions here to do propper garbage collection) function test_tail_fifo_1 { typeset tail_cmd="$1" integer i integer tail_pid=-1 # cleanup trap trap "rm -f tailtestfifo tailout" EXIT # create test FIFO mkfifo tailtestfifo ${tail_cmd} -f tailout & tail_pid=$! myintseq 20 >tailtestfifo waitpidtimeout ${tail_pid} 5 if isvalidpid ${tail_pid} ; then err_exit "test_tail_fifo_1: # tail hung (not expected)" kill -KILL ${tail_pid} fi wait || err_exit "tail child returned non-zero exit code=$?" [[ "$(cat tailout)" == $'11\n12\n13\n14\n15\n16\n17\n18\n19\n20' ]] || err_exit "test_tail_fifo_1: Expected $(doublebackslashquote '11\n12\n13\n14\n15\n16\n17\n18\n19\n20'), got $(doublebackslashquote "$(cat tailout)")" return 0 } function test_tail_fifo_2 { typeset tail_cmd="$1" integer i integer tail_pid=-1 # cleanup trap trap "rm -f tailtestfifo tailout" EXIT # create test FIFO mkfifo tailtestfifo ${tail_cmd} -f tailtestfifo >tailout & tail_pid=$! myintseq 14 >tailtestfifo waitpidtimeout ${tail_pid} 5 if isvalidpid ${tail_pid} ; then [[ "$(cat tailout)" == $'5\n6\n7\n8\n9\n10\n11\n12\n13\n14' ]] || err_exit "test_tail_fifo_2: Expected $(doublebackslashquote $'5\n6\n7\n8\n9\n10\n11\n12\n13\n14'), got $(doublebackslashquote "$(cat tailout)")" myintseq 15 >>tailtestfifo waitpidtimeout ${tail_pid} 5 if isvalidpid ${tail_pid} ; then kill -KILL ${tail_pid} else err_exit "test_tail_fifo_2: # tail exit with return code $? (not expected)" fi fi wait || err_exit "tail child returned non-zero exit code=$?" [[ "$(cat tailout)" == $'5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15' ]] || err_exit "test_tail_fifo_2: Expected $(doublebackslashquote $'5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15'), got $(doublebackslashquote "$(cat tailout)")" return 0 } # fixme: This should test /bin/tail and /usr/xpg4/bin/tail in Solaris test_tail_fifo_1 "tail" test_tail_fifo_2 "tail" # test 5: "tail -f" tests function followtest1 { typeset -r FOLLOWFILE="followfile.txt" typeset -r OUTFILE="outfile.txt" typeset title="$1" typeset testcmd="$2" typeset usenewline=$3 typeset followstr="" typeset newline="" integer i integer tailchild=-1 if ${usenewline} ; then newline=$'\n' fi rm -f "${FOLLOWFILE}" "${OUTFILE}" print -n "${newline}" > "${FOLLOWFILE}" ${testcmd} -f "${FOLLOWFILE}" >"${OUTFILE}" & (( tailchild=$! )) for (( i=0 ; i < 10 ; i++)) ; do followstr+="${newline}${i}" print -n "${i}${newline}" >>"${FOLLOWFILE}" sleep 2 [[ "$( < "${OUTFILE}")" == "${followstr}" ]] || err_exit "${title}: Expected $(doublebackslashquote "${followstr}"), got "$(doublebackslashquote "$( < "${OUTFILE}")")"" done kill -KILL ${tailchild} 2>/dev/null #kill -TERM ${tailchild} 2>/dev/null waitpidtimeout ${tailchild} 5 if isvalidpid ${tailchild} ; then err_exit "${title}: tail pid=${tailchild} hung." kill -KILL ${tailchild} 2>/dev/null fi wait ${tailchild} 2>/dev/null rm -f "${FOLLOWFILE}" "${OUTFILE}" return 0 } followtest1 "test5a" "tail" true # fixme: later we should test this, too: #followtest1 "test5b" "tail" false #followtest1 "test5c" "/usr/xpg4/bin/tail" true #followtest1 "test5d" "/usr/xpg4/bin/tail" false #followtest1 "test5e" "/bin/tail" true #followtest1 "test5f" "/bin/tail" false # test 6: "tail -f" tests function followtest2 { typeset -r FOLLOWFILE="followfile.txt" typeset -r OUTFILE="outfile.txt" typeset title="$1" typeset testcmd="$2" integer tailchild=-1 rm -f "${FOLLOWFILE}" "${OUTFILE}" myintseq 50000 >"${FOLLOWFILE}" ${testcmd} -n 60000 -f "${FOLLOWFILE}" >"${OUTFILE}" & (( tailchild=$! )) sleep 10 kill -KILL ${tailchild} 2>/dev/null #kill -TERM ${tailchild} 2>/dev/null waitpidtimeout ${tailchild} 5 if isvalidpid ${tailchild} ; then err_exit "${title}: tail pid=${tailchild} hung." kill -KILL ${tailchild} 2>/dev/null fi wait ${tailchild} 2>/dev/null # this tail should be an external process outstr=$(/bin/tail "${OUTFILE}") || err_exit "tail returned non-zero exit code $?" [[ "${outstr}" == 49991*50000 ]] || err_exit "${title}: Expected match for 49991*50000, got "$(singlebackslashquote "${outstr}")"" rm -f "${FOLLOWFILE}" "${OUTFILE}" return 0 } followtest2 "test6a" "tail" followtest2 "test6b" "/usr/xpg4/bin/tail" # fixme: later we should test this, too: #followtest2 "test6c" "/bin/tail" # cleanup cd "${ocwd}" rmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # # # Written by Roland Mainz # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 function isvalidpid { kill -0 ${1} 2>/dev/null && return 0 return 1 } integer testfilesize i maxwait typeset tmpfile integer testid ######################################################################## #### test set 001: # run loop and check various temp filesizes # (Please keep this test syncted with sun_solaris_cr_6800929_large_command_substitution_hang.sh) # test 1: run loop and check various temp filesizes tmpfile="$(mktemp -t "ksh93_tests_command_substitution.${PPID}.$$.XXXXXX")" || err_exit "Cannot create temporary file." compound test1=( compound -a testcases=( # test 1a: Run test child for $(...) # (note the pipe chain has to end in a builtin command, an external command may not trigger the bug) ( name="test1a" cmd="builtin cat ; print -- \"\$(cat \"${tmpfile}\" | cat)\" ; true" ) # test 1b: Same as test1a but uses ${... ; } instead if $(...) ( name="test1b" cmd="builtin cat ; print -- \"\${ cat \"${tmpfile}\" | cat ; }\" ; true" ) # test 1c: Same as test1a but does not use a pipe ( name="test1c" cmd="builtin cat ; print -- \"\$(cat \"${tmpfile}\" ; true)\" ; true" ) # test 1d: Same as test1a but does not use a pipe ( name="test1d" cmd="builtin cat ; print -- \"\${ cat \"${tmpfile}\" ; true ; }\" ; true" ) # test 1e: Same as test1a but uses an external "cat" command ( name="test1e" cmd="builtin -d cat /bin/cat ; print -- \"\$(cat \"${tmpfile}\" | cat)\" ; true" ) # test 1f: Same as test1a but uses an external "cat" command ( name="test1f" cmd="builtin -d cat /bin/cat ; print -- \"\${ cat \"${tmpfile}\" | cat ; }\" ; true" ) # test 1g: Same as test1a but uses an external "cat" command ( name="test1g" cmd="builtin -d cat /bin/cat ; print -- \"\$(cat \"${tmpfile}\" ; true)\" ; true" ) # test 1h: Same as test1a but uses an external "cat" command ( name="test1h" cmd="builtin -d cat /bin/cat ; print -- \"\${ cat \"${tmpfile}\" ; true ; }\" ; true" ) ) ) for (( testfilesize=1*1024 ; testfilesize <= 1024*1024 ; testfilesize*=2 )) ; do # Create temp file { for (( i=0 ; i < testfilesize ; i+=64 )) ; do print "0123456789abcdef01234567890ABCDEF0123456789abcdef01234567890ABCDE" done } >"${tmpfile}" # wait up to log2(i) seconds for the child to terminate # (this is 10 seconds for 1KB and 19 seconds for 512KB) (( maxwait=log2(testfilesize) )) for testid in "${!test1.testcases[@]}" ; do nameref currtst=test1.testcases[testid] ${SHELL} -o errexit -c "${currtst.cmd}" >"${tmpfile}.out" & (( childpid=$! )) for (( i=0 ; i < maxwait ; i++ )) ; do isvalidpid ${childpid} || break sleep 0.25 done if isvalidpid ${childpid} ; then err_exit "${currtst.name}: child (pid=${childpid}) still busy, filesize=${testfilesize}." kill -KILL ${childpid} 2>/dev/null fi wait || err_exit "${currtst.name}: Child returned non-zero exit code." # wait for child (and/or avoid zombies/slime) # compare input/output cmp -s "${tmpfile}" "${tmpfile}.out" || err_exit "${currtst.name}: ${tmpfile} and ${tmpfile}.out differ, filesize=${testfilesize}." rm "${tmpfile}.out" done # Cleanup rm "${tmpfile}" done ######################################################################## #### test set 002: # If a command substitution calls a function and that function contains # a command substitution which contains a piped command, the original # command substitution calling the function will return 127 instead of 0. # This is causing problems in several VSC tests. # If we remove the piped command from the simple # case in the attached script, it returns 0. typeset str typeset testbody typeset testout testbody=$( # means command substitution start, means command substitution end cat < printf "hi" | tr "h" "H" echo \$pipedcmd return 0 } foo=myfunc retval=\$? if [ "\$foo"X != "HiX" ]; then echo "myfunc returned '\${foo}'; expected 'Hi'" fi if [ \$retval -ne 0 ]; then echo "command substitution calling myfunc returned \"\${retval}\"; expected 0" else echo "command substitution calling myfunc successfully returned 0" fi EOF ) # Test 002/a: Plain test testout=${ printf "%B\n" testbody | sed 's//$(/g;s//)/g' | ${SHELL} 2>&1 || err_exit "command returned exit code $?" } [[ "${testout}" == "command substitution calling myfunc successfully returned 0" ]] || err_exit "Expected 'command substitution calling myfunc successfully returned 0', got ${testout}" # Test 002/b: Same as test002/a but replaces "$(" with "${" testout=${ printf "%B\n" testbody | sed 's//${ /g;s// ; }/g' | ${SHELL} 2>&1 || err_exit "command returned exit code $?" } [[ "${testout}" == "command substitution calling myfunc successfully returned 0" ]] || err_exit "Expected 'command substitution calling myfunc successfully returned 0', got ${testout}" # Test 002/c: Same as test002/a but forces |fork()| for a subshell via "ulimit -c 0" testout=${ printf "%B\n" testbody | sed 's//$( ulimit -c 0 ; /g;s//)/g' | ${SHELL} 2>&1 || err_exit "command returned exit code $?" } [[ "${testout}" == "command substitution calling myfunc successfully returned 0" ]] || err_exit "Expected 'command substitution calling myfunc successfully returned 0', got ${testout}" # Test 002/d: Same as test002/a but uses extra subshell testout=${ printf "%B\n" testbody | sed 's//$( ( /g;s//) )/g' | ${SHELL} 2>&1 || err_exit "command returned exit code $?" } [[ "${testout}" == "command substitution calling myfunc successfully returned 0" ]] || err_exit "Expected 'command substitution calling myfunc successfully returned 0', got ${testout}" # Test 002/e: Same as test002/b but uses extra subshell after "${ " testout=${ printf "%B\n" testbody | sed 's//${ ( /g;s//) ; }/g' | ${SHELL} 2>&1 || err_exit "command returned exit code $?" } [[ "${testout}" == "command substitution calling myfunc successfully returned 0" ]] || err_exit "Expected 'command substitution calling myfunc successfully returned 0', got ${testout}" ######################################################################## #### test set 003: # An expression within backticks which should return false, instead # returns true (0). typeset str typeset testbody typeset testout testbody=$( # means command substitution start, means command substitution end cat <expr "NOMATCH" : ".*Z" > /dev/null ; then echo "xerror" else echo "xok" fi EOF ) # Test 003/a: Plain test testout=${ printf "%B\n" testbody | sed 's//$(/g;s//)/g' | ${SHELL} 2>&1 || err_exit "command returned exit code $?" } [[ "${testout}" == "xok" ]] || err_exit "Expected 'xok', got ${testout}" # Test 003/b: Same as test003/a but replaces "$(" with "${" testout=${ printf "%B\n" testbody | sed 's//${ /g;s// ; }/g' | ${SHELL} 2>&1 || err_exit "command returned exit code $?" } [[ "${testout}" == "xok" ]] || err_exit "Expected 'xok', got ${testout}" # Test 003/c: Same as test003/a but forces |fork()| for a subshell via "ulimit -c 0" testout=${ printf "%B\n" testbody | sed 's//$( ulimit -c 0 ; /g;s//)/g' | ${SHELL} 2>&1 || err_exit "command returned exit code $?" } [[ "${testout}" == "xok" ]] || err_exit "Expected 'xok', got ${testout}" # Test 003/d: Same as test003/a but uses extra subshell testout=${ printf "%B\n" testbody | sed 's//$( ( /g;s//) )/g' | ${SHELL} 2>&1 || err_exit "command returned exit code $?" } [[ "${testout}" == "xok" ]] || err_exit "Expected 'xok', got ${testout}" # Test 003/e: Same as test003/b but uses extra subshell after "${ " testout=${ printf "%B\n" testbody | sed 's//${ ( /g;s//) ; }/g' | ${SHELL} 2>&1 || err_exit "command returned exit code $?" } [[ "${testout}" == "xok" ]] || err_exit "Expected 'xok', got ${testout}" ######################################################################## #### test set 004: # test pipe within ${... ; } command subtitution ending in a # non-builtin command (therefore we use "/bin/cat" instead of "cat" below # to force the use of the external "cat" command). ast-ksh.2009-01-20 # had a bug which caused this test to fail. testout=$( ${SHELL} -c 'pipedcmd=${ printf "hi" | /bin/cat ; } ; print $pipedcmd' ) [[ "${testout}" == "hi" ]] || err_exit "test004: Expected 'hi', got '${testout}'" ######################################################################## #### test set 005: # Test whether the shell may hang in a # 'exec 5>/dev/null; print $(eval ls -d . 2>&1 1>&5)' # Originally discovered with ast-ksh.2009-05-05 which hung in # the "configure" script of postgresql-8.3.7.tar.gz (e.g. # configure --enable-thread-safety --without-readline) compound test5=( compound -a testcases=( # gsf's reduced testcase ( name="test5_a" cmd='exec 5>/dev/null; print $(eval ls -d . 2>&1 1>&5)done' ) # gisburn's reduced testcase ( name="test5_b" cmd='exec 5>/dev/null; print $(eval "/bin/printf hello\n" 2>&1 1>&5)done' ) ## The following tests do not trigger the problem but are included here for completeness ## and to make sure we don't get other incarnations of the same problem later... # same as test5_a but uses ${ ... ; } instead of $(...) ( name="test5_c" cmd='exec 5>/dev/null; print "${ eval ls -d . 2>&1 1>&5 ;}done"' ) # same as test5_b but uses ${ ... ; } instead of $(...) ( name="test5_d" cmd='exec 5>/dev/null; print "${ eval "/bin/printf hello\n" 2>&1 1>&5 ;}done"' ) # same as test5_a but uses "ulimit -c 0" to force the shell to use a seperare process for $(...) ( name="test5_e" cmd='exec 5>/dev/null; print $(ulimit -c 0 ; eval ls -d . 2>&1 1>&5)done' ) # same as test5_b but uses "ulimit -c 0" to force the shell to use a seperare process for $(...) ( name="test5_f" cmd='exec 5>/dev/null; print $(ulimit -c 0 ; eval "/bin/printf hello\n" 2>&1 1>&5)done' ) ) ) maxwait=5 for testid in "${!test5.testcases[@]}" ; do nameref currtst=test5.testcases[testid] ${SHELL} -o errexit -c "${currtst.cmd}" >"${tmpfile}.out" & (( childpid=$! )) for (( i=0 ; i < maxwait ; i++ )) ; do isvalidpid ${childpid} || break sleep 0.25 done if isvalidpid ${childpid} ; then err_exit "${currtst.name}: child (pid=${childpid}) still busy." kill -KILL ${childpid} 2>/dev/null fi wait || err_exit "${currtst.name}: Child returned non-zero exit code." # wait for child (and/or avoid zombies/slime) testout="$( < "${tmpfile}.out")" rm "${tmpfile}.out" || err_exit "File '${tmpfile}.out' could not be removed." [[ "${testout}" == "done" ]] || err_exit "test '${currtst.name}' failed, expected 'done', got '${testout}'" done # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # # # This test module contains misc compound tests which do not have # their own module yet. # # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # global utility functions compound bracketstat=( integer bopen=0 integer bclose=0 ) function count_brackets { typeset x="$1" typeset c integer i (( bracketstat.bopen=0 , bracketstat.bclose=0 )) for (( i=0 ; i < ${#x} ; i++ )) ; do c="${x:i:1}" [[ "$c" == "(" ]] && (( bracketstat.bopen++ )) [[ "$c" == ")" ]] && (( bracketstat.bclose++ )) done (( bracketstat.bopen != bracketstat.bclose )) && return 1 return 0 } typeset ocwd typeset tmpdir # create temporary test directory ocwd="$PWD" tmpdir="$(mktemp -t -d "test_sun_solaris_compound_misc.XXXXXXXX")" || err_exit "Cannot create temporary directory" cd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } # ksh93 <= ast-ksh.2010-03-09 prints garbage for compound x=( compound -a nodes=( [4]=( ) ) );typeset -p x function test_compound_indexed_array_init_1 { compound vx=( compound -a nodes=( [4]=( ) ) ) compound vy compound -a vy.nodes=( [4]=( ) ) compound vz compound -a vz.nodes vz.nodes[4]=( ) cx="$(typeset -p vx)" ; cx="${cx//vx/tt}" cy="$(typeset -p vy)" ; cy="${cy//vy/tt}" cz="$(typeset -p vz)" ; cz="${cz//vz/tt}" [[ "$cx" == "$cy" ]] || err_exit "'$cx' != '$cy'" [[ "$cx" == "$cz" ]] || err_exit "'$cx' != '$cz'" [[ "$cy" == "$cz" ]] || err_exit "'$cy' != '$cz'" count_brackets "$cx" || err_exit "Brackets not balanced for '$cx'" count_brackets "$cy" || err_exit "Brackets not balanced for '$cy'" count_brackets "$cz" || err_exit "Brackets not balanced for '$cz'" count_brackets "$(print -v vx)" || err_exit "Brackets not balanced for '$(print -v vx)'" count_brackets "$(print -v vy)" || err_exit "Brackets not balanced for '$(print -v vy)'" count_brackets "$(print -v vz)" || err_exit "Brackets not balanced for '$(print -v vz)'" count_brackets "$(print -C vx)" || err_exit "Brackets not balanced for '$(print -C vx)'" count_brackets "$(print -C vy)" || err_exit "Brackets not balanced for '$(print -C vy)'" count_brackets "$(print -C vz)" || err_exit "Brackets not balanced for '$(print -C vz)'" cx="$(typeset +p vx.nodes)" ; [[ "$cx" == *-C* && "$cx" == *-a* ]] || err_exit "'$cx' lacks -C/-a attribute" cy="$(typeset +p vy.nodes)" ; [[ "$cy" == *-C* && "$cy" == *-a* ]] || err_exit "'$cy' lacks -C/-a attribute" cz="$(typeset +p vz.nodes)" ; [[ "$cz" == *-C* && "$cz" == *-a* ]] || err_exit "'$cz' lacks -C/-a attribute" cx="$(typeset +p vx.nodes[4])" ; [[ "$cx" == *-C* ]] || err_exit "'$cx' lacks -C attribute" cy="$(typeset +p vy.nodes[4])" ; [[ "$cy" == *-C* ]] || err_exit "'$cy' lacks -C attribute" cz="$(typeset +p vz.nodes[4])" ; [[ "$cz" == *-C* ]] || err_exit "'$cz' lacks -C attribute" return 0 } # ksh93 <= ast-ksh.2010-03-09 prints garbage for compound x=( compound -a nodes=( [4]=( ) ) );typeset -p x # this test is the same as test_compound_indexed_array_init_1 but "-a" was replaced with "-A" function test_compound_associative_array_init_1 { compound vx=( compound -A nodes=( [4]=( ) ) ) compound vy compound -A vy.nodes=( [4]=( ) ) compound vz compound -A vz.nodes vz.nodes[4]=( ) cx="$(typeset -p vx)" ; cx="${cx//vx/tt}" cy="$(typeset -p vy)" ; cy="${cy//vy/tt}" cz="$(typeset -p vz)" ; cz="${cz//vz/tt}" [[ "$cx" == "$cy" ]] || err_exit "'$cx' != '$cy'" [[ "$cx" == "$cz" ]] || err_exit "'$cx' != '$cz'" [[ "$cy" == "$cz" ]] || err_exit "'$cy' != '$cz'" count_brackets "$cx" || err_exit "Brackets not balanced for '$cx'" count_brackets "$cy" || err_exit "Brackets not balanced for '$cy'" count_brackets "$cz" || err_exit "Brackets not balanced for '$cz'" count_brackets "$(print -v vx)" || err_exit "Brackets not balanced for '$(print -v vx)'" count_brackets "$(print -v vy)" || err_exit "Brackets not balanced for '$(print -v vy)'" count_brackets "$(print -v vz)" || err_exit "Brackets not balanced for '$(print -v vz)'" count_brackets "$(print -C vx)" || err_exit "Brackets not balanced for '$(print -C vx)'" count_brackets "$(print -C vy)" || err_exit "Brackets not balanced for '$(print -C vy)'" count_brackets "$(print -C vz)" || err_exit "Brackets not balanced for '$(print -C vz)'" cx="$(typeset +p vx.nodes)" ; [[ "$cx" == *-C* && "$cx" == *-A* ]] || err_exit "'$cx' lacks -C/-A attribute" cy="$(typeset +p vy.nodes)" ; [[ "$cy" == *-C* && "$cy" == *-A* ]] || err_exit "'$cy' lacks -C/-A attribute" cz="$(typeset +p vz.nodes)" ; [[ "$cz" == *-C* && "$cz" == *-A* ]] || err_exit "'$cz' lacks -C/-A attribute" cx="$(typeset +p vx.nodes[4])" ; [[ "$cx" == *-C* ]] || err_exit "'$cx' lacks -C attribute" cy="$(typeset +p vy.nodes[4])" ; [[ "$cy" == *-C* ]] || err_exit "'$cy' lacks -C attribute" cz="$(typeset +p vz.nodes[4])" ; [[ "$cz" == *-C* ]] || err_exit "'$cz' lacks -C attribute" return 0 } # run tests test_compound_indexed_array_init_1 test_compound_associative_array_init_1 cd "${ocwd}" rmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # # name reference test #001 # Note we run this test in a seperate shell to make sure the memory # corruption originally reported can be reproduced (which precisely # depends on ordering in the testcase) ( cat < # hello # -- snip -- # (additionally we test some extra stuff like bracket count) s=${ compound x=( a=1 b=2 typeset -a myarray=( 1 2 3 4 5 6 7 8 9 10 ) typeset -A myarray2=( [a]=1 [b]=2 ["c d"]=3 [e]=4 ["f"]=5 [g]=6 [h]=7 [i]=8 [j]=9 [k]=10 ) typeset -A myarray3=( [a]=( float m1=0.5 float m2=0.6 foo="hello" ) [b]=( foo="bar" ) ["c d"]=( integer at=90 ) [e]=( compound nested_cpv=( typeset -a myarray=( 1 2 3 4 5 6 7 8 9 10 ) typeset str=$'a \'string' ) ) [f]=( typeset g="f" ) [a_nan]=( float my_nan=-nan ) [a_hexfloat]=( typeset -X my_hexfloat=1.1 ) ) ) { printf "%B\n" x print "hello" } | cpvcat1 | cpvcat2 | cpvcat3 | cpvcat4 | { read -C y read s } print "x${s}x" } || err_exit "test returned exit code $?" [[ "${s}" == "xhellox" ]] || err_exit "Expected 'xhellox', got ${s}" count_brackets "$y" || err_exit "y: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -v y)" || err_exit "y: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -C y)" || err_exit "y: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" # cleanup unset x y || err_exit "unset failed" [[ "$x" == "" ]] || err_exit "cleanup failed for x" [[ "$y" == "" ]] || err_exit "cleanup failed for y" # Test 2: # Same as test 1 except one more compound var following the "hello" # line. # Data layout is: # -- snip -- # # hello # # -- snip -- s=${ compound x=( a=1 b=2 typeset -a myarray=( 1 2 3 4 5 6 7 8 9 10 ) typeset -A myarray2=( [a]=1 [b]=2 ["c d"]=3 [e]=4 ["f"]=5 [g]=6 [h]=7 [i]=8 [j]=9 [k]=10 ) compound -A myarray3=( [a]=( float m1=0.5 float m2=0.6 foo="hello" ) [b]=( foo="bar" ) ["c d"]=( integer at=90 ) [e]=( compound nested_cpv=( typeset -a myarray=( 1 2 3 4 5 6 7 8 9 10 ) typeset str=$'a \'string' ) ) [f]=( typeset g="f" ) [a_nan]=( float my_nan=-nan ) [a_hexfloat]=( typeset -X my_hexfloat=1.1 ) ) ) { printf "%B\n" x print "hello" printf "%B\n" x } | cpvcat1 | cpvcat2 | cpvcat3 | cpvcat4 | { read -C y1 read s read -C y2 } print "x${s}x" } || err_exit "test returned exit code $?" [[ "${s}" == "xhellox" ]] || err_exit "Expected 'xhellox', got ${s}." [[ "${y1.myarray3[b].foo}" == "bar" ]] || err_exit "y1.myarray3[b].foo != bar" [[ "${y2.myarray3[b].foo}" == "bar" ]] || err_exit "y2.myarray3[b].foo != bar" [[ "$y1" != "" ]] || err_exit "y1 is empty" [[ "$y2" != "" ]] || err_exit "y2 is empty" (( ${#y1.myarray3[e].nested_cpv.myarray[@]} == 10 )) || err_exit "Expected 10 elements in y1.myarray3[e].nested_cpv, got ${#y1.myarray3[e].nested_cpv[@]}" (( ${#y2.myarray3[e].nested_cpv.myarray[@]} == 10 )) || err_exit "Expected 10 elements in y2.myarray3[e].nested_cpv, got ${#y2.myarray3[e].nested_cpv[@]}" (( isnan(y1.myarray3[a_nan].my_nan) )) || err_exit "y1.myarray3[a_nan].my_nan not a NaN" (( isnan(y2.myarray3[a_nan].my_nan) )) || err_exit "y2.myarray3[a_nan].my_nan not a NaN" (( signbit(y1.myarray3[a_nan].my_nan) )) || err_exit "y1.myarray3[a_nan].my_nan not negative" (( signbit(y2.myarray3[a_nan].my_nan) )) || err_exit "y2.myarray3[a_nan].my_nan not negative" count_brackets "$y1" || err_exit "y1: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -v y1)" || err_exit "y1: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -C y1)" || err_exit "y1: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$y2" || err_exit "y2: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -v y2)" || err_exit "y2: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -C y2)" || err_exit "y2: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" [[ "$y1" == "$y2" ]] || err_exit "Expected $(printf "%q\n" "${y1}") == $(printf "%q\n" "${y2}")." [[ "$x" == "$y1" ]] || err_exit "Expected $(printf "%q\n" "${x}") == $(printf "%q\n" "${y}")." # cleanup unset x y1 y2 || err_exit "unset failed" [[ "$x" == "" ]] || err_exit "cleanup failed for x" [[ "$y1" == "" ]] || err_exit "cleanup failed for y1" [[ "$y2" == "" ]] || err_exit "cleanup failed for y2" # Test 3: Test compound variable copy operator vs. "read -C" compound x=( a=1 b=2 typeset -a myarray=( 1 2 3 4 5 6 7 8 9 10 ) typeset -A myarray2=( [a]=1 [b]=2 ["c d"]=3 [e]=4 ["f"]=5 [g]=6 [h]=7 [i]=8 [j]=9 [k]=10 ) compound -A myarray3=( [a]=( float m1=0.5 float m2=0.6 foo="hello" ) [b]=( foo="bar" ) ["c d"]=( integer at=90 ) [e]=( compound nested_cpv=( typeset -a myarray=( 1 2 3 4 5 6 7 8 9 10 ) typeset str=$'a \'string' ) ) [f]=( typeset g="f" ) [a_nan]=( float my_nan=-nan ) [a_hexfloat]=( typeset -X my_hexfloat=1.1 ) ) ) compound x_copy=x || err_exit "x_copy copy failed" [[ "${x_copy}" != "" ]] || err_exit "x_copy should not be empty" count_brackets "${x_copy}" || err_exit "x_copy: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -v x_copy)" || err_exit "x_copy: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -C x_copy)" || err_exit "x_copy: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" compound nested_cpv_copy nested_cpv_copy=x.myarray3[e].nested_cpv || err_exit "x.myarray3[e].nested_cpv copy failed" (( ${#nested_cpv_copy.myarray[@]} == 10 )) || err_exit "Expected 10 elements in nested_cpv_copy.myarray, got ${#nested_cpv_copy.myarray[@]}" # unset branch "x.myarray3[e].nested_cpv" of the variable tree "x" ... unset x.myarray3[e].nested_cpv || err_exit "unset x.myarray3[e].nested_cpv failed" [[ "${x.myarray3[e].nested_cpv}" == "" ]] || err_exit "x.myarray3[e].nested_cpv still has a value" # ... and restore it from the saved copy printf "%B\n" nested_cpv_copy | cpvcat1 | cpvcat2 | cpvcat3 | cpvcat4 | read -C x.myarray3[e].nested_cpv || err_exit "read failed" # compare copy of the original tree and the modified one [[ "${x}" == "${x_copy}" ]] || err_exit "x != x_copy" count_brackets "${x}" || err_exit "x: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -v x)" || err_exit "x: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" count_brackets "$(print -C x)" || err_exit "x: bracket open ${bracketstat.bopen} != bracket close ${bracketstat.bclose}" (( ${#x.myarray3[e].nested_cpv.myarray[@]} == 10 )) || err_exit "Expected 10 elements in x.myarray3[e].nested_cpv, got ${#x.myarray3[e].nested_cpv[@]}" (( isnan(x.myarray3[a_nan].my_nan) )) || err_exit "x.myarray3[a_nan].my_nan not a NaN" (( signbit(x.myarray3[a_nan].my_nan) )) || err_exit "x.myarray3[a_nan].my_nan not negative" # cleanup unset x x_copy nested_cpv_copy || err_exit "unset failed" # Test 4: Test "read -C" failure for missing bracket at the end typeset s s=$($SHELL -c 'compound myvar ; print "( unfinished=1" | read -C myvar 2>/dev/null || print "error $?"') || err_exit "shell failed" [[ "$s" == "error 3" ]] || err_exit "compound_read: expected error 3, got ${s}" # Test 5: Test "read -C" failure for missing bracket at the beginning typeset s s=$($SHELL -c 'compound myvar ; print " unfinished=1 )" | read -C myvar 2>/dev/null || print "error $?"') || err_exit "shell failed" [[ "$s" == "error 3" ]] || err_exit "compound_read: expected error 3, got ${s}" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether the issue described in CR #6687139 # ("command substitution, exec, and stdout redirection cause # allocation loop") has been fixed: # -- snip -- # The following one-liner (including back ticks) causes ksh93 to spin # out of control consuming all memory at a *very* rapid pace: # # `exec program > file` # # If "file" is a real file (as opposed to /dev/null), the file will # also grow without bound. "program" need not exist, i.e. # # `exec > file` # # has the same result. Using $() instead of `` also has the same # effect. # # This works fine under all other bourne-compatible shells. # -- snip -- # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 function isvalidpid { kill -0 ${1} 2>/dev/null && return 0 return 1 } integer childpid typeset testdir integer childretval testdir="/tmp/sun_solaris_cr_6687139_pid$$_${PPID}" mkdir -p "${testdir}" || err_exit "Cannot create test dirctory" cd "${testdir}" || { err_exit "Cannot cd to test dirctory" ; exit $Errors ; } ############################################################################## ## ## test variant 1a: Use command substitution $( ... ) ## # Run testcase with "nice" to make sure a "runaway" process can # still be caught&&terminated by the current shell nice -n 10 ${SHELL} -c 'touch z ; $(exec nosuchprogram_for_cr_6687139 > z) ; rm z' 2>/dev/null & childpid=$! sleep 5 if isvalidpid ${childpid} ; then # First _stop_, then log error since the child may eat up memory # VERY VERY quickly kill -STOP ${childpid} err_exit "Child still active after 5 seconds (hang ?)" # Get sample stack trace pstack ${childpid} kill -KILL ${childpid} fi # collect child's return status wait ${childpid} childretval=$? (( childretval == 0 )) || err_exit "Child returned non-zero exit code ${childretval}." [[ ! -f "z" ]] || { rm "z" ; err_exit "Child did not remove test file" ; } ############################################################################## ## ## test variant 1b: Same as test 1a but forces the shell to |fork()| for the ## subshell ## # Run testcase with "nice" to make sure a "runaway" process can # still be caught&&terminated by the current shell nice -n 10 ${SHELL} -c 'touch z ; $(ulimit -c 0 ; exec nosuchprogram_for_cr_6687139 > z) ; rm z' 2>/dev/null & childpid=$! sleep 5 if isvalidpid ${childpid} ; then # First _stop_, then log error since the child may eat up memory # VERY VERY quickly kill -STOP ${childpid} err_exit "Child still active after 5 seconds (hang ?)" # Get sample stack trace pstack ${childpid} kill -KILL ${childpid} fi # collect child's return status wait ${childpid} childretval=$? (( childretval == 0 )) || err_exit "Child returned non-zero exit code ${childretval}." [[ ! -f "z" ]] || { rm "z" ; err_exit "Child did not remove test file" ; } ############################################################################## ## ## test variant 2a: Use plain subshell ( ... ) ## # Run testcase with "nice" to make sure a "runaway" process can # still be caught&&terminated by the current shell nice -n 10 ${SHELL} -c 'touch z ; (exec nosuchprogram_for_cr_6687139 > z) ; rm z' 2>/dev/null & childpid=$! sleep 5 if isvalidpid ${childpid} ; then # First _stop_, then log error since the child may eat up memory # VERY VERY quickly kill -STOP ${childpid} err_exit "Child still active after 5 seconds (hang ?)" # Get sample stack trace pstack ${childpid} kill -KILL ${childpid} fi # collect child's return status wait ${childpid} childretval=$? (( childretval == 0 )) || err_exit "Child returned non-zero exit code ${childretval}." [[ ! -f "z" ]] || { rm "z" ; err_exit "Child did not remove test file" ; } ############################################################################## ## ## test variant 2b: Same as test 2a but forces the shell to |fork()| for the ## subshell ## # Run testcase with "nice" to make sure a "runaway" process can # still be caught&&terminated by the current shell nice -n 10 ${SHELL} -c 'touch z ; (ulimit -c 0 ; exec nosuchprogram_for_cr_6687139 > z) ; rm z' 2>/dev/null & childpid=$! sleep 5 if isvalidpid ${childpid} ; then # First _stop_, then log error since the child may eat up memory # VERY VERY quickly kill -STOP ${childpid} err_exit "Child still active after 5 seconds (hang ?)" # Get sample stack trace pstack ${childpid} kill -KILL ${childpid} fi # collect child's return status wait ${childpid} childretval=$? (( childretval == 0 )) || err_exit "Child returned non-zero exit code ${childretval}." [[ ! -f "z" ]] || { rm "z" ; err_exit "Child did not remove test file" ; } # tests done, remove temporary test subdir cd /tmp rmdir "${testdir}" || err_exit "Could not remove temporary test directory ${testdir}" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # # # Test whether CR #6713682 has been fixed. # # Creating a compound variable in s subshell "bleeds through" to the calling subshell in some conditions. # Example: # -- snip -- # $ ksh93 -c 'unset l ; ( l=( a=1 b="BE" ) ; print "$l" ) ; print $l' # ( # a=1 # b=BE # ) # ( ) # -- snip -- # The first bracket pair is Ok since it's coming from $ print "$l" # , however the 2nd pair comes from the print $l _outside_ the subshell where the variable "l" should no longer exist. # # Workaround: # Force ksh93 to call |fork()| for the matching subshell using $ ulimit -c #, e.g. ... # -- snip -- # $ ksh93 -c 'unset l ; ( ulimit -c 0 ; l=( a=1 b="BE" ) ; print "$l" ) ; print $l' # ( # a=1 # b=BE # ) # -- snip -- # ... provides the correct output. # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset var1 var2 # use unset, l=() compound syntax and print var1="$(${SHELL} -c 'unset l ; ( l=( a=1 b="BE" ) ; print "$l" ) ; print $l')" || err_exit "Non-zero exit code." var2="$(${SHELL} -c 'unset l ; ( ulimit -c 0 ; l=( a=1 b="BE" ) ; print "$l" ) ; print $l')" || err_exit "Non-zero exit code." [[ "${var1}" == "${var2}" ]] || err_exit "Non-fork()'ed subshell output differes from fork()'ed subshell output (with unset)." # do not use unset, l=() compound syntax and print var1="$(${SHELL} -c '( l=( a=1 b="BE" ) ; print "$l" ) ; print $l')" || err_exit "Non-zero exit code." var2="$(${SHELL} -c '( ulimit -c 0 ; l=( a=1 b="BE" ) ; print "$l" ) ; print $l')" || err_exit "Non-zero exit code." [[ "${var1}" == "${var2}" ]] || err_exit "Non-fork()'ed subshell output differes from fork()'ed subshell output (without unset)." # use unset, typeset -C compound syntax and print var1="$(${SHELL} -c 'unset l ; ( compound l ; l.a=1 ; l.b="BE" ; print "$l" ) ; print $l')" || err_exit "Non-zero exit code." var2="$(${SHELL} -c 'unset l ; ( ulimit -c 0 ; compound l ; l.a=1 ; l.b="BE" ; print "$l" ) ; print $l')" || err_exit "Non-zero exit code." [[ "${var1}" == "${var2}" ]] || err_exit "Non-fork()'ed subshell output differes from fork()'ed subshell output (with unset)." # do not use unset, typeset -C compound syntax and print var1="$(${SHELL} -c '( compound l ; l.a=1 ; l.b="BE" ; print "$l" ) ; print $l')" || err_exit "Non-zero exit code." var2="$(${SHELL} -c '( ulimit -c 0 ; compound l ; l.a=1 ; l.b="BE" ; print "$l" ) ; print $l')" || err_exit "Non-zero exit code." [[ "${var1}" == "${var2}" ]] || err_exit "Non-fork()'ed subshell output differes from fork()'ed subshell output (with unset)." # use unset, l=() compound syntax and printf "%B\n" var1="$(${SHELL} -c 'unset l ; ( l=( a=1 b="BE" ) ; printf "%B\n" l ) ; printf "%B\n" l')" || err_exit "Non-zero exit code." var2="$(${SHELL} -c 'unset l ; ( ulimit -c 0 ; l=( a=1 b="BE" ) ; printf "%B\n" l ) ; printf "%B\n" l')" || err_exit "Non-zero exit code." [[ "${var1}" == "${var2}" ]] || err_exit "Non-fork()'ed subshell output differes from fork()'ed subshell output (with unset)." # do not use unset, l=() compound syntax and printf "%B\n" var1="$(${SHELL} -c '( l=( a=1 b="BE" ) ; printf "%B\n" l) ; printf "%B\n" l')" || err_exit "Non-zero exit code." var2="$(${SHELL} -c '( ulimit -c 0 ; l=( a=1 b="BE" ) ; printf "%B\n" l) ; printf "%B\n" l')" || err_exit "Non-zero exit code." [[ "${var1}" == "${var2}" ]] || err_exit "Non-fork()'ed subshell output differes from fork()'ed subshell output (without unset)." # use unset, typeset -C compound syntax and printf "%B\n" var1="$(${SHELL} -c 'unset l ; ( compound l ; l.a=1 ; l.b="BE" ; printf "%B\n" l) ; printf "%B\n" l')" || err_exit "Non-zero exit code." var2="$(${SHELL} -c 'unset l ; ( ulimit -c 0 ; compound l ; l.a=1 ; l.b="BE" ; printf "%B\n" l) ; printf "%B\n" l')" || err_exit "Non-zero exit code." [[ "${var1}" == "${var2}" ]] || err_exit "Non-fork()'ed subshell output differes from fork()'ed subshell output (with unset)." # do not use unset, typeset -C compound syntax and printf "%B\n" var1="$(${SHELL} -c '( compound l ; l.a=1 ; l.b="BE" ; printf "%B\n" l) ; printf "%B\n" l')" || err_exit "Non-zero exit code." var2="$(${SHELL} -c '( ulimit -c 0 ; compound l ; l.a=1 ; l.b="BE" ; printf "%B\n" l) ; printf "%B\n" l')" || err_exit "Non-zero exit code." [[ "${var1}" == "${var2}" ]] || err_exit "Non-fork()'ed subshell output differes from fork()'ed subshell output (with unset)." # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether ksh93 (like ksh88) generates calls a # CHLD/SIGCHLD trap for background jobs and _not_ for foreground jobs. # # This was reported as CR #6722134 ("*ksh93* (20080624_snapshot) # doesn't execute CHLD trap"): # -- snip -- # With "set -o monitor" on and "set -o notify" off, ksh88 executes the CHLD # trap while waiting for interactive input when a background job completes. # ksh93 appears not to execute the CHLD trap when a background job terminates. # Probably related: I noticed that with no CHLD trap set, but -o monitor and # -o notify set, there should be a similar asynchronous job completion notice. # It works in ksh88 but not in this ksh93 build. # -- snip -- # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 ## ## test one: ## s="$($SHELL -c ' set -o errexit integer i trap "print got_child" SIGCHLD sleep 5 & sleep 7 & for ((i=0 ; i < 15 ; i++)) ; do print $i sleep 1 # external, non-background command for which a SIGCHLD should # _not_ be fired /bin/true >/dev/null done print "loop finished" wait print "done" ' 2>&1 )" || err_exit "test loop failed." [[ "$s" == ~(Er)$'14\nloop finished\ndone' ]] || err_exit "Expected '14\nloop finished\ndone' at the end of the output, got ${s}." [[ "$s" == ~(El)$'0\n1\n2' ]] || err_exit "Expected '0\n1\n2' as at the beginning of the output, got ${s}." integer count (( count=$(fgrep "got_child" <<< "$s" | wc -l) )) || err_exit "counting failed." (( count == 2 )) || err_exit "Expected count==2, got count==${count}." ## ## test two: ## (same as test "one" except that this test has one more "sleep" child) ## s="$($SHELL -c ' set -o errexit integer i trap "print got_child" SIGCHLD sleep 5 & sleep 7 & sleep 9 & for ((i=0 ; i < 15 ; i++)) ; do print $i sleep 1 # external, non-background command for which a SIGCHLD should # _not_ be fired /bin/true >/dev/null done print "loop finished" wait print "done" ' 2>&1 )" || err_exit "test loop failed." [[ "$s" == ~(Er)$'14\nloop finished\ndone' ]] || err_exit "Expected '14\nloop finished\ndone' at the end of the output, got ${s}." [[ "$s" == ~(El)$'0\n1\n2' ]] || err_exit "Expected '0\n1\n2' as at the beginning of the output, got ${s}." (( count=$(fgrep "got_child" <<< "$s" | wc -l) )) || err_exit "counting failed." (( count == 3 )) || err_exit "Expected count==3, got count==${count}." # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # Test whether CR #6753538 ("umask modification leaks out of a ksh93 # subshell") has been fixed. # # Quote from CR #6753538: # -- snip -- # I discovered that Solaris 11's /bin/sh exhibits the following # surprising behavior: # # $ /bin/sh -c 'umask 22; (umask 0); umask' # 0000 # # All other shells I tried print 22. # -- snip -- # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # # test set 1: Simple umask in subshell # x=$(${SHELL} -c 'umask 22; (umask 0); umask') [[ "$x" == "0022" ]] || err_exit "expected umask 0022, got $x" x=$(${SHELL} -c 'umask 20; (umask 0); umask') [[ "$x" == "0020" ]] || err_exit "expected umask 0020, got $x" x=$(${SHELL} -c 'umask 0; (umask 22); umask') [[ "$x" == "0000" ]] || err_exit "expected umask 0000, got $x" # # test set 2: Simple umask in two subshells # x=$(${SHELL} -c 'umask 22; ( (umask 10); umask 0); umask') [[ "$x" == "0022" ]] || err_exit "expected umask 0022, got $x" x=$(${SHELL} -c 'umask 20; ( (umask 10); umask 0); umask') [[ "$x" == "0020" ]] || err_exit "expected umas k 0020, got $x" x=$(${SHELL} -c 'umask 0; ( (umask 10); umask 22); umask') [[ "$x" == "0000" ]] || err_exit "expected umask 0000, got $x" # # test set 3: Compare normal subshell vs. subshell in seperate process # ($ ulimit -c 0 # forced the subshell to |fork()| # x=$(${SHELL} -c 'umask 22; ( umask 0); umask') || err_exit "shell failed." y=$(${SHELL} -c 'umask 22; (ulimit -c 0 ; umask 0); umask') || err_exit "shell failed." [[ "$x" == "$y" ]] || err_exit "$x != $y" x=$(${SHELL} -c 'umask 20; ( umask 0); umask') || err_exit "shell failed." y=$(${SHELL} -c 'umask 20; (ulimit -c 0 ; umask 0); umask') || err_exit "shell failed." [[ "$x" == "$y" ]] || err_exit "$x != $y" x=$(${SHELL} -c 'umask 0; ( umask 20); umask') || err_exit "shell failed." y=$(${SHELL} -c 'umask 0; (ulimit -c 0 ; umask 20); umask') || err_exit "shell failed." [[ "$x" == "$y" ]] || err_exit "$x != $y" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # Test whether CR #6754020 ("ksh93 does weird '[' expansion") has # been fixed. # # Quote from CR #6754020: # ---- snip ---- # The problem is that subprocess uses /bin/sh as the shell when it # spins off the process. As Brad demonstrated: # /bin/sh -c 'echo F[[O]' # F[[O][ # # In short, this bug only appears when run through the test suite, # or by people running /bin/sh who don't understand how their shell # treats special characters. # -- snip -- # # In this case ksh93 has a bug which causes "F[[O]" to be expanded # in a wrong way. # ---- snip ---- # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset s # test using "echo" s="$(${SHELL} -c 'echo F[[O]')" [[ "$s" == 'F[[O]' ]] || err_exit "Expected 'F[[O]', got $s" s="$(${SHELL} -c 'echo F[[[O]]')" [[ "$s" == 'F[[[O]]' ]] || err_exit "Expected 'F[[[O]]', got $s" # test using "print" s="$(${SHELL} -c 'print F[[O]')" [[ "$s" == 'F[[O]' ]] || err_exit "Expected 'F[[O]', got $s" s="$(${SHELL} -c 'print F[[[O]]')" [[ "$s" == 'F[[[O]]' ]] || err_exit "Expected 'F[[[O]]', got $s" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # Test whether CR #6763594 ('ksh93 executes command after "command" # builtin twice on failure') has been fixed. # # Quote from CR #6763594: # ---- snip ---- # ksh93 has a bug which causes shell to execute the command after the # "command" builtin to be executed twice if "command" fails: # -- snip -- # $ ksh93 -x -c 'print "true" >myfoo ; chmod a+x,a-r myfoo ; command ./myfoo ; # print $?' # + print true # + 1> myfoo # + chmod a+x,a-r myfoo # + command ./myfoo # ksh93[1]: ./myfoo: ./myfoo: cannot open [Permission denied] # + print 1 # 1 # + print 0 # 0 # -- snip -- # The "print" command at the end is executed twice in this case since # the shell jumps to the wrong position in the execution sequence. # # The correct output should be: # -- snip -- # $ ksh93 -x -c 'print "true" >myfoo ; chmod a+x,a-r myfoo ; command ./myfoo ; # print $?' # + print true # + 1> myfoo # + chmod a+x,a-r myfoo # + command ./myfoo # ksh93[1]: ./myfoo: ./myfoo: cannot open [Permission denied] # + print 1 # 1 # -- snip -- # ---- snip ---- # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset testtmpdir=/tmp/ksh93_test_cr_6763594_${PPID}_$$ mkdir "${testtmpdir}" || { err_exit "Could not create temporary directory ${testtmpdir}." ; exit ${Errors} ; } cd "${testtmpdir}" || { err_exit "Cannot cd to temporary directory ${testtmpdir}." ; exit ${Errors} ; } typeset s ${SHELL} -c 'print "true" >myfoo ; chmod a+x,a-r myfoo ; command ./myfoo ; print $?' 1>out_stdout 2>out_stderr (( $? == 0 )) || err_exit "Return code $?, expected 0" s=$( < out_stdout ) ; [[ "$s" == '126' ]] || err_exit "Expected '126', got $(printf "%q\n" "$s")." s=$( < out_stderr ) ; [[ "$s" == ~(Elr)(.*:\ \./myfoo:\ \./myfoo:\ .*\[.*\]) ]] || err_exit "Output $(printf "%q\n" "$s") does not match pattern '~(Elr)(.*:\ \./myfoo:\ \./myfoo:\ .*\[.*\])'." rm "myfoo" "out_stdout" "out_stderr" || err_exit "rm failed." cd .. rmdir "${testtmpdir}" || err_exit "Failed to remove temporary directory ${testtmpdir}." # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # Test whether CR #6766246 ("bug in pattern matching") has been fixed. # # Quote from CR #6766246: # ---- snip ---- # The bootstrap script of pkgsrc contains this code # checkarg_sane_absolute_path() { # case "$1" in # "") ;; # the default value will be used. # *[!-A-Za-z0-9_./]*) # die "ERROR: Invalid characters in path $1 (from $2)." ;; # /*) ;; # *) die "ERROR: The argument to $2 must be an absolute path." ;; # esac # } # It turns out, the leading "!" in the pattern is not interpreted # as negation, and the first "-" not as a literal. Instead the # character range "! to A" is constructed. Paths containing "%" # or "@" are accepted, but paths containing "-" are rejected. # Note that this interpretation makes the whole pattern # syntactically wrong, which isn't noticed either. # # Test case: # -- snip -- # !/bin/sh # case "$1" in # *[!-A-Za-z0-9_./]*) # echo invalid characters used in $1 # ;; # *) # echo only valid characters used in $1 # ;; # esac # -- snip -- # Expected Result: # strings containing a "-" should be accepted, strings containing # a "@" should be rejected # Actual Result: # strings containing a "-" are rejected, strings containing a # "@" are accepted # Workaround # The pattern "*[!A-Za-z0-9_./-]*" (i.e. shifting the dash to # the end) works as expected. # ---- snip ---- # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 ## test 1 (based on the bug report): function do_match { case "$1" in *[!-A-Za-z0-9_./]*) print "match" ;; *) print "nomatch" ;; esac return 0 } typeset pat pat="foo-bar" ; [[ "$(do_match "${pat}")" == "nomatch" ]] || err_exit "${pat} matched." pat="foo+bar" ; [[ "$(do_match "${pat}")" == "match" ]] || err_exit "${pat} not matched." pat="foo/bar" ; [[ "$(do_match "${pat}")" == "nomatch" ]] || err_exit "${pat} matched." pat="foo_bar" ; [[ "$(do_match "${pat}")" == "nomatch" ]] || err_exit "${pat} matched." pat="foo@bar" ; [[ "$(do_match "${pat}")" == "match" ]] || err_exit "${pat} not matched." pat="foobar-" ; [[ "$(do_match "${pat}")" == "nomatch" ]] || err_exit "${pat} matched." pat="foobar+" ; [[ "$(do_match "${pat}")" == "match" ]] || err_exit "${pat} not matched." pat="foobar/" ; [[ "$(do_match "${pat}")" == "nomatch" ]] || err_exit "${pat} matched." pat="foobar_" ; [[ "$(do_match "${pat}")" == "nomatch" ]] || err_exit "${pat} matched." pat="foobar@" ; [[ "$(do_match "${pat}")" == "match" ]] || err_exit "${pat} not matched." pat="-foobar" ; [[ "$(do_match "${pat}")" == "nomatch" ]] || err_exit "${pat} matched." pat="+foobar" ; [[ "$(do_match "${pat}")" == "match" ]] || err_exit "${pat} not matched." pat="/foobar" ; [[ "$(do_match "${pat}")" == "nomatch" ]] || err_exit "${pat} matched." pat="_foobar" ; [[ "$(do_match "${pat}")" == "nomatch" ]] || err_exit "${pat} matched." pat="@foobar" ; [[ "$(do_match "${pat}")" == "match" ]] || err_exit "${pat} not matched." ## test 2 (gsf's test chain): # Make sure LC_COLLATE has a value if [[ ! -v LC_COLLATE ]] ; then if [[ -v LANG && ! -v LC_ALL ]]; then LC_COLLATE="${LANG}" fi fi if [[ -v LC_ALL ]] ; then LC_COLLATE="${LC_ALL}" fi [[ -v LC_COLLATE ]] || LC_COLLATE=C set -- \ 'A' 0 1 1 0 1 1 1 0 0 1 0 0 \ 'Z' 0 1 1 0 1 1 1 0 0 1 0 0 \ '/' 0 0 0 0 0 0 1 1 1 1 1 1 \ '.' 0 0 0 0 0 0 1 1 1 1 1 1 \ '_' 0 0 0 0 0 0 1 1 1 1 1 1 \ '-' 1 1 1 1 1 1 0 0 0 0 0 0 \ '%' 0 0 0 0 0 0 1 1 1 1 1 1 \ '@' 0 0 0 0 0 0 1 1 1 1 1 1 \ '!' 0 0 0 0 0 0 1 1 1 1 1 1 \ '^' 0 0 0 0 0 0 1 1 1 1 1 1 \ # retain this line # while (( $# >= 13 )) ; do c=$1 shift for p in \ '[![.-.]]' \ '[![.-.][:upper:]]' \ '[![.-.]A-Z]' \ '[!-]' \ '[!-[:upper:]]' \ '[!-A-Z]' \ '[[.-.]]' \ '[[.-.][:upper:]]' \ '[[.-.]A-Z]' \ '[-]' \ '[-[:upper:]]' \ '[-A-Z]' \ # retain this line # do e=$1 shift [[ $c == $p ]] g=$? [[ $g == $e ]] || err_exit "[[ '$c' == $p ]] for LC_COLLATE=$l failed -- expected $e, got $g" done done # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether ksh93 supports more than 256 recursive # function+command substitution calls. # # This was reported as CR #6769332 ('Recursive function+command # substitutions terminate shell after 257 iterations'): # ------------ snip ------------ # Recursive function+command substitutions # (e.g. func1() { x=$( func2 ) ; } ; x=$( func1 ) ) terminate the # ksh93 shell after 257 iterations with a exit code of "0" (it # seems the shell just "quits" after the last "return 0" statement # in the function). # Running the attached testcase terminates the shell after 257 # iterations (g=257 in the script) while 256 iterations (replace # "257" with "256" in the script) just works fine. # The same testcase works Ok in ksh88 (=/usr/bin/ksh in # Solaris 10U5) # # Expected Result # The script should output "done" and return the exit code 0. # # Actual Result # No messsge. Exit code "0". # # Error Message(s) # None (exit code is "0"). # # Test Case # f1() # { # h=$1 # (( h=h-1 )) # (( h <= 0 )) && return 0 # x=$(f1 "$h" "$l" "$g" d e "$l") || print -u2 "$g/$h: fail" # return 0 # } # l="" # g=257 # i=0 # while (( i < $g )) ; do # l="${l}x" # (( i=i+1 )) # done # f1 "$g" "$l" "$g" d e "$l" || print -u2 "$g: fail0" # print "done" # exit 0 # # Workaround # - # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # # test1: Testcase from CR #6769332 # ( cat <&1 )" || err_exit "test $i: returned non-zero exit code $?" [[ "${str}" == "OK" ]] || err_exit "test $i: expected 'OK', got '${str}'" done # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether ksh93 supports traps for the SIGTHAW # signal. # # This was reported as CR #6778077 ("*ksh93* does not understand "THAW" # as a signal for use with trap"): # -- snip -- # While ksh93 understand THAW in the list of signals for kill it does # not understand it for "trap' # # : pod5.eu TS 6 $; kill -l | egrep '(THAW|FREEZE)' # FREEZE # THAW # : pod5.eu TS 7 $; trap "echo THAW" THAW # ksh93: trap: THAW: bad trap # : pod5.eu TS 8 $; # # Using the signal number (35) works around this. # -- snip -- # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 ## test one: Check whether the shell supports SIGTHAW as trap ${SHELL} -o errexit -c 'trap "true" SIGTHAW ; true' || err_exit "SIGTHAW not supported." ${SHELL} -o errexit -c 'trap "true" THAW ; true' || err_exit "THAW not supported." ${SHELL} -o errexit -c 'trap "true" 35 ; true' || err_exit "signal 35 not supported." ## test two: Check whether the shell supports SIGFREEZE as trap ## (we check this since it is SIGTHAW's counterpart) ${SHELL} -o errexit -c 'trap "true" SIGFREEZE ; true' || err_exit "SIGFREEZE not supported." ${SHELL} -o errexit -c 'trap "true" FREEZE ; true' || err_exit "FREEZE not supported." ${SHELL} -o errexit -c 'trap "true" 34 ; true' || err_exit "signal 34 not supported." ## test three: Check all other signals listed by "kill -l" kill -l | while read i ; do str="$( ${SHELL} -c "trap true $i ; print 'ok'" 2>&1 )" || err_exit "shell returned code $? for trap $i" [[ "${str}" == "ok" ]] || err_exit "expected 'ok', got $str" done # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether arithmetric math correctly supports # negative zero values # # This was reported as CR #6789247 ("libast/ksh93 1-digit hexfloat base conversion rounds incorrectly"): # ---- snip ---- # Description # [The same issue was described in http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2008-December/006737.html] # This is basically a spin-off of http://bugs.opensolaris.org/view_bug.do?bug_id=6773712 ("1-digit hex fp # base conversion of long double rounds incorrectly"). # The bug description for Solaris libc says this: # > The first line of output from this program is correct. The second line # > is not. # > # > leviathan% cat a.c # > #include # > # > int main() # > { # > printf("%.0a\n", 1.5); # > printf("%.0La\n", 1.5L); # > return 0; # > } # > leviathan% cc -o a a.c # > leviathan% a # > 0x1p+1 # > 0x1p+0 # > leviathan% # If I compile the testcase with libast on Solaris 11/B84 SPARC (which # matches ast-open.2008-11-04) I get this: # -- snip -- # $ cc -xc99=%all -I/usr/include/ast -last a.c -o a && # ./a # 0x1p+00 # 0x1p+00 # -- snip -- # ... which seems to be incorrect per the bugs comment above and should # be: # -- snip -- # 0x1p+1 # 0x1p+1 # -- snip -- # ksh93 has the same problem: # $ ksh93 -c 'float r=1.5 ; printf "%.0a\n" r' # 0x1p+00 # Steps to Reproduce # Compile and run testcase like this: # -- snip -- # $ cc -xc99=%all -I/usr/include/ast -last a.c -o a && # ./a # -- snip -- # Expected Result # 0x1p+1 # 0x1p+1 # Actual Result # 0x1p+00 # 0x1p+00 # ---- snip ---- # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 float r float result typeset str # Test #001/a - check whether the result of a rounded 1.5 is 2.0 r=1.5 result=$(printf "%.0a\n" r) || err_exit "printf returned non-zero exit code" (( result == 2.0 )) || err_exit "result expected to be 2.0, got ${result}" # Test #001/b - same as test #001/a but uses "%.0A\n" instead of "%.0a\n" r=1.5 result=$(printf "%.0A\n" r) || err_exit "printf returned non-zero exit code" (( result == 2.0 )) || err_exit "result expected to be 2.0, got ${result}" # Test #002/a - check whether the hexfloat string value matches the expected pattern r=1.5 str=$(printf "%.0a\n" r) || err_exit "printf returned non-zero exit code" [[ "${str}" == ~(Glri)0x0*1p\+0*1 ]] || err_exit "str expected to match ~(Glri)0x0*1p\+0*1, got |${str}|" # Test #002/b - same as test #002/a but uses "%.0A\n" instead of "%.0a\n" r=1.5 str=$(printf "%.0A\n" r) || err_exit "printf returned non-zero exit code" [[ "${str}" == ~(Glri)0x0*1p\+0*1 ]] || err_exit "str expected to match ~(Glri)0x0*1p\+0*1, got |${str}|" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # Test whether CR #6800929 ("snv_106 ksh93 update breaks Install(1M)") has been fixed. # # Quote from CR #6800929: # ---- snip ---- # so i just upgraded this morning from snv_105 to snv_106. now # Install(1M) is hanging whenever i run it. i'm running it as follows: # Install -o debug -k i86xpv -T domu-219:/tmp # # and here's where it's hung: # ---8<--- # Edward Pilatowicz # $ pstack 204600 # 204600: /bin/ksh /opt/onbld/bin/Install -o debug -k i86xpv -T domu-219:/tmp # fffffd7fff2e3d1a write (1, 4154c0, 64) # fffffd7ffefdafc8 sfwr () + 2d0 # fffffd7ffefc0f6f _sfflsbuf () + 217 # fffffd7ffefcb9f7 sfsync () + 17f # fffffd7ffefc5c58 _sfphead () + 188 # fffffd7ffefc5ef5 _sfpmove () + 55 # fffffd7ffefc2595 _sfmode () + 22d # fffffd7ffefc5fb1 sfpool () + 99 # fffffd7fff15eb8e sh_exec () + 2f56 # fffffd7fff15f78c sh_exec () + 3b54 # fffffd7fff15d9c8 sh_exec () + 1d90 # fffffd7fff15788e sh_subshell () + 646 # fffffd7fff134562 comsubst () + 8a2 # fffffd7fff12f61f copyto () + bcf # fffffd7fff12df79 sh_macexpand () + 1f1 # fffffd7fff1129f5 arg_expand () + a5 # fffffd7fff112812 sh_argbuild () + 9a # fffffd7fff15dbe2 sh_exec () + 1faa # fffffd7fff15d854 sh_exec () + 1c1c # fffffd7fff0f22ef b_dot_cmd () + 507 # fffffd7fff161559 sh_funct () + 199 # fffffd7fff15ef35 sh_exec () + 32fd # fffffd7fff136e86 exfile () + 786 # fffffd7fff136676 sh_main () + 7fe # 0000000000400e72 main () + 52 # 0000000000400ccc ???? # ---8<--- # # there is only one place where Install(1M) invokes "uniq": # set -- `grep "^CONF" $modlist | sort | uniq`; # # as it turns out, i can easily reproduce this problem as follows: # ---8<--- # $ ksh93 # $ set -- `cat /etc/termcap | sort | uniq` # # ---8<--- # ---- snip ---- # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # common functions/variables function isvalidpid { kill -0 ${1} 2>/dev/null && return 0 return 1 } integer testfilesize i maxwait typeset tmpfile integer testid # test 1: run loop and check various temp filesizes tmpfile="$(mktemp -t "sun_solaris_cr_6800929_large_command_substitution_hang.${PPID}.$$.XXXXXX")" || err_exit "Cannot create temporary file." compound -a testcases=( # test 1a: Run test child for $(...) # (note the pipe chain has to end in a builtin command, an external command may not trigger the bug) ( name="test1a" cmd="builtin cat ; print -- \"\$(cat \"${tmpfile}\" | cat)\" ; true" ) # test 1b: Same as test1a but uses ${... ; } instead if $(...) ( name="test1b" cmd="builtin cat ; print -- \"\${ cat \"${tmpfile}\" | cat ; }\" ; true" ) # test 1c: Same as test1a but does not use a pipe ( name="test1c" cmd="builtin cat ; print -- \"\$(cat \"${tmpfile}\" ; true)\" ; true" ) # test 1d: Same as test1a but does not use a pipe ( name="test1d" cmd="builtin cat ; print -- \"\${ cat \"${tmpfile}\" ; true ; }\" ; true" ) # test 1e: Same as test1a but uses an external "cat" command ( name="test1e" cmd="builtin -d cat /bin/cat ; print -- \"\$(cat \"${tmpfile}\" | cat)\" ; true" ) # test 1f: Same as test1a but uses an external "cat" command ( name="test1f" cmd="builtin -d cat /bin/cat ; print -- \"\${ cat \"${tmpfile}\" | cat ; }\" ; true" ) # test 1g: Same as test1a but uses an external "cat" command ( name="test1g" cmd="builtin -d cat /bin/cat ; print -- \"\$(cat \"${tmpfile}\" ; true)\" ; true" ) # test 1h: Same as test1a but uses an external "cat" command ( name="test1h" cmd="builtin -d cat /bin/cat ; print -- \"\${ cat \"${tmpfile}\" ; true ; }\" ; true" ) ) for (( testfilesize=1*1024 ; testfilesize <= 1024*1024 ; testfilesize*=2 )) ; do # Create temp file { for (( i=0 ; i < testfilesize ; i+=64 )) ; do print "0123456789abcdef01234567890ABCDEF0123456789abcdef01234567890ABCDE" done } >"${tmpfile}" # wait up to log2(i) seconds for the child to terminate # (this is 10 seconds for 1KB and 19 seconds for 512KB) (( maxwait=log2(testfilesize) )) for testid in "${!testcases[@]}" ; do nameref currtst=testcases[testid] ${SHELL} -o errexit -c "${currtst.cmd}" >"${tmpfile}.out" & (( childpid=$! )) for (( i=0 ; i < maxwait ; i++ )) ; do isvalidpid ${childpid} || break sleep 0.25 done if isvalidpid ${childpid} ; then err_exit "${currtst.name}: child (pid=${childpid}) still busy, filesize=${testfilesize}." kill -KILL ${childpid} 2>/dev/null fi wait || err_exit "${currtst.name}: Child returned non-zero exit code." # wait for child (and/or avoid zombies/slime) # compare input/output cmp -s "${tmpfile}" "${tmpfile}.out" || err_exit "${currtst.name}: ${tmpfile} and ${tmpfile}.out differ, filesize=${testfilesize}." rm "${tmpfile}.out" done # Cleanup rm "${tmpfile}" done # test 2a: Edward Pilatowicz 's Solaris-specific testcase ${SHELL} -o errexit -c 'builtin uniq ; set -- `cat /etc/termcap | sort | uniq` ; true' >/dev/null & (( childpid=$! )) sleep 5 if isvalidpid ${childpid} ; then err_exit "test2a: child (pid=${childpid}) still busy." kill -KILL ${childpid} 2>/dev/null fi wait || err_exit "test2a: Child returned non-zero exit code." # wait for child (and/or avoid zombies/slime) # test 2b: Same as test 2a but uses ${... ; } instead of $(...) ${SHELL} -o errexit -c 'builtin uniq ; set -- ${ cat /etc/termcap | sort | uniq ; } ; true' >/dev/null & (( childpid=$! )) sleep 5 if isvalidpid ${childpid} ; then err_exit "test2b: child (pid=${childpid}) still busy." kill -KILL ${childpid} 2>/dev/null fi wait || err_exit "test2b: Child returned non-zero exit code." # wait for child (and/or avoid zombies/slime) # test 2c: Same as test 2a but makes sure that "uniq" is not a builtin ${SHELL} -o errexit -c 'builtin -d uniq /bin/uniq ; set -- `cat /etc/termcap | sort | uniq` ; true' >/dev/null & (( childpid=$! )) sleep 5 if isvalidpid ${childpid} ; then err_exit "test2c: child (pid=${childpid}) still busy." kill -KILL ${childpid} 2>/dev/null fi wait || err_exit "test2c: Child returned non-zero exit code." # wait for child (and/or avoid zombies/slime) # test 2d: Same as test 2c but uses ${... ; } instead of $(...) ${SHELL} -o errexit -c 'builtin -d uniq /bin/uniq ; set -- ${ cat /etc/termcap | sort | uniq ; } ; true' >/dev/null & (( childpid=$! )) sleep 5 if isvalidpid ${childpid} ; then err_exit "test2d: child (pid=${childpid}) still busy." kill -KILL ${childpid} 2>/dev/null fi wait || err_exit "test2d: Child returned non-zero exit code." # wait for child (and/or avoid zombies/slime) # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether "typeset -m" correctly moves local variables # into a global variable tree. # # This was reported as CR #6805792 ("XXXX"): # -------- snip -------- # The following attempt to move a local node into an associative array # fails like this: # -- snip -- # typeset -C tree # function f1 # { # nameref tr=$1 # # typeset -A tr.subtree # # typeset -C node # # node.one="hello" # node.two="world" # # # move local note into the array # typeset -m tr.subtree["a_node"]=node # # return 0 # } # f1 tree # printf "%B\n" tree # print "ok" # exit 0 # -- snip -- # The output looks like this: # -- snip -- # $ ksh93 # varmovetest1.sh # ( # ( # ) # ok # -- snip -- # ... but AFAIK it should print: # -- snip -- # ( # typeset -A subtree=( # [a_node]=( # one=hello # two=world # ) # ) # ) # ok # -- snip -- # -------- snip -------- # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 ## test start compound tree1 tree2 # add node to tree which uses "typeset -m" to move a local variable # into tree1.subtree["a_node"] function f1 { nameref tr=$1 typeset -A tr.subtree compound node node.one="dummy1" node.two="dummy2" # We use the nameref's here since ast-ksh,2008-12-12 crashes # when this function returns because "nodeone" and "nodetwo" # still reference "node" which was renamed. # (note that "f1" must be first function and the first being # called, otherwise the crash will not occur) nameref nodeone=node.one nameref nodetwo=node.two nodeone="hello" nodetwo="world" # move local note into the array typeset -m tr.subtree["a_node"]=node return 0 } # Alternative version which uses "nameref" instead of "typeset -m" function f2 { nameref tr=$1 typeset -A tr.subtree nameref node=tr.subtree["a_node"] node.one="hello" node.two="world" return 0 } f1 tree1 f2 tree2 [[ "${tree1.subtree["a_node"].one}" == "hello" ]] || err_exit "Expected tree1.subtree[\"a_node\"].one == 'hello', got ${tree1.subtree["a_node"].one}" [[ "${tree1.subtree["a_node"].two}" == "world" ]] || err_exit "Expected tree1.subtree[\"a_node\"].two == 'world', got ${tree1.subtree["a_node"].two}" [[ "${tree1}" == "${tree2}" ]] || err_exit "tree1 and tree2 differ:"$'\n'"$(diff -u <( printf '%B\n' tree1 ) <( printf '%B\n' tree2 ) )" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether arithmetric operator ' # is working # # This was reported as CR #6805794 ('[ku1] printf returns "invalid character constant" for $ printf "%d\n" "'"'): # ------------ snip ------------ # There seems be a bug in how ast-ksh.2008-11-04's "printf" builtin # handles multibyte characters. For example if I try this in the # en_US.UTF-8 locale ("" needs to be replace with the EURO symbol): # -- snip -- # $ printf "%d\n" "'" # -ksh93: printf: warning: ': invalid character constant # 226 # -- snip -- # AFAIK the correct behaviour was to return the numeric value of the # symbol in this case (hexadecimal "20ac", decimal 8364), e.g. # -- snip -- # $ printf "%d\n" # "'" # 8364 # -- snip -- # Frequency # Always # Regression # No # Steps to Reproduce # Enter this in an interractive shell: # $ printf "%d\n" "'" # Expected Result # -- snip -- # $ printf "%d\n" # "'" # 8364 # -- snip -- # Actual Result # -- snip -- # $ printf "%d\n" "'" # -ksh93: printf: warning: ': invalid character constant # 226 # -- snip -- # Error Message(s) # printf: warning: ': invalid character constant # Test Case # printf "%d\n" "'" # Workaround # None. # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # declare variables typeset str # test whether the locale uses an UTF-8 (-like) encoding and override it on demand [[ "$(printf "\u[20ac]")" == $'\342\202\254' ]] || LC_ALL=en_US.UTF-8 if [[ "$(printf "\u[20ac]")" != $'\342\202\254' ]] ; then err_exit "Local overrride failed." exit $((Errors)) fi # run test str=$(print $'printf "%d\\\\n" "\'\342\202\254"' | source /dev/stdin) [[ "${str}" == "8364" ]] || err_exit "expected 8364, got ${str}" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether arithmetric math correctly supports # negative zero values # # This was reported as CR #6805795 ("[ku1] ksh93 does not differ between -0 and +0"): # ------------ snip ------------ # Original bug report was: # ------ snip ------ # Is there a reason why ksh93 does not display the negative sign for the # value zero ? For example if I have use the C99 function "copysign" # (copies absolute value of operant a and sign of operant b) I get this # for { a=5, b=-0 }: # -- snip -- # $ ksh93 -c 'float x; (( x=copysign(5, -0) )) ; printf "%f\n" # x' # -5.000000 # -- snip -- # Now if I swap operands a and b I get this result: # -- snip -- # $ ksh93 -c 'float x; (( x=copysign(0, -5) )) ; printf "%f\n" x' # 0.000000 # -- snip -- # AFAIK this result should be "-0.000000" ... or not ? # BTW: Parsing of "-0" doesn't seem to work either, e.g. # -- snip -- # $ ksh93 -c 'float x a=-1 b=-0; (( x=copysign(a, b) )) ; printf "%f\n" # x' # 1.000000 # -- snip -- # ... while AFAIK it should be "-1.000000" since the 2nd operand of # "copysign" defines the sign of the result. # ------ snip ------ # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset str # test 1: test "copysign()" using constant values str=$( set -o errexit print -- $(( copysign(0, -5) )) ) || err_exit "test failed." [[ "${str}" == "-0" ]] || err_exit "Expected copysign(0, -5) == -0, got ${str}" # test 2: Same as test 1 but using variables for the values str=$( set -o errexit float a float b float c a=0. b=-5. (( c=copysign(a, b) )) print -- "$c" ) || err_exit "test failed." [[ "${str}" == "-0" ]] || err_exit "Expected c == -0, got ${str}" # test 3: test "signbit()" str=$( set -o errexit float a a=-0. print -- $(( signbit(a) )) ) || err_exit "test failed." [[ "${str}" == "1" ]] || err_exit "Expected signbit(a, b) == 1, got ${str}" # test 4: test "signbit()" str=$( set -o errexit float a float c a=-0. (( c=signbit(a) )) print -- "$c" ) || err_exit "test failed." [[ "${str}" == "1" ]] || err_exit "Expected c == 1, got ${str}" # test 5: test whether "typeset -X" (C99 "hexfloat") correctly recognizes # negative zero assigned from a "float" str=$( set -o errexit float a # float typeset -X c # hexfloat a=-0. # copy value from "float" to "hexfloat" (( c=a )) print -- "$c" ) || err_exit "test failed." [[ "${str}" == -0x* ]] || err_exit "Expected c == -0x*, got ${str}" # test 6: Reverse of test 5: Test whether "float" correctly recognizes # a C99 "hexfloat" value str=$( set -o errexit typeset -X a # hexfloat float c # float a=-0x0.0000000000000000000000000000p+00 # copy value from "hexfloat" to "float" (( c=a )) print -- "$c" ) || err_exit "test failed." [[ "${str}" == "-0" ]] || err_exit "Expected c == -0, got ${str}" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether ksh93 does unneccesaty |libc::getpwnam()| # calls for "~(modifer)pattern"-style shell patterns # # This was reported as CR #6807179 ("ksh93 does unneccesary |libc::getpwnam()| lookups for ~(modifier) pattern patterns"): # ------------ snip ------------ # ksh93 does unneccesary |libc::getpwnam()| lookups for # ~(modifer)pattern patterns, e.g. [[ $foo == ~(E)hello.*world ]]. # The problem is that the shell ~(modifer)pattern is an extended # pattern syntax which allows to specify a "modifer" to change # the behaviour for "pattern". However the '~' at the beginning # of this string is causing a tilde expansion (or better: It's # filling an internal buffer as preparation for tilde expansion # and this code calls |libc::getpwnam()|) which shouldn't be # done in this case. # [1]=For example the "modifer" allows to specifcy "perl", # "fgrep", "grep", "egrep", "POSIX shell", "korn shell" and # other types of pattern matching systems (or select stuff # like archors, case-insensitive matching etc. etc.). # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset tmpfile tmpfile="$(mktemp -t "sun_solaris_cr_6807179_shellpattern_uses_getpwnam.${PPID}.$$.XXXXXX")" || err_exit "Cannot create temporary file." rm -f "${tmpfile}" # test 1: Check if the shell uses |libc::getpwnam()| for pattern "~(Elr)wo.*ld" truss -u :: -o "${tmpfile}" ${SHELL} -c '[[ ${hello} == ~(Elr)wo.*ld ]] ; true' || err_exit "truss returned failure=$?" [[ "$( < "${tmpfile}")" != *getpwnam* ]] || err_exit "truss log reports the use of getpwnam() for pattern ~(Elr)wo.*ld" rm "${tmpfile}" || err_exit "rm ${tmpfile} failed." # test 2: Check if the shell uses |libc::getpwnam()| for pattern "~(Si)wo*ld" truss -u :: -o "${tmpfile}" ${SHELL} -c '[[ ${hello} == ~(Si)wo*ld ]] ; true' || err_exit "truss returned failure=$?" [[ "$( < "${tmpfile}")" != *getpwnam* ]] || err_exit "truss log reports the use of getpwnam() for pattern ~(Si)wo*ld" rm "${tmpfile}" || err_exit "rm ${tmpfile} failed." # test 3: Same as test 1 but uses ~root/ as pattern which will force the use of |libc::getpwnam()| getent passwd root >/dev/null || err_exit "getent passwd root failed" # safeguard to make sure we get a warning if user root is missing truss -u :: -o "${tmpfile}" ${SHELL} -c '[[ ${hello} == ~root/ ]] ; true' || err_exit "truss returned failure=$?" [[ "$( < "${tmpfile}" )" == *getpwnam* ]] || err_exit "truss log reports the use of getpwnam() for pattern ~root/" rm "${tmpfile}" || err_exit "rm ${tmpfile} failed." # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether ksh93's builtin "cat" command properly # supports the "-n" option. # # This was reported as CR #6835835 ('ksh93 "cat" builtin does not handle "-n" correctly'): # ------------ snip ------------ # [Originally reported in # http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/007050.html # by Casper Dik] # -- snip -- # I just noticed this in ksh93: # ksh93 -c 'yes "" | head -5|cat -n' # 1 # 2 # 3 # 4 # (I used this for older shells when I want to a list of all integers from 1 # to a particular number) # -- snip -- # Frequency # Always # Regression # No # Steps to Reproduce # Execute $ ksh93 -c 'yes "" | head -5|cat -n' # # Expected Result # 1 # 2 # 3 # 4 # 5 # Actual Result # # # 1 # 2 # # 3 # # 4 # Error Message(s) # None. # Test Case # See description. # Workaround # Disable ksh93's builtin "cat" command either via using an absolute path # to the "cat" command (POSIX-style workaround) or using ksh93's # "builtin" command to remove "cat" from the list of builtin # commands (e.g. $ builtin -d /bin/cat /bin/cat #). # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # # test 1: Compare output of various "cat -n" combinations # integer i typeset expected_output typeset out expected_output=$( ${SHELL} -c 'for ((i=1 ; i <= 12 ; i++ )) ; do printf "%6d\t\n" i ; done' ) compound -a testcases=( # note: we have to add an extra /bin/cat at the end of the pipe to make # sure the "cat" builtin uses the correct buffering mode to trigger # the error and a "true" to make sure the "cat" command isn't the last command # of the shell ( name="test1a" cmd='integer i ; builtin cat ; for ((i=1 ; i <= 12 ; i++ )) ; do print ; done | cat -n | /bin/cat ; true' ) # same as "test1a" but uses external "cat" command ( name="test1b" cmd='integer i ; for ((i=1 ; i <= 12 ; i++ )) ; do print ; done | /bin/cat -n | /bin/cat ; true' ) # same as "test1a" but without the last /bin/cat in the pipe ( name="test1c" cmd='integer i ; builtin cat ; for ((i=1 ; i <= 12 ; i++ )) ; do print ; done | cat -n ; true' ) # same as "test1b" but without the last /bin/cat in the pipe ( name="test1d" cmd='integer i ; for ((i=1 ; i <= 12 ; i++ )) ; do print ; done | /bin/cat -n ; true' ) ) for testid in "${!testcases[@]}" ; do nameref tc=testcases[${testid}] out="$( ${SHELL} -o errexit -c "${tc.cmd}" )" || err_exit "${tc.name}: Shell failed" [[ "${expected_output}" == "${out}" ]] || err_exit "${tc.name}: Builtin output does not match expected output" out="$( ${SHELL} +o errexit -c "${tc.cmd}" )" || err_exit "${tc.name}: Shell failed" [[ "${expected_output}" == "${out}" ]] || err_exit "${tc.name}: Builtin output does not match expected output" done # # test 2: Casper Dik's original testcase # from http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/007050.html # cmp -s \ <( ${SHELL} -c 'yes "" | head -5 | cat -n' ) \ <( for ((i=1 ; i <= 5 ; i++ )) ; do printf "%6d\t\n" i ; done ) \ || err_exit 'yes "" | head -5 | cat -n does not match expected output.' # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether ksh93 does not execute builtin command # "foo" when referencing variable "foo" when the variable is not # set (this applies to all builtin commands not bound to a # specific PATH element, e.g. "test", "sleep", "print" etc.). # # This was reported as CR #6848486 ('"echo ${test}" with test # undefined crashes the shell') # ------------ snip ------------ # This is an odd one: # # $ ksh93 --version # version sh (AT&T Research) 93t 2008-11-04 # $ ksh93 # jl138328@gir:~$ echo $test # # jl138328@gir:~$ echo ${test} # Segmentation Fault (core dumped) # ------------ snip ------------ # # The bug originates from the ksh93 "type system" which allows # an application to define it's own types in ksh93. In such cases # the output of function "mytype.len" is used when type "mytype" # has no member variable "len" (note it requires the use of # ${foo} since the use of $foo does not allow "foo" to contain # a dot in the variable name). # The implementation in ast-ksh.2009-11-04 however does this # for _all_ types of variables and not only for those which # are a member of an application-defined type, therefore # causing this bug. # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # Test 1: Test whether the shell crashes when looking for an empty # "shell" variable. # (note: return code 78 was just picked randomly) $SHELL -c 'unset test ; print ${test} ; exit 78' >/dev/null 2>&1 (( $? == 78 )) || err_exit "expected return code is 78, got $?" # Test 2: Test whether the shell can reach a point (which prints # "#mark") after the use of ${test} in the script. out=$($SHELL -o errexit -c 'unset test ; print ${test} ; print "#mark"' 2>&1 ) || err_exit "Shell returned error code $?, expected 0." [[ "$out" == $'\n#mark' ]] || err_exit "Expected output \$'\n#mark', got '${out}'" # Test 3: Check whether the use of ${sleep} returns nothing # (ast-ksh.2008-11-04 will return the usage string of the sleep # builtin) out=$($SHELL -o errexit -c 'print ${sleep} ; print "#mark"' 2>&1 ) || err_exit "Shell returned error code $?, expected 0." [[ "$out" == $'\n#mark' ]] || err_exit "Expected output \$'\n#mark', got '${out}'" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether arithmetric math correctly # converts a IEEE 754-2008 floating-point value to the C99 hexfloat format # and back _without_ using digits. # # This was reported as CR #6855875 ("typeset -X x ; print $x # does not # print sufficient digits to restore value"): # ------------ snip ------------ # $ typeset -X varname # was added to ksh93 to get a reliable way # (using the C99 "hexfloat" format (see printf(3c)'s "%a" format)) to # serialise a IEEE754-2008 floating-point value to a string and later feed # it back into a application _without_ loosing any precision (normal # base10 floating-point values (e.g. used by $ typeset -E/-F-G #) cause # rounding errors since IEEE754-2008 |long double| uses base2). # However $ typeset -l -X x ; ... ; print $x # currently does not print # sufficient number of digits to restore the full |long double| value as # expected, instead some digits are missing, resulting in an unwanted # rounding. # Example: # -- snip -- # $ ksh93 -c 'typeset -l -X y y_ascii; (( y=sin(90) )) ; y_ascii=$y ; (( y # == y_ascii )) || print "no match,\n\t$(printf "%a\n" y)\n!=\n\t$(printf # "%a\n" y_ascii)"' # no match, # 0x1.c9b9ee41cb8665c7890a136ace6bp-01 # != # 0x1.c9b9ee41cc000000000000000000p-01 # -- snip -- # Frequency # Always # Regression # No # Steps to Reproduce # [See description] # Expected Result # [See description] # Actual Result # [See description] # Error Message(s) # - # Test Case # typeset -l -X y y_ascii # (( y=sin(90) )) # y_ascii=$y # convert y to string and store it in "y_ascii" # if (( y == y_ascii )) ; then # print "no match,\n\t$(printf "%a\n" y)\n!=\n\t$(printf "%a\n" # y_ascii)" # fi # Workaround # 1. Manually increase the number of digits via typeset # -X # OR # 2. Use $ printf "%a" varname # # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # declare variables typeset str integer i float x float -a test_values typeset -l -X y # hexfloat typeset -l -E y_restored1 typeset -l -F y_restored2 typeset -l -X y_restored3 # create array of test values for (( x=-181. ; x < 361. ; x+=.1 )) ; do test_values+=( x ) done test_values+=( 0 -0 +0 ) # (nan -nan inf -inf) are excluded since nan!=nan is always "true" # run the tests for (( i=0 ; i < ${#test_values[@]} ; i++ )) ; do (( y=sin(test_values[i]) )) # convert floating-point value to string (using the hexfloat format) and store it in "str" str="${y}" # convert it back (via string assignment) y_restored1="${str}" y_restored2="${str}" y_restored3="${str}" (( y == y_restored1 )) || err_exit "no match,"$'\n\t'"$(printf "%a\n" y)"$'\n'"!="$'\n\t'"$(printf "%a\n" y_restored1)" (( y == y_restored2 )) || err_exit "no match,"$'\n\t'"$(printf "%a\n" y)"$'\n'"!="$'\n\t'"$(printf "%a\n" y_restored2)" (( y == y_restored3 )) || err_exit "no match,"$'\n\t'"$(printf "%a\n" y)"$'\n'"!="$'\n\t'"$(printf "%a\n" y_restored3)" # convert it back (using arithmetric expression) (( y_restored1=str )) (( y_restored2=str )) (( y_restored3=str )) (( y == y_restored1 )) || err_exit "no match,"$'\n\t'"$(printf "%a\n" y)"$'\n'"!="$'\n\t'"$(printf "%a\n" y_restored1)" (( y == y_restored2 )) || err_exit "no match,"$'\n\t'"$(printf "%a\n" y)"$'\n'"!="$'\n\t'"$(printf "%a\n" y_restored2)" (( y == y_restored3 )) || err_exit "no match,"$'\n\t'"$(printf "%a\n" y)"$'\n'"!="$'\n\t'"$(printf "%a\n" y_restored3)" # we exit if we get more than 8 errors (126 would be the maximum) (( Errors > 8 )) && exit $((Errors)) done # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether the Solaris kernel can directly execute compiled # shell code. # # This was reported as CR #6862121 ("shbinexec kernel module defunct"): # ------------ snip ------------ # [Originally reported by Sun Japan] # The new shbinexec kernel module added in B106 is defunct, originally # caused by my mismerge of the original development tree and later # because the matching test module didn't test it correctly (April # quickly discovered the problem but the issue drowned in the cleanup # putbacks ). # Frequency # Always # Regression # No # Steps to Reproduce # $ cat test1.sh # print hello # printf "args=%s\n" "$@" # $ shcomp test1.sh test1 # # note: this MUST be bash since ksh93 has special support for compiled shell # # scripts which causes the kernel module to be bypassed (that's why the tes # # never worked) # $ bash -c './test1 "a b" "c" "d"' # Expected Result # hello # args=a a1 # args=b # args=c # Actual Result # ./test1: line 1: a: not found # Error Message(s) # ./test1: line 1: a: not found # Test Case # See above. # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset ocwd typeset tmpdir typeset out # create temporary test directory ocwd="$PWD" tmpdir="$(mktemp -t -d "test_sun_solaris_cr_6862121_shbinexec_kernel_module_defunct.XXXXXXXX")" || err_exit "Cannot create temporary directory" cd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } # run tests { cat <script1.sh # Compile script (note we use the platform's /usr/bin/shcomp, _not_ ${SHCOMP}) /usr/bin/shcomp "script1.sh" "script1" || err_exit "shcomp failed with error=$?" [[ -x "./script1" ]] || err_exit "Script script1 not executable" out="$(/usr/bin/bash -c './script1 a b "c d"' 2>&1 )" || err_exit "Compiled script failed to execute, error=$?" [[ "${out}" == $'hello\nargs=a\nargs=b\nargs=c d' ]] || err_exit "Expected xxx, got $(printf "%q\n" "$out")" # cleanup rm "script1" "script1.sh" cd "${ocwd}" rmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether a background process called in a subshell can # cause it to wait for the child process instead of exiting. # # This was reported as CR #6881017 ("Subshell doesn't exit, holds pipe # open preventing callers from exiting"): # ------------ snip ------------ # The following scenario hangs with snv_122, 100% reproducible: # # Create a script hangit: # ----- # #!/bin/ksh # ( sleep 100000 /dev/null 2>&1 & ) # exit 0 # ----- # # Run the following command: # hangit | tee -a /tmp/log # # The hang can be eliminated either by removing the "exit 0" line (?!?), or by # redirecting the subshell output to /dev/null. # # This is pretty nasty. I've whittled it down to this simple case but am seeing # it in a much more subtle and complex environment where there are several # intermediate calling scripts which have exited and eventually the parent pipes # the output and hangs on the open pipe. It was hard to track down. # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 float tstart tstop tdiff # run test with 10 second timeout (( tstart=SECONDS )) $SHELL -c '( sleep 10 /dev/null 2>&1 & ) ; exit 0' | cat >/dev/null (( tstop=SECONDS )) # we remove two seconds below to make sure we don't run into issues # with smaller xntpd adjustments (( tdiff=tstop-tstart )) (( tdiff < (10.-2.) )) || err_exit "test run needed ${tdiff} seconds to complete (instead of < 8.)" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether the return code of a child process # is reported properly. # # This was reported as CR #6887363 ("Korn shell 93 sometimes # mishandles return value of its child process"): # ------------ snip ------------ # Following construction sometimes ends with wrong return value. # # 56 echo $op | grep rand 2>&1 >/dev/null # 57 if [ $? = 0 ]; then # 58 randseq="rand${SEED}" # 59 else # 60 randseq="seq" # 61 fi # # Sometimes, the given result is "rand..." even when there is # no "rand" word in $op. This can be demonstrated with # TSufs/SnapShots/Func test case which excercises shown code # quite often. # # As it happens only sometimes, I suppose there is an # race-condition in handling return value from a child process. # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset ocwd typeset tmpdir typeset out # create temporary test directory ocwd="$PWD" tmpdir="$(mktemp -t -d "test_sun_solaris_cr_6887363_shell_sometimes_mishandles_return_value_of_its_child_process.XXXXXXXX")" || err_exit "Cannot create temporary directory" cd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } # run tests # print test case from bug that ksh93 can read this script via stdin function cat_test { cat <&1 >/dev/null status=\$? if [ \$status = 0 ]; then randseq="rand" phrase="read-rand" else randseq="seq" phrase="read-seq" fi retcode=\$status echo \$op | /bin/grep sync 2>&1 >/dev/null status=\$? if [ \$status = 0 ]; then syncasync="sync" phrase="sync\$phrase" else syncasync="async" fi retcode=\${status}-\${retcode} if [ "\$op" != "\$phrase" ]; then echo "Bad mode: \$op != \$phrase (\$retcode)" exit 2 fi for sz in 1 2 3 4; do for type in 1 2 3 4; do PASS "Something" doblockstamper & done wait # Let a few finish done done wait # Make sure everyone got done PASS "lotsafiles \$1 \$fill" } cycle=0 while [ cycle -lt 24 ]; do cycle=\`/bin/expr \$cycle + 1\` lotsaFiles write lotsaFiles write lotsaFiles write lotsaFiles read lotsaFiles read lotsaFiles read PASS "Cycle" done exit 0 EOF } # FIXME: we reset the VMALLOC_OPTIONS (and the depreciated VMDEBUG (for now)) variable for the run to avoid # that the test may run for hours. This may require re-investigation why this happens. out="$(unset VMALLOC_OPTIONS VMDEBUG ; cat_test | ${SHELL} 2>&1)" || err_exit "Unexpected exit code $?" [[ "${out}" != "" ]] || err_exit "No output from test" # filter output and check it out2="$(/bin/egrep -v '^((read-seq|read-rand|syncread-seq|syncread-seq)[[:space:][:blank:]]*)*$' <<<"${out}")" [[ "${out2}" == "" ]] || err_exit "Unexpected output '${out2}'" cd "${ocwd}" rmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether "wc" builtin counts the number of bytes # and multibyte characters in different locales correctly. # # This was reported as CR #6904557 ("wc no longer counts number of # bytes correctly"): # ------------ snip ------------ # wc no longer count bytes. # # $ echo $LANG # en_US.UTF-8 # $ ls -l mb.utf8 # -rw-r--r-- 1 nakanon staff 7 Nov 2 14:06 mb.utf8 # $ wc mb.utf8 # 1 1 4 mb.utf8 # $ # # mb.utf8 is attached. # # Man page says: # # If no option is specified, the default is -lwc (counts # lines, words, and bytes.) # # SUS says: # http://www.opengroup.org/onlinepubs/000095399/utilities/wc.html # # By default, the standard output shall contain an entry for each # input file of the form: # # "%d %d %d %s\n", , , , # # If the -m option is specified, the number of characters shall # replace the field in this format. # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset ocwd typeset tmpdir typeset out # create temporary test directory ocwd="$PWD" tmpdir="$(mktemp -t -d "test_sun_solaris_cr_6904557_wc_no_longer_counts_number_of_bytes_correctly.XXXXXXXX")" || err_exit "Cannot create temporary directory" cd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } # run tests function test1 { typeset wc_cmd="$1" typeset testid typeset out typeset testname compound saved_locale # save locale information [[ -v LC_ALL ]] && saved_locale.LC_ALL="${LC_ALL}" [[ -v LC_CTYPE ]] && saved_locale.LC_CTYPE="${LC_CTYPE}" [[ -v LANG ]] && saved_locale.LANG="${LANG}" compound -r -a testcases=( ( typeset name="unicode_plain" typeset locale="" typeset input_format='\xc3\xa1\xc3\xa2\xc3\xa3\x0a' typeset output_pattern='~(Elr)[[:space:][:blank:]]*1[[:space:][:blank:]]*1[[:space:][:blank:]]*7' typeset -a wc_args=( ) ) ( typeset name="unicode_clw" typeset locale="" typeset input_format='\xc3\xa1\xc3\xa2\xc3\xa3\x0a' typeset output_pattern='~(Elr)[[:space:][:blank:]]*1[[:space:][:blank:]]*1[[:space:][:blank:]]*7' typeset -a wc_args=( "-c" "-l" "-w" ) ) ( typeset name="unicode_widechars_lines_words" typeset locale="" typeset input_format='\xc3\xa1\xc3\xa2\xc3\xa3\x0a' typeset output_pattern='~(Elr)[[:space:][:blank:]]*1[[:space:][:blank:]]*1[[:space:][:blank:]]*4' typeset -a wc_args=( "-C" "-l" "-w" ) ) ( typeset name="ja_JP.eucJP_plain" typeset locale="ja_JP.eucJP" typeset input_format='\x74\x32\xa1\xf7\x66\x31\x0a' typeset output_pattern='~(Elr)[[:space:][:blank:]]*1[[:space:][:blank:]]*1[[:space:][:blank:]]*7' typeset -a wc_args=( ) ) ( typeset name="ja_JP.eucJP_widechars_lines_words" typeset locale="ja_JP.eucJP" typeset input_format='\x74\x32\xa1\xf7\x66\x31\x0a' typeset output_pattern='~(Elr)[[:space:][:blank:]]*1[[:space:][:blank:]]*1[[:space:][:blank:]]*6' typeset -a wc_args=( "-C" "-l" "-w" ) ) ) for testid in "${!testcases[@]}" ; do nameref tc=testcases[${testid}] testname="${wc_cmd}/${tc.name}" if [[ "${tc.locale}" == "" ]] ; then if [[ "$LC_ALL" != *.UTF-8 ]] ; then export LC_ALL='en_US.UTF-8' fi else export LC_ALL="${tc.locale}" fi out="$(printf "${tc.input_format}" | ${SHELL} -c "${wc_cmd} \"\$@\"" dummy "${tc.wc_args[@]}" 2>&1)" || err_exit "${testname}: Command returned exit code $?" [[ "${out}" == ${tc.output_pattern} ]] || err_exit "${testname}: Expected match for $(printf "%q\n" "${tc.output_pattern}"), got $(printf "%q\n" "${out}")" # restore locale settings [[ -v saved_locale.LC_ALL ]] && LC_ALL="${saved_locale.LC_ALL}" || unset LC_ALL [[ -v saved_locale.LC_CTYPE ]] && LC_CTYPE="${saved_locale.LC_CTYPE}" || unset LC_CTYPE [[ -v saved_locale.LANG ]] && LANG="${saved_locale.LANG}" || unset LANG done return 0 } #for cmd in "wc" "/usr/bin/wc" ; do for cmd in "wc" ; do test1 "${cmd}" done cd "${ocwd}" rmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether the AST "cut" utility's "-d" option # works with multibyte characters # # This was reported as CR #6904575 ("cut -d with multibyte character no longer works"): # ------------ snip ------------ # cut -d with multibyte char no longer work correctly. # # $ echo $LANG # ja # $ od -tx1 mb.eucjp # 0000000 a4 a2 a4 a4 a4 a4 a4 a6 a4 a8 0a # 0000013 # $ od -tx1 delim # 0000000 a4 a4 0a # 0000003 # $ wc -m mb.eucjp # 6 mb.eucjp # # It has 5 characters (2byte each). # # $ /usr/bin/cut -d `cat delim` -f1 mb.eucjp | od -tx1 # 0000000 0a # 0000001 # # correct output is # # 0000000 a4 a2 0a # 0000003 # # files are attached. # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset ocwd typeset tmpdir typeset out # create temporary test directory ocwd="$PWD" tmpdir="$(mktemp -t -d "test_sun_solaris_cr_6904575_cut_-d_with_multibyte_character_no_longer_works.XXXXXXXX")" || err_exit "Cannot create temporary directory" cd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } # run tests function test1 { typeset cut_cmd="$1" typeset testid typeset out typeset testname compound saved_locale # save locale information [[ -v LC_ALL ]] && saved_locale.LC_ALL="${LC_ALL}" [[ -v LC_CTYPE ]] && saved_locale.LC_CTYPE="${LC_CTYPE}" [[ -v LANG ]] && saved_locale.LANG="${LANG}" compound -r -a testcases=( ( typeset name="ascii_plain" typeset locale="C" typeset input_format='abcdefg' typeset -a cut_args_format=( "-f1" "-d" "e" ) typeset output_format='abcd' ) ( typeset name="unicode_plain" typeset locale="" typeset input_format='abcd\u[20ac]fg' typeset -a cut_args_format=( '-f1' '-d' '\u[20ac]' ) typeset output_format='abcd' ) ( typeset name="unicode_plain2" typeset locale="" typeset input_format='abcd\u[20ac]fg' typeset -a cut_args_format=( '-f1' '-d' 'f' ) typeset output_format='abcd\u[20ac]' ) ) for testid in "${!testcases[@]}" ; do nameref tc=testcases[${testid}] testname="${cut_cmd}/${tc.name}" if [[ "${tc.locale}" == "" ]] ; then if [[ ! -v LC_ALL || $LC_ALL != .*.UTF-8 ]]; then export LC_ALL='en_US.UTF-8' fi else export LC_ALL="${tc.locale}" fi # build "cut_args" array with multibyte characters in the current locale typeset -a cut_args integer arg_index for arg_index in "${!tc.cut_args_format[@]}" ; do cut_args+=( "$( printf -- "${tc.cut_args_format[arg_index]}" )" ) done typeset output_format="$( printf -- "${tc.output_format}" )" #printf "args=|%q|\n" "${cut_args[@]}" out="$(printf "${tc.input_format}" | ${SHELL} -c "${cut_cmd} \"\$@\"" dummy "${cut_args[@]}" 2>&1)" || err_exit "${testname}: Command returned exit code $?" [[ "${out}" == ${output_format} ]] || err_exit "${testname}: Expected match for $(printf "%q\n" "${output_format}"), got $(printf "%q\n" "${out}")" # cleanup and restore locale settings unset cut_args arg_index [[ -v saved_locale.LC_ALL ]] && LC_ALL="${saved_locale.LC_ALL}" || unset LC_ALL [[ -v saved_locale.LC_CTYPE ]] && LC_CTYPE="${saved_locale.LC_CTYPE}" || unset LC_CTYPE [[ -v saved_locale.LANG ]] && LANG="${saved_locale.LANG}" || unset LANG done return 0 } function test2 { typeset cutcmd=$1 typeset testname="${cutcmd}" typeset out # create files printf "\xa4\xa2\xa4\xa4\xa4\xa4\xa4\xa6\xa4\xa8\x0a" >"mb.eucjp" printf "\xa4\xa4\x0a" >"delim" # run test out=$( LC_ALL=ja_JP.eucJP ${SHELL} -o pipefail -o errexit -c '$1 -d $(cat delim) -f1 "mb.eucjp" | od -tx1' dummy "${cutcmd}" 2>&1 ) || err_exit "${testname}: Test failed with exit code $?" [[ "${out}" == $'0000000 a4 a2 0a\n0000003' ]] || err_exit "${testname}: Expected \$'0000000 a4 a2 0a\n0000003', got $(printf "%q\n" "${out}")" # cleanup rm "mb.eucjp" "delim" return 0 } #for cmd in "/usr/bin/cut" "cut" ; do for cmd in "cut" ; do test1 "${cmd}" test2 "${cmd}" done cd "${ocwd}" rmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether the AST "join" utility works with # multibyte characters as seperator. # # This was reported as CR #6904878 ("join -t no longer works with multibyte char separator"): # ------------ snip ------------ # join doesn't handle multibyte separator correctly. # # $ echo $LANG # ja # $ od -tx1 input1 # 0000000 66 31 a1 f7 66 32 0a # 0000007 # $ od -tx1 input2 # 0000000 74 32 a1 f7 66 31 0a # 0000007 # # 0xa1 0xf7 in the file is multibyte character. # $ od -tx1 delim # 0000000 a1 f7 0a # 0000003 # # $ /usr/bin/join -j1 1 -j2 2 -o 1.1 -t `cat delim` input1 input2 # $ # # It should output "f1". # # files are attached. # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset ocwd typeset tmpdir typeset out # create temporary test directory ocwd="$PWD" tmpdir="$(mktemp -t -d "test_sun_solaris_cr_6904878_join_-t_no_longer_works_with_multibyte_char_separator.XXXXXXXX")" || err_exit "Cannot create temporary directory" cd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } # run tests function test1 { typeset join_cmd="$1" typeset testid typeset out typeset testname compound saved_locale # save locale information [[ -v LC_ALL ]] && saved_locale.LC_ALL="${LC_ALL}" [[ -v LC_CTYPE ]] && saved_locale.LC_CTYPE="${LC_CTYPE}" [[ -v LANG ]] && saved_locale.LANG="${LANG}" compound -r -a testcases=( ( typeset name="ascii_simple" typeset locale="C" typeset input1_format="fish 81 91\n" typeset input2_format="fish B A\n" typeset -a join_args_format=( "input1" "input2" ) typeset output_format="fish 81 91 B A" ) ( typeset name="ja_JP.eucJP_multibyte_delimiter" typeset locale="ja_JP.eucJP" typeset input1_format="\x66\x31\xa1\xf7\x66\x32\x0a" typeset input2_format="\x74\x32\xa1\xf7\x66\x31\x0a" typeset -a join_args_format=( "-j1" "1" "-j2" "2" "-o" "1.1" "-t" "\xa1\xf7" "input1" "input2" ) typeset output_format="f1" ) ) for testid in "${!testcases[@]}" ; do nameref tc=testcases[${testid}] testname="${join_cmd}/${tc.name}" if [[ "${tc.locale}" == "" ]] ; then if [[ "$LC_ALL" != *.UTF-8 ]] ; then export LC_ALL='en_US.UTF-8' fi else export LC_ALL="${tc.locale}" fi # build "join_args" array with multibyte characters in the current locale typeset -a join_args integer arg_index for arg_index in "${!tc.join_args_format[@]}" ; do join_args+=( "$( printf -- "${tc.join_args_format[arg_index]}" )" ) done typeset output_format="$( printf -- "${tc.output_format}" )" #printf "args=|%q|\n" "${join_args[@]}" printf "${tc.input1_format}" >"input1" printf "${tc.input2_format}" >"input2" out="$(${SHELL} -c "${join_cmd} \"\$@\"" dummy "${join_args[@]}" 2>&1)" || err_exit "${testname}: Command returned exit code $?" [[ "${out}" == ${output_format} ]] || err_exit "${testname}: Expected match for $(printf "%q\n" "${output_format}"), got $(printf "%q\n" "${out}")" rm "input1" "input2" # cleanup and restore locale settings unset join_args arg_index [[ -v saved_locale.LC_ALL ]] && LC_ALL="${saved_locale.LC_ALL}" || unset LC_ALL [[ -v saved_locale.LC_CTYPE ]] && LC_CTYPE="${saved_locale.LC_CTYPE}" || unset LC_CTYPE [[ -v saved_locale.LANG ]] && LANG="${saved_locale.LANG}" || unset LANG done return 0 } function test2 { typeset joincmd=$1 typeset testname="${joincmd}" typeset out # create files printf "\x66\x31\xa1\xf7\x66\x32\x0a" >"input1" printf "\x74\x32\xa1\xf7\x66\x31\x0a" >"input2" printf "\xa1\xf7\x0a" >"delim" # run test out=$( LC_ALL=ja_JP.eucJP ${SHELL} -o pipefail -o errexit -c '$1 -j1 1 -j2 2 -o 1.1 -t $(cat delim) input1 input2' dummy "${joincmd}" 2>&1 ) || err_exit "${testname}: Test failed with exit code $?" [[ "${out}" == 'f1' ]] || err_exit "${testname}: Expected 'f1', got $(printf "%q\n" "${out}")" # cleanup rm "input1" "input2" "delim" return 0 } #for cmd in "/usr/bin/join" "join" ; do for cmd in "join" ; do test1 "${cmd}" test2 "${cmd}" done cd "${ocwd}" rmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # # This test checks whether the EXIT trap is called correctly in subshells # # This was reported as CR #6907460 ("EXIT trap handlers are sometimes executed twice"): # ------------ snip ------------ # During SST testing of snv_128(RE) we found out that ksh93 executes EXIT # trap handlers twice under some circumstances. # # Here is a test script: # --- # #!/bin/ksh93 -x # # function A # { # set -x # trap "print TRAP A >>log" EXIT # print >&2 # } # # function B # { # set -x # trap "print TRAP B >>log" EXIT # A # } # # rm -f log # x=$(B) # --- # # It produces the following output on snv_128: # --- # + rm -f log # + B # + trap 'print TRAP B >>log' EXIT # + A # + trap 'print TRAP A >>log' EXIT # + print # + + print TRAP A # 1>& 2 # + 1>> log # + print TRAP B # # + 1>> log # + print TRAP A # + 1>> log # + print TRAP B # + 1>> log # + x='' # --- # # The log file then contains: # TRAP A # TRAP B # TRAP A # TRAP B # # However, the expected log would be: # TRAP A # TRAP B # # When the "x=$(B)" line is changed to "B", the log is correct: # TRAP A # TRAP B # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset ocwd typeset tmpdir typeset out # create temporary test directory ocwd="$PWD" tmpdir="$(mktemp -t -d "test_sun_solaris_cr_6907460_EXIT_trap_handlers_are_sometimes_executed_twice.XXXXXXXX")" || err_exit "Cannot create temporary directory" cd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } # run tests # test 1: Run test with some variations compound vari typeset testname for vari.shell_options in \ "" \ "-o xtrace" \ "-o errexit" \ "-o errexit -o xtrace" ; do for vari.xtrace1 in \ "" \ "set -x" ; do for vari.xtrace2 in \ "" \ "set -x" ; do for vari.func_A_end in \ "" \ "print >&2" \ "return 0" \ "print >&2 ; return 0" ; do for vari.subshell in \ $'x=$(B)' \ $'x=$( ( B ) )' \ $'x=${ B ; }' \ $'x=${ ( B ) ; }' \ $'( x=$(B) )' \ $'( x=$( ( B ) ) )' \ $'( x=${ B ; } )' \ $'( x=${ ( B ) ; } )' ; do testname="$( printf "test |%#B|\n" vari )" cat >"testscript.sh" <>log" EXIT ${vari.func_A_end} } function B { ${vari.xtrace2} trap "print TRAP B >>log" EXIT A } rm -f log ${vari.subshell} EOF ${SHELL} ${vari.shell_options} "testscript.sh" >/dev/null 2>&1 || err_exit "${testname}: Unexpected error code $?" rm "testscript.sh" if [[ -f "log" ]] ; then out="$( < log )" rm "log" else err_exit "${testname}: File 'log' not found." fi [[ "${out}" == $'TRAP A\nTRAP B' ]] || err_exit "${testname}: Expected \$'TRAP A\nTRAP B', got $(printf "%q\n" "${out}")" done done done done done # test 2: This is the unmodified test from the bugster bug report ( cat <>log" EXIT print >&2 } function B { set -x trap "print TRAP B >>log" EXIT A } rm -f log x=\$(B) EOF ) | ${SHELL} >/dev/null 2>&1 || err_exit "Unexpected error code $?" if [[ -f "log" ]] ; then out="$( < log )" rm "log" else err_exit "File 'log' not found." fi [[ "${out}" == $'TRAP A\nTRAP B' ]] || err_exit "Expected \$'TRAP A\nTRAP B', got $(printf "%q\n" "${out}")" cd "${ocwd}" rmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # # # # # This was reported as CR #xxxxxxxx (""): # ------------ snip ------------ # <description> # ------------ snip ------------ # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset ocwd typeset tmpdir typeset out # create temporary test directory ocwd="$PWD" tmpdir="$(mktemp -t -d "test_<description>.XXXXXXXX")" || err_exit "Cannot create temporary directory" cd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } # run tests cd "${ocwd}" rmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # # # sun_solaris_getconf.sh - test the ksh93 getconf builtin for compatibility # with /usr/bin/getconf # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # setup integer mismatch # counts mismatches between builtin and external command integer getconf_keys # counts tests (paranoid check to make sure the test loop works) export PATH=/usr/bin:/bin # prechecks [[ ! -f "/bin/getconf" ]] && err_exit '/bin/getconf not found.' [[ ! -x "/bin/getconf" ]] && err_exit '/bin/getconf not executable.' # Define test functions and store them in a string for repeated usagae # (we can't use "functions" (alias "typeset -f") since this does not # work in compiled shell scripts) typeset -r getconf_test_functions="$( cat <<EOF function err_exit { print -u2 -n "\t" print -u2 -r \${Command}[\$1]: "\${@:2}" (( Errors++ )) } alias err_exit='err_exit \$LINENO' Command=\${0##*/} integer Errors=0 # compare builtin getconf output with /usr/bin/getconf function compare_normal { mismach=0 getconf_keys=0 /usr/bin/getconf -a | while read i ; do (( getconf_keys++ )) t="\${i%:*}" a="\$(getconf "\$t" 2>/dev/null)" b="\$(/usr/bin/getconf "\$t" 2>/dev/null)" if [[ "\$a" != "\$b" ]] ; then print -u2 "getconf/normal built mismatch: |\$t|:|\$a| != |\$b|" (( mismatch++ )) fi done } # compare builtin getconf output with /usr/bin/getconf while passing a path argument function compare_path { mismach=0 getconf_keys=0 /usr/bin/getconf -a | while read i ; do (( getconf_keys++ )) t="\${i%:*}" a="\$(getconf "\$t" "/tmp" 2>/dev/null)" b="\$(/usr/bin/getconf "\$t" "/tmp" 2>/dev/null)" if [[ "\$a" != "\$b" ]] ; then print -u2 "getconf/path built mismatch: |\$t|:|\$a| != |\$b|" (( mismatch++ )) fi done } EOF )" print -r -- "$getconf_test_functions" | source /dev/stdin # future versions of this test should test the following ${PATH}s, too: # "/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin" \ #"/usr/xpg4/bin:/bin:/usr/bin" \ for i in \ "/usr/bin:/bin" \ "/bin:/usr/bin" do export PATH="${i}" ## test whether the getconf builtin is available if [[ "$(builtin | fgrep "/bin/getconf")" == "" ]] ; then err_exit '/bin/getconf not found in the list of builtins.' fi ## compare "getconf -a" output if [[ "$(getconf -a)" != "$(/usr/bin/getconf -a)" ]] ; then err_exit 'getconf -a output mismatch.' fi ## check for a key which is only supported by the AST builtin version of getconf: if [[ "$(getconf LIBPREFIX)" != "lib" ]] ; then err_exit 'getconf LIBPREFIX did not return "lib".' fi ## run normal test compare_normal (( getconf_keys == 0 )) && err_exit "getconf/normal not working (PATH=${PATH})." (( mismatch > 0 )) && err_exit "getconf/normal test found ${mismatch} differences (PATH=${PATH})." # run the same test in a seperate shell # (we explicitly test this because ast-ksh.2007-01-11 picks up /usr/xpg6/bin/getconf # if /usr/xpg6/bin/ comes in ${PATH} before /usr/bin (this happens only of ${PATH} # contains /usr/xpg6/bin before ksh93 is started)). ${SHELL} -c "integer mismatch ; \ integer getconf_keys ; \ ${getconf_test_functions} ; \ compare_normal ; (( getconf_keys == 0 )) && err_exit \"getconf/normal not working (PATH=\${PATH}).\" ; \ (( mismatch > 0 )) && err_exit \"getconf/normal test found \${mismatch} differences (PATH=\${PATH}).\" ; \ exit $((Errors))" (( Errors+=$? )) ## run test with path argument compare_path (( getconf_keys == 0 )) && err_exit "getconf/path not working." (( mismatch > 0 )) && err_exit "getconf/path test found ${mismatch} differences." # run the same test in a seperate shell # (see comment above) ${SHELL} -c "integer mismatch ; \ integer getconf_keys ; \ ${getconf_test_functions} ; \ compare_path ; (( getconf_keys == 0 )) && err_exit \"getconf/normal not working (PATH=\${PATH}).\" ; \ (( mismatch > 0 )) && err_exit \"getconf/normal test found \${mismatch} differences (PATH=\${PATH}).\" ; \ exit $((Errors))" (( Errors+=$? )) done # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # # name reference test #001 # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 function function2 { nameref v=$1 v.x=19 v.y=20 } function function1 { typeset compound_var=() function2 compound_var printf "x=%d, y=%d\n" compound_var.x compound_var.y } x="$(function1)" [[ "$x" != 'x=19, y=20' ]] && err_exit "expected 'x=19, y=20', got '${x}'" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # # # This test module contains misc l10n tests # # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' set -o nounset Command=${0##*/} integer Errors=0 typeset ocwd typeset tmpdir # create temporary test directory ocwd="$PWD" tmpdir="$(mktemp -t -d "test_sun_solaris_locale_misc.XXXXXXXX")" || err_exit "Cannot create temporary directory" cd "${tmpdir}" || { err_exit "cd ${tmpdir} failed." ; exit $((Errors)) ; } # # utility functions # function string_has_multibyte_characters { typeset str="$1" integer bytecount integer mbcharactercount (( mbcharactercount=$(LC_ALL="en_US.UTF-8" wc -C <<<"${str}") )) (( bytecount=$(wc -c <<<"${str}") )) (( bytecount != mbcharactercount )) && return 0 return 1 } # # test functions # # test whether LC_ALL correctly overrides LC_MESSAGES in the choice of the system message # catalog # 1. This test assumes that the machine has ko_KR.UTF-8 + matching message catalogs installed # 2. We run this test in a |fork()|'ed subshell to isolate it from the other tests function test_lc_all_override1 { typeset out ( ulimit -c 0 # force ksh93 to |fork()| for this subshell unset ${!LC_*} LANG #export LANG=en_US.UTF-8 export LC_ALL="en_US.UTF-8" integer ch_val integer korean_count=0 ${SHELL} -c 'LC_MESSAGES=C ${SHELL} -c "cd no_dir_llkk ; export LC_ALL="ko_KR.UTF-8" ; cd "no_dir_ooo" ; true"' >"out" 2>&1 || err_exit "Test shell failed with non-zero exit code $?" while read -N1 c ; do (( ch_val='${c} )) (( ch_val >= 0xac00 && ch_val <= 0xdfff )) && (( korean_count++ )) done <"out" # Solaris 11/B110 returns 13 characters for this test (( korean_count >= 10 )) || err_exit "Expected at least 10 korean characters, got ${korean_count}" rm "out" exit $((Errors)) ) (( Errors += $? )) return 0 } # test whether the shell internally selects the correct message catalogs # when the value of LC_* or LANG is restored to a "previous" value (e.g. # subshell, function) or gets "reset" (e.g. unset) function test_lc_l10n_scope1 { compound -r -a testgroups=( ( name="subshell" typeset -a tests=( 'LC_ALL="C" ; cd "nosuchdir2" ; (LC_ALL="ja_JP.UTF-8" ; cd "nosuchdir2") ; cd "nosuchdir2" ; true' 'LC_MESSAGES="C" ; cd "nosuchdir2" ; (LC_MESSAGES="ja_JP.UTF-8" ; cd "nosuchdir2") ; cd "nosuchdir2" ; true' 'LANG="C" ; cd "nosuchdir2" ; (LANG="ja_JP.UTF-8" ; cd "nosuchdir2") ; cd "nosuchdir2" ; true' ) ) ( name="unset" typeset -a tests=( 'LC_ALL="C" ; cd "nosuchdir2" ; LC_ALL="ja_JP.UTF-8" ; cd "nosuchdir2" ; unset LC_ALL ; cd "nosuchdir2" ; true' 'LC_MESSAGES="C" ; cd "nosuchdir2" ; LC_MESSAGES="ja_JP.UTF-8" ; cd "nosuchdir2" ; unset LC_MESSAGES ; cd "nosuchdir2" ; true' 'LANG="C" ; cd "nosuchdir2" ; LANG="ja_JP.UTF-8" ; cd "nosuchdir2" ; unset LANG ; cd "nosuchdir2" ; true' ) ) ( name="empty LC_xxx" typeset -a tests=( 'LC_ALL="C" ; cd "nosuchdir2" ; LC_ALL="ja_JP.UTF-8" ; cd "nosuchdir2" ; LC_ALL="" ; cd "nosuchdir2" ; true' 'LC_MESSAGES="C" ; cd "nosuchdir2" ; LC_MESSAGES="ja_JP.UTF-8" ; cd "nosuchdir2" ; LC_MESSAGES="" ; cd "nosuchdir2" ; true' 'LANG="C" ; cd "nosuchdir2" ; LANG="ja_JP.UTF-8" ; cd "nosuchdir2" ; LANG="" ; cd "nosuchdir2" ; true' ) ) ( name="function" typeset -a tests=( 'LC_ALL="C" ; cd "nosuchdir2" ; function x { typeset LC_ALL="ja_JP.UTF-8" ; cd "nosuchdir2" ; } ; x ; cd "nosuchdir2" ; true' 'LC_MESSAGES="C" ; cd "nosuchdir2" ; function x { typeset LC_MESSAGES="ja_JP.UTF-8" ; cd "nosuchdir2" ; } ; x ; cd "nosuchdir2" ; true' 'LANG="C" ; cd "nosuchdir2" ; function x { typeset LANG="ja_JP.UTF-8" ; cd "nosuchdir2" ; } ; x ; cd "nosuchdir2" ; true' ) ) ) typeset tgi ti out2 for tgi in "${!testgroups[@]}" ; do nameref tg=testgroups[${tgi}] for ti in "${!tg.tests[@]}" ; do nameref ts=tg.tests[${ti}] ${SHELL} -c "unset LANG \${!LC_*} ; ${SHELL} -c \"${ts}\"" >out 2>&1 || err_exit "test returned non-zero exit code $?" out2="${ while read -r line ; do string_has_multibyte_characters "${line}" && print -n "A" || print -n "_" done <"out" print "" }" if [[ "${out2}" != '_A_' ]] ; then err_exit "test '${tg.name}'/'$ts' failed: Expected '_A_', got '${out2}'" #cat out fi done done rm "out" return 0 } # run tests test_lc_all_override1 test_lc_l10n_scope1 cd "${ocwd}" rmdir "${tmpdir}" || err_exit "Cannot remove temporary directory ${tmpdir}". # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # function err_exit2 { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } function testfunc { integer line_number=$1 typeset cmd="$2" typeset expected_output="$3" typeset output output="$($SHELL -c "${cmd}" 2>&1 )" [[ "${output}" != "${expected_output}" ]] && err_exit2 ${line_number} "${output} != ${expected_output}" } alias testfunc='testfunc $LINENO' alias err_exit='err_exit2 $LINENO' set -o nounset Command=${0##*/} integer Errors=0 # string testfunc '(function l { typeset -S x ; x+="#" ; $1 && print "$x" ; } ; l false ; l false ; l true)' "###" testfunc 'function l { typeset -S x=">" ; x+="#" ; $1 && print "$x" ; } ; l false ; l false ; l true' ">###" testfunc 'function l { typeset -S x=">" ; x+="#" ; $1 && print "$x" ; } ; l false ; (l false) ; l true' ">##" testfunc 'function l { typeset -S x=">" ; x+="#" ; $1 && print "$x" ; } ; l false; ( ulimit -c 0 ; l false) ; l true' ">##" # integer testfunc '(function l { typeset -S -i x ; x+=1 ; $1 && print "$x" ; } ; l false ; l false ; l true )' "3" testfunc '(function l { typeset -S -i x ; x+=1 ; $1 && print "$x" ; } ; l false ; (l false) ; l true )' "2" # float testfunc '(function l { float -S x=0.5 ; (( x+=.5 )) ; $1 && print "$x" ; } ; l false ; l false ; l true )' "2" testfunc '(function l { float -S x=0.5 ; (( x+=.5 )) ; $1 && print "$x" ; } ; l false ; (l false) ; l true )' "1.5" # compound variable [[ "${ function l { typeset -S s=( a=0 b=0 ) (( s.a++, s.b++ )) $1 && printf 'a=%d, b=%d\n' s.a s.b } l false ; l false ; l true }" != "a=3, b=3" ]] && err_exit "static compound var failed" # array variable [[ "$( function ar { typeset -a -S s=( "hello" ) s+=( "an element" ) $1 && { printf '%s' "${s[@]}" ; printf '\n' ; } } ar false ; ar false ; ar true )" != "helloan elementan elementan element" ]] && err_exit "static array var failed" # Test visibilty of "global" vs. "static" variables. if we have a "static" variable in a # function and "unset" it we should see a global variable with the same # name, right ? integer hx=5 function test_hx_scope { integer -S hx=9 $2 && unset hx $1 && printf "hx=%d\n" hx } test_hx_scope false false test_hx_scope false false # first test the "unset" call in a $(...) subshell... [[ "$( test_hx_scope true true )" != "hx=5" ]] && err_exit "can't see global variable hx after unsetting static variable hx" # ... end then test whether the value has changed. [[ "${ test_hx_scope true false }" != "hx=9" ]] && err_exit "hx variable somehow changed" # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # # # variable tree test #001 # Propose of this test is whether ksh93 crashes or not - ast-ksh.2008-05-14 # crashes like this when running this test: # # program terminated by signal ILL (illegal opcode) # 0xffffffffffffffff: <bad address 0xffffffffffffffff> # Current function is nv_diropen # 123 dp->hp = (Namval_t*)dtprev(dp->root,&fake); # (dbx) where # [1] 0x100381e80(0x100381e80, 0xffffffff7fffe690, 0x10, 0x61, 0x0, 0x100381ec9), at 0x100381e80 # =>[2] nv_diropen(np = (nil), name = 0x100381ebc "mysrcdata"), line 123 in "nvtree.c" # [3] walk_tree(np = 0x1003809e0, dlete = 524289), line 743 in "nvtree.c" # [4] put_tree(np = 0x1003809e0, val = (nil), flags = 524289, fp = 0x100381db0), line 814 in "nvtree.c" # [5] nv_putv(np = 0x1003809e0, value = (nil), flags = 524289, nfp = 0x100381db0), line 141 in "nvdisc.c" # [6] _nv_unset(np = 0x1003809e0, flags = 524289), line 1976 in "name.c" # [7] table_unset(shp = 0x10033e900, root = 0x100380900, flags = 524289, oroot = 0x100360980), line 1902 in "name.c" # [8] sh_unscope(shp = 0x10033e900), line 2711 in "name.c" # [9] sh_funscope(argn = 1, argv = 0x10035e680, fun = (nil), arg = 0xffffffff7ffff118, execflg = 4), line 2470 in "xec.c" # [10] sh_funct(np = 0x100380860, argn = 1, argv = 0x10035e680, envlist = (nil), execflg = 4), line 2528 in "xec.c" # [11] sh_exec(t = 0x10035e620, flags = 4), line 1032 in "xec.c" # [12] exfile(shp = 0x10033e900, iop = 0x100379a20, fno = 10), line 589 in "main.c" # [13] sh_main(ac = 2, av = 0xffffffff7ffffa08, userinit = (nil)), line 364 in "main.c" # [14] main(argc = 2, argv = 0xffffffff7ffffa08), line 46 in "pmain.c" # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' # the test cannot use "nounset" Command=${0##*/} integer Errors=0 function build_tree { #set -o errexit -o xtrace typeset index typeset s typeset i typeset dummy typeset a b c d e f nameref dest_tree="$1" # destination tree nameref srcdata="$2" # source data typeset tree_mode="$3" # mode to define the type of leads typeset -A dest_tree.l1 for index in "${!srcdata.hashnodes[@]}" ; do nameref node=srcdata.hashnodes["${index}"] for i in "${node.xlfd[@]}" ; do IFS='-' read dummy a b c d e f <<<"$i" if [[ "$a" == "" ]] ; then a="$dummy" fi [[ "$a" == "" ]] && a='-' [[ "$b" == "" ]] && b='-' [[ "$c" == "" ]] && c='-' if [[ "${dest_tree.l1["$a"]}" == "" ]] ; then #if ! (unset dest_tree.l1["$a"]) ; then typeset -A dest_tree.l1["$a"].l2 fi if [[ "${dest_tree.l1["$a"].l2["$b"]}" == "" ]] ; then #if ! (unset dest_tree.l1["$a"].l2["$b"]) ; then typeset -A dest_tree.l1["$a"].l2["$b"].l3 fi if [[ "${!dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[*]}" == "" ]] ; then typeset -A dest_tree.l1["$a"].l2["$b"].l3["$c"].entries fi #dest_tree.l1["$a"].l2["$b"].l3["$c"].entries+=( "$index" ) typeset new_index if [[ "${tree_mode}" == "leaf_name" ]] ; then new_index=$(( ${#dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[@]}+1 )) else new_index="${node.name}" # skip if the leaf node already exists if [[ "${dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[${new_index}]}" != "" ]] ; then continue fi fi add_tree_leaf dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[${new_index}] "${index}" "${tree_mode}" done done return 0 } function add_tree_leaf { nameref tree_leafnode="$1" nameref data_node=srcdata.hashnodes["$2"] typeset add_mode="$3" case "${add_mode}" in "leaf_name") tree_leafnode="${data_node.name}" return 0 ;; "leaf_compound") tree_leafnode=( typeset name="${data_node.name}" typeset -a filenames=( "${data_node.filenames[@]}" ) typeset -a comments=( "${data_node.comments[@]}" ) typeset -a xlfd=( "${data_node.xlfd[@]}" ) ) return 0 ;; *) print -u2 -f "ERROR: Unknown mode %s in add_tree_leaf\n" "${add_mode}" return 1 ;; esac # not reached return 1 } function main { typeset mysrcdata=( typeset -A hashnodes=( [abcd]=( name='abcd' typeset -a xlfd=( '-urw-itc zapfchancery-medium-i-normal--0-0-0-0-p-0-iso8859-1' '-urw-itc zapfdingbats-medium-r-normal--0-0-0-0-p-0-adobe-fontspecific' '-urw-itc zapfdingbats-medium-r-normal--0-0-0-0-p-0-sun-fontspecific' ) typeset -a comments=( 'comment 1' 'comment 2' 'comment 3' ) typeset -a filenames=( '/home/foo/abcd_1' '/home/foo/abcd_2' '/home/foo/abcd_3' ) ) ) ) mytree=() build_tree mytree mysrcdata leaf_compound # (( $(print -r -- "$mytree" | wc -l) > 10 )) || err_exit "Compound tree too small." } main # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # # # variable tree test #002 # Propose of this test is whether ksh93 handles global variable trees # and function-local variable trees the same way, including "nameref" # and "unset" handling. # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' # the test cannot use "nounset" Command=${0##*/} integer Errors=0 # "built_tree1" and "built_tree2" are identical except the way how they test # whether a variable exists: # - "built_tree1" uses "${varname}" != "", e.g. looking whether the variable # as non-zero length content # - "built_tree2" uses "! ([[ -v varname ]] ; res=$? ; unset varname ; exit $res)", e.g. "unset" in a subshell. function build_tree1 { #set -o errexit -o xtrace typeset index typeset s typeset i typeset dummy typeset a b c d e f nameref dest_tree="$1" # destination tree nameref srcdata="$2" # source data typeset tree_mode="$3" # mode to define the type of leads typeset -A dest_tree.l1 for index in "${!srcdata.hashnodes[@]}" ; do nameref node=srcdata.hashnodes["${index}"] for i in "${node.xlfd[@]}" ; do IFS='-' read dummy a b c d e f <<<"$i" if [[ "$a" == "" ]] ; then a="$dummy" fi [[ "$a" == "" ]] && a='-' [[ "$b" == "" ]] && b='-' [[ "$c" == "" ]] && c='-' if [[ "${dest_tree.l1["$a"]}" == "" ]] ; then #if ! (unset dest_tree.l1["$a"]) ; then typeset -A dest_tree.l1["$a"].l2 fi if [[ "${dest_tree.l1["$a"].l2["$b"]}" == "" ]] ; then #if ! (unset dest_tree.l1["$a"].l2["$b"]) ; then typeset -A dest_tree.l1["$a"].l2["$b"].l3 fi if [[ "${!dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[*]}" == "" ]] ; then typeset -A dest_tree.l1["$a"].l2["$b"].l3["$c"].entries fi typeset new_index if [[ "${tree_mode}" == "leaf_name" ]] ; then new_index=$(( ${#dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[@]}+1 )) else new_index="${node.name}" # skip if the leaf node already exists if [[ "${dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[${new_index}]}" != "" ]] ; then continue fi fi add_tree_leaf dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[${new_index}] "${index}" "${tree_mode}" done done return 0 } # "built_tree1" and "built_tree2" are identical except the way how they test # whether a variable exists: # - "built_tree1" uses "${varname}" != "", e.g. looking whether the variable # as non-zero length content # - "built_tree2" uses "! ([[ -v varname ]] ; res=$? ; unset varname ; exit $res)", e.g. "unset" in a subshell. function build_tree2 { #set -o errexit -o xtrace typeset index typeset s typeset i typeset dummy typeset a b c d e f nameref dest_tree="$1" # destination tree nameref srcdata="$2" # source data typeset tree_mode="$3" # mode to define the type of leads typeset -A dest_tree.l1 for index in "${!srcdata.hashnodes[@]}" ; do nameref node=srcdata.hashnodes["${index}"] for i in "${node.xlfd[@]}" ; do IFS='-' read dummy a b c d e f <<<"$i" if [[ "$a" == "" ]] ; then a="$dummy" fi [[ "$a" == "" ]] && a='-' [[ "$b" == "" ]] && b='-' [[ "$c" == "" ]] && c='-' #if [[ "${dest_tree.l1["$a"]}" == "" ]] ; then if ! ([[ -v dest_tree.l1["$a"] ]] ; res=$? ; unset dest_tree.l1["$a"] ; exit $res) ; then typeset -A dest_tree.l1["$a"].l2 fi #if [[ "${dest_tree.l1["$a"].l2["$b"]}" == "" ]] ; then if ! ([[ -v dest_tree.l1["$a"].l2["$b"] ]] ; res=$? ; unset dest_tree.l1["$a"].l2["$b"] ; exit $res) ; then typeset -A dest_tree.l1["$a"].l2["$b"].l3 fi if [[ "${!dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[*]}" == "" ]] ; then typeset -A dest_tree.l1["$a"].l2["$b"].l3["$c"].entries fi typeset new_index if [[ "${tree_mode}" == "leaf_name" ]] ; then new_index=$(( ${#dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[@]}+1 )) else new_index="${node.name}" # skip if the leaf node already exists if [[ "${dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[${new_index}]}" != "" ]] ; then continue fi fi add_tree_leaf dest_tree.l1["$a"].l2["$b"].l3["$c"].entries[${new_index}] "${index}" "${tree_mode}" done done return 0 } function add_tree_leaf { nameref tree_leafnode="$1" nameref data_node=srcdata.hashnodes["$2"] typeset add_mode="$3" case "${add_mode}" in "leaf_name") tree_leafnode="${data_node.name}" return 0 ;; "leaf_compound") tree_leafnode=( typeset name="${data_node.name}" typeset -a filenames=( "${data_node.filenames[@]}" ) typeset -a comments=( "${data_node.comments[@]}" ) typeset -a xlfd=( "${data_node.xlfd[@]}" ) ) return 0 ;; *) print -u2 -f "ERROR: Unknown mode %s in add_tree_leaf\n" "${add_mode}" return 1 ;; esac # not reached return 1 } # "mysrcdata_local" and "mysrcdata_global" must be identical typeset mysrcdata_global=( typeset -A hashnodes=( [abcd]=( name='abcd' typeset -a xlfd=( '-urw-itc zapfchancery-medium-i-normal--0-0-0-0-p-0-iso8859-1' '-urw-itc zapfdingbats-medium-r-normal--0-0-0-0-p-0-adobe-fontspecific' '-urw-itc zapfdingbats-medium-r-normal--0-0-0-0-p-0-sun-fontspecific' ) typeset -a comments=( 'comment 1' 'comment 2' 'comment 3' ) typeset -a filenames=( '/home/foo/abcd_1' '/home/foo/abcd_2' '/home/foo/abcd_3' ) ) ) ) mytree_global1=() mytree_global2=() function main { # "mysrcdata_local" and "mysrcdata_global" must be identical typeset mysrcdata_local=( typeset -A hashnodes=( [abcd]=( name='abcd' typeset -a xlfd=( '-urw-itc zapfchancery-medium-i-normal--0-0-0-0-p-0-iso8859-1' '-urw-itc zapfdingbats-medium-r-normal--0-0-0-0-p-0-adobe-fontspecific' '-urw-itc zapfdingbats-medium-r-normal--0-0-0-0-p-0-sun-fontspecific' ) typeset -a comments=( 'comment 1' 'comment 2' 'comment 3' ) typeset -a filenames=( '/home/foo/abcd_1' '/home/foo/abcd_2' '/home/foo/abcd_3' ) ) ) ) #### Build tree using global tree variables build_tree1 mytree_global1 mysrcdata_global leaf_compound || \ err_exit 'build_tree1 mytree_global1 mysrcdata_global leaf_compound returned an error' (( $(print -r -- "${mytree_global1}" | wc -l) > 10 )) || err_exit "Compound tree 'mytree_global1' too small." build_tree2 mytree_global2 mysrcdata_global leaf_compound || \ err_exit 'build_tree2 mytree_global2 mysrcdata_global leaf_compound returned an error' (( $(print -r -- "${mytree_global2}" | wc -l) > 10 )) || err_exit "Compound tree 'mytree_global2' too small." #### build tree using local tree variables mytree_local1=() mytree_local2=() build_tree1 mytree_local1 mysrcdata_local leaf_compound || \ err_exit 'build_tree1 mytree_local1 mysrcdata_local leaf_compound returned an error' (( $(print -r -- "${mytree_local1}" | wc -l) > 10 )) || err_exit "Compound tree 'mytree_local1' too small." build_tree2 mytree_local2 mysrcdata_local leaf_compound || \ err_exit 'build_tree2 mytree_local2 mysrcdata_local leaf_compound returned an error' (( $(print -r -- "${mytree_local2}" | wc -l) > 10 )) || err_exit "Compound tree 'mytree_local2' too small." #### Compare treess if [[ "${mytree_global1}" != "${mytree_local1}" ]] ; then err_exit "Compound trees 'mytree_global1' and 'mytree_local1' not identical" diff -u <( printf "%s\n" "${mytree_global1}" ) <( printf "%s\n" "${mytree_local1}" ) fi if [[ "${mytree_global1}" != "${mytree_global2}" ]] ; then err_exit "Compound trees 'mytree_global1' and 'mytree_global2' not identical" diff -u <( printf "%s\n" "${mytree_global1}" ) <( printf "%s\n" "${mytree_global2}" ) fi if [[ "${mytree_local1}" != "${mytree_local2}" ]] ; then err_exit "Compound trees 'mytree_local1' and 'mytree_local2' not identical" diff -u <( printf "%s\n" "${mytree_local1}" ) <( printf "%s\n" "${mytree_local2}" ) fi #### test "unset" in a subshell ( [[ -v 'mytree_global1.l1[urw].l2[itc zapfdingbats]' ]] ; res=$? ; unset 'mytree_global1.l1[urw].l2[itc zapfdingbats]' ; exit $res ) || \ err_exit "Try 1: Variable 'mytree_global1.l1[urw].l2[itc zapfdingbats]' not found." ( [[ -v 'mytree_global1.l1[urw].l2[itc zapfdingbats]' ]] ; res=$? ; unset 'mytree_global1.l1[urw].l2[itc zapfdingbats]' ; exit $res ) || \ err_exit "Try 2: Variable 'mytree_global1.l1[urw].l2[itc zapfdingbats]' not found." # remove parent node (array element) and then check whether the child is gone, too: ( set -o errexit unset 'mytree_global1.l1[urw].l2[itc zapfdingbats]' ! [[ -v 'mytree_global1.l1[urw].l2[itc zapfdingbats].l3[medium].entries[abcd].filenames[0]' ]] ) || err_exit "Global: Parent node removed (array element), child still exists" ( set -o errexit unset 'mytree_local1.l1[urw].l2[itc zapfdingbats]' ! [[ -v 'mytree_local1.l1[urw].l2[itc zapfdingbats].l3[medium].entries[abcd].filenames[0]' ]] ) || err_exit "Local: Parent node removed (array element), child still exists" # remove parent node (array variable) and then check whether the child is gone, too: ( set -o errexit unset 'mytree_local1.l1[urw].l2' ! [[ -v 'mytree_local1.l1[urw].l2[itc zapfdingbats].l3[medium].entries[abcd].filenames[0]' ]] ) || err_exit "Global: Parent node removed (array variable), child still exists" ( set -o errexit unset 'mytree_local1.l1[urw].l2' ! [[ -v 'mytree_local1.l1[urw].l2[itc zapfdingbats].l3[medium].entries[abcd].filenames[0]' ]] ) || err_exit "Local: Parent node removed (array variable), child still exists" #### test "unset" and compare trees [[ -v 'mytree_global1.l1[urw].l2[itc zapfdingbats].l3[medium].entries[abcd].filenames[0]' ]] ; res=$? unset 'mytree_global1.l1[urw].l2[itc zapfdingbats].l3[medium].entries[abcd].filenames[0]' (( res == 0 )) || err_exit "Variable 'mytree_global1.l1[urw].l2[itc zapfdingbats].l3[medium].entries[abcd].filenames[0]' not found." [[ "${mytree_global1}" != "${mytree_local1}" ]] || err_exit "mytree_global1 and mytree_local1 should differ" [[ -v 'mytree_local1.l1[urw].l2[itc zapfdingbats].l3[medium].entries[abcd].filenames[0]' ]] ; res=$? unset 'mytree_local1.l1[urw].l2[itc zapfdingbats].l3[medium].entries[abcd].filenames[0]' (( res == 0 )) || err_exit "Variable 'mytree_local1.l1[urw].l2[itc zapfdingbats].l3[medium].entries[abcd].filenames[0]' not found." # Compare trees (after "unset") if [[ "${mytree_global1}" != "${mytree_local1}" ]] ; then err_exit "Compound trees 'mytree_local1' and 'mytree_global1' not identical after unset" diff -u <( printf "%s\n" "${mytree_global1}" ) <( printf "%s\n" "${mytree_local1}" ) fi } main # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # # # variable tree test #003 # Propose of this test is whether ksh93 handles global variable trees # and function-local variable trees the same way, including "nameref" # and "unset" handling. # # test setup function err_exit { print -u2 -n "\t" print -u2 -r ${Command}[$1]: "${@:2}" (( Errors < 127 && Errors++ )) } alias err_exit='err_exit $LINENO' # the test cannot use "nounset" Command=${0##*/} integer Errors=0 function example_tree { cat <<EOF ( typeset -A l1=( [adobe]=( typeset -A l2=( [avantgarde]=( typeset -A l3=( [demi]=( typeset -A entries=( [182c069a485316b1bc7ae001c04c7835]=( typeset -a comments=( FONT -adobe-avantgarde-demi-r-normal--199-120-1200-1200-p-1130-iso8859-1 COPYRIGHT 'Copyright Notice not available' RAW_PIXELSIZE RAW_POINTSIZE -- section diaeresis copyright ordfeminine guillemotleft ) typeset -a filenames=( X11Rx/R6.4/xc/programs/Xserver/XpConfig/C/print/models/SPSPARC2/fonts/AvantGarde-Demi.pmf ) md5sum=182c069a485316b1bc7ae001c04c7835 typeset -a xlfd=( -adobe-avantgarde-demi-r-normal--199-120-1200-1200-p-1130-iso8859-1 ) ) [7db15b51965d8fe1f1c55fcb101d7616]=( typeset -a comments=( FONT -adobe-avantgarde-demi-i-normal--199-120-1200-1200-p-1130-iso8859-1 COPYRIGHT 'Copyright Notice not available' RAW_PIXELSIZE RAW_POINTSIZE -- section diaeresis copyright ordfeminine guillemotleft ) typeset -a filenames=( X11Rx/R6.4/xc/programs/Xserver/XpConfig/C/print/models/SPSPARC2/fonts/AvantGarde-DemiOblique.pmf ) md5sum=7db15b51965d8fe1f1c55fcb101d7616 typeset -a xlfd=( -adobe-avantgarde-demi-i-normal--199-120-1200-1200-p-1130-iso8859-1 ) ) [a37e4a4a5035abf6f294d830fbd9e775]=( typeset -a comments=( FONT -adobe-avantgarde-demi-r-normal--422-120-2540-2540-p-2395-iso8859-1 COPYRIGHT 'Copyright (c) 1985, 1987, 1989, 1990, 1991 Adobe Systems Incorporated. All Rights Reserved.ITC Avant Garde Gothic is a registered trademark of International Typeface Corporation.' RAW_PIXELSIZE RAW_POINTSIZE -- section diaeresis copyright ordfeminine guillemotleft ) typeset -a filenames=( fox-gate/XW_NV/open-src/tarballs/xorg-server-1.3.0.0/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-Demi.pmf ) md5sum=a37e4a4a5035abf6f294d830fbd9e775 typeset -a xlfd=( -adobe-avantgarde-demi-r-normal--422-120-2540-2540-p-2395-iso8859-1 ) ) [da3d6d94fcf759b95c7f829ce5619374]=( typeset -a comments=( FONT -adobe-avantgarde-demi-i-normal--422-120-2540-2540-p-2395-iso8859-1 COPYRIGHT 'Copyright (c) 1985, 1987, 1989, 1990, 1991 Adobe Systems Incorporated. All Rights Reserved.ITC Avant Garde Gothic is a registered trademark of International Typeface Corporation.' RAW_PIXELSIZE RAW_POINTSIZE -- section diaeresis copyright ordfeminine guillemotleft ) typeset -a filenames=( fox-gate/XW_NV/open-src/tarballs/xorg-server-1.3.0.0/hw/xprint/config/C/print/models/PSdefault/fonts/AvantGarde-DemiOblique.pmf ) md5sum=da3d6d94fcf759b95c7f829ce5619374 typeset -a xlfd=( -adobe-avantgarde-demi-i-normal--422-120-2540-2540-p-2395-iso8859-1 ) ) ) ) ) ) ) ) ) ) EOF } function main { set -o errexit typeset xlfd_tree=() typeset -A xlfd_tree.l1 eval "xlfd_tree=$( example_tree )" typeset i j k l fn # filter chain begin for i in "${!xlfd_tree.l1[@]}" ; do for j in "${!xlfd_tree.l1["$i"].l2[@]}" ; do for k in "${!xlfd_tree.l1["$i"].l2["$j"].l3[@]}" ; do nameref vndnode=xlfd_tree.l1["$i"].l2["$j"].l3["$k"] for l in "${!vndnode.entries[@]}" ; do nameref node=vndnode.entries["$l"] for fn in "${node.filenames[@]}" ; do if [[ "${fn}" != ~(E)x-re_gate_XW_NV_MWS ]] ; then unset "${!node}" break fi done done done done done # filter chain end return 0 } main || ((Errors++)) # tests done exit $((Errors)) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # # MAPFILE HEADER START # # WARNING: STOP NOW. DO NOT MODIFY THIS FILE. # Object versioning must comply with the rules detailed in # # usr/src/lib/README.mapfiles # # You should not be making modifications here until you've read the most current # copy of that file. If you need help, contact a gatekeeper for guidance. # # MAPFILE HEADER END # $mapfile_version 2 SYMBOL_VERSION SUNWprivate_1.1 { global: plugin_version; sh_access; sh_addbuiltin; sh_bltin_tree; sh_close; sh_delay; sh_dup; sh_eval; sh_exec; sh_exit; sh_fcntl; sh_fmtq; sh_fmtqf; sh_fun; sh_funscope; sh_getinterp; sh_getscope; sh_init; sh_iogetiop; sh_isoption; sh_main; sh_menu; sh_offoption; sh_onoption; sh_open; sh_parse; sh_pathopen; sh_pipe; sh_read; sh_reinit; sh_seek; sh_setscope; sh_sigcheck; sh_strnum; sh_subfork; sh_tdump; sh_trap; sh_waitnotify; sh_waitsafe; sh_write; nv_adddisc; nv_aindex; nv_associative; nv_clone; nv_close; nv_context; nv_create; nv_dict; nv_disc; nv_discfun; nv_getn; nv_getnum; nv_getsub; nv_getv; nv_getval; nv_hasdisc; nv_isnull; nv_lastdict; nv_name; nv_newattr; nv_nextsub; nv_open; nv_opensub; nv_putsub; nv_putv; nv_putval; nv_scan; nv_search; nv_setarray; nv_setdisc; nv_setref; nv_setsize; nv_settype; nv_setvec; nv_setvtree; nv_unset; # semi-private, needed for shcomp $if _ELF64 $if _x86 sh { ASSERT = { TYPE = OBJECT; SIZE = 1888; }; }; $elif _sparc sh { ASSERT = { TYPE = OBJECT; SIZE = 1920; }; }; $else $error Unknown architecture $endif $elif _ELF32 $if _x86 sh { ASSERT = { TYPE = OBJECT; SIZE = 1216; }; }; $elif _sparc sh { ASSERT = { TYPE = OBJECT; SIZE = 1224; }; }; $else $error Unknown architecture $endif $else $error unknown ELFCLASS $endif e_dict { ASSERT = { TYPE = OBJECT; SIZE = 9; }; }; local: *; }; # Builtin shell commands # (see libshell/common/include/builtins.h) # Note: We have to export all the |b_*()| symbols that the "builtin" command # can load builtins which are not enabled by the default OS/Net configuration. SYMBOL_VERSION SUNWprivate_1.1 { global: B_echo; B_login; b_alarm; b_alias; b_bg; b_break; b_builtin; b_cd; b_close; b_command; b_dot_cmd; b_dup; b_eval; b_exec; b_false; b_getopts; b_hist; b_jobs; b_kill; b_let; b_open; b_poll; b_print; b_printf; b_pwd; b_read; b_readonly; b_return; b_rewind; b_set; b_shift; b_sleep; b_stat; b_test; b_tmpfile; b_trap; b_true; b_typeset; b_ulimit; b_umask; b_unalias; b_unset; b_vpath; b_wait; b_whence; local: *; }; # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # SHELL= /usr/bin/ksh93 include $(SRC)/lib/Makefile.lib # Hammerhead: amd64-only SUBDIRS= $(MACH64) all : TARGET= all clean : TARGET= clean clobber : TARGET= clobber install : TARGET= install install_h : TARGET= install_h _msg : TARGET= _msg _feature : TARGET= _feature .KEEP_STATE: .PARALLEL: $(SUBDIRS) all clean clobber install _feature: $(SUBDIRS) # Hammerhead: amd64-only _msg: $(MACH64) include Makefile.defs HDRS= $(HEADERINSTALL) HDRDIR32= $(MACH)/ast HDRDIR64= $(MACH64)/ast include ../Makefile.asthdr install_h: $(SUBDIRS) .WAIT $(ROOTHDRS) install: install_h $(SUBDIRS): FRC @cd $@; pwd; $(MAKE) $(TARGET) FRC: include $(SRC)/lib/Makefile.targ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright (c) 2018, Joyent, Inc. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. SHELL= /usr/bin/ksh93 LIBRARY= libsum.a VERS= .1 include ../Makefile.defs OBJECTS += $(LIBOBJS) include $(SRC)/lib/Makefile.lib include ../../Makefile.ast MAPFILES= ../mapfile-vers LIBS= $(DYNLIB) LDLIBS += -last -lmd -lc # We use "=" here since using $(CPPFLAGS.master) is very tricky in our # case - it MUST come as the last element but future changes in -D options # may then cause silent breakage in the AST sources because the last -D # option specified overrides previous -D options so we prefer the current # way to explicitly list each single flag. # Notes: CPPFLAGS= \ $(DTEXTDOM) $(DTS_ERRNO) \ -Iast -I. \ -I$(ROOT)/usr/include/ast \ -I$(ROOT)/usr/include \ -D_PACKAGE_ast \ -D_BLD_DLL CFLAGS += $(ASTCFLAGS) CFLAGS64 += $(ASTCFLAGS64) CERRWARN += -Wno-parentheses SMOFF += all_func_returns .KEEP_STATE: # This codepath is performance-critical sparc_COPTFLAG = -xO5 sparcv9_COPTFLAG = $(sparc_COPTFLAG) i386_COPTFLAG = amd64_COPTFLAG = $(i386_COPTFLAG) all: install_h .WAIT $(LIBS) include $(SRC)/lib/Makefile.targ pics/%.o: $(ASTSRC)/%.c $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< $(POST_PROCESS_O) ###################################################################### # Header file generation $(HEADERSRC:%=ast/%): $(HEADERSRC:%=$(ASTSRC)/%) $(MKDIR) -p $(@D) $(CP) $(ASTSRC)/$(@F) $@ install_h: $(HEADERSRC:%=ast/%) CLOBBERFILES += ast/* _feature: FRC $(MAKE) -f Makefile.iffe generate include ../../Makefile.astmsg FRC: # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # These macros should be kept synchronised with those in # usr/src/contrib/ast/src/lib/libsum/Makefile AST_LICENSE = since=1996,author=gsf ASTLIB= libsum ASTSRC= $(C_AST)/src/lib/$(ASTLIB) HDRGUARD= sum FEATURES= sum HEADERSRC= sum.h HEADERGEN= HEADERINSTALL= $(HEADERSRC) $(HEADERGEN) LOBJDIRS= LIBOBJS= sumlib.o # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # include ../Makefile.com include ../../Makefile.iffe cleaniffe: FRC $(RM) $(FEATURES:%=FEATURE/%) generate: cleaniffe $(FEATURES:%=FEATURE/%) /* : : generated from contrib/ast/src/lib/libsum/features/sum by iffe version 2012-07-17 : : */ #ifndef _def_sum_sum #define _def_sum_sum 1 #define _sys_types 1 /* #include <sys/types.h> ok */ #define _hdr_md4 1 /* #include <md4.h> ok */ #define _LIB_md 1 /* -lmd is a library */ #define _lib_MD4Init 1 /* MD4Init() in default lib(s) */ #define _hdr_md5 1 /* #include <md5.h> ok */ #define _lib_MD5Init 1 /* MD5Init() in default lib(s) */ #define _hdr_sha1 1 /* #include <sha1.h> ok */ #define _lib_SHA1Init 1 /* SHA1Init() in default lib(s) */ #define _hdr_sha2 1 /* #include <sha2.h> ok */ #define _lib_SHA2Init 1 /* SHA2Init() in default lib(s) */ #endif # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # include ../Makefile.com include $(SRC)/lib/Makefile.lib.64 install: all $(ROOTLIBS64) $(ROOTLINKS64) # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # include ../Makefile.iffe include $(SRC)/lib/Makefile.lib.64 # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # # # MAPFILE HEADER START # # WARNING: STOP NOW. DO NOT MODIFY THIS FILE. # Object versioning must comply with the rules detailed in # # usr/src/lib/README.mapfiles # # You should not be making modifications here until you've read the most current # copy of that file. If you need help, contact a gatekeeper for guidance. # # MAPFILE HEADER END # $mapfile_version 2 SYMBOL_VERSION SUNWprivate_1.1 { global: sumopen; suminit; sumblock; sumdone; sumdata; sumprint; sumusage; sumclose; local: *; }; # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright (c) 2018, Joyent, Inc. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. SHELL= /usr/bin/ksh93 include ../../Makefile.cmd .KEEP_STATE: # Set common AST build flags (e.g., needed to support the math stuff). include ../Makefile.ast ASTSRC= $(C_AST)/src/cmd/msgcc # build rules CPPFLAGS= \ $(DTEXTDOM) $(DTS_ERRNO) \ -I$(ROOT)/usr/include/ast \ -I$(ROOT)/usr/include \ -D_PACKAGE_ast \ '-DUSAGE_LICENSE=\ "[-author?Glenn Fowler <gsf@research.att.com>]"\ "[-copyright?Copyright (c) 2000-2012 AT&T Intellectual Property]"\ "[-license?http://www.eclipse.org/org/documents/epl-v10.html]" \ "[--catalog?msgcc]"' CFLAGS += $(ASTCFLAGS) CERRWARN += -Wno-parentheses CERRWARN += -Wno-empty-body CERRWARN += $(CNOWARN_UNINIT) # not linted SMATCH=off LDLIBS += -last msgcpp : LDLIBS += -lpp CPROG= msgcvt msggen msgget msgcpp PROG= msgcc $(CPROG) all: $(PROG) # This target should use "shcomp" in the future msgcc: $(ASTSRC)/msgcc.sh rm -f msgcc ; \ { \ print "#!/usr/bin/ksh93" ; \ print "export PATH=/usr/bin:/usr/xpg6/bin:/usr/xpg4/bin:\$${PATH}" ; \ print "builtin date" ; \ cat "$(ASTSRC)/msgcc.sh" ; \ } >msgcc ; \ chmod a+rx msgcc # Hammerhead: install to /usr/bin (removed /usr/ast hierarchy) ROOTCMDDIR=$(ROOT)/usr/bin install: all $(ROOTCMD) check clean install_h _feature: include ../../Makefile.targ POFILE= msgcpp.po # Create dummy file since AST/ksh/msgcc doesn't use *.po files msgcpp.po: $(RM) $@ $(TOUCH) $(@) $(CPROG): $(LINK.c) -o $@ $(ASTSRC)/$@.c $(LDLIBS) $(POST_PROCESS) FRC: .PARALLEL: $(PROG) # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # Copyright (c) 2018, Joyent, Inc. # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. SHELL= /usr/bin/ksh93 include ../../Makefile.cmd # Hammerhead: SPARC Makefile.cmd.64 include removed - amd64 only .KEEP_STATE: # Set common AST build flags (e.g., needed to support the math stuff). include ../Makefile.ast OBJECTS= shcomp.o ASTSRC= $(C_AST)/src/cmd/ksh93 LIBSHELLMACH= $(MACH64) LIBSHELLBASE= ../libshell LIBSHELLSRC= $(ASTSRC)/sh SRCS= $(OBJECTS:%.o=$(LIBSHELLSRC)/%.c) LDLIBS += -lshell -last # We use "=" here since using $(CPPFLAGS.master) is very tricky in our # case - it MUST come as the last element but future changes in -D options # may then cause silent breakage in the AST sources because the last -D # option specified overrides previous -D options so we prefer the current # way to explicitly list each single flag. CPPFLAGS= \ $(DTEXTDOM) $(DTS_ERRNO) \ $(LIBSHELLCPPFLAGS) CFLAGS += $(ASTCFLAGS) CFLAGS64 += $(ASTCFLAGS64) CERRWARN += -Wno-parentheses SMOFF += all_func_returns ROOTCMDDIR=$(ROOT)/usr/bin PROG= shcomp %.o: $(LIBSHELLSRC)/%.c $(COMPILE.c) -c -o $@ $< $(POST_PROCESS_O) all: $(PROG) # dummy file since AST/ksh/shcomp doesn't use *.po files # (and "shcomp" is just a frontend which calls directly into libshell, # i.e. there are no l10n strings here) $(PROG).po: $(RM) $(PROG).po ; \ $(TOUCH) $(PROG).po install: all $(ROOTCMD) install_h _feature: $(PROG): $(OBJECTS) $(RM) shcomp $(LINK.c) $(OBJECTS) -o $@ $(LDLIBS) $(POST_PROCESS) clean: $(RM) $(OBJECTS) include ../../Makefile.targ # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # SHELL= /usr/bin/ksh93 CTOOLS= proto lcgen SHTOOLS= iffe package gentab TOOLS= $(CTOOLS) $(SHTOOLS) probe OBJS= $(CTOOLS:%=%.o) include $(SRC)/cmd/Makefile.cmd include ../Makefile.ast include $(SRC)/Makefile.native NATIVE_LIBS += libc.so all install install_h: $(TOOLS) _msg _feature: clean clobber: $(RM) $(OBJS) $(TOOLS) package: $(RM) $@ # The string returned by 'package' must match the value used by # AT&T upstream, which is "i386" or "sun4", regardless of whether # building 32- or 64-bit objects. { \ [[ $(MACH) == i386 ]] && arch=i386 || arch=sun4; \ print -e "#!/bin/sh\n\necho sol11.$$arch" > $@; \ } $(CHMOD) +x $@ %.o: $(C_ASTINIT)/%.c $(COMPILE.c) -o $@ $< $(POST_PROCESS_O) %.o: $(C_AST)/src/lib/libast/port/%.c $(COMPILE.c) -o $@ $< $(POST_PROCESS_O) AST_SH_ASSEMBLE= \ { \ tf=$$(mktemp /tmp/ast.XXXXXXXXXX) && \ print 'USAGE_LICENSE="[-author?ATT]"' > $$tf && \ cat $< >> $$tf && \ mv $$tf $@; \ } %: $(C_ASTINIT)/%.sh $(RM) $@ $(AST_SH_ASSEMBLE) $(CHMOD) +x $@ %: $(C_AST)/src/lib/libpp/%.sh $(RM) $@ $(AST_SH_ASSEMBLE) $(CHMOD) +x $@ $(CTOOLS): $(OBJS) $(LINK.c) $@.o -o $@ $(POST_PROCESS) probe: $(C_ASTINIT)/C+probe $(C_ASTINIT)/make.probe $(CAT) $(C_ASTINIT)/C+probe $(C_ASTINIT)/make.probe > $@ $(CHMOD) +x $@ STACKPROTECT= none CERRWARN += -Wno-parentheses CERRWARN += -Wno-implicit-fallthrough CERRWARN += -Wno-unused-value CERRWARN += $(CNOWARN_UNINIT) SMATCH= off .KEEP_STATE: .PARALLEL: $(TOOLS)