pax_global_header00006660000000000000000000000064135475641720014530gustar00rootroot0000000000000052 comment=42e726f8d004ec2220a291f5a54f000a0c471762 ast-2020.0.0/000077500000000000000000000000001354756417200125405ustar00rootroot00000000000000ast-2020.0.0/.clang-format000066400000000000000000000011341354756417200151120ustar00rootroot00000000000000# Use the Google style with these modifications and a couple of others: # # 1) Lines can be up to 100 chars long rather than 80. # 2) Use a four space indent rather than two spaces. # Language: Cpp BasedOnStyle: Google ColumnLimit: 100 IndentWidth: 4 # The following directives override defaults established above. # We don't want OCLint pragmas to be reformatted. CommentPragmas: '^!OCLINT' # Do not try to infer the most common alignment of `&` and `*` by analyzing the # source file. Use right alignment; i.e., bind to the symbol not the type. DerivePointerAlignment: false PointerAlignment: Right ast-2020.0.0/.clang-tidy000066400000000000000000000001351354756417200145730ustar00rootroot00000000000000CheckOptions: - key: readability-braces-around-statements.ShortStatementLines value: 1 ast-2020.0.0/.copr/000077500000000000000000000000001354756417200135615ustar00rootroot00000000000000ast-2020.0.0/.copr/Makefile000066400000000000000000000004601354756417200152210ustar00rootroot00000000000000mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) current_dir := $(notdir $(patsubst %/,%,$(dir $(mkfile_path)))) srpm: dnf -y install git-core sed $(current_dir)/prep.sh rpmbuild -bs -D "dist %{nil}" -D "_sourcedir packaging/fedora" -D "_srcrpmdir $(outdir)" --nodeps packaging/fedora/ksh.spec ast-2020.0.0/.copr/prep.sh000077500000000000000000000020621354756417200150660ustar00rootroot00000000000000#!/bin/sh -euf set -x # Copr sets clone depth to 500 to avoid cloning big repositories # however we use number of commits in version number, so fetch # full repository # If `get fetch --unshallow` fails, this means if we have full # repo, so ignore if it fails. git fetch --unshallow || : # Fetch tags to determine version number git fetch --tags # 2017.0.0-devel-1535-g7c33a1cd-dirty VCS_VERSION=$(git describe --always --dirty --tags) # Extract development version number i.e. 2017.0.0 DEVEL_VERSION_NUM=$(echo "$VCS_VERSION" | cut -d'-' -f1) # 1535 COMMIT_NUM=$(echo "$VCS_VERSION" | cut -d'-' -f3) # g7c33a1cd SHORT_COMMIT=$(echo "$VCS_VERSION" | cut -d'-' -f4) COMMIT=$(git rev-parse HEAD) sed "s,#VCS_VERSION#,${VCS_VERSION},; s,#DEVEL_VERSION_NUM#,${DEVEL_VERSION_NUM},; s,#COMMIT_NUM#,${COMMIT_NUM},; s,#SHORT_COMMIT#,${SHORT_COMMIT},; s,#COMMIT#,${COMMIT}," \ packaging/fedora/ksh.spec.in > packaging/fedora/ksh.spec git archive --prefix "ast-${COMMIT}/" --format "tar.gz" HEAD -o "packaging/fedora/ksh-${SHORT_COMMIT}.tar.gz" ast-2020.0.0/.cppcheck.rules000066400000000000000000000014301354756417200154500ustar00rootroot00000000000000 wcwidth \( wcwidthForbidden warning Always use fish_wcwidth rather than wcwidth. wcswidth \( wcswidthForbidden warning Always use fish_wcswidth rather than wcswidth. <--!> ]]> ast-2020.0.0/.cppcheck.suppressions000066400000000000000000000027001354756417200170740ustar00rootroot00000000000000// suppress all instances of varFuncNullUB: "Passing NULL after the last typed // argument to a variadic function leads to undefined behaviour." That's // because all the places we do this are valid and won't cause problems even // on a ILP64 platform because we're careful about using NULL rather than 0. varFuncNullUB // Suppress the warning about unmatched suppressions. At the moment these // warnings are emitted even when removing the suppression comment results in // the warning being suppressed. In other words this unmatchedSuppression // warnings are false positives. unmatchedSuppression // There is currently one function which triggers this warning multiple times: // src/cmd/ksh93/sh/io.c. Those warnings are all false positives. Suppressing // them with inline warnings is too hideous to allow so globally suppress them. resourceLeak // For the moment we ignore warnings about using non-reentrant functions when // a reentrant thread-safe variant exists. Since ksh is single-threaded this // isn't a problem although it could be is a third-party plugin created // threads that used any of these functions. getpwuidCalled ttynameCalled getloginCalled getpwnamCalled // The fallbacks.c module is likely to need cppcheck suppressions. But due to // how they are parsed, independent of any enclosing `#if` directives, they are // also likely to cause warnings like "Unmatched suppression: mktempCalled". unmatchedSuppression:../src/lib/libast/misc/fallbacks.c ast-2020.0.0/.editorconfig000066400000000000000000000003171354756417200152160ustar00rootroot00000000000000root = true [*] indent_size = 4 indent_style = space end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true max_line_length = 100 [{Makefile,*.in}] indent_style = tab ast-2020.0.0/.github/000077500000000000000000000000001354756417200141005ustar00rootroot00000000000000ast-2020.0.0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001354756417200162635ustar00rootroot00000000000000ast-2020.0.0/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000003501354756417200207530ustar00rootroot00000000000000--- name: Bug report about: Template for bug reports --- **Description of problem:** **Ksh version:** **How reproducible:** **Steps to reproduce:** 1. 2. 3. **Actual results:** **Expected results:** **Additional info:** ast-2020.0.0/.gitignore000066400000000000000000000011571354756417200145340ustar00rootroot00000000000000# There are some patterns below we include reluctantly. They should be in an # individual's ~/.config/git/ignore file. For example, ".DS_Store" for people # working on MacOS. We include them to help ensure they don't added to the # project. # Files and file extensions that should never be checked in regardless of # which project directory they reside in. *.exe *.app *.so *.dylib *.dll *.lai *.la *.a *.lib *.o *.obj *.lo *.slo *.d *.gch *.pch *.bak *.new *.orig *.log *.DS_Store *~ *~HEAD .AppleDouble .LSOverride .Trash-* ._* Desktop.ini # Artifacts of the build and test process that should not be committed. build/ ast-2020.0.0/.oclint000066400000000000000000000126671354756417200140450ustar00rootroot00000000000000rules: rule-configurations: # This is the default value (as of the time I wrote this) but I'm making # it explicit since it needs to agree with the value used by clang-format. # Thus, if we ever change the style guide to allow longer or shorter lines # this should be changed (as well as the corresponding .clang-format file). - key: LONG_LINE value: 100 # The default limit for the length of variable names is 20. Long names are # problematic but twenty chars results in way too many errors. So increase # the limit to something more reasonable. - key: LONG_VARIABLE_NAME value: 30 # TODO: Return this to a saner value such as 60 (or even 100) once the # truly obscene functions have been refactored. # # We're slightly more persmissive regarding the total number of lines in a # function. Default is 50. - key: LONG_METHOD value: 500 # TODO: Return this to the default of 5 once the more egregious nested # blocks have been eliminated. # # We're slightly more persmissive regarding the nested block depth. # Default is 5. - key: NESTED_BLOCK_DEPTH value: 7 # We're slightly more persmissive regarding the number of non-comment # lines in a function. Default is 30. - key: NCSS_METHOD value: 40 # We're willing to allow slighly more linearly independent paths through a # function. Most of our code has a lot of `switch` blocks or consecutive # `if` tests that are straightforward to interpret but which increase this # metric. Default is 10. - key: CYCLOMATIC_COMPLEXITY value: 14 # We're willing to allow slighly more execution paths through a function. # Default is 200. - key: NPATH_COMPLEXITY value: 300 disable-rules: # # A few instances of "useless parentheses" errors are meaningful. Mostly # in the context of the `return` statement. Unfortunately the vast # majority would result in removing parentheses that decreases # readability. So we're going to ignore this warning and rely on humans to # notice when the parentheses are truly not needed. # # Also, some macro expansions, such as FD_SET(), trigger this warning and # we don't want to suppress each of those individually. # - UselessParentheses # # OCLint wants variable names to be at least three characters in length. # Which would be fine if it supported a reasonable set of exceptions # (e.g., "i", "j", "k") and allowed adding additional exceptions to match # conventions employed by a project. Since it doesn't, and thus generates # a lot of really annoying warnings, we're going to disable this rule. # - ShortVariableName # # This rule flags perfectly reasonable conditions like `if (!some_condition)` # and is therefore just noise. Disable this rule. # - InvertedLogic # # The idea behind the "double negative" rule is sound since constructs # like "!!(var & flag)" should be written as "static_cast(var & # flag)". Unfortunately this rule has way too many false positives; # especially in the context of assert statements. So disable this rule. # - DoubleNegative # # Avoiding bitwise operators in a conditional is a good idea with one # exception: testing whether a bit flag is set. Which happens to be the # only time you'll see something like `if (j->flags & JOB_CONSTRUCTED)` # in project source. # - BitwiseOperatorInConditional # # I don't think I've ever seen a case where assigning a value to a # parameter inside the function body was unclear, let along dangerour or # an error. This rule is therefore just noise. Disable this rule. # - ParameterReassignment # # The project makes so much use of the `goto` statement, many of which # will require significant refactoring to remove, that warnings about its # use are just noise. # - GotoStatement # # Oclint has too many false positives regarding missing `break;` # statements. Mostly having to do with `case` blocks that use `goto` to # exit the block. In some cases because it doesn't recognize # `__builtin_unreachable()` to flag that the previous statement won't # return. And the compiler already alerts us to case blocks that fall # through to the next case block. - MissingBreakInSwitchStatement # # This warning is perfectly reasonable for most projects but not for ksh. # There are simply too many `switch` blocks with as little as two branches # but which we cannot justify rewriting. # TODO: Enable this warning in the future. # - TooFewBranchesInSwitchStatement # # The structure of the code means that it is often clearer to nest `if()` # statements even though they could be written as a single `if()`. I've # simplified all the instances where no clarity is lost by combining them. # Those instances that remain would be made harder to read and reason # about if they were combined. Eliminating these instances requires # refactoring that is hard to justify. So disable this warning. - CollapsibleIfStatements # # TODO: Enable These in the future after simpler or more serious issues # have been addressed. At this time these warnings just make it hard to # see the issues that are easier or more urgent to resolve. So disable them. # - HighCyclomaticComplexity - HighNPathComplexity - HighNcssMethod ast-2020.0.0/.travis.yml000066400000000000000000000076651354756417200146670ustar00rootroot00000000000000sudo: required language: c # Get full repo to correctly determine tags from commits git: depth: false # Use docker to test builds on different Linux distros. # Latest stable image of each distro is pulled to test builds. matrix: include: # https://hub.docker.com/_/fedora/ - os: linux compiler: gcc env: - DISTRO_TYPE=fedora INSTALL_REQUIREMENTS="dnf repolist; dnf --allowerasing install -y gcc python3 meson sudo langpacks-zh_CN ed ncurses vi findutils which nmap-ncat expect git glibc-all-langpacks procps" before_install: - docker pull ${DISTRO_TYPE} # https://hub.docker.com/_/opensuse/ # Note: Meson 0.44.0 is the newest version that works with Python # 3.4 available on OpenSuse Leap. See issue #430. - os: linux compiler: gcc env: - DISTRO_TYPE=opensuse/tumbleweed INSTALL_REQUIREMENTS="zypper refresh; zypper in -y gcc python3 python3-pip ninja sudo glibc-locale glibc-devel ed ncurses-utils vim findutils which netcat expect git; pip3 install meson==0.44.0" before_install: - docker pull ${DISTRO_TYPE} # https://hub.docker.com/_/ubuntu/ # Ubuntu requires explicitly generating en_US.UTF-8 locale - os: linux compiler: gcc env: - DISTRO_TYPE=ubuntu INSTALL_REQUIREMENTS="apt-get update; DEBIAN_FRONTEND=noninteractive apt-get install -yq gcc python3 sudo locales ed vim python3-pip ninja-build findutils debianutils netcat-openbsd expect git procps; pip3 install meson==0.44.0; locale-gen en_US.UTF-8" before_install: - docker pull ${DISTRO_TYPE} # https://hub.docker.com/_/debian/ # Debian requires explicitly generating en_US.UTF-8 locale too - os: linux compiler: gcc env: - DISTRO_TYPE=debian INSTALL_REQUIREMENTS="apt-get update; DEBIAN_FRONTEND=noninteractive apt-get install -yq gcc python3 python3-pip ninja-build sudo locales ed vim procps findutils debianutils netcat-openbsd expect git; pip3 install meson==0.44.0; sed -i '/# en_US.UTF-8 UTF-8/s/..//' /etc/locale.gen && locale-gen" before_install: - docker pull ${DISTRO_TYPE} # https://hub.docker.com/r/i386/ubuntu/ # 32-bit environment # i686 images are built officially by docker but not supported # https://github.com/docker-library/official-images#architectures-other-than-amd64 - os: linux compiler: gcc env: - DISTRO_TYPE=i386/ubuntu INSTALL_REQUIREMENTS="apt-get update; DEBIAN_FRONTEND=noninteractive apt-get install -yq gcc python3 sudo locales ed vim python3-pip ninja-build findutils debianutils netcat-openbsd expect git; pip3 install meson==0.44.0; locale-gen en_US.UTF-8" before_install: - docker pull ${DISTRO_TYPE} - os: osx compiler: clang before_install: - brew update env: # This variable is not required by macOS builds, but setting it for Travis dashboard. - DISTRO_TYPE=macOS - os: linux env: - SCAN_TYPE="shellcheck" before_install: - sudo apt-get update - sudo apt-get install shellcheck findutils file services: - docker script: # Fetch tags to set version number - git fetch --tags - if [[ $SCAN_TYPE == "shellcheck" ]]; then exec bin/shellcheck; fi - if [[ $TRAVIS_OS_NAME == "osx" ]]; then exec scripts/build-on-macos.sh; fi - docker run -v $TRAVIS_BUILD_DIR:/source ${DISTRO_TYPE} bash -c "set -e; ${INSTALL_REQUIREMENTS}; useradd --create-home test; echo \"/tmp/ksh_auditfile;\$(id -u test)\" > /etc/ksh_audit; chown -R test /source; sudo -u test /source/scripts/build-on-docker.sh '${DISTRO_TYPE}'" ast-2020.0.0/CHANGELOG.md000066400000000000000000000336241354756417200143610ustar00rootroot00000000000000# ksh 2020.0.0 This documents changes since the AST code, which includes the `ksh` program, was moved to Github. That is, the ksh93u+ source. The next stable version will be treated as a major release for several reasons. Not least of which is changing the build tool chain from the legacy Nmake system to Meson and replacing the AST Vmalloc subsystem with the platform Malloc subsystem. Legacy changes can be found in the various `RELEASE` files. Starting in June 2017 maintenance of the Korn shell (`ksh`) resumed with the merging of some fixes from Red Hat by Siteshwar Vashisht after he was granted commit privilege. In October 2017 Kurtis Rader noticed that `ksh` had been open sourced and started contributing changes. This document was subsequently created to document the work being done. ## Deprecations - Some libc/libm math functions not suitable for use by a ksh script (e.g., `j0()`) will likely be removed in the near future (issue #1346 and #88). ## Notable non-backward compatible changes - The nonportable, unusable, `fpclassify` math function has been removed (issue #1346). - The broken math functions `nextforward` and `nexttoward` have been removed (issue #1346). - Support for binary plugins written for ksh93u+ or earlier releases has been dropped (issue #983). - Support for coshell has been removed (issue #619). - The `universe` command has been removed (issue #793). - The `getconf` command has been removed (issue #1118). - Support for building on systems using EBCDIC has been removed (issue #742). - Support for the `LC_OPTIONS` env var has been removed (issue #579). - `case "[0-9]" in [0-9]) echo match;; esac` has stopped matching. When a case statement doesn't match a pattern, it no longer tries to use the pattern as a literal string (issue #476). - echo builtin now interprets escape sequences and parses command line options on all platforms. (issue #370) - Support for the UWIN environment has been removed (issue #284). - The experimental `SHOPT_FIXEDARRAY` feature has been removed. It is known to have been enabled in some Fedora and RHEL builds. But because it was experimental and undocumented this should not break any existing users of `ksh` built with this feature enabled. (issue #234) - <> operator now redirects standard input by default (issue #75). - Support for the build time SHOPT_ACCTFILE symbol and code has been removed (issue #210). - Versioning scheme has been changed to use semantic version numbers (issue #335). - Undocumented and broken `alarm` builtin has been removed (issue #646). ## Notable fixes and improvements - `declare` has been added as an alias for `typeset` (issue #220). - `local` has been added as a constrained alias for `typeset` when used inside a function (issue #220). - Mention of the `getconf` builtin has been removed from the main ksh man page. That command has never been enabled by default and is now deprecated in favor of the platform command of the same name (issue #1118). - The `test` command no longer silently fails all uses of the `=~` operator. Instead an error is printed suggesting the use of `[[...]]` (issue #1152). - Doing `[ -t1 ]` inside a command substitution behaves correctly (issue #1079). - The project now passes its unit tests when built with malloc debugging enabled (i.e., `meson test --setup=malloc`) or with ASAN enabled. - Changes to the project are now validated by running unit tests on the Travis continuous integration system. - The ksh source now builds on BSD based systems such as macOS and FreeBSD. - The ksh source now builds on Cygwin; albeit with many unit test failures. - The legacy Nmake build system has been replaced by Meson. This improves the build time by roughly an order of magnitude (issue #42). - The `times` command is now a builtin that conforms to POSIX rather than an alias for the `time` command (issue #16). - The `time` command now has millisecond resolution if the platform provides `getrusage()` and its time values have millisecond or better resolution. ## Other significant changes - Using a bare tilde (e.g., `cd ~`) now works correctly if `$HOME` is not set (issue #1391). - You can no longer run an external command with stdin, stdout, or stderr closed. If you attempt to do so (e.g., `a_cmd <&-`) it will be opened on /dev/null in the child process (issue #1117). - Vi raw mode is now the default and cannot be disabled. Note that this was true at least as far back as ksh93u+. The difference is that now it's no longer even theoretically possible to even build with that feature disabled. (issue #864). - The AST locale subsystem has been replaced by the platform's implementation (issue #579). - The AST Vmalloc subsystem has been removed. The project now uses the system malloc. (issue #396) - Operations that depend on the simulated 3DFS behavior found in release ksh93v are no longer supported. That behavior does not work in ksh93u (the most recent stable release found in all distros) unless the 3D file system is actually present. This includes operations such as this: `exec {fd} - 13-05-01 +Increased to maximum number of enumeration elements from 32K to 2G. - 13-04-25 +The -K option has been added to set to sort indexed arrays of compound elements based on a list of keys. - 13-04-18 Added serialization to processing of CHLD traps. - 13-04-15 ksh now waits for background jobs started in functions contained in command substitution. - 13-04-08 +ksh now sets .sh.sig.pid and .sh.sig.status for CHLD traps. The .sh.sig.status can be one of exited, killed, dumped, stopped or continued. - 13-04-08 +The CHLD trap is now triggered with STOP and CONT signals. - 13-04-03 +Functions that are used in brace group command substitution ${ ... } can assign the result to .sh.value instead of writing to standard out with the same result, but faster. - 13-03-27 +The variable .sh.sig containing siginfo information is no set during a SIGCHLD trap. - 13-03-12 Empty fields and empty arrays as type elements are not displayed when expanding a type instance. - 13-03-11 The trap command now blocks signals that have traps until the trap command completes. - 13-03-11 Signals that have traps that occur while processing a trap are deferred until the trap command completes. - 13-02-08 +The -p option was added to enum to display the values that are valid for the enum. - 13-02-07 +A preset alias named bool which is an alias for an enum named `_Bool` which has values true and false has been added. - 13-02-24 Increased the maximum level of recursion for evaluating variables inside arithmetic expressions from 9 to 1024. - 13-01-17 +User define math functions introduced on 10-03-24 now allow passing arrays as arguments. - 13-01-10 +ksh now treats ESC-O-letter the same as ESC-[-letter in vi and emacs edit modes. - 12-10-09 +read -d '' now reads up to a NUL byte. - 12-10-04 libcmd builtins are statically linked into ksh93 and by default are bound to the path /opt/ast/bin whether this path exists or not. Changing the .sh.op_astbin variable changes the binding. - 12-10-01 +Added the variable `SH_OPTIONS` which consists of name=value pairs. For defined options it assigned value to the variable .sh.op_name. - 12-10-02 +Add the variable .sh.op_astbin to define the directory where several shell builtins will be bound. - 12-09-10 +Added ~{fd} expansion where fd is the number of an open file or a variable whose value is the number of an open file. - 12-08-30 For an associative array A, $((A[sub])) no longer cause subscript sub to be created. - 12-08-20 typeset -H foo no longer un-sets foo when foo has been exported to the shell. - 12-07-12 +Added -q option was added to kill to send queued signals on systems that support sigqueue(). - 12-07-12 +Added -p option to builtin to output builtins in a format that can be used to re-input. - 12-07-02 +The -a option was added to trap to cause the current setting to be appended to the new trap setting rather than replacing it. ast-2020.0.0/CONTRIBUTING.md000066400000000000000000000356661354756417200150110ustar00rootroot00000000000000# Guidelines for Developers This document provides guidelines for making changes to the AST Korn shell project. This includes assumptions you can make about environments where this project will be built. As well as rules for how to format the code, naming conventions, etcetera. Generally known as the style of the code. It also includes recommended best practices such as creating a Travis-CI account so you can verify your changes pass all the tests before making a pull-request. See the bottom of this document for help on installing the linting and style reformatting tools discussed in the following sections. AST Korn shell source requires, and should limit the features it uses, to a C compiler that provides those features available in C99 (aka ISO/IEC 9899:1999). See [issue #145](https://github.com/att/ast/issues/145). When introducing a new dependency please make it optional with graceful failure if possible. Add any new dependencies to the README.md document under the *Running* and/or *Building* sections as well as in this document as appropriate. ## Assumptions about what can be used Do not use anything other than */bin/sh* to run scripts executed by Meson's `run_command()` function. That is, any script run that way should begin with `#!/bin/sh`. Furthermore, do not assume that path is a synonym for `bash`. All scripts run during the Meson configuration and build steps should only use features known to be available in the Bourne shell. This makes it easier to bootstrap building `ksh` on systems, like OpenBSD, which do not install bash by default. ## Versioning We have switched to [semantic versioning](https://semver.org/)(issue #335). To maintain backward compatibility we will use year as major version number, so the scheme looks like yyyy.minor.patch. For e.g. 2017.0.0. ## Include What You Use You should not depend on symbols being visible to a `*.c` module from `#include` statements inside another header file. In other words if your module does `#include "defs.h"` and that header does `#include "name.h"` your module should not assume the sub-include is present. It should instead directly `#include "name.h"` if it needs any symbol from that header. That makes the actual dependencies much clearer. It also makes it easy to modify the headers included by a specific header file without having to worry that will break any module (or header) that includes a particular header. To help enforce this rule the `bin/lint` command will run the [include-what-you-use](http://include-what-you-use.org/) tool. You can find the IWYU project on [github](https://github.com/include-what-you-use/include-what-you-use). To install the tool on macOS you'll need to add a [formula](https://github.com/jasonmp85/homebrew-iwyu) then install it: ```sh brew tap jasonmp85/iwyu brew install iwyu ``` On Ubuntu you can install it via `sudo apt-get install iwyu`. ## Lint Free Code Automated analysis tools like `cppcheck` and `oclint` can point out potential bugs or code that is extremely hard to understand. They also help ensure the code has a consistent style and that it avoids patterns that tend to confuse people. Ultimately we want lint free code. This includes no compiler warnings and no warnings from the aforementioned tools. However, at the moment a lot of cleanup is required to reach that goal. For now simply try to avoid introducing new lint. To make linting the code easy there is the `bin/lint` command. If you pass it the magic string `--all` it will lint all the *src/cmd/ksh93* code. If you pass it a list of files it will lint those. The paths can be directory names in which case all the source beneath that directory will be linted. If run with no arguments it will lint any uncommitted source files. If there are no uncommitted files it will lint the files in the most recent commit. ### Dealing With Lint Warnings You are strongly encouraged to address a lint warning by refactoring the code, changing variable names, adding an explicit initialization, or whatever action is implied by the warning. ### Suppressing Lint Warnings Once in a while the lint tools emit a false positive warning. For example, `cppcheck` might suggest a memory leak is present when that is not the case. To suppress that `cppcheck` warning you should insert a line like the following immediately prior to the line `cppcheck` warned about: ```c // cppcheck-suppress memleak // addr not really leaked ``` Suppressing `oclint` warnings is more complicated to describe so I'll refer you to the [OCLint HowTo](http://docs.oclint.org/en/latest/howto/suppress.html#annotations) on the topic. ## Ensuring Your Changes Conform to the Style Guides The following sections discuss the specific rules for the style that should be used when writing AST ksh code. To make restyling the code easy there is the `bin/style` command. If you pass it the magic string `--all` it will restyle all the *src/cmd/ksh93* code. If you pass it a list of files it will restyle those. The paths can be directory names in which case all the source beneath that directory will be restyled. If run with no arguments it will restyle any uncommitted source files. If there are no uncommitted files it will restyle the files in the most recent commit. To ensure your changes conform to the style rules you simply need to run ```sh bin/style ``` before committing your change. That will run `git-clang-format` to rewrite just the lines you're modifying. If you've already committed your changes that's okay since it will then check the files in the most recent commit. This can be useful after you've merged someone elses change and want to check that it's style is correct. However, in that case it will run `clang-format` to ensure the entire file, not just the lines modified by the commit, conform to the style. ### Configuring Your Editor #### ViM If you use ViM I recommend the [vim-clang-format plugin](https://github.com/rhysd/vim-clang-format) by [@rhysd](https://github.com/rhysd). You can also get ViM to provide reasonably correct behavior by installing http://www.vim.org/scripts/script.php?script_id=2636 #### Emacs If you use Emacs: TBD ### Configuring Your Editor for Ksh Scripts TBD ### Suppressing Reformatting of C Code If you have a good reason for doing so you can tell `clang-format` to not reformat a block of code by enclosing it in comments like this: ```c // clang-format off code to ignore // clang-format on ``` However, as I write this there are no places in the code where we use this and I can't think of any legitimate reasons for exempting blocks of code from clang-format. ## Ksh Script Style Guide TBD ## C Style Guide Note: While `clang-format` is authoritative with respect to everything it handles (e.g., indentation, spacing around operators) there are some things it won't fix. So please read the following items. 1. The [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) forms the basis of this projects C style guide. There are two major deviations for this project. First, a four, rather than two, space indent. Second, line lengths up to 100, rather than 80, characters. See [issue #125](https://github.com/att/ast/issues/125). 1. The `clang-format` command is authoritative with respect to indentation, whitespace around operators, line breaks, etc. 1. All names in code should be `small_snake_case`. No Hungarian notation is used. 1. Always attach braces to the surrounding context. 1. Indent with spaces, not tabs and use four spaces per indent. 1. Comments should always use the C++ style; i.e., each line of the comment should begin with a `//` and should be limited to 100 characters. 1. Comments that appear on the same line as a statement should be separated from the previous text by two spaces. The comment should not be in the form of a sentence; i.e., `// allow room to prepend args` not `// Allow room to prepend args.`. If the comment is on its own line(s) it should be written as a sequence of sentences like you would in any document. 1. All switch `case` blocks should be enclosed in braces. For example: ```c switch (x) { case 1: { do_something(); break; } case 2: { do_something_else(); break; } } ``` 1. If a switch `case` block is meant to fall-through to the following block add an explicit comment: `// FALL THRU`. 1. If a `if` statement has a corresponding `else if` or `else` block you must put the blocks on separate lines enclosed in braces even if they would otherwise fit on the preceding control statement. For example: ```c if (a) { do_a(); } else { abort(); } ``` 1. A `if` or `while` statement whose block is a single line can put the two statements on the same line if there is room. In that case omit the braces. Otherwise, even if the block is a single line it must be enclosed in braces. For example: ```c if (a || b) do_something(); if (some_really_long_complex_condition_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) { do_something(); } ``` Never do this even though the C language allows it since it is an anti-pattern that leads to bugs: ```c if (some_really_long_complex_condition_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) do_something(); if (is_true()) { do_x(); do_y(); } else do_z(); ``` ## Testing The source code for ksh includes a large collection of tests. If you are making any changes to ksh, running these tests is mandatory to make sure the behavior remains consistent and regressions are not introduced. Even if you don't run the tests they will be run via the [Travis CI](https://travis-ci.org/att/ast) service. You are strongly encouraged to add tests when changing the functionality of ksh. Especially if you are fixing a bug to help ensure there are no regressions in the future (i.e., we don't reintroduce the bug). ### Local testing The tests can be run on your local computer on all operating systems supported by the project. To run the tests: ``` cd build meson test --setup=malloc ``` To run a specific test include its name: `meson test --setup=malloc types`. The `--setup=malloc` will enable malloc integrity features provided by your system's malloc implementation if it supports such things via environment variables. That flag can be omitted but its use is recommended. ### Testing with ASAN -- AddressSanitizer At the moment this only works on Linux using gcc. Configure with `meson -DASAN=true -Dbuild-api-tests=false`. Then build with `ninja` as usual. Run the tests with `meson test --setup=asan`. You will need to install the `llvm-symbolizer` tool if the gcc version is less than 4.9.3. For example, on OpenSuse 42.3 you'll need to run `sudo zypper install llvm`. ### Testing with Valgrind The `valgrind` tool is invaluable for finding bugs that may only manifest in specific situations due to the vagaries of memory management and the placement of variables, structures, etc. To run the tests under control of `valgrind` do this: ```sh meson test -t 10 --wrapper valgrind ``` The `-t 10` is a multiplier for test timeouts. A much larger multiplier, on the order of `-t 50`, might be needed if you're running the tests in a virtual machine or other environment with highly constrained resources. ### Travis CI Build and Test The Travis Continuous Integration services can be used to test your changes using multiple configurations. This is the same service that the AST src/cmd/ksh93/data/bash\_pre\_rc.c shell project uses to ensure new changes haven't broken anything. Thus it is a really good idea that you leverage Travis CI before making a pull-request to avoid embarrassment at breaking the build. You will need to [fork the repository on GitHub](https://help.github.com/articles/fork-a-repo/). Then setup Travis to test your changes before you make a pull-request: 1. [Sign in to Travis CI](https://travis-ci.org/auth) with your GitHub account, accepting the GitHub access permissions confirmation. 1. Once you're signed in, and your repositories are synchronized, go to your [profile page](https://travis-ci.org/profile) and enable the ast repository. 1. Push your changes to GitHub. You'll receive an email when the tests are complete telling you whether or not any tests failed. You'll find the configuration used to control Travis in the `.travis.yml` file. ### Git hooks Since developers sometimes forget to run the tests, it can be helpful to use git hooks (see `githooks`(5)) to automate it. One possibility is a pre-push hook script like this one: ```sh #!/bin/sh #### A pre-push hook for the ast/ksh project # This will run the tests when a push to master is detected, and will stop that if the tests fail # Save this as .git/hooks/pre-push and make it executable protected_branch='master' # Git gives us lines like "refs/heads/frombranch SOMESHA1 refs/heads/tobranch SOMESHA1" # We're only interested in the branches while read from _ to _; do if [ "x$to" = "xrefs/heads/$protected_branch" ]; then isprotected=1 fi done if [ "x$isprotected" = x1 ]; then echo "Running tests before push to master" cd build meson test RESULT=$? if [ $RESULT -ne 0 ]; then echo "Tests failed for a push to master, we can't let you do that" >&2 exit 1 fi fi exit 0 ``` This will check if the push is to the master branch and, if it is, will run `meson test` and only allow the push if that succeeds. In some circumstances it might be advisable to circumvent it with `git push --no-verify`, but usually that should not be necessary. To install the hook, put it in *.git/hooks/pre-push* and make it executable. To fix code styling issues before making a commit, add this script as a pre-commit hook; that is in an executable file named *.git/hooks/pre-commit*: ```sh #!/bin/sh STAGE_STYLE_FIXUPS=1 bin/style ``` ### Test Coverage Test coverage report can be generated with these commands: ``` cd build meson -Db_coverage=true ninja meson test -t 2 ninja coverage-html ``` ### Coverity Scan Coverity scans are run everyday on `master` branch. Latest results can be viewed [here](https://scan.coverity.com/projects/ksh). ## Installing the Required Tools ### Installing the Linting Tools To install the lint checkers on macOS using HomeBrew: ```sh brew tap oclint/formulae brew install oclint brew install cppcheck ``` To install the lint checkers on Linux distros that use Apt: ```sh sudo apt-get install clang sudo apt-get install oclint sudo apt-get install cppcheck ``` ### Installing the Reformatting Tools To install the reformatting tool on macOS using HomeBrew: ```sh brew install clang-format ``` To install the reformatting tool on Linux distros that use Apt: ```sh apt-cache install clang-format ``` That will list the versions available. Pick the newest one available (3.9 for Ubuntu 16.10 as I write this) and install it: ```sh sudo apt-get install clang-format-3.9 sudo ln -s /usr/bin/clang-format-3.9 /usr/bin/clang-format ``` ## Message Translations TBD ast-2020.0.0/LICENSE000066400000000000000000000257611354756417200135600ustar00rootroot00000000000000Eclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. ast-2020.0.0/README.md000066400000000000000000000147011354756417200140220ustar00rootroot00000000000000# KSH93 This repository contains the AT&T Software Technology (AST) toolkit from AT&T Research. As of November 2017 the development focus has been shifted to the `ksh` (or `ksh93`) command and supporting code required to build it. The non-ksh code of the AST project is no longer being actively maintained. If you are interested in the non-ksh code see below for details on which branches contain the full AST code base. The project only supports systems where the compiler and underlying hardware is ASCII compatible. This includes Linux on IBM zSeries but not z/OS. The nascent, incomplete, support for EBCDIC has been removed. See [issue #742](https://github.com/att/ast/issues/742). ## Building Korn shell Building ksh requires the [Meson](http://mesonbuild.com/) build system. To build ksh execute these commands from the project root directory: ``` meson build ninja -C build ``` You can add a `--prefix` flag followed by a path to the `meson build` command to specify where the binaries and libraries are installed. The default is */usr/local*. ## Installing The `ksh` executable, helper libraries and man page can be installed with: ``` ninja -C build install ``` ## Getting KornShell ### Linux Latest builds for Red Hat Enterprise Linux (CentOS) and Fedora can be found in [Copr](https://copr.fedorainfracloud.org/coprs/g/ksh/latest/). Latest builds for openSUSE and Ubuntu can be found in [OBS](https://build.opensuse.org/project/show/shells:ksh:new:latest). See [full list](https://github.com/att/ast/wiki/Packages-for-Linux) of distros that ship packages for current development version. ### Windows TBD ### macOS TBD ## Contributing changes to the source code See the [contributing guidelines](https://github.com/att/ast/blob/master/CONTRIBUTING.md) for information about code style, unit tests, and other topics of interest to anyone who wants to modify the source. ## Guidelines for Packagers See the guidelines for downstream package maintainers [here](https://github.com/att/ast/wiki/Guidelines-for-Packagers). ## Coverity Scan Latest results of coverity scan can be viewed [here](https://scan.coverity.com/projects/ksh). ## Test Coverage A code coverage report can be viewed [here](http://situ.im/ast/coveragereport/) for GCC on Linux, and [here](https://www.skepticism.us/ast/coveragereport/) for LLVM/clang on macOS. ## Working with the full AST source Warning: Running test cases through the legacy test script may wipe out your home directory ([See #477](https://github.com/att/ast/issues/477)). This has been fixed in current development version. Full AST source code is available under the `2012-08-01-master` and `2016-01-10-beta` branches (see below for more details). Bug fixes to these branches are welcome but they are otherwise under low maintenance. The full AST code includes many tools and libraries, like KSH, NMAKE, SFIO, VMALLOC, VCODEX, etc. It also includes efficient replacements for a lot of the POSIX tools. It was designed to be portable across many UNIX systems and also works under UWIN on Microsoft Windows (see UWIN repo on GitHub under att/uwin). This software is used to build itself, using NMAKE. After cloning this repo, cd to the top directory of it and run: ``` ./bin/package make ``` __NOTE__: That build command only applies to the legacy branches that include the entire AST source. It does not apply to the current `master` branch that is focused solely on the `ksh` command and uses the Meson build system. Almost all the tools in this package (including the bin/package script) are self-documenting; run --man (or --html) for the man page for the tool. (If you were used to the old AST packaging mechanism, on www.research.att.com, this repo is equivalent to downloading the INIT and ast-open packages and running: ./bin/package read on them). ## Branches The `master` [branch](https://github.com/att/ast/commits/master) contains the current development version of ksh93. It only contains source code for ksh93 and the libraries required to build it. The [2012-08-01-master branch](https://github.com/att/ast/commits/2012-08-01-master) contains the last stable release of full AST source code. It contains one cherry-picked [change](https://github.com/att/ast/commit/e79c29295092fe2b2282d134e2b7cce32ec9dcac) to allow building on Linux. The [2016-01-10-beta branch](https://github.com/att/ast/commits/2016-01-10-beta) contains the last beta release of full AST source code plus a number of patches that were later added on top of it. Changes for the legacy AST project are normally merged to this branch. The [gh-pages branch](https://github.com/att/ast/commits/gh-pages) will probably be removed. It contains files needed to generate the static [AST project page](https://att.github.io/ast/) hosted by GitHub. See https://help.github.com/articles/what-is-github-pages/ for more info. ## Licensing This section needs more detail and clarity. The original `README` document said the following: > Each package is covered by one of the license files > > lib/package/LICENSES/ > > where is the license type for the package. At the top > of each license file is a URL; the license covers all software that > refers to this URL. For details run > > bin/package license [] > > Any archives, distributions or packages made from source or > binaries covered by license(s) must contain the corresponding > license file(s). ## Contact Us The primary mechanism for interacting with this project is the [GitHub project](https://github.com/att/ast/) by opening issues and pull-requests and watching the project. ### IRC Use `#ksh` channel on freenode to discuss about AT&T KornShell and related variants. ### Gitter [ksh93/users](https://gitter.im/ksh93/users) is the Gitter chatroom for AT&T KornShell users. ### Mailing lists You can track announcements and ask question or report problems at korn-shell@googlegroups.com or https://groups.google.com/d/forum/korn-shell as an alternative to watching this Github project. Archives of the AST mailing lists (which is mostly about ksh) are available at: https://marc.info/?l=ast-developers and https://marc.info/?l=ast-users. __As of 2018-11-01 the AT&T hosted mailing lists no longer respond to email.__ Note that the precise date the mailing lists stopped working is unknown. That was simply the date it came to our attention. The last known message to both mailing lists was sent on 2018-03-15. Ironically, since you can't unsubscribe, they still send monthly reminders that you are subscribed. ast-2020.0.0/app-compat-travis.yml000066400000000000000000000020061354756417200166300ustar00rootroot00000000000000# Test compatibility with applications written in ksh sudo: required services: - docker matrix: include: - os: linux env: - PROJECT_NAME=kshdb GIT_URL="https://github.com/rocky/kshdb.git" COMMANDS="git checkout att-ksh93v-testing; ksh ./autogen.sh; make test" # These tests are run from yash fork that contains list of tests and a test runner script - os: linux env: - PROJECT_NAME="posix-shell-tests" GIT_URL="https://github.com/siteshwar/posix-shell-tests.git" COMMANDS="git checkout ksh-tests; cd src; LANG=C ./run-ksh-tests.sh" script: - docker pull fedora # Test builds from https://copr.fedorainfracloud.org/coprs/g/ksh/latest/ - docker run fedora bash -c " dnf install -y 'dnf-command(copr)'; dnf copr enable -y @ksh/latest; dnf install -y ksh git autoconf automake make findutils yash; git clone $GIT_URL; cd $PROJECT_NAME; $COMMANDS" ast-2020.0.0/bin/000077500000000000000000000000001354756417200133105ustar00rootroot00000000000000ast-2020.0.0/bin/README000066400000000000000000000002271354756417200141710ustar00rootroot00000000000000This directory is for commands that people working on this project might run. For example, to restyle the source code or run it through linting tools. ast-2020.0.0/bin/lint000077500000000000000000000177471354756417200142240ustar00rootroot00000000000000#!/usr/bin/env ksh # # Usage: bin/lint [all | directory_or_filename...] # # Run the source through various lint detection tools. If invoked with `-all` then all the # src/cmd/ksh93 source files will be linted. If invoked with one or more path names they # will be linted. If the pathname is a directory all *.c files inside it will be linted. # Otherwise any uncommitted source files are linted. If there is no uncommitted change # then the files in the most recent commit are linted. # # shellcheck disable=SC2207 # Note: Disable SC2207 warning for the entire file since setting IFS to just # newline makes it safe to handle file names with spaces. IFS=$'\n' typeset all=no readonly cppchecks=warning,performance,portability,information,missingInclude typeset enable_global_analysis="" typeset lint_args="" typeset -a c_files=() typeset -a files=() readonly os_name=$(uname -s) readonly machine_type=$(uname -m) if [[ ! -d build || ! -f build/compile_commands.json ]] then echo "You need to run \`meson\` to configure the build before we can lint the source." >&2 exit 1 fi # Deal with any CLI flags. while [[ "${#}" -ne 0 ]] do case "${1}" in --all | all ) all=yes enable_global_analysis='-enable-global-analysis' ;; * ) break ;; esac shift done if [[ ${all} == yes && "${#}" -ne 0 ]] then echo "Unexpected arguments: '${1}'" >&2 exit 1 fi # Figure out which files to lint. if [[ ${all} == yes ]] then files=( $(find src -name "*.c") ) elif [[ "${#}" -ne 0 ]] then for next_file in "$@" do if [[ -f ${next_file} ]] then files+=( "${next_file}" ) elif [[ -d ${next_file} ]] then files+=( $(find "${next_file}" -name "*.c") ) fi done else # We haven't been asked to lint all the source or specific files. If there are uncommitted # changes lint those, else lint the files in the most recent commit. Select (cached files) # (modified but not cached, and untracked files). files=( $(git diff-index --cached HEAD --name-only) ) files+=( $(git ls-files --exclude-standard --others --modified) ) if [[ "${#files[@]}" -eq 0 ]] then # No pending changes so lint the files in the most recent commit. files=( $(git diff-tree --no-commit-id --name-only -r HEAD) ) fi fi # Filter out non C source files. for file in "${files[@]}" do case "${file}" in *.c ) if [[ -f "${file}" ]] then c_files+=( "../${file}" ) fi ;; esac done cd build || exit 1 # We need to limit the source modules to those for which we have build rules. We also need to # produce a version of the compile_commands.json file that only contains the files to be linted. # Finally, we need the `-D` and `-I` flags from the build rule for the IWYU and cppcheck programs. readonly project_file="compile_commands_partial.json" c_files=( $(../scripts/partition_compile_db compile_commands.json ${project_file} "${c_files[@]}") ) if [[ "${#c_files[@]}" -eq 0 ]] then echo >&2 echo 'WARNING: No C files to check' >&2 echo >&2 exit 1 fi # On some platforms (e.g., macOS) oclint can't find the system headers. So ask the real compiler # to tell us where they are and pass that information to oclint. # # Passing this path via the compiler `-isystem` flag also keeps oclint from complaining about # problems with the system headers. # # We also need this value for cppcheck to find some system headers again, on platforms like macOS, # where the system headers aren't found at /usr/include. readonly system_hdrs="$(clang -H -E ../etc/hdrs.c 2>&1 | sed -ne 's,^\. \(.*\)/.*$,\1,p' -e '1,$!t' -e 'q')" # On macOS the system headers used by `clang` may not be rooted at /usr/include. lint_args=( -I. -I"${system_hdrs}" ) # This is needed with clang on macOS. Without it `cppcheck` fails with # `#error Unsupported architecture` from `#include `. if [[ "${machine_type}" == "x86_64" ]] then lint_args+=( -D__x86_64__ -D__LP64__ ) fi if command -v include-what-you-use > /dev/null then echo echo ======================================== echo Running IWYU echo ======================================== typeset mapping_file="" case "${os_name}" in Darwin | FreeBSD | OpenBSD ) mapping_file="../etc/iwyu.bsd.map" ;; Linux | CYGWIN* ) mapping_file="../etc/iwyu.linux.map" ;; esac set +x for c_file in "${c_files[@]}" do if [[ "${mapping_file}" != "" ]] then # shellcheck disable=SC2046 include-what-you-use -Xiwyu --transitive_includes_only \ -Xiwyu --mapping_file="${mapping_file}" \ --std=c99 -Wno-expansion-to-defined -Wno-nullability-completeness \ "${lint_args[@]}" $(../scripts/extract_flags "${project_file}" "${c_file}") \ "${c_file}" 2>&1 | sed \ -e 's,^(\.\./,(,' -e 's,^\.\./,,' \ -e '/^(.* has correct #includes/d' else # hope for the best # shellcheck disable=SC2046 include-what-you-use -Xiwyu --transitive_includes_only \ --std=c99 -Wno-expansion-to-defined -Wno-nullability-completeness \ "${lint_args[@]}" $(../scripts/extract_flags "${project_file}" "${c_file}") \ "${c_file}" 2>&1 | sed \ -e 's,^(\.\./,(,' -e 's,^\.\./,,' \ -e '/^(.* has correct #includes/d' fi done set +x fi if command -v cppcheck > /dev/null then echo echo ======================================== echo Running cppcheck echo ======================================== # The stderr to stdout redirection is because cppcheck, incorrectly IMHO, writes its # diagnostic messages to stderr. Anyone running this who wants to capture its output will # expect those messages to be written to stdout. readonly cn="$(tput sgr0 | sed -e 's/'$'\xf''$//')" readonly cb="$(tput bold)" readonly cu="$(tput smul)" readonly cm="$(tput setaf 125)" readonly cbrm="$(tput setaf 201)" readonly template="[${cb}${cu}{file}${cn}${cb}:{line}${cn}] ${cbrm}{severity}${cm} ({id}):${cn}\\n {message}" # It should be possible to use --project=$project_file but cppcheck 1.82 doesn't correctly # extract the -D and -I flags. So we do it ourselves and pass the flags on the cppcheck # command line. for c_file in "${c_files[@]}" do flags=( $(../scripts/extract_flags ${project_file} "${c_file}") ) cppcheck "${lint_args[@]}" \ "${flags[@]}" -D_CPPCHECK \ -q --verbose --std=c99 --language=c \ --suppress=missingIncludeSystem --inline-suppr \ --enable="${cppchecks}" --rule-file=../.cppcheck.rules \ --template="${template}" \ --suppressions-list=../.cppcheck.suppressions "${c_file}" 2>&1 | sed -e 's,^\[\([^.]*\)\.\./,[\1,' done fi if command -v oclint > /dev/null then echo echo ======================================== echo Running oclint echo ======================================== # A copy of this config file has to be in the CWD (the Meson build dir). if [[ -f ../.oclint ]] then cp ../.oclint . fi # Include `-D_FORTIFY_SOURCE=0` because we don't want constant expressions # introduced by the use of macro implementations of functions like # `snprintf()` to cause spurious warnings when security fortification is # in effect. Since we're just doing static analysis the run-time checks # introduced by the indirections the _FORTIFY_SOURCE mechanism introduces # serve no purpose. oclint -p "${PWD}" -enable-clang-static-analyzer ${enable_global_analysis} \ -extra-arg="-D_OCLINT_" \ -extra-arg="-D_FORTIFY_SOURCE=0" \ -extra-arg="-isystem" -extra-arg="${system_hdrs}" "${c_files[@]}" 2>&1 | sed -e 's,^\.\./,,' fi ast-2020.0.0/bin/shellcheck000077500000000000000000000003361354756417200153450ustar00rootroot00000000000000#!/bin/sh -x # Run shellcheck on scripts under bin and scripts directories # shellcheck disable=SC2046,SC2038 shellcheck $(find .copr/ scripts/ bin/ src/lib/libast/tests | xargs file | grep "shell script" | cut -d':' -f1) ast-2020.0.0/bin/style000077500000000000000000000130221354756417200143740ustar00rootroot00000000000000#!/usr/bin/env ksh # # Usage: bin/style [all | directory_or_filename...] # # Run the source through `clang-format`. If invoked with `all` then all the # src/cmd/ksh93 source files will be linted. If invoked with one or more path # names they will be restyled. If the pathname is a directory all *.c and *.h # files inside it will be restyled. Otherwise any uncommitted source files are # restyled. If there is no uncommitted change then the files in the most # recent commit are restyled. # # shellcheck disable=SC2207 # Note: Disable SC2207 warning for the entire file since setting IFS to just # newline makes it safe to handle file names with spaces. IFS=$'\n' # This is the minimum clang-format version we require. It is possible that # older versions will produce results consistent with the latest stable version # (7.0.0 as I write this). But we know that version 3.8.0 that is included in # some distros (e.g., OpenSuse 42) does not produce compatible results. # # Requiring a compatible minimum version avoids pointless thrashing of the # code style due to some people running this script on systems with a version # of clang-format that is too old. Note that version 6.0.1 produces the same # result as 7.0.0, the current stable release, so make that the minimum. typeset -r MIN_CFORMAT_VER=6.0.1 typeset -r MAX_CFORMAT_VER=7.0.0 typeset all=no typeset git_clang_format=no typeset -a c_files=() typeset -a files=() function semver { echo $1 | awk '{ split($1, v, "."); printf "%d%03d%03d\n", v[1], v[2], v[3] }' } # Deal with any CLI flags. while [[ "${#}" -ne 0 ]] do case "${1}" in --all | all ) all=yes ;; * ) break ;; esac shift done if [[ ${all} == yes && "${#}" -ne 0 ]] then echo "Unexpected arguments: '${1}'" >&2 exit 1 fi if command -v clang-format > /dev/null then cformat_ver=$(clang-format --version | awk '{ print $3 }') if [[ $(semver $cformat_ver) -lt $(semver $MIN_CFORMAT_VER) ]] then echo echo "ERROR: clang-format version $cformat_ver less than min required $MIN_CFORMAT_VER" echo exit 1 fi if [[ $(semver $cformat_ver) -gt $(semver $MAX_CFORMAT_VER) ]] then echo echo "ERROR: clang-format version $cformat_ver greater than max allowed $MAX_CFORMAT_VER" echo exit 1 fi else echo echo 'ERROR: Cannot find clang-format command' echo exit 1 fi if [[ ${all} == yes ]] then if [[ "$(git status --porcelain --short --untracked-files=all)" != "" ]] then echo >&2 echo 'You have uncommitted changes. Cowardly refusing to restyle the entire code base.' >&2 echo 'We do not want to include style cleanups unrelated to your work in progress.' >&2 echo 'It should be sufficient to simply run `bin/style` to fix issues with your wip.' >&2 echo >&2 exit fi files=( $(find src -name "*.h" -o -name "*.c") ) elif [[ "${#}" -ne 0 ]] then for next_file in "$@" do if [[ -f ${next_file} ]] then files+=( "${next_file}" ) elif [[ -d ${next_file} ]] then files+=( $(find "${next_file}" -name "*.h" -o -name "*.c") ) fi done else # We haven't been asked to reformat all the source or specific files. If there are # uncommitted changes reformat those using `git clang-format`. Else reformat the # files in the most recent commit. Select cached files, modified but not cached, # and untracked files. files=( $(git diff-index --cached HEAD --name-only) ) files+=( $(git ls-files --exclude-standard --others --modified) ) if [[ "${#files[@]}" -ne 0 ]] then # Pending changes so restyle just the regions modified. git_clang_format=yes else # No pending changes so restyle the files in the most recent commit. files=( $(git diff-tree --no-commit-id --name-only -r HEAD) ) fi fi # Filter out non C source files. for file in "${files[@]}" do case "${file}" in *.c | *.h ) if [[ -f "${file}" ]] then c_files+=( "${file}" ) fi ;; esac done # Run the C reformatter if we have any C files if [[ "${#c_files[@]}" -eq 0 ]] then if [ "$STAGE_STYLE_FIXUPS" = 1 ] then # We're presumably being run from a git pre-commit hook so it's okay # if no C modules are in the commit. exit 0 fi echo echo 'WARNING: No C files to restyle' echo exit 1 fi if [[ ${git_clang_format} == yes ]] then if command -v git-clang-format > /dev/null then echo echo ======================================== echo Running git-clang-format echo ======================================== git add "${c_files[@]}" git-clang-format else echo echo 'ERROR: Cannot find git-clang-format command' echo exit 1 fi else echo echo ======================================== echo Running clang-format echo ======================================== for file in "${c_files[@]}" do cp "${file}" "${file}.new" # preserves mode bits clang-format "${file}" >"${file}.new" if cmp -s "${file}" "${file}.new" then rm "${file}.new" else echo "${file} was NOT correctly formatted" mv "${file}.new" "${file}" fi done fi # This feature is meant to be used from a git pre-commit hook. if [ "$STAGE_STYLE_FIXUPS" = 1 ] then git add "${c_files[@]}" fi ast-2020.0.0/bin/trigger-app-compat-tests.sh000077500000000000000000000007041354756417200205120ustar00rootroot00000000000000#!/bin/bash # Get current branch name # shellcheck disable=SC1117 current=$(git rev-parse --abbrev-ref HEAD | tr -d "\n") git branch -D application_compatibility 2>/dev/null git checkout -b application_compatibility # Use custom .travis.yml file cp app-compat-travis.yml .travis.yml git commit -a -m "Trigger application compatibility tests" git push --force -u origin application_compatibility # Switch back to previous branch git checkout "$current" ast-2020.0.0/bin/trigger-coverity-scan.sh000077500000000000000000000007241354756417200201010ustar00rootroot00000000000000#!/bin/bash # Get current branch name # shellcheck disable=SC1117 current=$(git rev-parse --abbrev-ref HEAD | tr -d "\n") # Coverity scan is triggered only for coverity_scan branch git branch -D coverity_scan 2>/dev/null git checkout -b coverity_scan # Use custom .travis.yml file for coverity cp coverity-travis.yml .travis.yml git commit -a -m "Trigger coverity scan" git push --force -u origin coverity_scan # Switch back to previous branch git checkout "$current" ast-2020.0.0/bin/upload-release.sh000077500000000000000000000043341354756417200165550ustar00rootroot00000000000000#!/bin/bash set -x SELF="$0" TAG="$1" TOKEN="$2" NV="ksh-${TAG}" usage() { printf "Usage: %s TAG TOKEN\n" "$SELF" >&2 exit 1 } die() { printf "%s: error: %s\n" "$SELF" "$*" >&2 exit 1 } # check arguments test "$TAG" = "$(git describe --tags "$TAG")" || usage test -n "$TOKEN" || usage # dump a tarball SRC_TAR="${NV}.tar" git archive --prefix="$NV/" --format="tar" HEAD -- . > "$SRC_TAR" \ || die "failed to export sources" # produce .tar.gz TAR_GZ="${NV}.tar.gz" gzip -c "$SRC_TAR" > "$TAR_GZ" || die "failed to create $TAR_GZ" # produce .tar.xz TAR_XZ="${NV}.tar.xz" xz -c "$SRC_TAR" > "$TAR_XZ" || die "failed to create $TAR_XZ" # sign the tarballs for file in "$TAR_GZ" "$TAR_XZ"; do gpg --armor --detach-sign "$file" || die "tarball signing failed" test -f "${file}.asc" || die "tarball signature was not created" done # I did these steps manually during ksh-2020.0.0 alpha release. # TODO: Find out why these API calls fail # file to store response from GitHub API # JSON="./${NV}-github-release.js" # # # create a new release on GitHub # curl "https://api.github.com/repos/att/ast/releases" \ # -o "$JSON" --fail --verbose \ # --header "Authorization: token $TOKEN" \ # --data '{ # "tag_name": "'"$TAG"'", # "target_commitish": "master", # "name": "'"$NV"'", # "draft": false, # "prerelease": true # }' || exit $? # # # parse upload URL from the response # UPLOAD_URL="$(grep '^ *"upload_url": "' "$JSON" \ # | sed -e 's/^ *"upload_url": "//' -e 's/{.*}.*$//')" # grep '^https://uploads.github.com/.*/assets$' <<< "$UPLOAD_URL" || exit $? # # # upload both .tar.gz and .tar.xz # for comp in gzip xz; do # file="${NV}.tar.${comp:0:2}" # curl "${UPLOAD_URL}?name=${file}" \ # -T "$file" --fail --verbose \ # --header "Authorization: token $TOKEN" \ # --header "Content-Type: application/x-${comp}" \ # || exit $? # done # # # upload signatures # for file in "${TAR_GZ}.asc" "${TAR_XZ}.asc"; do # curl "${UPLOAD_URL}?name=${file}" \ # -T "$file" --fail --verbose \ # --header "Authorization: token $TOKEN" \ # --header "Content-Type: text/plain" \ # || exit $? # done ast-2020.0.0/config_ast.h.in000066400000000000000000000261201354756417200154330ustar00rootroot00000000000000// These are all the symbols defined by the legacy Nmake/iffe based build // system I could identify. Some of them may no longer be relevant because we // have pruned a lot of the code that is not relevant to building the `ksh` // and related binaries and libraries. Nonetheless, those symbols are included // here just in case we've overlooked something in the transition to the Meson // build tool. // // I am explicitly including all such symbols to help us identify areas where we // may be missing a platform feature test. Such symbols will show up as // `#undef` comments after the Meson config step has been run to produce the // `build/config_ast.h` header. There will be a lot of false positives until // we have removed symbols that are known to no longer be relevant. // // TODO: At some point in the future (e.g., 2019-01-01) irrelevant items in // the following list can be removed and the preceding paragraph removed. // The following symbols are in lexical order within a given prefix; e.g., // `_lib_`. But the prefix groups are not in lexical order. The esoteric // prefix groups are listed first. The standard prefix symbols (e.g., `_sys_`, // `_hdr_`, etc.) based on tests like `cc.has_function()` or `cc.has_header()` // are enumerated later. #ifndef _CONFIG_AST_H #define _CONFIG_AST_H 1 #include #include #include #define _GNU_SOURCE 1 #define _UNIV_DEFAULT "ucb" // https://github.com/att/ast/issues/370 #define _fd_self_dir_fmt "/proc/self/fd/%d%s%s" #define _fd_pid_dir_fmt "/proc/%d/fd/%d%s%s" // These are atypical platform symbols with respect to how they are // determined. They are either hardcoded or not determined via the usual // platform feature detection and naming conventions. #mesondefine DEBUG_BUILD #mesondefine MESON_BUILD #mesondefine OSNAME #mesondefine HOSTTYPE #mesondefine BASH_MACHTYPE #mesondefine STAT_ST_MTIM #mesondefine STAT_ST_MTIMESPEC #mesondefine CONF_LIBPATH #mesondefine CONF_LIBPREFIX #mesondefine CONF_LIBSUFFIX #mesondefine N_PROC #mesondefine _PROC_PROG #mesondefine _DARWIN_C_SOURCE #mesondefine _WSL_ #mesondefine _ast_sizeof_int #mesondefine _ast_sizeof_long #mesondefine _ast_sizeof_off_t #mesondefine _ast_sizeof_pointer #mesondefine _ast_sizeof_size_t #mesondefine _ast_sizeof_int32_t #mesondefine _ast_sizeof_wchar_t #mesondefine _cmd_tput #mesondefine _dll_DYNAMIC #mesondefine _DLL_NEXT_PATH #mesondefine _may_use_threads #mesondefine _more_long_int #mesondefine _more_void_int #mesondefine _wchar_t_is_int #mesondefine _pth_addr2line #mesondefine _pth_atos #mesondefine _pth_ed #mesondefine _pipe_rw #mesondefine _socketpair_shutdown_mode #mesondefine _pipe_socketpair #mesondefine isnanl #mesondefine const_const_fts_open #mesondefine MAX_SIGNUM #mesondefine has_dev_fd // What follows are all the symbols that should be based on Meson feature // tests like `cc.has_header()` and `cc.find_library()`. #mesondefine _hdr_dl #mesondefine _hdr_dlfcn #mesondefine _hdr_dll #mesondefine _hdr_execargs #mesondefine _hdr_execinfo #mesondefine _hdr_filio #mesondefine _hdr_float #mesondefine _hdr_mach_o_dyld #mesondefine _hdr_malloc #mesondefine _hdr_math #mesondefine _hdr_mman #mesondefine _hdr_rld_interface #mesondefine _hdr_stdlib #mesondefine _hdr_sys_filio #mesondefine _hdr_sys_ldr #mesondefine _hdr_sys_pstat #mesondefine _hdr_sys_ptem #mesondefine _hdr_sys_stream #mesondefine _lib_clock_gettime #mesondefine _lib_creat64 #mesondefine _lib_dllload #mesondefine _lib_dlopen #mesondefine _lib_eaccess #mesondefine _lib_euidaccess #mesondefine _lib_faccessat #mesondefine _lib_fdopendir #mesondefine _lib_fstat64 #mesondefine _lib_fstatvfs64 #mesondefine _lib_ftruncate #mesondefine _lib_ftruncate64 #mesondefine _lib_getexecname #mesondefine _lib_getrusage #mesondefine _lib_gettimeofday #mesondefine _lib_lchmod #mesondefine _lib_lchmod_fchmodat_fallback #mesondefine _lib_loadbind #mesondefine _lib_lseek64 #mesondefine _lib_lstat #mesondefine _lib_lstat64 #mesondefine _lib_memcntl #mesondefine _lib_mmap64 #mesondefine _lib_mkostemp #mesondefine _lib_open64 #mesondefine _lib_opendir #mesondefine _lib_pipe2 #mesondefine _lib_poll #mesondefine _lib_posix_spawn #mesondefine _lib_posix_spawnattr_setfchdir #mesondefine _lib_posix_spawnattr_setsid #mesondefine _lib_posix_spawnattr_setumask #mesondefine _lib_pstat #mesondefine _lib_rewinddir #mesondefine _lib_sigqueue #mesondefine _lib_socket #mesondefine _lib_socketpair #mesondefine _lib_spawn #mesondefine _lib_spawn_mode #mesondefine _lib_spawnve #mesondefine _lib_spawnvex #mesondefine _lib_statvfs #mesondefine _lib_statvfs64 #mesondefine _lib_strlcat #mesondefine _lib_sync #mesondefine _lib_syncfs #mesondefine _lib_sysinfo #mesondefine _lib_truncate64 #mesondefine _lib_universe #mesondefine _lib_utime #mesondefine _lib_utimensat #mesondefine _lib_expm1l #mesondefine _lib_log1pl #mesondefine _lib_remainderl #mesondefine _lib_log2l #mesondefine _lib_tgammal #mesondefine _lib_lgammal #mesondefine _mem_d_fileno_dirent #mesondefine _mem_d_ino_dirent #mesondefine _mem_d_namlen_dirent #mesondefine _mem_d_reclen_dirent #mesondefine _mem_d_type_dirent #mesondefine _mem_base_rel_utsname #mesondefine _mem_idnumber_utsname #mesondefine _mem_m_type_utsname #mesondefine _mem_pgroup_inheritance // These symbols are from src/lib/libast/include/ast_common.h that was // generated on a Linux platform by the legacay IFFE mechanism. They may not // be correct for other platforms. // // TODO: Convert these to proper feature tests. #define _ast_int8_t long #define _ast_intmax_t _ast_int8_t #mesondefine _ast_intmax_long #define _ast_fltmax_t long double #mesondefine _has_sighandler_t #if !_has_sighandler_t typedef void (*sighandler_t)(int); #endif #if DEBUG_BUILD // If we're doing a debug build don't have any static (module private) functions. // This is needed on most platforms for dladdr() to give us an accurate backtrace. #define static_fn #else #define static_fn static #endif // This is a macro that can be used to silence "unused parameter" warnings from the compiler for // functions which need to accept parameters they do not use because they need to be compatible with // an interface. It's similar to the Python idiom of doing `_ = param` at the top of a function in // the same situation. // // Do not use this for `param` symbols that have side-effects when evaluated. It should only be used // for function parameters. And even then only at the very top of a function definition. #define UNUSED(param) \ do { \ (void)(param); \ } while (0) // If running under the oclint tool try to suppress some platform specific warnings. // For example, on macOS many commonly used functions are defined in terms of macros // that contain expressions which always evaluate true or false. #if _OCLINT_ #undef strcat #undef strcpy #undef strlcat #undef strlcpy #undef memcpy #undef memmove #endif // _OCLINT_ // Types that are needed in many places but which are difficult to define in the header containing // the structure definition due to circular includes that would otherwise result. typedef struct Namval Namval_t; // from name.h typedef struct Shell_s Shell_t; // from shell.h typedef struct Shbltin_s Shbltin_t; // from shcmd.h typedef struct _shlex_ Lex_t; // from shlex.h typedef struct _mac_ Mac_t; // from macro.c typedef struct pathcomp Pathcomp_t; // from path.h typedef struct edit Edit_t; // from edit.h typedef struct _timer Timer_t; // from timers.c typedef struct Optdisc_s Optdisc_t; // from option.h typedef union Shnode_u Shnode_t; // from shnodes.h typedef int (*Shbltin_f)(int, char **, Shbltin_t *); // // We need to wrap the malloc family of functions. That's because the // `job_waitsafe()` function is called from an interrupt context and // indirectly calls `malloc()`. See issue #563. // extern volatile bool vmbusy_flag; #define vmbusy() vmbusy_flag #if !NO_MALLOC_WRAPPERS extern void *ast_malloc(size_t size); extern void *ast_calloc(size_t count, size_t size); extern void *ast_realloc(void *ptr, size_t size); extern void ast_free(void *ptr); #define malloc(s) ast_malloc(s) #define calloc(c, s) ast_calloc(c, s) #define realloc(p, s) ast_realloc(p, s) #define free(p) ast_free(p) // This is not used and is not expected to be used so make sure if it is used // it causes a problem. #define valloc(s) valloc_has_no_ast_wrapper(s) #endif // !NO_MALLOC_WRAPPERS extern char *sh_getenv(const char *name); #define getenv(x) sh_getenv(x) // We need prototypes for each fallback implementation if the system doesn't // provide the function. #if !_lib_eaccess extern int eaccess(const char *pathname, int mode); #endif #if !_lib_mkostemp extern int mkostemp(char *template, int oflags); #endif #if !_lib_strlcat extern size_t strlcat(char *, const char *, size_t); extern size_t strlcpy(char *, const char *, size_t); #endif #if _lib_lchmod_fchmodat_fallback extern int lchmod(const char *path, mode_t mode); #endif // This is useful for printing debugging messages that are tagged with useful // information such as the current file, line number, function name, and // duration since the previous debug message. You must pass a format string // even if it is the empty, "", string. extern void _dprintf(const char *fname, int lineno, const char *funcname, const char *fmt, ...); #define DPRINTF(fmt, ...) _dprintf(__FILE__, __LINE__, __FUNCTION__, fmt, ##__VA_ARGS__) // Debug print of a `struct Value` object. // // Note that the function prototype uses a `const void*` because we can't use // `struct Value*` here as the src/ksh93/include/name.h header which defines // it can't be included before this header. extern void _dprint_vtp(const char *file_name, int lineno, const char *func_name, int level, const char *var_name, const void *vp); #define DPRINT_VT(vt) _dprint_vtp(__FILE__, __LINE__, __FUNCTION__, 0, #vt, &(vt)) #define DPRINT_VTP(vtp) _dprint_vtp(__FILE__, __LINE__, __FUNCTION__, 0, #vtp, vtp) // Debug print of a `struct Namval` object. // // Note that the function prototype uses a `const void*` because we can't use // `struct Namval*` here as the src/ksh93/include/name.h header which defines // it can't be included before this header. extern void _dprint_nvp(const char *file_name, const int lineno, const char *func_name, int level, const char *var_name, const void *vp); #define DPRINT_NV(nv) _dprint_nvp(__FILE__, __LINE__, __FUNCTION__, 0, #nv, &(nv)) #define DPRINT_NVP(nvp) _dprint_nvp(__FILE__, __LINE__, __FUNCTION__, 0, #nvp, nvp) // Debug print of a `struct Namref` object. // // Note that the function prototype uses a `const void*` because we can't use // `struct Namref*` here as the src/ksh93/include/name.h header which defines // it can't be included before this header. extern void _dprint_nrp(const char *file_name, const int lineno, const char *func_name, int level, const char *var_name, const void *vp); #define DPRINT_NR(nr) _dprint_nrp(__FILE__, __LINE__, __FUNCTION__, 0, #nr, &(nr)) #define DPRINT_NRP(nrp) _dprint_nrp(__FILE__, __LINE__, __FUNCTION__, 0, #nrp, nrp) // This can be used to convert an arbitrary nvflag bit mask to a symbolic form. extern const char *nvflag_to_syms(uint64_t nvflag); #endif ast-2020.0.0/coverity-travis.yml000066400000000000000000000026561354756417200164460ustar00rootroot00000000000000sudo: required language: c env: global: # COVERITY_SCAN_TOKEN - secure: "BsKgvr97ykXKfTwCHQshe4pUMsPySrbqDr1LC+8ixKap3GOHO9wz8sMlPHtIuYjMeJ7sRHiNpDcZ+GC3j3uwj3Wn+2mIIcPF/lefw6KZbxSmuPwELfXdI3MCZwOgZr2KfnsAPMbv7fWFTHwLYUCler8WI+ko9Yvc/ZC1w7hEiP8=" before_install: - sudo apt-get update - sudo apt-get install python3-pip - sudo apt-get install python3-setuptools - sudo pip3 install meson==0.44.0 # Ubuntu repositories have older version of ninja - wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip - unzip ninja-linux.zip - mv ninja ~/bin script: - exit 0 addons: coverity_scan: # GitHub project metadata project: name: ksh # Where email notification of build analysis results will be sent notification_email: svashisht@redhat.com # Commands to prepare for build_command build_command_prepend: meson -Dbuild-api-tests=false build # The command that will be added as an argument to "cov-build" to # compile your project for analysis, build_command: ninja -C build # Pattern to match selecting branches that will run analysis. We # recommend leaving this set to 'coverity_scan'. Take care in resource # usage, and consider the build frequency allowances per # https://scan.coverity.com/faq#frequency branch_pattern: coverity_scan ast-2020.0.0/etc/000077500000000000000000000000001354756417200133135ustar00rootroot00000000000000ast-2020.0.0/etc/README000066400000000000000000000002741354756417200141760ustar00rootroot00000000000000This directory is for files needed by the commands in the `bin` or `scripts` directory. These will typically be config files and the like for the tools used by those commands and scripts. ast-2020.0.0/etc/hdrs.c000066400000000000000000000002461354756417200144210ustar00rootroot00000000000000// This is a trivial program used by the `lint` script to find out where the // compiler thinks the system headers live. #include int main() { return 0; } ast-2020.0.0/etc/iwyu.bsd.map000066400000000000000000000610661354756417200155670ustar00rootroot00000000000000# Map file for the include-what-you-use tool on macOS. For some reason # the version installed by HomeBrew doesn't have useful mappings for the # system provided headers. This also has mappings for FreeBSD. [ { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["<_wctype.h>", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["<_types/_intmax_t.h>", "public", "", "public"] }, { include: ["<_types/_uintmax_t.h>", "public", "", "public"] }, { include: ["<_types/_uint8_t.h>", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["<_types/_uint64_t.h>", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["<__functional_base>", "public", "", "public"] }, { include: ["<__functional_base>", "public", "", "public"] }, { include: ["<__functional_base>", "public", "", "public"] }, { include: ["<__tree>", "public", "", "public"] }, { include: ["<__tree>", "public", "", "public"] }, { include: ["<_types/_uint32_t.h>", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["<__mutex_base>", "public", "", "public"] }, { include: ["<__hash_table>", "public", "", "public"] }, { include: ["<__hash_table>", "public", "", "public"] }, # { include: ["<>", "private", "<>", "public"] }, { symbol: ["dirent", "private", "", "public"] }, { symbol: ["pthread_t", "private", "", "public"] }, { symbol: ["termios", "private", "", "public"] }, { symbol: ["cfgetospeed", "private", "", "public"] }, { symbol: ["tcgetattr", "private", "", "public"] }, { symbol: ["tcsetattr", "private", "", "public"] }, { symbol: ["ISIG", "private", "", "public"] }, { symbol: ["ICANON", "private", "", "public"] }, { symbol: ["TCSADRAIN", "private", "", "public"] }, { symbol: ["TCSANOW", "private", "", "public"] }, { symbol: ["VEOL", "private", "", "public"] }, { symbol: ["VEOF", "private", "", "public"] }, { symbol: ["VERASE", "private", "", "public"] }, { symbol: ["VINTR", "private", "", "public"] }, { symbol: ["VKILL", "private", "", "public"] }, { symbol: ["VMIN", "private", "", "public"] }, { symbol: ["VTIME", "private", "", "public"] }, { symbol: ["VLNEXT", "private", "", "public"] }, { symbol: ["INLCR", "private", "", "public"] }, { symbol: ["PARMRK", "private", "", "public"] }, { symbol: ["IGNPAR", "private", "", "public"] }, { symbol: ["VWERASE", "private", "", "public"] }, { symbol: ["VDISCARD", "private", "", "public"] }, { symbol: ["VDSUSP", "private", "", "public"] }, { symbol: ["ECHO", "private", "", "public"] }, { symbol: ["FLUSHO", "private", "", "public"] }, { symbol: ["cc_t", "private", "", "public"] }, { symbol: ["TCSAFLUSH", "private", "", "public"] }, { symbol: ["VSUSP", "private", "", "public"] }, { symbol: ["VREPRINT", "private", "", "public"] }, { symbol: ["B1200", "private", "", "public"] }, { symbol: ["BRKINT", "private", "", "public"] }, { symbol: ["ECHOK", "private", "", "public"] }, { symbol: ["ICRNL", "private", "", "public"] }, { symbol: ["IGNCR", "private", "", "public"] }, { symbol: ["NBPG", "private", "", "public"] }, { symbol: ["wctype_t", "private", "", "public"] }, { symbol: ["iswcntrl", "private", "", "public"] }, { symbol: ["iswspace", "private", "", "public"] }, { symbol: ["towupper", "private", "", "public"] }, { symbol: ["towlower", "private", "", "public"] }, { symbol: ["iswlower", "private", "", "public"] }, { symbol: ["iswupper", "private", "", "public"] }, { symbol: ["iswalnum", "private", "", "public"] }, { symbol: ["iswprint", "private", "", "public"] }, { symbol: ["isdigit", "private", "", "public"] }, { symbol: ["isxdigit", "private", "", "public"] }, { symbol: ["isspace", "private", "", "public"] }, { symbol: ["ispunct", "private", "", "public"] }, { symbol: ["isascii", "private", "", "public"] }, { symbol: ["islower", "private", "", "public"] }, { symbol: ["isupper", "private", "", "public"] }, { symbol: ["isalpha", "private", "", "public"] }, { symbol: ["isalnum", "private", "", "public"] }, { symbol: ["iscntrl", "private", "", "public"] }, { symbol: ["isprint", "private", "", "public"] }, { symbol: ["toupper", "private", "", "public"] }, { symbol: ["tolower", "private", "", "public"] }, { symbol: ["strcasecmp", "private", "", "public"] }, { symbol: ["sigval", "private", "", "public"] }, { symbol: ["signal", "private", "", "public"] }, { symbol: ["sigaction", "private", "", "public"] }, { symbol: ["sa_handler", "private", "", "public"] }, { symbol: ["sa_sigaction", "private", "", "public"] }, { symbol: ["SIG_IGN", "private", "", "public"] }, { symbol: ["SIG_BLOCK", "private", "", "public"] }, { symbol: ["SIG_UNBLOCK", "private", "", "public"] }, { symbol: ["SIG_SETMASK", "private", "", "public"] }, { symbol: ["SIG_DFL", "private", "", "public"] }, { symbol: ["SI_ASYNCIO", "private", "", "public"] }, { symbol: ["SI_MESGQ", "private", "", "public"] }, { symbol: ["SI_QUEUE", "private", "", "public"] }, { symbol: ["SI_USER", "private", "", "public"] }, { symbol: ["SI_TIMER", "private", "", "public"] }, { symbol: ["SA_SIGINFO", "private", "", "public"] }, { symbol: ["SIGFPE", "private", "", "public"] }, { symbol: ["SIGVTALRM", "private", "", "public"] }, { symbol: ["SIGALRM", "private", "", "public"] }, { symbol: ["SIGABRT", "private", "", "public"] }, { symbol: ["SIGINFO", "private", "", "public"] }, { symbol: ["SIGIO", "private", "", "public"] }, { symbol: ["SIGIOT", "private", "", "public"] }, { symbol: ["SIGKILL", "private", "", "public"] }, { symbol: ["SIGPROF", "private", "", "public"] }, { symbol: ["SIGSYS", "private", "", "public"] }, { symbol: ["SIGTRAP", "private", "", "public"] }, { symbol: ["SIGURG", "private", "", "public"] }, { symbol: ["SIGUSR1", "private", "", "public"] }, { symbol: ["SIGUSR2", "private", "", "public"] }, { symbol: ["SIGBUS", "private", "", "public"] }, { symbol: ["SIGCHLD", "private", "", "public"] }, { symbol: ["SIGCONT", "private", "", "public"] }, { symbol: ["SIGTTIN", "private", "", "public"] }, { symbol: ["SIGINT", "private", "", "public"] }, { symbol: ["SIGQUIT", "private", "", "public"] }, { symbol: ["SIGHUP", "private", "", "public"] }, { symbol: ["SIGILL", "private", "", "public"] }, { symbol: ["SIGSTOP", "private", "", "public"] }, { symbol: ["SIGTERM", "private", "", "public"] }, { symbol: ["SIGTTOU", "private", "", "public"] }, { symbol: ["SIGWINCH", "private", "", "public"] }, { symbol: ["SIGXCPU", "private", "", "public"] }, { symbol: ["SIGXFSZ", "private", "", "public"] }, { symbol: ["SIGPIPE", "private", "", "public"] }, { symbol: ["SIGTSTP", "private", "", "public"] }, { symbol: ["SIGSEGV", "private", "", "public"] }, { symbol: ["SIGEMT", "private", "", "public"] }, { symbol: ["CLD_CONTINUED", "private", "", "public"] }, { symbol: ["CLD_STOPPED", "private", "", "public"] }, { symbol: ["CLD_TRAPPED", "private", "", "public"] }, { symbol: ["CLD_DUMPED", "private", "", "public"] }, { symbol: ["CLD_EXITED", "private", "", "public"] }, { symbol: ["CLD_KILLED", "private", "", "public"] }, { symbol: ["ILL_BADSTK", "private", "", "public"] }, { symbol: ["ILL_COPROC", "private", "", "public"] }, { symbol: ["ILL_ILLOPC", "private", "", "public"] }, { symbol: ["ILL_ILLOPN", "private", "", "public"] }, { symbol: ["ILL_PRVOPC", "private", "", "public"] }, { symbol: ["POLL_IN", "private", "", "public"] }, { symbol: ["siginfo_t", "private", "", "public"] }, { symbol: ["sig_atomic_t", "private", "", "public"] }, { symbol: ["va_end", "private", "", "public"] }, { symbol: ["va_list", "private", "", "public"] }, { symbol: ["va_start", "private", "", "public"] }, { symbol: ["NULL", "private", "", "public"] }, { symbol: ["NULL", "private", "", "public"] }, { symbol: ["NULL", "private", "", "public"] }, { symbol: ["NULL", "private", "", "public"] }, { symbol: ["off_t", "private", "", "public"] }, { symbol: ["size_t", "private", "", "public"] }, { symbol: ["ssize_t", "private", "", "public"] }, { symbol: ["intptr_t", "private", "", "public"] }, { symbol: ["gid_t", "private", "", "public"] }, { symbol: ["uid_t", "private", "", "public"] }, { symbol: ["pid_t", "private", "", "public"] }, { symbol: ["F_OK", "private", "", "public"] }, { symbol: ["R_OK", "private", "", "public"] }, { symbol: ["W_OK", "private", "", "public"] }, { symbol: ["X_OK", "private", "", "public"] }, { symbol: ["_CS_PATH", "private", "", "public"] }, { symbol: ["faccessat", "private", "", "public"] }, { symbol: ["readlink", "private", "", "public"] }, { symbol: ["mbstate_t", "private", "", "public"] }, { symbol: ["pid_t", "private", "", "public"] }, { symbol: ["uid_t", "private", "", "public"] }, { symbol: ["gid_t", "private", "", "public"] }, { symbol: ["size_t", "private", "", "public"] }, { symbol: ["ssize_t", "private", "", "public"] }, { symbol: ["int8_t", "private", "", "public"] }, { symbol: ["uint8_t", "private", "", "public"] }, { symbol: ["int16_t", "private", "", "public"] }, { symbol: ["uint16_t", "private", "", "public"] }, { symbol: ["int32_t", "private", "", "public"] }, { symbol: ["int64_t", "private", "", "public"] }, { symbol: ["uint64_t", "private", "", "public"] }, { symbol: ["intmax_t", "private", "", "public"] }, { symbol: ["uintmax_t", "private", "", "public"] }, { symbol: ["caddr_t", "private", "", "public"] }, { symbol: ["off_t", "private", "", "public"] }, { symbol: ["wint_t", "private", "", "public"] }, { symbol: ["__darwin_ino64_t", "private", "", "public"] }, { symbol: ["offsetof", "private", "", "public"] }, { symbol: ["ptrdiff_t", "private", "", "public"] }, { symbol: ["int16_t", "private", "", "public"] }, { symbol: ["uint16_t", "private", "", "public"] }, { symbol: ["int32_t", "private", "", "public"] }, { symbol: ["int64_t", "private", "", "public"] }, { symbol: ["uint64_t", "private", "", "public"] }, { symbol: ["timeval", "private", "", "public"] }, { symbol: ["gettimeofday", "private", "", "public"] }, { symbol: ["__uint32_t", "private", "", "public"] }, { symbol: ["uint32_t", "private", "", "public"] }, { symbol: ["intptr_t", "private", "", "public"] }, { symbol: ["uintptr_t", "private", "", "public"] }, { symbol: ["intmax_t", "private", "", "public"] }, { symbol: ["uintmax_t", "private", "", "public"] }, { symbol: ["tparm", "private", "", "public"] }, { symbol: ["tigetflag", "private", "", "public"] }, { symbol: ["ERR", "private", "", "public"] }, { symbol: ["OK", "private", "", "public"] }, { symbol: ["select", "private", "", "public"] }, { symbol: ["fd_set", "private", "", "public"] }, { symbol: ["FD_ISSET", "private", "", "public"] }, { symbol: ["FD_SET", "private", "", "public"] }, { symbol: ["FD_ZERO", "private", "", "public"] }, { symbol: ["_LIBCPP_VERSION", "private", "", "public"] }, { symbol: ["_LIBCPP_VERSION", "private", "", "public"] }, { symbol: ["MB_CUR_MAX", "private", "", "public"] }, { symbol: ["MB_CUR_MAX", "private", "", "public"] }, { symbol: ["S_IRUSR", "private", "", "public"] }, { symbol: ["S_IWUSR", "private", "", "public"] }, { symbol: ["S_IXUSR", "private", "", "public"] }, { symbol: ["S_IXGRP", "private", "", "public"] }, { symbol: ["S_IXOTH", "private", "", "public"] }, { symbol: ["S_ISVTX", "private", "", "public"] }, { symbol: ["S_ISGID", "private", "", "public"] }, { symbol: ["S_ISUID", "private", "", "public"] }, { symbol: ["S_IFMT", "private", "", "public"] }, { symbol: ["S_IRGRP", "private", "", "public"] }, { symbol: ["S_IWGRP", "private", "", "public"] }, { symbol: ["S_IROTH", "private", "", "public"] }, { symbol: ["S_IWOTH", "private", "", "public"] }, { symbol: ["S_IRWXG", "private", "", "public"] }, { symbol: ["S_IRWXO", "private", "", "public"] }, { symbol: ["S_IRWXU", "private", "", "public"] }, { symbol: ["timespec", "private", "", "public"] }, { symbol: ["time_t", "private", "", "public"] }, { symbol: ["__error", "private", "", "public"] }, { symbol: ["errno", "private", "", "public"] }, { symbol: ["EILSEQ", "private", "", "public"] }, { symbol: ["ENXIO", "private", "", "public"] }, { symbol: ["EPIPE", "private", "", "public"] }, { symbol: ["EWOULDBLOCK", "private", "", "public"] }, { symbol: ["ELOOP", "private", "", "public"] }, { symbol: ["EIO", "private", "", "public"] }, { symbol: ["ECONNRESET", "private", "", "public"] }, { symbol: ["ESHUTDOWN", "private", "", "public"] }, { symbol: ["EFAULT", "private", "", "public"] }, { symbol: ["ENOMEM", "private", "", "public"] }, { symbol: ["ECHILD", "private", "", "public"] }, { symbol: ["EPERM", "private", "", "public"] }, { symbol: ["EAGAIN", "private", "", "public"] }, { symbol: ["EINVAL", "private", "", "public"] }, { symbol: ["ENOENT", "private", "", "public"] }, { symbol: ["ENOSPC", "private", "", "public"] }, { symbol: ["EBADF", "private", "", "public"] }, { symbol: ["EEXIST", "private", "", "public"] }, { symbol: ["ENOTDIR", "private", "", "public"] }, { symbol: ["ENOSYS", "private", "", "public"] }, { symbol: ["EINTR", "private", "", "public"] }, { symbol: ["ERANGE", "private", "", "public"] }, { symbol: ["ESRCH", "private", "", "public"] }, { symbol: ["ENOEXEC", "private", "", "public"] }, { symbol: ["ESPIPE", "private", "", "public"] }, { symbol: ["E2BIG", "private", "", "public"] }, { symbol: ["EISDIR", "private", "", "public"] }, { symbol: ["EMLINK", "private", "", "public"] }, { symbol: ["EACCES", "private", "", "public"] }, { symbol: ["ENAMETOOLONG", "private", "", "public"] }, { symbol: ["fcntl", "private", "", "public"] }, { symbol: ["flock", "private", "", "public"] }, { symbol: ["creat", "private", "", "public"] }, { symbol: ["open", "private", "", "public"] }, { symbol: ["openat", "private", "", "public"] }, { symbol: ["FD_CLOEXEC", "private", "", "public"] }, { symbol: ["FNDELAY", "private", "", "public"] }, { symbol: ["O_APPEND", "private", "", "public"] }, { symbol: ["O_CLOEXEC", "private", "", "public"] }, { symbol: ["O_NONBLOCK", "private", "", "public"] }, { symbol: ["O_DIRECTORY", "private", "", "public"] }, { symbol: ["O_EXCL", "private", "", "public"] }, { symbol: ["O_CREAT", "private", "", "public"] }, { symbol: ["O_TRUNC", "private", "", "public"] }, { symbol: ["O_RDONLY", "private", "", "public"] }, { symbol: ["O_WRONLY", "private", "", "public"] }, { symbol: ["O_ACCMODE", "private", "", "public"] }, { symbol: ["O_RDWR", "private", "", "public"] }, { symbol: ["AT_EACCESS", "private", "", "public"] }, { symbol: ["AT_FDCWD", "private", "", "public"] }, { symbol: ["AT_SYMLINK_NOFOLLOW", "private", "", "public"] }, { symbol: ["F_GETFL", "private", "", "public"] }, { symbol: ["F_SETFL", "private", "", "public"] }, { symbol: ["F_DUPFD", "private", "", "public"] }, { symbol: ["F_GETFD", "private", "", "public"] }, { symbol: ["F_SETFD", "private", "", "public"] }, { symbol: ["F_DUPFD_CLOEXEC", "private", "", "public"] }, { symbol: ["F_SETLK", "private", "", "public"] }, { symbol: ["F_SETLKW", "private", "", "public"] }, { symbol: ["F_UNLCK", "private", "", "public"] }, { symbol: ["F_WRLCK", "private", "", "public"] }, { symbol: ["ARG_MAX", "private", "", "public"] }, { symbol: ["CHILD_MAX", "private", "", "public"] }, { symbol: ["PATH_MAX", "private", "", "public"] }, { symbol: ["PIPE_BUF", "private", "", "public"] }, { symbol: ["MB_LEN_MAX", "private", "", "public"] }, { symbol: ["LLONG_MIN", "private", "", "public"] }, { symbol: ["LLONG_MAX", "private", "", "public"] }, { symbol: ["ULLONG_MAX", "private", "", "public"] }, { symbol: ["LONG_MIN", "private", "", "public"] }, { symbol: ["ULONG_MIN", "private", "", "public"] }, { symbol: ["UCHAR_MAX", "private", "", "public"] }, { symbol: ["UINT_MAX", "private", "", "public"] }, { symbol: ["CHAR_MAX", "private", "", "public"] }, { symbol: ["CHAR_BIT", "private", "", "public"] }, { symbol: ["INT_MAX", "private", "", "public"] }, { symbol: ["INT_MIN", "private", "", "public"] }, { symbol: ["SHRT_MAX", "private", "", "public"] }, { symbol: ["SHRT_MIN", "private", "", "public"] }, { symbol: ["CLK_TCK", "private", "", "public"] }, { symbol: ["wchar_t", "private", "", "public"] }, { symbol: ["wctrans_t", "private", "", "public"] }, { symbol: ["lconv", "private", "", "public"] }, { symbol: ["localeconv", "private", "", "public"] }, { symbol: ["_POSIX_VDISABLE", "private", "", "public"] }, { symbol: ["clock_t", "private", "", "public"] }, { symbol: ["TIOCSCTTY", "private", "", "public"] }, { symbol: ["TIOCGWINSZ", "private", "", "public"] }, { symbol: ["winsize", "private", "", "public"] }, { symbol: ["sched_yield", "private", "", "public"] }, # These are because sfio.h defines these if stdio.h hasn't been included. { symbol: ["SEEK_SET", "private", "\"sfio.h\"", "public"] }, { symbol: ["SEEK_CUR", "private", "\"sfio.h\"", "public"] }, { symbol: ["SEEK_END", "private", "\"sfio.h\"", "public"] }, ] ast-2020.0.0/etc/iwyu.linux.map000066400000000000000000000033101354756417200161420ustar00rootroot00000000000000# Map file for the include-what-you-use tool on Linux. [ { include: ["", "private", "", "public"] }, { include: ["", "private", "", "public"] }, { include: ["", "private", "", "public"] }, { include: ["", "private", "", "public"] }, { include: ["", "private", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { include: ["", "public", "", "public"] }, { symbol: ["size_t", "private", "", "public"] }, { symbol: ["size_t", "private", "", "public"] }, { symbol: ["size_t", "private", "", "public"] }, { symbol: ["intmax_t", "private", "", "public"] }, { symbol: ["intmax_t", "private", "", "public"] }, { symbol: ["uint32_t", "private", "", "public"] }, { symbol: ["uint32_t", "private", "", "public"] }, { symbol: ["uint64_t", "private", "", "public"] }, { symbol: ["uint64_t", "private", "", "public"] }, { symbol: ["uintmax_t", "private", "", "public"] }, { symbol: ["uintmax_t", "private", "", "public"] }, { symbol: ["clock_gettime", "private", "", "public"] }, { symbol: ["timespec", "private", "", "public"] }, { symbol: ["memset", "private", "", "public"] }, { symbol: ["strerror", "private", "", "public"] }, ] ast-2020.0.0/etc/sfinit.c000066400000000000000000000110671354756417200147600ustar00rootroot00000000000000/*********************************************************************** * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * * and is licensed under the * * Eclipse Public License, Version 1.0 * * by AT&T Intellectual Property * * * * A copy of the License is available at * * http://www.eclipse.org/org/documents/epl-v10.html * * (with md5 checksum b35adb5213ca9657e911e9befb180842) * * * * Information and Software Systems Research * * AT&T Research * * Florham Park NJ * * * * Glenn Fowler * * David Korn * * Phong Vo * * * ***********************************************************************/ /* * generate sfio _Sftable static initializers */ #include "config_ast.h" // IWYU pragma: keep #include #include "ast_float.h" int main() { int i; #if _ast_fltmax_double char *fs = ""; char *ds = ""; char *ls = ""; #else char *fs = "F"; char *ds = ""; char *ls = "L"; #endif printf("#ifndef _def_sfinit_features\n"); printf("#define _def_sfinit_features 1\n"); printf("\n"); printf("static const float sf_flt_pow10[] =\n{\n"); for (i = 0; i <= FLT_MAX_10_EXP; i++) printf("\t1E%d%s,\n", i, fs); printf("};\n"); printf("\nstatic const double sf_dbl_pow10[] =\n{\n"); for (i = 0; i <= DBL_MAX_10_EXP; i++) printf("\t1E%d%s,\n", i, ds); printf("};\n"); #if !_ast_fltmax_double printf("\nstatic const _ast_fltmax_t sf_ldbl_pow10[] =\n{\n"); for (i = 0; i <= LDBL_MAX_10_EXP; i++) printf("\t1E%d%s,\n", i, ls); printf("};\n"); #endif printf("\nSftab_t _Sftable =\n{\n"); printf("\t{ 1E1%s, 1E2%s, 1E4%s, 1E8%s, 1E16%s, 1E32%s },\n", ls, ls, ls, ls, ls, ls); printf("\t{ 1E-1%s, 1E-2%s, 1E-4%s, 1E-8%s, 1E-16%s, 1E-32%s },\n", ls, ls, ls, ls, ls, ls); printf("\t{ '0','0', '0','1', '0','2', '0','3', '0','4',\n"); printf("\t '0','5', '0','6', '0','7', '0','8', '0','9',\n"); printf("\t '1','0', '1','1', '1','2', '1','3', '1','4',\n"); printf("\t '1','5', '1','6', '1','7', '1','8', '1','9',\n"); printf("\t '2','0', '2','1', '2','2', '2','3', '2','4',\n"); printf("\t '2','5', '2','6', '2','7', '2','8', '2','9',\n"); printf("\t '3','0', '3','1', '3','2', '3','3', '3','4',\n"); printf("\t '3','5', '3','6', '3','7', '3','8', '3','9',\n"); printf("\t '4','0', '4','1', '4','2', '4','3', '4','4',\n"); printf("\t '4','5', '4','6', '4','7', '4','8', '4','9',\n"); printf("\t '5','0', '5','1', '5','2', '5','3', '5','4',\n"); printf("\t '5','5', '5','6', '5','7', '5','8', '5','9',\n"); printf("\t '6','0', '6','1', '6','2', '6','3', '6','4',\n"); printf("\t '6','5', '6','6', '6','7', '6','8', '6','9',\n"); printf("\t '7','0', '7','1', '7','2', '7','3', '7','4',\n"); printf("\t '7','5', '7','6', '7','7', '7','8', '7','9',\n"); printf("\t '8','0', '8','1', '8','2', '8','3', '8','4',\n"); printf("\t '8','5', '8','6', '8','7', '8','8', '8','9',\n"); printf("\t '9','0', '9','1', '9','2', '9','3', '9','4',\n"); printf("\t '9','5', '9','6', '9','7', '9','8', '9','9',\n"); printf("\t},\n"); printf("\t\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_\",\n"); printf("\tsfcvinit, 0,\n"); printf("\tsffmtpos,\n"); printf("\tsffmtint,\n"); printf("\t(float*)&sf_flt_pow10[0],\n"); printf("\t(double*)&sf_dbl_pow10[0],\n"); #if _ast_fltmax_double printf("\t0,\n"); #else printf("\t(_ast_fltmax_t*)&sf_ldbl_pow10[0],\n"); printf("\t{0}, // sf_cv36[]\n"); printf("\t{0}, // sf_cv64[]\n"); printf("\t{0}, // sf_c3v36[]\n"); printf("\t{0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, // sf_ieee\n"); #endif printf("};\n"); printf("#endif\n"); return 0; } ast-2020.0.0/features/000077500000000000000000000000001354756417200143565ustar00rootroot00000000000000ast-2020.0.0/features/README000066400000000000000000000006261354756417200152420ustar00rootroot00000000000000This directory contains code for platform feature detection. Such as which header files, functions, syscalls, system libraries are available. Also, whether syscalls/functions provide specific functionality. It does not contain any code directly included in `ksh` although it may generate files (both .h and .c) that are needed to build ksh. Those generated files should be placed in the `build` directory. ast-2020.0.0/features/detect_nproc.sh000077500000000000000000000013271354756417200173710ustar00rootroot00000000000000#!/bin/sh # # Exit with a status reflecting the CPU count if we can determine it. If not # assume two CPUs since at least one test, API/trehash.c, deadlocks if the CPU # count is one. nproc=2 if getconf _NPROCESSORS_ONLN >/dev/null 2>&1 then # Some systems have a getconf that supports this var. Use it in preference # to the options below because those other mechanisms include offline CPUs. nproc=$(getconf _NPROCESSORS_ONLN) elif type nproc >/dev/null 2>&1 then # Linux and macOS but not other BSD. nproc=$(nproc) elif sysctl -n hw.ncpu >/dev/null 2>&1 then # BSD nproc=$(sysctl -n hw.ncpu) fi if [ -z "$nproc" ] then nproc=2 elif [ $nproc -lt 2 ] then nproc=2 elif [ $nproc -gt 64 ] then nproc=64 fi exit $nproc ast-2020.0.0/features/detect_wsl.sh000077500000000000000000000002251354756417200170510ustar00rootroot00000000000000#!/bin/sh # # Exit with a zero status if the system appears to be WSL (Windows Subsystem # for Linux). uname --kernel-release | grep -q 'Microsoft$' ast-2020.0.0/features/dll/000077500000000000000000000000001354756417200151315ustar00rootroot00000000000000ast-2020.0.0/features/dll/dll.c000066400000000000000000000131451354756417200160540ustar00rootroot00000000000000// TODO: Modify this to work with the Meson build system and add it to the meson.build config file. #if defined(__MVS__) && !defined(__SUSV3) #define __SUSV3 1 #endif #if _hdr_dlfcn && _lib_dlopen #include #endif #if _hdr_rld_interface #include #endif int main() { int i; #if _hdr_rld_interface void *dll; static char *local[] = {"__elf_header", "_call_add_gp_range", "_etext"}; #endif printf("\n"); printf("#if defined(__MVS__) && !defined(__SUSV3)\n"); printf("#define __SUSV3 1\n"); printf("#endif\n"); #if _hdr_dlfcn && _lib_dlopen printf("#include \n"); #endif #ifndef RTLD_LAZY i = 0; printf("\n"); printf("#define RTLD_LAZY 1\n"); #else i = 1; #endif #ifndef RTLD_NOW if (i) { i = 0; printf("\n"); } printf("#define RTLD_NOW 2\n"); #endif #ifndef RTLD_GLOBAL if (i) { i = 0; printf("\n"); } printf("#define RTLD_GLOBAL 0\n"); #endif #ifndef RTLD_LOCAL if (i) { i = 0; printf("\n"); } printf("#define RTLD_LOCAL 0\n"); #endif #ifndef RTLD_PARENT if (i) { i = 0; printf("\n"); } printf("#define RTLD_PARENT 0\n"); #endif #if defined(_hdr_mach_o_dyld) && !defined(RTLD_NEXT) if (i) { i = 0; printf("\n"); } printf("#define RTLD_NEXT ((void*)16)\n"); #endif #if _hdr_rld_interface if (!(dll = dlopen(0, RTLD_LAZY))) i = -1; else { for (i = 0; i < sizeof(local) / sizeof(local[0]); i++) if (dlsym(dll, local[i])) break; if (i >= sizeof(local) / sizeof(local[0])) i = -1; } if (i >= 0) { printf("\n"); printf("#define _DLL_RLD_SYM %s\n", local[i]); printf("#define _DLL_RLD_SYM_STR \"%s\"\n", local[i]); printf("#define _DLL_RLD_SYM_TYPE void*\n"); } #endif printf("\n"); printf("#define DLL_INFO_PREVER 0x0001 /* pre-suffix style version */\n"); printf("#define DLL_INFO_DOTVER 0x0002 /* post-suffix style version */\n"); printf("\n"); printf("typedef unsigned long (*Dll_plugin_version_f)(void);\n"); printf("typedef int (*Dllerror_f)(void*, void*, int, ...);\n"); printf("\n"); printf("typedef struct Dllinfo_s\n"); printf("{\n"); printf(" char** sibling; /* sibling dirs on $PATH */\n"); printf(" char* prefix; /* library name prefix */\n"); printf(" char* suffix; /* library name suffix */\n"); printf(" char* env; /* library path env var */\n"); printf(" int flags; /* DLL_INFO_* flags */\n"); printf("#ifdef _DLLINFO_PRIVATE_\n"); printf(" _DLLINFO_PRIVATE_\n"); printf("#endif\n"); printf("} Dllinfo_t;\n"); printf("\n"); printf("typedef struct Dllnames_s\n"); printf("{\n"); printf(" char* id;\n"); printf(" char* name;\n"); printf(" char* base;\n"); printf(" char* type;\n"); printf(" char* opts;\n"); printf(" char* path;\n"); printf(" char data[1024];\n"); printf("} Dllnames_t;\n"); printf("\n"); printf("typedef struct Dllent_s\n"); printf("{\n"); printf(" char* path;\n"); printf(" char* name;\n"); printf("#ifdef _DLLENT_PRIVATE_\n"); printf(" _DLLENT_PRIVATE_\n"); printf("#endif\n"); printf("} Dllent_t;\n"); printf("\n"); printf("typedef struct Dllscan_s\n"); printf("{\n"); printf(" void* pad;\n"); printf("#ifdef _DLLSCAN_PRIVATE_\n"); printf(" _DLLSCAN_PRIVATE_\n"); printf("#endif\n"); printf("} Dllscan_t;\n"); #if !_hdr_dlfcn || !_lib_dlopen printf("\n"); printf("extern void* dlopen(const char*, int);\n"); printf("extern void* dlsym(void*, const char*);\n"); printf("extern int dlclose(void*);\n"); printf("extern char* dlerror(void);\n"); #endif printf("\n"); printf("extern Dllinfo_t* dllinfo(void);\n"); printf( "extern void* dllplugin(const char*, const char*, const char*, unsigned long, " "unsigned long*, int, char*, size_t);\n"); printf( "extern void* dllplug(const char*, const char*, const char*, int, char*, " "size_t);\n"); printf("extern void* dllfind(const char*, const char*, int, char*, size_t);\n"); printf("extern void* dllopen(const char*, int);\n"); printf("extern void* dllnext(int);\n"); printf("extern void* dlllook(void*, const char*);\n"); printf( "extern int dllcheck(void*, const char*, unsigned long, unsigned long*);\n"); printf("extern unsigned long dllversion(void*, const char*);\n"); printf("extern char* dllerror(int);\n"); #if _hdr_rld_interface if (i >= 0) { printf("\n"); printf("extern void* _dll_next(int, _DLL_RLD_SYM_TYPE*);\n"); printf("#define dllnext(f) _dll_next(f, &_DLL_RLD_SYM)\n"); } #endif printf("\n"); printf("extern Dllscan_t* dllsopen(const char*, const char*, const char*);\n"); printf("extern Dllent_t* dllsread(Dllscan_t*);\n"); printf("extern int dllsclose(Dllscan_t*);\n"); printf("\n"); #if _hdr_rld_interface if (i >= 0) { printf("\n"); printf("extern _DLL_RLD_SYM_TYPE _DLL_RLD_SYM;\n"); } #endif printf("\n"); return 0; } ast-2020.0.0/features/dll/dll_next_path.sh000077500000000000000000000023071354756417200203170ustar00rootroot00000000000000#!/bin/sh lib= for d in /shlib /usr/shlib /lib /usr/lib do if test -d $d then for s in "*.*" "*[!a]*" do for b in libc do for i in $d/$b.$s do if test -f $i then lib=$i fi done case $lib in ?*) break 3 ;; esac done done fi done case $lib in *.[0-9]*.[0-9]*) i=`echo $lib | sed 's,\([^0-9]*[0-9]*\).*,\1,'` if test -f $i then lib=$i fi ;; esac # Some run time linkers barf with /lib/xxx if /usr/lib/xxx is there. case $lib in /usr*) ;; *) if test -f /usr$lib then lib=/usr$lib fi ;; esac case $lib in "") lib=/lib/libc.so.1 ;; esac case $lib in /usr/lib/*) case `package 2>/dev/null` in sgi.mips3) abi=/lib32 ;; sgi.mips4) abi=/lib64 ;; *) abi= ;; esac case $abi in ?*) if test -d $abi then lib=`echo $lib | sed 's,/usr/lib/,,'` lib=$abi/$lib fi ;; esac ;; esac echo $lib ast-2020.0.0/features/dll/dynamic.c000066400000000000000000000001731354756417200167220ustar00rootroot00000000000000#include #include extern struct link_dynamic _DYNAMIC; int main() { return _DYNAMIC.ld_version; } ast-2020.0.0/features/dll/meson.build000066400000000000000000000031501354756417200172720ustar00rootroot00000000000000# TODO: Add running the dll.c module. feature_data.set10('_hdr_dl', cc.has_header('dl.h', args: feature_test_args)) feature_data.set10('_hdr_dlfcn', cc.has_header('dlfcn.h', args: feature_test_args)) feature_data.set10('_hdr_dll', cc.has_header('dll.h', args: feature_test_args)) feature_data.set10('_hdr_rld_interface', cc.has_header('rld_interface.h', args: feature_test_args)) feature_data.set10('_hdr_mach_o_dyld', cc.has_header('mach-o/dyld.h', args: feature_test_args)) feature_data.set10('_sys_ldr', cc.has_header('sys/ldr.h', args: feature_test_args)) libdl_dep = cc.find_library('dl', required: false, dirs: lib_dirs) if feature_data.get('_hdr_dlfcn') == 1 dlfcn_include = '#include ' else dlfcn_include = '' endif feature_data.set10('_lib_dlopen', cc.has_function('dlopen', prefix: dlfcn_include, dependencies: libdl_dep, args: feature_test_args)) feature_data.set10('_lib_dllload', cc.has_function('dllload', prefix: dlfcn_include, dependencies: libdl_dep, args: feature_test_args)) feature_data.set10('_lib_loadbind', cc.has_function('loadbind', prefix: dlfcn_include, dependencies: libdl_dep, args: feature_test_args)) dynamic_feature_file = files('dynamic.c') dynamic_feature_result = cc.run(dynamic_feature_file, name: '_DYNAMIC check', args: feature_test_args) feature_data.set10('_dll_DYNAMIC', dynamic_feature_result.compiled()) dll_next_path = run_command('dll_next_path.sh') if dll_next_path.returncode() == 0 feature_data.set_quoted('_DLL_NEXT_PATH', dll_next_path.stdout().strip()) endif ast-2020.0.0/features/fts.c000066400000000000000000000000401354756417200153100ustar00rootroot00000000000000#include int main() {} ast-2020.0.0/features/lchmod_fallback.c000066400000000000000000000042511354756417200176110ustar00rootroot00000000000000#include #include #include #include #include #ifndef PATH_MAX #define PATH_MAX 1024 #endif static char fname_hlink[PATH_MAX]; static char fname_slink[PATH_MAX]; #define EXPECTED_SYMLINK_MODE 0751 int main() { struct stat statbuf; int rv; int pid = getpid(); // Create a file. snprintf(fname_hlink, PATH_MAX, "lchmod_fallback_hlink.%d", pid); rv = open(fname_hlink, O_WRONLY | O_CREAT, 0); if (rv == -1) { fprintf(stderr, " open rv %d errno %d\n", rv, errno); goto err_exit; } close(rv); // Symlink to the file. snprintf(fname_slink, PATH_MAX, "lchmod_fallback_slink.%d", pid); rv = symlink(fname_hlink, fname_slink); if (rv == -1) { fprintf(stderr, " symlink rv %d errno %d\n", rv, errno); goto err_exit; } // Change the modes of the symlink -- not the file. rv = fchmodat(AT_FDCWD, fname_slink, EXPECTED_SYMLINK_MODE, AT_SYMLINK_NOFOLLOW); if (rv == -1) { fprintf(stderr, " fchmodat rv %d errno %d\n", rv, errno); goto err_exit; } rv = lstat(fname_hlink, &statbuf); if (rv == -1) { fprintf(stderr, " lstat(hlink %s) rv %d errno %d\n", fname_hlink, rv, errno); goto err_exit; } fprintf(stdout, " lstat(hlink %s) mode 0%o\n", fname_hlink, statbuf.st_mode); if ((statbuf.st_mode & 0777) != 0) { fprintf(stderr, " lstat(hlink %s) mode should be 0%o is 0%o\n", fname_hlink, 0, statbuf.st_mode); goto err_exit; } rv = lstat(fname_slink, &statbuf); if (rv == -1) { fprintf(stderr, " lstat(slink %s) rv %d errno %d\n", fname_slink, rv, errno); goto err_exit; } fprintf(stdout, " lstat(slink %s) mode 0%o\n", fname_slink, statbuf.st_mode); if ((statbuf.st_mode & 0777) != EXPECTED_SYMLINK_MODE) { fprintf(stderr, " lstat(slink %s) mode should be 0%o is 0%o\n", fname_slink, EXPECTED_SYMLINK_MODE, statbuf.st_mode); goto err_exit; } return 0; err_exit: if (*fname_hlink) unlink(fname_hlink); if (*fname_slink) unlink(fname_slink); return 1; } ast-2020.0.0/features/libpath.sh000077500000000000000000000051701354756417200163430ustar00rootroot00000000000000#!/bin/sh ######################################################################## # # # This software is part of the ast package # # Copyright (c) 1985-2013 AT&T Intellectual Property # # and is licensed under the # # Eclipse Public License, Version 1.0 # # by AT&T Intellectual Property # # # # A copy of the License is available at # # http://www.eclipse.org/org/documents/epl-v10.html # # (with md5 checksum b35adb5213ca9657e911e9befb180842) # # # # Information and Software Systems Research # # AT&T Research # # Florham Park NJ # # # # Glenn Fowler # # David Korn # # Phong Vo # # # ######################################################################## set -e set -x ok=0 for i in \ -x /lib/ld.so /lib/ld-*.so /usr/lib/ld.so /lib/rld \ -f /usr/shlib/libc.so /shlib/libc.so /usr/lib/libc.so \ -r /usr/shlib/libc.so /shlib/libc.so \ -x /lib*/*ld*.so* do case $i in -*) op=$i; continue ;; esac if test $op $i then ok=1 break fi set x $i.[0-9]* if test $op $2 then ok=1 break fi done if test "$ok" = "1" then libpath=lib:LD_LIBRARY_PATH case $("$MESON_SOURCE_ROOT/scripts/hosttype") in sgi.*) if test -d /lib32 then libpath="lib32:LD_LIBRARYN32_PATH:sgi.mips3|sgi.*-n32,$libpath" fi if test -d /lib64 then libpath="lib64:LD_LIBRARY64_PATH:sgi.mips[4-9]|sgi.*-64,$libpath" fi ;; sol*.*) if test -d /lib/32 then libpath="lib/32:LD_LIBRARY_PATH_32,$libpath" fi if test -d /lib/64 then libpath="lib/64:LD_LIBRARY_PATH_64:sol.*64*,$libpath" fi ;; esac elif test -x /lib/dld.sl then libpath=lib:SHLIB_PATH elif test -x /usr/lib/dyld then libpath=lib:DYLD_LIBRARY_PATH else case $("$MESON_SOURCE_ROOT/scripts/hosttype") in ibm.*|mvs.*) libpath=lib:LIBPATH ;; *) libpath= ;; esac fi case $libpath in '') libpath=bin ;; esac echo "$libpath" exit 0 ast-2020.0.0/features/max_signum.c000066400000000000000000000010411354756417200166650ustar00rootroot00000000000000// This is used during the Meson config step to detect the largest signal number. // On some systems, such as FreeBSD, NSIG is incorrect but the platform does // define SIGRTMAX so check that first. #include #include int main() { #ifdef SIGRTMAX printf("%d\n", SIGRTMAX); return 0; #else // SIGRTMAX #ifdef _NSIG printf("%d\n", _NSIG - 1); return 0; #else // _NSIG #ifdef NSIG printf("%d\n", NSIG - 1); return 0; #else // NSIG return 1; #endif // NSIG #endif // _NSIG #endif // SIGRTMAX } ast-2020.0.0/features/meson.build000066400000000000000000000273631354756417200165330ustar00rootroot00000000000000# On WSL (Windows Subsystem for Linux) some behavior may be different than on # a real Linux system. For example, the `sigqueue()` function doesn't work at # the time I write this (see https://github.com/Microsoft/WSL/issues/1880). # So it's necessary to detect if we're running on that platform. wsl_result = run_command('detect_wsl.sh') if wsl_result.returncode() == 0 feature_data.set('_WSL_', 1) system = 'wsl' # this would otherwise be "linux" else feature_data.set('_WSL_', 0) endif # Several unit tests need to know how many processors are available. For those # tests to run reliably, especially on a VM which might have only one or two # cpus, it is important to not let the test use a potentially large default. nproc_result = run_command('detect_nproc.sh') feature_data.set('N_PROC', nproc_result.returncode()) # void ptr is larger than int feature_data.set10('_more_void_int', ptr_size > int_size) # long is larger than int feature_data.set10('_more_long_int', long_size > int_size) feature_data.set10('_ast_intmax_long', long_size == cc.sizeof('long long')) # wchar_t is at least as large as an int feature_data.set10('_wchar_t_is_int', wchar_t_size >= int_size) if system == 'openbsd' # OpenBSD puts some libraries, like libexecinfo and libiconv, in # /usr/local/lib, but the compiler doesn't automatically search there. lib_dirs = ['/usr/local/lib'] else lib_dirs = [] endif # On some platforms the math functions (e.g., `sin()`) that we need are found in # libc, on others they are found in libm. libm_dep = cc.find_library('m', required: false, dirs: lib_dirs) # On some platforms the network functions (e.g., `socket()`) that we need are found in # libc, on others they are found in libsocket and libnsl. libsocket_dep = cc.find_library('socket', required: false, dirs: lib_dirs) libnsl_dep = cc.find_library('nsl', required: false, dirs: lib_dirs) # On some platforms `dladdr()` and related functions are found in libc, # on others they are found in libdl. libdl_dep = cc.find_library('dl', required: false, dirs: lib_dirs) # On some platforms `backtrace()` and related functions are found in libc, # on others they are found in libexecinfo. libexecinfo_dep = cc.find_library('execinfo', required: false, dirs: lib_dirs) # On some platforms `fts` functions are found in libc, # on others they are found in musl-fts. libfts_dep = cc.find_library('fts', required: false, dirs: lib_dirs) # On some systems (e.g., OpenBSD) `iconv()` is in libiconv. libiconv_dep = cc.find_library('iconv', required: false, dirs: lib_dirs) # On Cygwin the message catalog functions (e.g., `catopen()`) are in this library. libcatgets_dep = cc.find_library('catgets', required: false, dirs: lib_dirs) feature_data.set10('_hdr_execinfo', cc.has_header('execinfo.h', args: feature_test_args)) feature_data.set10('_hdr_filio', cc.has_header('filio.h', args: feature_test_args)) feature_data.set10('_hdr_malloc', cc.has_header('malloc.h', args: feature_test_args)) feature_data.set10('_hdr_stdlib', cc.has_header('stdlib.h', args: feature_test_args)) feature_data.set10('_hdr_sys_filio', cc.has_header('sys/filio.h', args: feature_test_args)) feature_data.set10('_hdr_sys_ldr', cc.has_header('sys/ldr.h', args: feature_test_args)) feature_data.set10('_hdr_sys_pstat', cc.has_header('sys/pstat.h', args: feature_test_args)) feature_data.set10('_hdr_sys_ptem', cc.has_header('sys/ptem.h', args: feature_test_args)) feature_data.set10('_hdr_sys_stream', cc.has_header('stream.h', args: feature_test_args)) # The `lchmod()` function is a bit of a special-case. The platform may not provide it # directly but might provide the means to implement it. feature_data.set10('_lib_lchmod', cc.has_function('lchmod', prefix: '\n'.join(['#include ', '#include ']), args: feature_test_args)) if feature_data.get('_lib_lchmod', 0) == 0 feature_file = files('lchmod_fallback.c') feature_result = cc.run(feature_file, name: 'lchmod() fallback using fchmodat()', args: feature_test_args) if feature_result.returncode() == 0 feature_data.set10('_lib_lchmod_fchmodat_fallback', 1) feature_data.set10('_lib_lchmod', 1) endif endif feature_data.set10('_lib_getrusage', cc.has_function('getrusage', prefix: '\n'.join(['#include ', '#include ']), args: feature_test_args)) feature_data.set10('_lib_sigqueue', cc.has_function('sigqueue', prefix: '#include ', args: feature_test_args)) if not cc.has_function('isnanl', prefix: '#include ', args: feature_test_args) feature_data.set('isnanl', 'isnan') endif feature_data.set10('_lib_eaccess', cc.has_function('eaccess', prefix: '#include ', args: feature_test_args)) feature_data.set10('_lib_euidaccess', cc.has_function('euidaccess', prefix: '#include ', args: feature_test_args)) feature_data.set10('_lib_faccessat', cc.has_function('faccessat', prefix: '#include ', args: feature_test_args)) feature_data.set10('_lib_mkostemp', cc.has_function('mkostemp', prefix: '\n'.join(['#include ', '#include ']), args: feature_test_args)) feature_data.set10('_lib_strlcat', cc.has_function('strlcat', prefix: '#include ', args: feature_test_args)) feature_data.set10('_lib_utimensat', cc.has_function('utimensat', prefix: '#include ', args: feature_test_args)) feature_data.set10('_lib_sysinfo', cc.has_function('sysinfo', prefix: '#include ', args: feature_test_args)) feature_data.set10('_lib_pipe2', cc.has_function('pipe2', prefix: '#include ', args: feature_test_args)) feature_data.set10('_lib_syncfs', cc.has_function('syncfs', prefix: '#include ', args: feature_test_args)) # https://github.com/att/ast/issues/1096 # These math functions are not available on NetBSD feature_data.set10('_lib_expm1l', cc.has_function('expm1l', prefix: '#include ', args: feature_test_args, dependencies: [libm_dep])) feature_data.set10('_lib_log1pl', cc.has_function('log1pl', prefix: '#include ', args: feature_test_args, dependencies: [libm_dep])) feature_data.set10('_lib_remainderl', cc.has_function('remainderl', prefix: '#include ', args: feature_test_args, dependencies: [libm_dep])) feature_data.set10('_lib_log2l', cc.has_function('log2l', prefix: '#include ', args: feature_test_args, dependencies: [libm_dep])) feature_data.set10('_lib_tgammal', cc.has_function('tgammal', prefix: '#include ', args: feature_test_args, dependencies: [libm_dep])) feature_data.set10('_lib_lgammal', cc.has_function('lgammal', prefix: '#include ', args: feature_test_args, dependencies: [libm_dep])) socketpair_shutdown_feature_file = files('socketpair_shutdown.c') socketpair_shutdown_feature_result = cc.run( socketpair_shutdown_feature_file, name: 'fchmod() after socketpair() shutdown()', args: feature_test_args) feature_data.set10('_socketpair_shutdown_mode', socketpair_shutdown_feature_result.returncode() == 0) max_signum_feature_file = files('max_signum.c') max_signum_feature_result = cc.run( max_signum_feature_file, name: 'max signal number', args: feature_test_args) if max_signum_feature_result.returncode() == 0 feature_data.set('MAX_SIGNUM', max_signum_feature_result.stdout().strip()) else warning('Could not reliably determine the max signal number.') # Okay, we can't figure it out from the symbols provided by signal.h so # use a big number and hope for the best. We're assuming no system has a # signal number larger than 64. feature_data.set('MAX_SIGNUM', '64') endif # Does the platform provide a `sighandler_t` type? feature_data.set10('_has_sighandler_t', cc.has_type('sighandler_t', prefix: '#include ', args: feature_test_args)) feature_data.set10('_mem_d_fileno_dirent', cc.has_member('struct dirent', 'd_fileno', prefix: '#include ', args: feature_test_args)) feature_data.set10('_mem_d_ino_dirent', cc.has_member('struct dirent', 'd_ino', prefix: '#include ', args: feature_test_args)) feature_data.set10('_mem_d_reclen_dirent', cc.has_member('struct dirent', 'd_reclen', prefix: '#include ', args: feature_test_args)) feature_data.set10('_mem_d_type_dirent', cc.has_member('struct dirent', 'd_type', prefix: '#include ', args: feature_test_args)) feature_data.set10('_mem_d_namlen_dirent', cc.has_member('struct dirent', 'd_namlen', prefix: '#include ', args: feature_test_args)) if cc.has_member('struct stat', 'st_mtim', prefix: '#include ', args: feature_test_args) feature_data.set('STAT_ST_MTIM', 1) elif cc.has_member('struct stat', 'st_mtimespec', prefix: '#include ', args: feature_test_args) # Under macOS modification time field is defined as mtimespec feature_data.set('STAT_ST_MTIMESPEC', 1) else error('Cannot determine modification time field in struct stat.') endif libpath_result = run_command('libpath.sh') if libpath_result.returncode() == 0 libpath_output = libpath_result.stdout().strip() feature_data.set_quoted('CONF_LIBPATH', libpath_output) else feature_data.set_quoted('CONF_LIBPATH', '') endif # TODO: Properly detect these values. For now just use the defaults from # astconf.c so we can eventually remove that module. Note that we've been # using these defaults since switching to Meson two years ago. feature_data.set_quoted('CONF_LIBPREFIX', 'lib') feature_data.set_quoted('CONF_LIBSUFFIX', '.so') prog_result = run_command('prog.sh') if prog_result.returncode() == 0 prog_output = prog_result.stdout().strip() feature_data.set('_PROC_PROG', prog_output) endif poll_feature_file = files('poll.c') poll_feature_result = cc.run(poll_feature_file, name: 'poll() exists and is worth using', args: feature_test_args) feature_data.set10('_lib_poll', poll_feature_result.returncode() == 0) posix_spawn_feature_file = files('posix_spawn.c') posix_spawn_feature_result = cc.run(posix_spawn_feature_file, name: 'posix_spawn() exists and is worth using', args: feature_test_args) feature_data.set10('_lib_posix_spawn', posix_spawn_feature_result.returncode() == 0) # Meson adds -D_FILE_OFFSET_BITS=64 flag by default, but it does not work with # fts functions in older versions of glibc. This feature test undefines it on # such systems. https://github.com/mesonbuild/meson/issues/3519 fts_feature_file = files('fts.c') fts_feature_result = cc.compiles(fts_feature_file, name: 'Check if -D_FILE_OFFSET_BITS=64 works with fts functions', args: feature_test_args + ['-D_FILE_OFFSET_BITS=64']) if not fts_feature_result add_global_arguments('-U_FILE_OFFSET_BITS', language: 'c') endif tput = find_program('tput', required: false) feature_data.set10('_cmd_tput', tput.found()) ed = find_program('ed', required: false) if ed.found() feature_data.set_quoted('_pth_ed', ed.path()) else feature_data.set_quoted('_pth_ed', 'ed') endif atos = find_program('atos', required: false) if atos.found() feature_data.set_quoted('_pth_atos', atos.path()) endif addr2line = find_program('addr2line', required: false) if addr2line.found() feature_data.set_quoted('_pth_addr2line', addr2line.path()) endif has_dev_fd = run_command('sh', '-c', 'ls /dev/fd/9 9<&0') feature_data.set10('has_dev_fd', has_dev_fd.returncode() == 0) subdir('dll') subdir('time') subdir('utsname') ast-2020.0.0/features/poll.c000066400000000000000000000030211354756417200154640ustar00rootroot00000000000000// This detects whether a) poll() is available, and b) it works as expected // with respect to EOF. In particular with respect to fifos (named pipes). On // macOS Mojave (10.14 and probably earlier releases) the semantics when the // timeout is -1 is not what the SFIO subsystem requires and differs from most // platforms. Including not just Linux but also FreeBSD and OpenBSD. #include #include #include #include #include #include #define FIFO_FNAME "fifo_poll" void sig_handler(int sig) { exit(1); } void cleanup_fifo() { unlink(FIFO_FNAME); } int main() { if (mkfifo(FIFO_FNAME, 0600) == -1) exit(2); // Cleanup fifo at exit atexit(cleanup_fifo); if (fork() == 0) { // Child process. Open the fifo and write a single byte into it. int fd = open(FIFO_FNAME, O_WRONLY); write(fd, "x", 1); exit(0); } // If poll() is broken with respect to EOF on a fifo when timeout is -1 the // poll will hang. The alarm signal will interrupt it thus signaling failure. int fd = open(FIFO_FNAME, O_RDONLY); signal(SIGALRM, sig_handler); alarm(1); while (1) { struct pollfd po; po.fd = fd; po.events = POLLIN; po.revents = 0; int rv = poll(&po, 1, -1); if (!(po.revents & POLLIN) && !(po.revents & POLLHUP)) exit(3); char buf; rv = read(fd, &buf, 1); if (rv == 0) exit(0); // EOF detected so poll() seems to work as expected by SFIO } } ast-2020.0.0/features/posix_spawn.c000066400000000000000000000067541354756417200171100ustar00rootroot00000000000000// This is a Meson config stage feature test for posix_spawn() behavior. #include #include #include #include #include #include #include #include #include #include // If it uses fork() why bother? #undef fork pid_t fork(void) { printf("uses fork()"); return -1; } pid_t _fork(void) { printf("uses _fork()"); return -1; } pid_t __fork(void) { printf("uses __fork()"); return -1; } // Exits with status 0 if posix_spawn works, non-zero otherwise int main(int argc, char **argv) { #if __CYGWIN__ // Not only does it not work it causes the meson configure step to // take tens or minutes to complete and results in a huge cascade // of child processes. printf("Cygwin doesn't have a working posix_spawn()\n"); exit(30); #else // __CYGWIN__ char *s; pid_t pid; posix_spawnattr_t attr; int n; int status; char *cmd[3]; char tmp[1024]; if (argc > 1) { exit(signal(SIGHUP, SIG_DFL) != SIG_IGN); } signal(SIGHUP, SIG_IGN); if (posix_spawnattr_init(&attr)) { printf("posix_spawnattr_init() FAILED\n"); exit(2); } if (posix_spawnattr_setpgroup(&attr, 0)) { printf("posix_spawnattr_setpgroup() FAILED\n"); exit(3); } if (posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETPGROUP)) { printf("posix_spawnattr_setflags() FAILED\n"); exit(4); } /* first try an a.out and verify that SIGHUP is ignored */ cmd[0] = argv[0]; cmd[1] = "test"; cmd[2] = 0; if (posix_spawn(&pid, cmd[0], 0, &attr, cmd, 0)) { printf("posix_spawn() FAILED\n"); exit(5); } status = 1; if (wait(&status) < 0) { printf("wait() FAILED\n"); exit(6); } if (status != 0) { printf("SIGHUP ignored in parent not ignored in child\n"); exit(7); } /* must return exec-type errors or its useless to us *unless* there is no [v]fork() */ n = strlen(cmd[0]); if (n >= (sizeof(tmp) - 3)) { printf("test executable path too long\n"); exit(8); } strcpy(tmp, cmd[0]); tmp[n] = '.'; tmp[n + 1] = 's'; tmp[n + 2] = 'h'; tmp[n + 3] = 0; if ((n = open(tmp, O_CREAT | O_WRONLY, S_IRWXU | S_IRWXG | S_IRWXO)) < 0 || chmod(tmp, S_IRWXU | S_IRWXG | S_IRWXO) < 0 || write(n, "exit 99\n", 8) != 8 || close(n) < 0) { printf("test script create FAILED\n"); exit(9); } cmd[0] = tmp; pid = -1; if (posix_spawn(&pid, cmd[0], 0, &attr, cmd, 0)) { printf("ENOEXEC produces posix_spawn() error (BEST)\n"); exit(0); } else if (pid == -1) { printf("ENOEXEC returns pid == -1\n"); exit(10); } else if (wait(&status) != pid) { printf("ENOEXEC produces no child process\n"); exit(11); } else if (!WIFEXITED(status)) { printf("ENOEXEC produces signal exit\n"); exit(12); } else { status = WEXITSTATUS(status); if (status == 127) { printf("ENOEXEC produces exit status 127 (GOOD)\n"); exit(1); } else if (status == 99) { printf("ENOEXEC invokes sh\n"); exit(13); } else if (status == 0) { printf("ENOEXEC reports no error\n"); exit(14); } else { printf("ENOEXEC produces non-zero exit status\n"); exit(15); } } exit(20); #endif // __CYGWIN__ } ast-2020.0.0/features/prog.sh000077500000000000000000000002041354756417200156600ustar00rootroot00000000000000#!/bin/sh set -e set -x for p in /proc/self/exe /proc/self/path/a.out do if test -e $p then echo "\"$p\"" exit 0 fi done exit 1 ast-2020.0.0/features/socketpair_shutdown.c000066400000000000000000000016531354756417200206260ustar00rootroot00000000000000// This is used during the Meson config step to detect whether the platform has `socketpair()` // behavior ksh needs. #include #include #include int main() { int sfd[2]; struct stat st0; struct stat st1; if (socketpair(AF_UNIX, SOCK_STREAM, 0, sfd) < 0 || shutdown(sfd[0], 1) < 0 || shutdown(sfd[1], 0) < 0) { return 1; } if (fstat(sfd[0], &st0) < 0 || fstat(sfd[1], &st1) < 0) { return 1; } if ((st0.st_mode & (S_IRUSR | S_IWUSR)) == S_IRUSR && (st1.st_mode & (S_IRUSR | S_IWUSR)) == S_IWUSR) { return 1; } if (fchmod(sfd[0], S_IRUSR) < 0 || fstat(sfd[0], &st0) < 0 || (st0.st_mode & (S_IRUSR | S_IWUSR)) != S_IRUSR) { return 1; } if (fchmod(sfd[1], S_IWUSR) < 0 || fstat(sfd[1], &st1) < 0 || (st1.st_mode & (S_IRUSR | S_IWUSR)) != S_IWUSR) { return 1; } return 0; } ast-2020.0.0/features/time/000077500000000000000000000000001354756417200153145ustar00rootroot00000000000000ast-2020.0.0/features/time/meson.build000066400000000000000000000010121354756417200174500ustar00rootroot00000000000000# This symbol also implies the availability of `clock_settime()` since the # presence of one should mean the other API exists. feature_data.set10('_lib_clock_gettime', cc.has_function('clock_gettime', prefix: '#include ', args: feature_test_args)) # This symbol also implies the availability of `settimeofday()` since the # presence of one should mean the other API exists. feature_data.set10('_lib_gettimeofday', cc.has_function('gettimeofday', prefix: '#include ', args: feature_test_args)) ast-2020.0.0/features/utsname/000077500000000000000000000000001354756417200160325ustar00rootroot00000000000000ast-2020.0.0/features/utsname/meson.build000066400000000000000000000010251354756417200201720ustar00rootroot00000000000000feature_data.set10('_sys_syscall', cc.has_header('sys/syscall.h', args: feature_test_args)) feature_data.set10('_sys_systeminfo', cc.has_header('sys/systeminfo.h', args: feature_test_args)) feature_data.set10('_sys_syssgi', cc.has_header('sys/syssgi.h', args: feature_test_args)) feature_data.set10('_lib_syscall', cc.has_function('syscall', prefix: '#include ', args: feature_test_args)) feature_data.set10('_lib_systeminfo', cc.has_function('systeminfo', prefix: '#include ', args: feature_test_args)) ast-2020.0.0/lib/000077500000000000000000000000001354756417200133065ustar00rootroot00000000000000ast-2020.0.0/lib/package/000077500000000000000000000000001354756417200147015ustar00rootroot00000000000000ast-2020.0.0/lib/package/INIT.README000066400000000000000000001616141354756417200163340ustar00rootroot00000000000000The INIT package is required by all but the standalone and self extracting archive packages. It contains the package command, support scripts, and utilities. The package command installs binary packages, makes source packages, and generates new package tarballs. Source Package Installation Instructions: (1) Do not install packages as root/super-user. Although some components may have setuid executables, few must be owned by root. These are best changed manually when the security implications are understood. (2) Choose a package root directory and cd to it. This will be a local work area for all packages. (3) These instructions bypass the click to download package links on the download site. If you already clicked, or if your system does not have curl(1), hurl(1), lynx(1) or wget(1) then use the alternate instructions for (3),(4),(5) in plan B below. Plan B installs the hurl(1) script which works with ksh and modern bash. The top level URL is: URL=http://www.research.att.com/sw/download (4) If the bin/package script does not exist then run: test -d bin || mkdir bin url=$URL/package (wget -O - $url||curl -L $url||hurl $url) > bin/package chmod +x bin/package (5) Determine the list of package names you want from the download site, then use the package(1) command to do the actual download: bin/package authorize "NAME" password "PASSWORD" \ setup source $URL PACKAGE ... (Refer to the AUTHORIZATION paragraph on the main download page for NAME/PASSWORD details.) This downloads the closure of the latest source package(s); covered and up-to-date packages are not downloaded again unless package force ... is specified. Package content is verified using md5sum. If the package root will contain only one architecture then you can install in bin and lib instead of arch/HOSTTYPE/bin and arch/HOSTTYPE/lib by running this instead: bin/package authorize "NAME" password "PASSWORD" \ flat setup source $URL PACKAGE ... To update the same packages from the same URL run: bin/package setup source (6) Build and install; all generated files are placed under arch/HOSTTYPE ($INSTALLROOT), where HOSTTYPE is the output of bin/package (with no arguments.) name=value arguments are supported; CC and debug=1 (compile with -g instead of -O) are likely candidates. The output is written to the terminal and captured in $INSTALLROOT/lib/package/gen/make.out: bin/package make (7) List make results and interesting errors: bin/package results Run the regression tests: bin/package test List test results and errors: bin/package results test (8) The generated binaries are position independent, i.e., they do not contain hard-coded paths. However, commands with related files, like file(1) and nmake(1), require the path of the bin directory to be exported in PATH. (9) You can run the binaries directly from the package root, or you can install them in a public root after you are satisfied with the make and test actions (requires the AT&T nmake(1) command): bin/package flat install DIRECTORY PACKAGE This will install in DIRECTORY/bin and DIRECTORY/lib. If you want to preserve the arch/HOSTTYPE hierarchy under DIRECTORY then omit the flat argument. If you don't have nmake(1) then the following will do a flat install: cd $INSTALLROOT cp -p -r bin lib include DIRECTORY (10) To summarize, after the first time the download, build, and test cycle for the latest source release is: bin/package setup source bin/package make bin/package test Source Package Installation Instructions -- Plan B: (3) Create the subdirectory lib/package/tgz and download all package archives into that directory. (4) If the bin/package script does not exist then manually read the INIT source package: gunzip < lib/package/tgz/INIT.YYYY-MM-DD.tgz | tar xvf - Note that some browsers automatically unzip downloaded without warning. If the gunzip fails try: tar xvf - lib/package/tgz/INIT.YYYY-MM-DD.tgz If your system does not have tar(1) or gunzip(1) then download the ratz source package, compile it, and manually read the INIT source package: mkdir bin cp lib/package/tgz/ratz.YYYY-MM-DD.c lib/package/tgz/ratz.c cc -o bin/ratz lib/package/tgz/ratz.c bin/ratz -lm < lib/package/tgz/INIT.YYYY-MM-DD.tgz (5) Read all unread package archive(s): bin/package read Both source and binary packages will be read by this step. All recorded changes follow. :::::::: INIT :::::::: 13-12-05 Makefile,package.sh: add BIN=1 to .paths for ast -lcmd builtins 13-11-15 package.sh: fix rebuild logic to handle in-place no-map-libc <=> map-libc 13-11-14 iffe.sh: handle "opt no-name" (specifically for "opt no-map-libc" => _opt_map_libc default) 13-11-07 cc.darwin*: target 10.3 => 10.7 13-10-30 iffe.sh: fix lcl|nxt logic to work for multi-arch style implementations 13-09-25 iffe.sh: add _${API}_API_IMPLEMENT guards for implementation code 13-08-11 iffe.sh: executed blocks now have a single argument that is a tmp file prefix 13-08-11 iffe.sh: fix intrinsic function test to rule out type names 13-07-17 iffe.sh: add '^#include.*iffe --include-first' for *.c feature test macro initialization 13-07-17 package.sh: refix 13-06-17 fix to check both $CC and $CCFLAGS 13-06-24 add -lsocket => -lsocket -lnsl for systems that don't have it in -lc 13-06-17 package.sh: fix host type logic to handle -m32/-m64 almost cross-compile 13-05-21 C+probe: add ksh-2013-05-21 `...` hang workaround -- FIXME 13-05-17 package.sh: package make should continue if ksh fails to build 13-05-17 make.probe: fix CC.DIALECT+=EXPORT=DLL logic 13-05-13 MAPLIB.mk: workaround ppcc+bash not handling '-o t t.c' 13-05-01 package.sh: add ``results path old'' for *.out.* 13-03-20 make.probe: add CC.NM.NMFLAGS for stupid stupid stupid aix -Xany 13-03-06 handle incompletely defined types e.g. "typ DIR dirent.h" 12-12-05 C+probe: elide */tmp/* and */probe[0-9]* from stdinclude 12-10-25 ditto.sh: set DITTO_OPTIONS=dst=1 in destination read script 12-09-27 package.sh: fix admin log total logic 12-09-18 cc.ibm.risc: fix -O disable logic that ate next arg 12-09-11 make.probe: fix sunos cc/CC CC.STDLIB probe 12-08-24 iffe.sh: add ``api n1 = n2'' 12-07-17 iffe.sh: add C code NOTE("...") to ammend --verbose output 12-06-26 iffe.sh: fix "npt foo" to handle function-like macro foo() 12-06-20 package.sh: use $KSH for rt in "results test" 12-06-15 Makefile: add PLUGIN_LIB to $INSTALLROOT/bin/.paths and BUILTIN_LIB => PLUGIN_LIB 12-06-15 package.sh: add PLUGIN_LIB to $INSTALLROOT/bin/.paths and BUILTIN_LIB => PLUGIN_LIB 12-06-13 package.sh: handle admin.db column output 12-06-08 iffe.sh: fix 12-06-06 typo 12-06-06 iffe.sh: check for -l* in reverse and accumulative order (e.g., for -last & -lm) 12-06-04 package.sh: always check $INSTALLROOT/lib/package/profile 12-05-31 Makefile: ID=ast; $(INSTALLROOT)/prototyped.h => $(INSTALLROOT)/$(ID)/prototyped.h 12-05-28 iffe.sh: api foo YYYYMMDD => FOOAPI(rel) test macro 12-05-24 package.sh: change admin.db comment => owner attributes 12-04-25 ratz.c: add sear -k option to keep installation tmp dir on exit 12-04-17 package.sh: skip sh version logic for ``use'' 12-04-17 cc.ibm.risc*: _LARGEFILE64_SOURCE => _LARGE_FILE_API moved to libast/features 12-04-09 cc.ibm.risc*: speak aixese for _LARGEFILE64_SOURCE 12-02-29 cc.darwin.i386*: handle default cc vs kernel bittedness 12-02-29 C+probe: add __TIMESTAMP__ to the nopredefined list 12-02-29 package.sh: don't assume grep -q or /usr/local/lib in LD_LIBRARY_PATH 12-02-29 package.sh: fix ksh vs -lcmd compatibility checks 12-02-23 iffe.sh: checkcc() before checkread() for sensible diagnostics 12-02-14 package.mk: { --clobber --compare --link=lib*.a* } for --mam=static 12-02-14 package.mk: export LICENSEFILEDEFAULT instead of LICENSEFILE 12-02-14 package.sh: handle @(cc|ld).${HOSTTYPE}* intercepts 12-02-07 package.sh: add { clean clobber } actions 12-02-02 regress.sh: fix ulimit -c defaults for --nokeep 12-01-18 regress.sh: add INPUT|OUTPUT|ERROR -e 'filter' to filter before comparison 12-01-21 package.sh: fix `admin make' bug that created unused $INSTALLROOT/lib 12-01-21 Makefile: :PACKAGE: license=ast -- oops 12-01-20 cc.darwin,cc.mvs.390: tmp=/tmp/cc.${USER:-$LOGNAME}.$$.err 12-01-12 package.sh: add admin make share closure to handle alternate HOSTTYPEs 11-12-13 iffe.sh: add /**/ test code comment to disable default #include 11-11-11 C+probe: test for .so before .sl 11-10-26 package.sh: don't forget about *.pkg for admin update 11-10-18 cc.*-icc: update and add more 11-10-11 package.sh: handle package make|view when no source installed 11-09-11 package.sh: count admin '*** termination code' errors 11-08-31 mamake.c: add -e, ignore use recursive prereq timestamps 11-08-29 iffe.sh: add ``set stdio try1.h - try2.h ...'' 11-08-29 iffe.sh: trap EXIT => trap 0 for ancient sh 11-08-11 iffe.sh: handle ancient sort that doesn't have -k 11-06-01 make.probe: add more /lib64 logic 11-05-01 package.sh: fix admin ditto to sync LICENSES too 11-03-25 package.sh: initialize { $SED $TR } before first use! 11-03-21 package.sh: fix vpath probes 11-03-17 iffe.sh: fix cleanup to rm $tmp* instead of $tmp*.* 11-02-24 package.sh: change curl usage to "curl -L ..." 11-02-11 package.sh,C+probe,make.probe,mamprobe.sh: add ###.*archiac.*### 11-02-02 Makefile: add :MAPLIB: check for ancient -lw 11-02-02 make.probe: handle -print-multi-directory => 64 => /usr/lib64 /lib64 11-02-02 package.sh: HOSTTYPE=*,*cc*[,-*,...] sets CC [ and CCFLAGS ] 11-02-02 make.probe: handle gcc $ORIGIN link but exec failure -- gee thanks 11-01-25 cc.hp.ia64: bundled cc is a pile of shaving cream 11-01-07 iffe.sh: check debug==3 for is_hdr() failure 10-11-22 ditto.sh: fix timing problem between |& and exec &p 10-11-10 package.sh: fix cc cross compile check to use checkcc absolute path 10-10-10 package.sh: list main env vars at start of make action 10-10-10 ratz.c: tweak widnows delays 10-09-10 ratz.c: add _SEAR_ARGS for _SEAR_EXEC 10-09-01 package.sh: fix ratz from source logic 10-08-25 package.mk: consolidate license file search in .package.licenses. 10-08-22 ratz.c: run sear bootstrap command detached 10-08-20 C+probe: version_stamp only if version_flags works 10-08-17 package.sh: unset makerules *DIR variables in env 10-08-15 package.sh: "make" action now lists some env values 10-08-11 mktest.sh: add "DO command ..." 10-07-27 rt.sh: handle "rt X=Y ..." 10-06-29 ratz.c: non-option sear args passed to sear_exec() 10-06-25 iffe.sh: "api" op changed to not do "map-libc" type mappings 10-06-25 package.sh: "force admin ditto" => no ditto --update option 10-06-22 C+probe: handle cc that require .[ci] input for version info 10-06-21 ditto.sh: change default remote access to ssh (about time) 10-06-12 regress.sh: DISGNOSTICS [ 1 | 0 | pattern ] and fix EXIT for all 10-06-09 package.sh: add AT&T to usable nmake check 10-06-06 iffe.sh,iffe.tst: add { api ver } ops 10-04-22 package.sh: update "html binary|source" NAME/PASSWORD info 10-04-15 iffe.sh: don't forget candidate headers for hdr|sys! 10-04-11 WWW.mk: disable man page metarule -- now done by admin-man(1) 10-02-14 package.sh: $CC verification needs $INSTALLROOT/bin in PATH 10-02-11 package.sh: fix package admin make report error count 10-02-02 package.sh: fix write binary bug that did scp on local fs 10-02-02 package.mk: up to date binary targets must still be in PACKAGE.*.lst 10-01-01 package.sh: fix premature $INSTALLROOT/bin during cross compile check 10-01-01 make.probe: handle ['"] in CC.VERSION.STRING 09-12-04 iffe.sh: add "opt name" to check for name in $PACKAGE_OPTIONS 09-11-30 mktest.sh: change RESET to STATE.RESET to make it global 09-11-14 make.probe: use gcc { -print-multi-directory -print-search-dirs } 09-11-11 package.sh: re-order and combine cc checks 09-10-27 C+probe,make.probe,probe.win32: add CC.SUFFIX.DEBUG 09-10-21 iffe.sh,Makefile: test -e is not in ksh88! 09-10-06 iffe.sh: handle cc -E #error with 0 exit status (sgi) 09-10-06 package.sh: stub in ar intercept checks -- not used yet 09-10-06 ar.ibm.risc: add ar intercept because some aix require -Xfoo first!! 09-09-24 regress.sh: fix UMASK logic to create test support files before umask 09-08-28 release.c: change docs to mention stdin if no file operands 09-08-24 package.sh: fix isascii() bug that failed on od(1) trailing space 09-08-20 make.probe: add CC.SHARED.NAME 09-08-20 regress.sh: add { JOB CONTINUE EXITED KILL FIFO } 09-08-11 package.sh: filter lines containing : for package results 09-07-31 make.probe: add CC.AR.ARFLAGS (for aix ar -xany) 09-07-31 package.sh,cc.*: fix -dumpmachine to handle 32/64/* bit options 09-06-24 package.sh: fix admin.db output formatting 09-05-05 package.sh: export dll hackery environment vars 09-05-05 package.sh: handle non-identifier hostnames 09-05-05 mamake.c: pass undefined ${...} identifiers to the shell 09-05-05 mamake.rt: add macro expansion regression tests 09-05-01 iffe.sh: fix output initialization *again* 09-04-28 package.sh: handle admin.db contact field $9 09-04-15 iffe.sh: add implicit "ini" op to initialize io for subsequent ops 09-03-31 regress.sh: EXPORT before test => global ENVIRON[] 09-03-26 package.sh: test fail pattern is 'fail[es]' 09-03-26 UNIT - ... appends (options) to command line 09-03-19 TEST.mk: x.tst => x only if x is command target 09-03-15 regress.sh: add ${MAIN} for base name of main unit 09-03-10 TEST.mk: add .SOURCE:tests if tests is a dir 09-03-03 regress.sh: allow command line unit to override UNIT 09-03-03 mktest.sh: handle IO == $'\n' 09-02-02 package.sh: delay $INSTALLROOT/bin/.paths generation until mamprobe runs 09-01-30 cc.mvs.390: c89 balks at [ ()] in -Dname="..."! 09-01-27 package.sh: add isascii() to use ratz instead of tar 09-01-20 hurl.sh: add --size=bytes option 09-01-08 TEST.mk: add test.* prereqs, multiple arg lists with :T=*: binding 09-01-03 regress.sh: fix UNIT to allow command line override 09-01-03 mktest.sh: handle TWD 08-12-24 package.sh: fix cross-compile HOSTTYPE logic 08-12-15 package.sh,hurl.sh: handle http codes { 301 302 303 } 08-10-16 make.probe '-fno-stack-protector -fno-stack-protector-all' to cop out!! 08-09-30 rt.sh: fix ksh93 regression test signal count 08-09-26 regress.sh: ignore SIGPIPE for SET pipe-input 08-09-24 package.sh: package only test foo => make --recurse=only recurse tests foo 08-09-20 make.probe: handle another /usr/bin/file shared lib description 08-09-20 regress.sh: add --pipefail for SET pipe-input ... 08-09-17 Makefile: add gdbm1.c for 08-09-10 make.probe: add CC.NOPROTECT 08-08-08 mktest.sh: add --width=width 08-08-05 dbm.req: favor sleepycat ndbm compatibility 08-08-04 C+probe: fix stdlib initialization logic 08-06-24 package.sh: fix $INSTALLROOT/bin/cc intercept time stamp file typo 08-06-20 TEST.mk: make the localyunit before *.rt => *.tst -- doh 08-06-20 mktest.sh: prepend $PWD onto PATH for local units -- doh^2 08-06-11 regress.sh: fix bug that skipped the last test 08-05-20 regress.sh: add --local to put *.tmp dir in local fs 08-05-05 regress.sh: add IF command ... ELIF command ... ELSE ... FI 08-05-01 package.sh: package test => ulimit -c 0 08-04-28 regress.sh: fix EXPORT quoting 08-04-28 regress.sh: fix UNIT set check args too 08-04-24 rt.sh: exit code > 256 => signal termination 08-04-10 C+probe: change probe_so order to check .so last (macos ld workaround) 08-04-01 package.sh: handle multiple admin HOSTTYPEs per HOST 08-03-28 C+probe: add C++ #include (no extension) dir probes 08-03-17 regress.sh: fix trap on EXIT, add terminated note to final tally 08-02-28 make.probe: fix probe_warn to include ld! 08-02-02 make.probe: add CC.RUNPATH to match default -L order 08-01-31 package.sh: check lib64 for LD_LIBRARY_PATH 08-01-31 iffe.sh: tweak ancient /bin/sh workarounds 08-01-28 make.probe: darwin ld export dynamic is -force_flat_namespace 08-01-28 C+probe: handle sgi cc error message but exit 0 botch(es) 08-01-23 package.sh: fix checksum doc typo 08-01-09 C+probe: add __FUNCTION__ to the undef (don't check) list 07-12-14 iffe.sh: add set nooptimize 07-12-03 package.sh: add LC_ALL=C 07-11-27 package.sh: fix overaggressive *.md5 cleanup 07-11-20 iffe.sh: treat exit status >= 250 as normal error with no signal 07-11-05 package.sh: fix write op error count pattern 07-11-05 package.mk: fix $(~req) .ver binding 07-08-11 probe.win32: add cl.exe setuid workaround, CC.VERSION[.STRING] 07-08-01 package.sh: handle 'package read lcl|tgz' 07-05-08 regress.sh: execute basename instead of absolute path for short $0 07-04-27 cc.sgi.mips[34]: for #error to exit non-zero -- a no brainer 07-04-20 mktest.sh: defer to systems without 'grep -q' -- sigh 07-04-11 mamprobe.sh: handle $(CC.*) => ${mam_cc_*}, $(...) => ${...} 07-04-11 make.probe: fix CC.PICBIG probe, default { CC.PIC CC.DLL } to BIG 07-04-04 iffe.sh: prepend ${tst}${ext} to each .c probe 07-03-28 package.sh: fix binary tgz architecture type duplication 07-03-28 package.mk: add binary write PACKAGE.$HOSTTYPE.lst 07-03-28 iffe.sh: add -F header to mac test 07-03-23 make.probe: handle file(1) that returns 'archive' for .so 07-03-22 mamprobe.sh: fix STDED probe for implementations that ignore EOF 07-03-11 package.sh: add nocopyright and tst => nocopyright 07-03-11 package.mk: add copyright=0 07-03-08 C+probe: restore IFS after probe.ini 07-02-26 mamake.c: expand first of ${mam_lib*} for ${AR} 07-01-05 package.sh: fix "admin write binary" logic 07-01-01 iffe.sh: add "cmd" --verbose trace 07-01-01 iffe.sh: sort => LC_ALL=C sort 07-01-01 C+probe: LC_ALL=C 06-12-22 make.probe: lean on gcc -v for stdlib, but preserve /usr/local! 06-11-23 package.sh: *.md5 are not tarballs -- doh 06-11-23 iffe.sh: add -F, --features=feature-test-header 06-11-11 make.probe: favor lib64 over lib for hosttype==*64 06-10-31 make.probe: add "-ignore-source-dir -iquote" test 06-10-31 iffe.sh: add status{...} code block 06-10-11 regress.sh: fix DO to handle {...} (time for regress.tst?) 06-10-11 package.sh: handle already gunzip'd *.tgz 06-10-06 iffe.sh: add reference for header content tests 06-09-27 regress.sh: fix UMASK to do DO too (duh) 06-09-22 iffe.sh: drop -O for npt tests (for msvc intrinsics) 06-09-14 cc.darwin: drop -O until gcc 4.* gets its act together 06-09-11 package.sh: { cc ld ldd } intercepts check ${HOSTTYPE%.*} too 06-09-08 regress.sh: add PIPE INPUT|OUTPUT for pipe io 06-09-05 C+probe: add { probe_version version_stamp version_string } 06-09-05 make.probe: add version stamp comment, CC.VERSION[.STRING] 06-08-27 regress.sh,mktest.sh: add UMASK 06-08-25 regress.sh: add -b,--ignore-space,IGNORESPACE 06-08-25 mktest.sh: add IGNORESPACE 06-08-24 mktest.sh: handle \000 in data 06-08-24 regress.sh: handle -f* for INPUT|OUTPUT|ERROR 06-08-16 package.sh: fix 'install flat' logic 06-08-11 rt.sh: handle style=shell %K date format 06-07-17 ratz.c: fix __MVS__ FAR definition 06-07-17 iffe.sh: "header x.h" -- deprecate "include x.h" for .SCAN.iffe 06-07-17 package.sh: differentiate urls vs. assignments 06-06-27 rt.sh: add --failed, --heading 06-06-27 C+probe,TEST.mk,make.probe,mktest.sh,regress.sh: 'ulimit -c 0' 06-06-26 cc.darwin.ppc: handle -lcc_dynamic disappearance 06-06-25 mktest.sh: implement PROG 06-06-11 Makefile: add -ldbm :MAPLIB:, provide public MAPLIB.mk 06-05-06 package.sh: add PACKAGE_admin_tail_timeout 06-05-22 ratz.c: upgrade to zlib-1.2.3 06-05-09 package.sh: fix admin.db docs 06-03-11 package.sh: fix `package use - command ...' 06-03-05 make.probe: work around pedantic bash 3.1 mismatched " in `.` 06-02-14 package.sh: "results failed test" == "results test failed" cc.sgi.*: add _AST_cc_OPTIONS parameterization, -OPT:Olimit=0 cc.linux.ia64-icc: add for intel cc 06-02-02 package.sh: freebsd stuck with os version for all arch 06-02-01 package.mk: fix locale logic (tw -d requires dir arg) 06-01-31 package.sh: require $CC only for make|test 06-01-30 package.sh,hurl.sh: use the backwards-compatible --http-passwd package.sh: add more pdksh => /bin/sh checks 06-01-26 package.sh: wget --http-pass => --http-password package.sh: fix wget error logic hurl.sh: wget --http-pass => --http-password 06-01-11 package.mk: pass package.license.class to make --mam too package.mk: variants=pattern => --variants=pattern package.sh: darwin rel<=7 => darwin7.ppc package.sh: freebsd rel<=4 => freebsd4 package.sh: freebsd rel<=5 => freebsd5 05-12-07 iffe.sh: don't emit if | (XXX) 05-12-05 make.probe: disable readonly.exe core dump via ulimit -c 0 05-09-22 mktest.sh: add EXEC [ ++NOOUTPUT ++NOERROR ++NOEXIT ] 05-09-21 mktest.sh: fix --style=shell compare to ignore \r 05-09-12 TEST.mk: all --force to force %.rt regeneration 05-09-05 TEST.mk: regenerate from %.rt only if newer, :SAVE: %.tst 05-08-25 mktest.sh: add TEST.mk: add %.rt=>%.tst for mktest 05-08-18 package.sh: 'package host cpu' now checks $NPROC first 05-07-17 iffe.sh: add { define extern include print } ops iffe.sh: accept output{...}end output on success only -- doh 05-07-01 package.sh: add TARPROBE for tar B flag probe 05-06-24 package.sh: fix binary read chmod via *.sum 05-06-06 package.sh: fix KEEP_HOSTTYPE logic to handle synthesized types 05-06-01 make.probe: verify that cc_pic works for hosted cc cc.lynxos.ppc: make -mshared the default package.sh: note $INSTALLROOT/bin/@(cc|ld|ldd) installation 05-05-25 make.probe: add CC.INCLUDE.LOCAL instead of -I- in CC.DIALECT 05-05-24 iffe.sh: really fix grouping logic -- with tests this time package.sh: pipe/socket configuration mismatches => use /bin/sh 05-04-28 TEST.mk: add $(TESTS) 05-04-19 package.sh: package results test uses rt if possible iffe.sh: fix 'op var - ... - ...' grouping logic 05-04-15 rt.sh: handle autom4ate style 05-04-11 regress.sh: fix unit name when command line unit also specified rt.sh: handle all ast package test output formats package.sh: fix make docs for options passed to underlying make 05-04-08 package.sh: cp -p makerules.mo to $OK to preserve mtime regress.sh: add "TITLE name" to change TEST output title 05-04-01 rt.sh: add pretty make test + regress.sh wrapper 05-03-29 package.sh: test -e path => test -f path -o -d path 05-03-24 make.probe: fix CC.PICBIG probe to prefer -fPIC over -fpic -- doh 05-03-19 mamake.c: command line name=var also defines name.FORCE=var 05-03-11 regress.sh: unset LC_ALL when LC_* EXPORT'd package.sh: old make.out saved in circular make.out.[1-9] mamake.c: sync with nmake :W=O: 05-03-01 package.sh: fix flat hierarchy initialization package.sh: admin action now properly resets sibling remote logs package.mk: relax unknown/unwritten package messages to warnings package.sh: handle space in command line name=value make.probe: add mvs -Wc,dll,exportall,longname,rent to CC.DLL probe 05-02-24 package.sh: hosttype *.powerpc => *.ppc cc.lynxos.ppc,ldd.lynxos.ppc: add 05-02-22 mamake.c: fix { -G --debug-symbols -S --strip-symbols } MAMAKEFLAGS bug 05-02-20 probe.win32: handle /platformsdk mount 05-02-19 package.sh,package.mk: add write tst for tgz in tst subdir 05-02-18 package.sh: accept cc -dumpmachine with 0 or 1 - 05-02-14 package.sh: handle mutiple architectures per host in admin.db Makefile,package.sh: honor $INSTALLROOT/bin/.paths overrides package.sh: normalize trailing [-_]bits in host type iffe.sh: some ksh-compatible shells don't do *(pattern) 05-02-11 iffe.sh: back out 05-01-11 child process stdin hijack cc.lynxos.i386: -dynamic instead of -static default 05-02-10 package.sh: cyg usr/doc => usr/share/doc 05-02-08 package.sh: drop -m with pax -- delta bug fixed 2005-02-08 iffe.sh: work around old bash 0<... redirection bug 05-02-06 package.mk: source.tgz: update generated files only when they change 05-02-02 *.sh,*probe: IFS may be unset and { ash bsh } don't on startup -- wow 05-01-11 package.sh: update setup docs to include authorize+password package.mk: fix .source.cyg final directory edit package.mk: notice=1 for conspicuous empty NOTICE file WWW.mk: fix *-index.html installation filter.sh: retain input file suffix in tmp copy mamexec.c: fix non-contiguous "exec" bug that skipped lines iffe.sh: fix candidate lib test to try grouping subsequent libs iffe.sh: fix child process stdin hijack that skipped input lines iffe.sh: --shell=osh to force read -r compatibility command iffe.sh: chop iffe input leading space before # for KnR compatibility 05-01-05 package.sh: add ${TAR} ${TARFLAGS} and tar B flag for pipes mamake.c: fix makefile scan to ignore lib*.[hH] iffe.sh: immunize function/symbol tests from aggressive -O 04-12-28 WWW.mk: add :WWWPAGE: faq.*.mm index generator 04-12-21 ratz.c: make sure tmp dir is writable -- doh 04-12-08 iffe.sh: fix dat test for aggressive -O 04-12-01 iffe.sh: add `include file' to pull in #define's for `exp' 04-11-11 package.sh: default MAKESKIP is "*[-.]*" 04-10-22 ratz.c: change docs to note zlib license mamake.c: handle --debug-symbols and --strip-symbols package.sh: make (debug|strip)=1 => --(debug|strip)-symbols package.mk: add :LICENSE: => package.license.class mamake.c: fix recursive order logic 04-10-18 package.mk: add :LICENSE:, :OMIT: to omit package subdirs 04-10-11 package.sh: add 'authorize name' and 'password password' 04-10-01 iffe.sh: double check $static link with ! $static Makefile: add BUILTIN_LIB to $INSTALLROOT/bin/.paths make.probe: add CC.DIALECT EXPORT={ALL,REF,EXT,DLL} package.sh: add BUILTIN_LIB to $INSTALLROOT/bin/.paths 04-09-21 package.mk: $(init)$(name) is now an implicit prereq 04-09-09 package.sh: copy makerules.mo to $INSTALLROOT/bin/ok 04-09-01 package.mk,package.sh: rename *.txt => *.README package.mk: add the runtime package type (no *.[ah]) iffe.sh: fix key test reports 04-08-26 Makefile: { add m2.c m3.c } -lm tests for { frexp[l] ldexp[l] } 04-08-11 package.mk: handle HOSTTYPE for solaris > 9 package.sh: add `checkaout proto' for { make view } package.sh: check for { md5sum md5 } iffe.sh: add {if|elif|else|endif} test ... iffe.sh: add 'exp - expression' and '( expression )' iffe.sh: add 'name = test ...' user defined macros iffe.sh: add '! test ...' negation TEST.mk: add implied { .c .sh } generated prereq cc.darwin.ppc: handle 10.3 -dylib mess 04-08-01 package.mk: let include handle nested requirements -- duh 04-07-31 package.sh: attempt a second ping before admin assumes host down 04-07-26 package.sh: fix hp.ia64 HOSTTYPE 04-07-23 probe.win32: generalize #include dir order search 04-07-17 regress.sh: add INPUT -x for chmod +x 04-07-01 regress.sh: TMP => TWD 04-06-29 regress.sh: put COMMAND in $TWD too 04-06-21 regress.sh: mkdir -p INPUT and OUTPUT intermediate dirs TEST.mk: add :TEST: -- to disable .c .sh search 04-06-18 TEST.mk: add .SCAN.tst 04-06-17 regress.sh: TEST returns true if active, false otherwise regress.sh: add CD to change test pwd from $TWD 04-06-16 regress.sh: add TWD for ./unit.tmp override regress.sh: DO now flushes previous test regress.sh: INPUT and OUTPUT handle -f for printf instead of print 04-06-11 package.sh: make sure $INSTALLROOT/bin is in front of $PATH package.sh: skip nmake if older than 2000-10-31 04-05-20 package.sh: fix arg vs. package parse with - or '' to disambuguate 04-05-11 package.sh: package verbose update lists closure for package setup package.sh: add src/lib/libardir to nmake proto bootstrap regress.sh: probe for rm -u vs. chmod -R u+rwx 04-05-01 package.sh: $CC must be C, not C++; allow release command on $PATH 04-04-15 make.probe: check probe_libdir false positives package.sh: add lib/package/*.lic src package subdirs package.mk: add mamfile=0 to inhibit Mamfile generation iffe.sh: config name_DECLARED => HAVE_name_DECL iffe.sh: fix mac to handle default value 04-04-11 iffe.sh: normalize sed [\\\\/] quoting 04-04-04 package.mk: only checksum generated tarballs mamprobe.sh: add STDCHMOD 04-04-01 C+probe: set export LANG=C for uniform error messages make.probe: another CC.STDLIB tweak package.sh: fix regress core dump pattern, expand [a-z] match ranges 04-03-31 Makefile: add intl :MAPLIB: test make.probe: fix CC.STDLIB search; drop CC.* path duplicates 04-03-28 iffe.sh: drop unused exec $stdin<&0 dup 04-03-25 Makefile: add iconv :MAPLIB: package.sh: use ${PING:-ping -c 1 -w 4}, allowing admin.db override 04-03-24 package.mk: add *.md5 checksum for each *.(c|exe|tgz) package.sh: update base change on md5 sum instead of size iffe.sh: adjust case label \ and keyword quoting for ancient /bin/sh 04-03-22 probe.win32: ncc => nld 04-03-19 CONVERT.mk: change the instructions and old source dir default package.mk: fix recurse=list check package.mk: add *.md5 checksum for each *.(c|exe|tgz) package.sh: fix update base/delta/sync existence check 04-03-18 iffe.sh: -d2 does not remove core dumps on exit 04-03-17 package.sh: fix make recurse arg/action order 04-02-29 package.sh: add regress action to compare current and previous tests package.sh: fix sgi.mips[23] HOSTTYPE test for old irix cc package.sh: add `export variable ...' package.sh: admin action now handles host name with non-id chars package.sh: non-numeric M T W in admin.db disables that action package.sh: fix admin write binary local vs. shared clash cc.hp.pa: add _AST_CC_hp_pa_DEFAULT=+DAportable cc.hp.pa64: sync with cc.hp.pa cc.ibm.risc: -bnolibpath => -blibpath:/usr/lib:/lib probe.win32: sync with make.probe make.probe: fix last chance dynamic test make.probe: add hp.pa CC.EXPORT.DYNAMIC -Wl,-E make.probe: add ibm.risc CC.EXPORT.DYNAMIC -bexpall make.probe: move probe_dll_def to the end of probe_dll package.mk: capture subcomponent mamfile recursion 04-02-24 make.probe: strip "..." from cc/ld traces iffe.sh: add ``set [no]define'' to disable macro #define/#undef 04-02-23 make.probe: rework CC.LD search 04-02-14 make.probe: add CC.EXPORT.DYNAMIC for main dynamic sym export make.probe: resurrect CC.PIC with separate semantics from CC.DLL make.probe: add CC.SHARED.LD for CC.SHARED linker C+probe: clear DISPLAY to stifle interactive windows 04-02-11 iffe.sh: handle ``siz void*'', add cross{ ... }end make.probe: add { CC.AR CC.SIZE }, fix cross command search cc.darwin.ppc: change $cc => $CC for old ksh + libast conf bug 04-02-09 make.probe: drop -nostartfiles from CC.SHARED for C++ 04-02-04 package.sh: fix cross compilation bug that mixed binary formats 04-02-02 package.sh: package admin now ditto's bin/package too 04-01-30 cc.sgi.mips3: drop warning 3421 04-01-11 regress.sh: output label#count for tests in loops 04-01-05 regress.sh: fix bug that ignored the first SAME 04-01-04 crossexec.sh: fix typo that did not recognize rcp 03-12-19 mamake.c: add `foolib:foo:libfoo' to recurse() 03-10-11 regress.sh: add EXPORT, export COLUMNS=80 for message consistency 03-09-23 ratz.c: fix tar header number parse bug that skipped to next number regress.sh: rm cleanup now handles files matching -* 03-09-11 iffe.sh: add unnamed { ... } blocks regress.sh: add COPY from to, like MOVE but comprison still done regress.sh: rm -rfu to handle test dirs w/o u+rwx 03-08-14 Makfile: add hello.c to the manifest 03-08-11 package.sh: fix `html binary' generation 03-06-21 package.sh: fix INITROOT initialization bug package.sh: make sure admin logs exists before tail'ing 03-06-11 probe.win32: fix $(BINDIR) typo that expanded in sh instead of make cc.mvs.390: return code 4 yields exit code 3 but its *really* ok package.sh: fix onpath function global var conflict make.probe: add CC.DIALECT { GNU -dD } package.mk: add Mamfile to lcl manifest 03-06-10 package.sh: fix setup action typo that only checked the INIT package package.sh: *.s390x => *.s390-64 03-06-09 package.mk: add cyg :POSTINSTALL: 03-06-08 make.probe: fix CC.STDLIB logic hurl.sh: add User-Agent identification package.sh: tweak source and binary installation instructions cc.hp.pa,ld.hp.pa: +-Wl,+cdp,${INSTALLROOT}/lib/: drops abs lib paths ldd.hp.pa: add 03-06-06 package.sh: fix $INSTALLROOT/bin/ldd check make.probe: add CC.STDLIB verification 03-06-04 make.probe: add +forceread +noforceread 03-05-11 hurl.sh: handle http://host:port/path 03-05-06 package.sh: fix setup action PACKAGEROOT and INIT logic 03-05-05 package.mk: fix cygwin tarball names 03-04-30 package.sh: move (cc|ld|ldd).$HOSTTYPE updates from Makefile 03-04-27 make.probe: fix mvs CC.PREFIX.SHARED "lib" => "" make.probe: add CC.DLL.DIR = $(BINDIR) or $(LIBDIR) make.probe: add { CC.LD.LAZY CC.LD.NOLAZY CC.LD.RECORD CC.LD.NORECORD } probe.win32: sync with latest CC.* 03-04-25 mamprobe.sh: add args to `. $makeprobe' for ancient sh 03-04-23 package.mk: fix dup "covered by" licenses 03-04-22 probe.win32: CC.DIALECT += "LIBPP -I-" for all cc's package.sh: fix admin write binary tarball snarf 03-04-21 package.mk: package covered *.@(pkg|lic) too 03-04-15 package.mk: don't generate incremental archives for lcl package.mk: add incremental=[source:1 binary:0] archive control package.sh: generate $INSTALLROOT/bin/cc wrapper for CC != cc package.sh: admin must ditto lib/package/*.@(pkg|lic) too mamake.c: ignore time of ignore prereqs mamake.c: -D2 lists propagated times 03-04-11 package.mk: tidy up cyg tarballs package.sh: fix old shell clash between get() and $get 03-04-05 package.mk: restore *.inx generation somehow lost during cyg additions package.sh: add pthread_num_processors_np() last resort for cpu count package.sh: use `make believe' to accept mamake generated files package.sh: handle `make [make-flags] [target ...]' mamake.c: ignore -e 03-03-21 package.mk: fix cyg old make typo package.sh: switch to `package setup' instructions 03-03-19 package.sh: add registry checks for `host cpu' package.sh: `results failed' now lists core dump messages 03-03-17 package.sh: on cygwin verify 'ntsec binmode' in $CYGWIN or die Makefile: install gcc wrapper if no cc package.mk: add :DETAILS: { :README: :EXPORT: :INSTALL: :TEST: } ops 03-03-12 package.mk: add :DETAILS: for style-specific details 03-03-11 package.sh: add beta setup/update support TEST.mk: add (TESTCC) prereq for .sh tests 03-03-07 hurl.sh: add 03-03-06 iffe.sh: fix lib win32 test cygwin vs native incompatibility iffe.sh: change internal stdio.h guard to handle C++ inline vs. macro 03-03-03 package.sh: check for curl or wget for update package.sh: add setup action == update read make package.sh: fix packageroot() typo that showed up in non ~user shells mamake.c: treat name+=value args like name=value mamake.c: add ${var?*|value?match?no-match?} mamake.c: fix archive vs. dynamic bind logic 03-02-28 package.sh: add the "cyg" (cygwin) package type package.mk: add "cyg" stubs, :CATEGORY: for category name(s) 03-02-25 mamake.c: add -D4 system(3) debug trace 03-02-24 package.mk: change --mismatch to --corrupt=accept 03-02-14 ratz.c: add _WIN32 setmode([01],O_BINARY) and fopen "rb"/"wb" 03-02-12 Makefile: handle getconf LIBPATH with host pattern 03-01-31 package.mk: fix .lic search 03-01-30 package.sh: handle { INIT ksh nmake } already installed elsewhere package.sh: admin handles command outside of $PACKAGEROOT/bin Makefile: install $(INSTALLROOT)/lib/make/package.mk 03-01-28 package.sh: admin remote commands on one line to please syslog 03-01-23 probe.win32: borland and mingw32 tweaks 03-01-22 package.sh: fix $CC test to ignore set -x trace -- duh 03-01-16 ditto.sh: tw --chop on by default 03-01-14 package.sh: use /bin/cp to copy previous binaries to bin/ok/ package.sh: admin now initiates remote exec and copy from local host 03-01-12 package.sh: handle admin "xxx:" default root 03-01-03 probe.win32: add /usr/include/borland path truncation workaround 02-12-10 iffe.sh: add <&$nullin >&$nullout to checkread() $cc 02-12-06 probe.win32: fix inlcude => include typo, add lcc lib probe.win32: CC.MAKE.OPTIONS = nativepp=0 02-12-04 mamake.c: fix ${foo-bar} to expand foo if defined 02-11-28 probe.win32: add C++ and -I- CC.DIALECT checks 02-11-26 package.sh: package release now checks for second level files 02-11-22 package.sh: update action now uses HTTP/1.0 02-11-21 probe.win32: update the vc include dir test 02-11-20 make.probe: fix CC.LD.ORIGIN typo that expanded make var 02-11-13 packahe.mk: fix list.install => list.installed typo 02-11-12 make.probe: add CC.LD.ORIGIN for a.out origin dir relative dll search make.probe: add CC.LD.STRIP for link time a.out strip package.sh: fix package_use vs. PACKAGE_USE check 02-10-24 WWW.mk: fix bug that required a :WWWBIN: assertion to post 02-10-23 mamake.c: fix unuinitialized time in make() ratz.c: fix meter buffer overflow 02-10-20 package.sh: fix lib/probe/C/make/probe update test 02-10-18 probe.win32: update for mingw make.probe: add bash workaround to SHELLMAGIC test package.sh: work around yet another cygwin hassle 02-10-17 iffe.sh: short circuit id check for *[-+/\\]* 02-10-08 regress.sh: unset FIGNORE to avoid rm . errors package.sh: unset FIGNORE to avoid rm . errors package.sh: $CC must at least compile and executable hello world 02-10-04 package.sh: $INSTALLROOT/lib/package/tgz=>$PACKAGEROOT/lib/package/tgz package.mk: $(ED) => $(STDED), $(EDFLAGS) => $(STDEDFLAGS) iffe.sh: add identifier checks for tests that (implicitly) require them iffe.sh: disambiguate a few --config macros 02-10-02 iffe.sh: fix shell=bsh `hdr a/b' 02-09-30 package.sh: handle chmod of -* files package.sh: verify that $SHELL is Bourne compatible package.sh: tighten PACKAGE_USE logic PATH,LIBPATH,etc. validation iffe.sh: fix bug that didn't define mac variable on success 02-09-22 package.sh: handle admin_action=ditto iffe.sh: --config sizeof(foo) macro is SIZEOF_foo iffe.sh: fix long.long test so it doesn't defeat uwin "typ long.long" mamprobe.sh: convert $("foo") nmake string constants 02-09-21 mamprobe.sh: "-" info-path writes probe info to stdout 02-09-11 make.probe: move from nmake src to be part of mamprobe.sh mamprobe: generate from mamprobe.beg C.probe make.probe mamprobe.end mamake.c: pass cc absolute path to mamprobe package.sh: generate mamprobe -- yuk (at least its confined to INIT) iffe.sh: lcl,nxt: drop default sys/ check ditto.sh: tw --logical by default; add --physical 02-09-10 package.sh: SHELLMAGIC creeps into package too -- duh and fooey 02-09-09 ditto.sh: test that remote .profile exists before sourcing 02-09-06 package.sh: don't ditto nfs junk ditto.sh: --show now lists directory ops instead of enumerating all 02-09-05 ditto.sh: add --remote={rsh|ssh} package.sh: add admin [[{rsh|ssh|-}]:]directory 02-09-02 iffe.sh: change 'print -r --' to 'print -r -' for ksh86 compatibility 02-09-01 cc.unix.mc68k: add for ancient 3b1 02-08-22 package.sh: fix component() to test for components -- duh Makefile: add LICENSE:.DONTCARE to workaround mam 02-08-11 iffe.sh: provide defaults for LD_* additions 02-08-07 ratz.c: change -m to use * instead of non-portable inverse video 02-07-17 mamprobe.sh: close tmp file in trap before rm for cygwin package.sh: fix "type" to handle i1586 (P4) package.sh: add the view action 02-06-28 package.sh: handle multiple packages for release action 02-06-27 package.sh: catch sol*.sparc=>sol*.sun4 when CC=gcc 02-06-14 package.sh: fix admin_action to not include qualifiers package.sh: fix help/html doc typo 02-06-11 package.sh: fix ditto update doc to `PACKAGEROOT field matching *:*' 02-06-07 WWW.mk: change substitute $("\n") to \n 02-06-06 package.sh: clarify output streams for help/html 02-05-22 mamake.c: fix executable file check to use (S_IXUSR|S_IXGRP|S_IXOTH) 02-04-04 package.sh: fix update to differentiate *.sun4 and sun4 02-03-27 package.sh: yacc/bison warning only if both missing 02-03-24 mamake.c: all shell actions wrapped with -c to avoid #! problems 02-03-23 package.sh: recover $PACKAGEROOT/bin/package if not in INIT package package.sh: precheck $CC, not `cc' package.sh: fix install to use pax -ps to preserve set-uid/gid package.sh: fix install to use list.installed for existing files only 02-03-17 package.sh: fix PAX initialization that was sometimes omitted for read package.sh: fix update delta sync fetch 02-02-14 iffe.sh: fix macro{ }end docs to include " iffe.sh: add dfn to extract #define from headers iffe.sh: handle nxt #include ok but no line sync iffe.sh: drop local header clash logic iffe.sh: add -X, --exclude=dir to exclude -I dirs iffe.sh: lcl,nxt now generate <...> headers instead of "..." package.sh: admin.db root dir matching -* disables host package.mk: fix package.src.pat typo -- too many ) package.mk: add { :COVERS: :DESCRIPTION: :REQUIRES: } package.sh: handle { :COVERS: :DESCRIPTION: :REQUIRES: } Makefile: move proto.c generation to the proto component dir 02-02-02 execrate.sh: add for .exe challenged win32 systems/commands mamprobe.sh: add STD* commands/flags mamake.c: update mamprobe info when older than mamprobe executable package.sh: move ed/ex workaround to mamprobe.sh package.sh: fix `host type' bug that incorrectly assumed sun4 for sol package.sh: add execrate(1) hooks for challenged systems package.sh: add check for { cc ar nm yacc/bison } before make ratz.c: fix "rb" vs. "r" macro tests iffe.sh: add nxt, similar to lcl but defines _nxt_foo for #include iffe.sh,package.sh: remove vaibale from sccs,cvs ident strings -- duh 02-01-24 C+probe: check CC.DYNAMIC to handle cc that accept but ignore -B* iffe.sh: handle 'mem struct.a.b' 02-01-22 iffe.sh: cache (internal) `foo vs. struct foo' test results package.sh: uts.370 => uts.390 02-01-18 package.sh: fix uts hosttype 02-01-17 package.sh: add 'results failed ...' to list failures only package.sh: change ARCH internal var to all_types to avoid env conflict iffe.sh: fix hdr/lib precheck that missed some -- ouch iffe.sh: fix noexecute test that forgot to check compile first! 02-01-15 ratz.c: fix path[] type typo 02-01-01 package.mk: tighten license search 02-01-08 package.sh: `pwd` => ${PWD:-`pwd`} package.mk: expand license file pattern match 02-01-04 iffe.sh: fix `exp name "value"' bug that duped "value" iffe.sh: fix initial check to honor --config 01-12-25 iffe.sh: fix bug where -o file restored old file 01-12-23 package.mk: uniq the closure lists 01-12-07 ratz.c: fix --meter to retain paths containing " -- " 01-11-30 ratz.c: use sear_system() to execute; should work on all windows 01-11-28 ratz.c: fix sear_rm_r() to check SetCurrentDirectory() status 01-11-26 ditto.sh: drop n+=v for ksh compatibility 01-11-21 ditto.sh: add rsync script replacement [hey, it works!] package.sh: add [ditto]:directory notation to admin.db 01-10-31 package.sh: handle *.sum paths with embedded space package.sh: change executable() to onpath() package.sh: executable([!] foo) replaces test [!] -x foo (.exe hack) package.sh: add os2 fix to `host type' mamake.c: add .exe hack iffe.sh: fix intrinsic function lib test mamprobe.sh: update pic probe to match make.probe for linux.ia64 01-10-30 package.sh: make action skeleton view now checks subdirs 01-10-20 package.sh: don't recurse into leaf dirs matching $MAKESKIP package.mk: tarball package.notice replaces `license accepted' prompt package.sh: eliminate `license accepted' prompt package.sh: add update to download latest from a url package.sh: use builtin arithmetic when we know its ksh iffe.sh: unkown -> unknown 01-10-18 package.sh: convert to YYYY-MM-DD delta releases instead of NNNN package.mk: convert to YYYY-MM-DD delta releases instead of NNNN ratz.c: fix -m for paths containing \f\n\r\v 01-10-16 ratz.c: _SEA_* => SEAR_* ratz.c: preserve stdin for sear_exec() ratz.c: add recursive sear_rm_r() to sear_exec() tmp dir cleanup 01-10-10 mamprobe.sh: add mam_cc_SHELLMAGIC package.sh: add nfs wakeup call to admin to avoid stale file handles 01-10-04 cc.darwin.ppc: -flat_namespace is not longer the default (huh) 01-10-01 package make: prepend $INSTALLROOT/bin/ok to PATH package read: save cpy of bin/package when reading the INIT package mamprobe.sh: allow cc path with optional arguments 01-09-24 Makefile,package.sh: add $INSTALLROOT/bin/.paths initialization 01-09-19 package.mk: add recurse to list.package.* package.sh: bootstrap build nmake with _BLD_STATIC for _WIN32 01-09-11 ratz.c: add _SEA_SKIP & _SEA_COMMAND for self extracting archives 01-09-07 package.mk: fix output capture to not generate files names with spaces 01-09-07 package.mk: fix delta release number search 01-08-11 package.mk: handle single gz executable packages (e.g., for ksh) package.sh: fix package install to require nmake only if no *.sum iffe.sh: drop ancient menu and prompt actions; check ./hdr.h clash 01-07-17 package: fix use cross compile test to generate files in /tmp 01-06-27 ratz: handle hard and soft links if possible 01-06-07 Makefile: fix :MAPLIB: for sco 01-05-31 crossexec.sh: add iffe.sh: add -x crosstype to run crossexec iffe.sh: exp test now handles pass{}end fail{}end yes{}end no{}end package.sh: add package host canon external-host-type-name package.sh: fix `use USER' lookup for shells that support ~USER cc.*: add -dumpmachine to dump target HOSTTYPE 01-05-18 iffe.sh: drop $HOME/tmp/t.sh debug trace -- oops 01-05-01 mamake.c: scan() now handles :PACKAGE: foo:command 01-04-26 *.sh: expand [a-z][A-Z][0-9] for non-contiguous character codes iffe.sh: fix run *.sh for shells that don't $* across . command cc.mvs.390: recode for /bin/sh 01-04-25 package.mk: include non cc-g variants by default package.sh: *[._]* => *?[_.]* for mvs.390 /bin/sh 01-04-24 TEST.mk: no tests for VARIANT=="DLL" 01-04-22 package.mk,package.sh: tarball text members are ascii encoded 01-04-18 package.mk: allow package name to be the same as one of its components cc.mvs.390: handle .C .cpp .cxx cc.mvs.390: compensate for -o that does not overwrite 01-04-01 regress: fix SAME that just skipped it -- we should regress regress! iffe: fix bug that didn't emit _hdr_foo for internal hdr tests iffe: fix lcl bug for cc -E that doesn't emit line syncs ratz: add ascii=>ebcdic conversion for text archive members mamake: fix buffer overlap bug that clobbered the probe file path 01-03-17 iffe: handle : separator as first arg 01-03-15 mamake.c,ratz.c,release.c: add and 01-02-26 iffe.sh: fix bug that omitted runtime #define for `mac' op 01-02-22 cc.ibm.risc: handle SF_CLOSE clash in 01-02-14 cc.sgi.mips3,cc.sgi.mips4: handle -mips2 -mips3 -mips4 for cross cc C+probe: quote "$cc" when its an argument! mamake: execute actions with $SHELL, ignored signals back to default package.sh: nmake check error output to /dev/null package.sh: fix INIT a.out updates for knr cc package.sh: package list now handles large tgz dirs package.sh: *-ok executables moved to ok/* for *.dll systems iffe.sh: change "exec >&-" to "exec >/dev/null" else linux mkdir fails! mamake: handle `bind -lx [dontcare]' 01-02-12 ratz.c: fix _PACKAGE_ast includes package.sh: $HOSTTYPE env overrides if $PACKAGEROOT/arch/$HOSTTYPE/ package.sh: $CC ^HOSTTYPE=[A-Za-z_0-9.]*$ overrides HOSTTYPE iffe.sh: fix dat code that used previous $tmp.exe iffe.sh: fix dat code for _DLL imports 01-02-09 iffe.sh: add copy() for shells with the dissappearing here doc bug 01-02-08 Makefile: guard against null $(CC.HOSTTYPE) 01-02-06 Makefile: separate out cc,ld,ldd workarounds (so they will be packaged) 01-02-02 package.sh: fix package use for $INSTALLROOT != */$HOSTTYPE package.sh: create intermediate recursion makefiles when needed package.sh: add $SECONDS to the DEBUG trace prompt 01-01-01 ratz.c: #ifdef for uwin ncc iffe.sh,package.sh: check PACKAGE_PATH for local installations package.sh: add psrinfo for osf.alpha host cpu package.sh: change pax --meter probe; some hang on /dev/tty package.sh: fix `install flat ARCH' mamake: eliminate loops from scan order C+probe: add probe_verbose -V for aix cc=xlc cc.ibm.risc,ldd.ibm.risc: add package.mk: list refs to top-level licenses only package.mk: add local link table to change log html 00-12-25 package.sh: `no package archives' is a hard error, duh package.sh: reorder host type logic for lame shells mamake.c: getcwd => getwd for NeXT -- how about posix==default guys iffe.sh: really gross workaround for NeXT -lposix stdout null's iffe.sh: handle cc -E that insists on compiling 00-12-15 iffe.sh: ancient sh function call blows $*; call only when $# == 0 *.sh: `getopts 2>/dev/null` => `(getopts)2>/dev/null` for ancient sh package.sh: fix LD_LIBRARY*_PATH initialization cc.next.m68k: add for _POSIX_SOURCE and linker multiply defined syms 00-12-12 ratz: add --meter package.sh: a few VPATH fixes Makefile: don't override *.mips* cc if -version not accepted 00-12-11 package.mk: *.inx now contains name=value 00-12-07 package.sh: handle PC netscape . => _ pathname mangle WWW.mk: .tar.gz => .tgz 00-11-27 package.sh: add checklicense() to do license checks at read time package.mk: change component list from preformat to table 00-10-31 package.mk: *.pkg must assert closure package.mk: add cc- variants to list.package.binary package.sh: omit dups from package list package.sh: invalid arg gives one line Usage package.sh: relax checkaout checks for non-owners package.sh: package use sets NPROC if not already set or [01] proto.c: add $(INSTALLROOT)/include/ast hack 00-10-26 WWW.mk: add .SOURCE rhs to :WWWPAGE: 00-10-25 package: fix install package.mk: add list.install 00-10-22 regress: fix VIEW to skip empty dirs 00-10-19 package.mk: $(PACKAGEROOT)/bin/nmake => $(PACKAGEROOT)/bin/manmake iffe: validate #define identifiers 00-10-18 C+probe: mac os10 additions package: add DYLD_LIBRARY_PATH initialization add ldd.$(CC.HOSTTYPE) 00-10-01 iffe: handle -I* -L* options 00-09-21 mamake: add libxxx and xxx to makefile ordered prereqs 00-09-19 C+probe: add probe_longlong 00-09-11 package: drop manmake and $PACKAGEROOT/bin/nmake 00-09-08 iffe: verfiy that $cc is a C compiler 00-06-14 mamprobe: fix win32.* probe mamake: fix bug that used lower view path for generation package: don't clobber $PACKAGEROOT/bin/nmake 00-06-01 C+probe: fix stdinclude *again* package: fix write delta source to use default pax format package: add disambiguating bias for sgi.mips3 over sgi.mips4 package.mk: fix for directory content packages lib ast-locale 00-05-01 iffe: fix invalid _LIB_ macro identifier 00-04-11 C+probe: uniq stdinclude and stdlib, fix usrinclude 00-04-01 regress: fix explicit OUTPUT bug that didn't compare with expected 00-03-17 package: all archives are .tgz for binary download package: $(PACKAGEROOT)/LICENSES/* in source and binary archives package: implement install and verify actions iffe: add exp, pth file dir ..., fix lib - -lfoo, fix lib - - -la -lb iffe: -L* must affect LD_LIBRARY* hacks for .exe tests -- yuk package.mk: add *.pkg :INDEX: 00-03-07 package: add admin action 00-03-06 makefile: install optional make probe override script C+make+probe.lcl 00-02-14 --- release 1.0 --- ratz: treat "foo/" as a dir, not a regular file package: clarify source and binary installation instructions package: fix so binary packages can install without cc package: "ratz" now a non-archive package (the only one) for bootstrap package: handle VPATH=a:b arg package.mk: "ratz" package adjustments Makefile: use :PACKAGE_INIT: to support binary INIT packages WWW.mk: add :WWWALL: C.probe: fix .so check that let .dll slip through iffe: fix config sh var assignment for HAVE_member_IN_struct iffe: fix config sh var assignment for symbol_DECLARED package: delay PATH export until dll hack exports complete package: don't forget binary package $(INSTALLROOT)/lib(32|64) package: add delta change log for source packages 00-02-10 mamprobe: add mam_cc_DLLBIG package: fix spelling typos package: add html help output package.mk: beef up source and binary help => html 00-02-08 package: mkdir man/man[138] in the new arch to cover MAM bug 00-01-28 package,release: add -rcount to release package: fix linux "host cpu" and "host rating" package: copy *.lic to $PACKAGEBIN for "make" and "write binary" package: fix 'release change log' case match 00-01-24 package: add copyright action mamprobe: add -D_BLD_DLL to mam_cc_DLL 00-01-11 package: tsort for package write package: early verification that $CC works package: add non-interactive command arg for use action proto: fix -C intermediate mkdir() mamprobe: unixware.i386 ksh workaround C.probe: move hosttype to C.probe (with unixware.i386 workaround) WWW.mk: fix mm2html option quoting WWW.mk: add .SCAN.mm WWW.mk: don't force static=1; grab dll's instead *.sh: fix getopts test to handle botched implementations like osf.alpha iffe.sh: fix read -r test 99-12-25 iffe: tweak verbose messages iffe: hand code non-optget getopts parse iffe: fix bash quoting bug again iffe: do test -w . after option parse package: fix PACKAGEROOT search 99-11-19 --- release 0.2 --- 99-11-19 first working package & friends 99-10-31 change from lib0ast to INIT; add MAM and package bootstrap hostinfo: gobbled by package 99-10-01 iffe: add --config, yes{...}end no{...}end, fix read -r workaround 99-09-27 iffe: add --all --verbose, --* set options 99-09-22 regress: -v disables long line truncation 99-09-11 WWW.mk: WWWDIR and MM2HTMLINFO are now lists searched in $(HOME) 99-08-11 hostinfo: fix type sgi.mips4 99-06-24 WWW.mk: add 99-06-08 hostinfo.sh: ${TMPDIR:-/tmp} 99-06-07 TEST.mk: add 99-06-01 iffe: add `siz type' for _siz_type == sizeof(type) 99-05-11 hostinfo,iffe,regress,use: long options 99-05-01 C.probe: fix over aggressive stdinclude, e.g., /usr/include/machine 99-04-01 hostinfo: sgi.mips? -o32 and -n32 checks iffe: check that . is writable 99-03-17 hostinfo: fix for cc not found dl.c,hello.c,m.c: headers in conditionals to force .DONTCARE C.probe: extra check for include dirs pulled in by 99-03-03 regress: add `UNIT - ...' for extra args Makefile: add (_hosttype_) prereq for cc 99-01-23 hostinfo: tweak rating, use /proc/cpuinfo if there 99-01-11 C.probe: shlib before lib, /usr before / 98-12-25 iffe: work around win32.alpha intrinsic clash with -O 98-11-11 regress: fix UNIT PATH lookup 98-11-01 regress: add PROG 98-10-01 hostinfo: add unixware.* use: export PACKAGE_* 98-08-11 C.probe: add /usr/include check (for sco CC) hostinfo: handle uwin uname update 98-05-01 regress: fix bug sometimes didn't list last test 98-04-01 hostinfo: add cc path arg hostinfo: now works with /bin/sh Makefile: strengthed -lm probe 98-01-23 Makefile: check for -ldl -lm C.probe: handle gcc -v -E phony include dirs iffe: fix lcl by dropping sort -u -- we need the real first iffe: `mem x' to test if x is a non-opaque struct 98-01-11 $(INSTALLROOT)/lib32 for sgi.mips3 $(INSTALLROOT)/lib64 for sgi.mips4 add cc.hp.pa 98-01-01 cc.sgi.mips*: turn off ld library multiply defined 97-10-11 regress: add VIEW function for locating data 97-10-01 Makefile: -ldl test moved to libdll Makefile 97-08-11 regress: add MOVE regress: add SAME regress: use getopts regress: `EXEC' repeats previous test 97-07-17 use: tweak PATH and LIBPATH bootstrap order iffe: fix lcl bug that botched pathnames with embedded spaces 97-06-12 iffe: add npt `needs prototype' test 97-05-09 hostinfo: mvs.* => mvs.390 Makefile: cc.$(_hosttype_) workaround installed here iffe: fix nolink{ ... }end iffe: add [no]static{ ... }end for static link test C.probe: _probe_PATH => _probe_export which must be eval'd 97-04-01 use: _RLD_ROOT set too 97-03-17 mm2html: changed inner loop mm2html: handle .if|.ie|.el, .so mm2html: handle different man styles mm2html: differentiate mm/man in some non-obvious cases hostinfo: r5000 is not mips4 97-02-14 hostinfo: validate type with cc 96-12-25 C.probe: uwin tweaks iffe: use `...` instead of $(...) for alpha /bin/sh iffe: fix `typ' divide by 0 iffe: `lcl' now drops X: prefix iffe: +l* -> -l* iffe: eval around ${...#%...} for bsd /bin/sh use: add sgi.mips LD_LIBRARY_PATH variants use: add -e to list exports iffe: lcl leaves leading [a-zA-Z]: for dos iffe: fix no{link|output|execute} logic C.probe: don't automatically add /usr/include for non-hosted compilers C.probe: don't automatically place /usr/include last C.probe: check gcc style -v -E for stdinclude usrinclude 96-11-28 iffe: check BASH_VERSION for IFS botch iffe: typ long.xxx only if sizeof(long xxx) != sizeof(xxx) hostinfo: fix sgi.mips[234] tests hostinfo: fix ncr.i386 tests 96-10-31 iffe: work around old bsh here doc bug by running separate sh 96-10-11 iffe: *.iffe and *.iff for iffe src files hostinfo: tighten sgi.mips cpu type check 96-10-01 C.probe: add probe_libdir to catch alpha /usr/shlib 96-09-17 iffe: fix typ bug that failed for single id types! 96-08-31 hostinfo: handle recent sgi hinv cpu changes 96-07-17 make sure sizeof(long xxx)>sizeof(xxx) for typ long.xxx 96-05-09 C.probe: drop multiple / in stdinclude 96-02-29 use: package root must have bin and lib subdir mm2html: add C.probe: probe_members += -whole-archive for gcc iffe: add + fix the blasted `...'...\\...'...` 96-01-31 use: add pkg dir hostinfo: add tandem 96-01-01 hostinfo: windows_nt|windows[0-9][0-9] -> win32 95-11-24 hostinfo: linux-aout.* for non-elf linux 95-11-11 use: add aix LIBPATH 95-10-11 hostinfo: no args prints type 95-08-11 use: add 95-05-09 save original PATH in _probe_PATH beef up library dir probe 95-04-01 use c source suffix if it still preserves the dialect add hostinfo add lib/hostinfo/typemap user type map add sol.sun4 cpu count fix C.probe to properly handle C/C++ combined compiler drivers add NeXT to hostinfo bummer: mach has /usr/bin/hostinfo 95-03-19 fix dialect executable test 95-03-19 --- release 0.0 --- ast-2020.0.0/lib/package/INIT.html000066400000000000000000001565641354756417200163530ustar00rootroot00000000000000 INIT package

INIT package

The INIT package is required by all but the standalone and self extracting archive packages. It contains the package command, support scripts, and utilities. The package command installs binary packages, makes source packages, and generates new package tarballs. Components in this package:

INIT

The software is covered by this license:

Individual components may be covered by separate licenses; refer to the component source and/or binaries for more information.

A recent release change log is also included.


release change log


All recorded changes follow.


INIT changes


13-12-05 Makefile,package.sh: add BIN=1 to .paths for ast -lcmd builtins
13-11-15 package.sh: fix rebuild logic to handle in-place no-map-libc <=> map-libc
13-11-14 iffe.sh: handle "opt no-name" (specifically for "opt no-map-libc" => _opt_map_libc default)
13-11-07 cc.darwin*: target 10.3 => 10.7
13-10-30 iffe.sh: fix lcl|nxt logic to work for multi-arch style implementations
13-09-25 iffe.sh: add _${API}_API_IMPLEMENT guards for implementation code
13-08-11 iffe.sh: executed blocks now have a single argument that is a tmp file prefix
13-08-11 iffe.sh: fix intrinsic function test to rule out type names
13-07-17 iffe.sh: add '^#include.*iffe --include-first' for *.c feature test macro initialization
13-07-17 package.sh: refix 13-06-17 fix to check both $CC and $CCFLAGS
13-06-24 add -lsocket => -lsocket -lnsl for systems that don't have it in -lc
13-06-17 package.sh: fix host type logic to handle -m32/-m64 almost cross-compile
13-05-21 C+probe: add ksh-2013-05-21 `...` hang workaround -- FIXME
13-05-17 package.sh: package make should continue if ksh fails to build
13-05-17 make.probe: fix CC.DIALECT+=EXPORT=DLL logic
13-05-13 MAPLIB.mk: workaround ppcc+bash not handling '-o t t.c'
13-05-01 package.sh: add ``results path old'' for *.out.*
13-03-20 make.probe: add CC.NM.NMFLAGS for stupid stupid stupid aix -Xany 
13-03-06 handle incompletely defined types e.g. "typ DIR dirent.h" 
12-12-05 C+probe: elide */tmp/* and */probe[0-9]* from stdinclude
12-10-25 ditto.sh: set DITTO_OPTIONS=dst=1 in destination read script
12-09-27 package.sh: fix admin log total logic
12-09-18 cc.ibm.risc: fix -O disable logic that ate next arg
12-09-11 make.probe: fix sunos cc/CC CC.STDLIB probe
12-08-24 iffe.sh: add ``api n1 = n2''
12-07-17 iffe.sh: add C code NOTE("...") to ammend --verbose output
12-06-26 iffe.sh: fix "npt foo" to handle function-like macro foo()
12-06-20 package.sh: use $KSH for rt in "results test"
12-06-15 Makefile: add PLUGIN_LIB to $INSTALLROOT/bin/.paths and BUILTIN_LIB => PLUGIN_LIB
12-06-15 package.sh: add PLUGIN_LIB to $INSTALLROOT/bin/.paths and BUILTIN_LIB => PLUGIN_LIB
12-06-13 package.sh: handle admin.db column output
12-06-08 iffe.sh: fix 12-06-06 typo
12-06-06 iffe.sh: check for -l* in reverse and accumulative order (e.g., for -last & -lm)
12-06-04 package.sh: always check $INSTALLROOT/lib/package/profile
12-05-31 Makefile: ID=ast; $(INSTALLROOT)/prototyped.h => $(INSTALLROOT)/$(ID)/prototyped.h
12-05-28 iffe.sh: api foo YYYYMMDD => FOOAPI(rel) test macro
12-05-24 package.sh: change admin.db comment => owner attributes
12-04-25 ratz.c: add sear -k option to keep installation tmp dir on exit
12-04-17 package.sh: skip sh version logic for ``use''
12-04-17 cc.ibm.risc*: _LARGEFILE64_SOURCE => _LARGE_FILE_API moved to libast/features
12-04-09 cc.ibm.risc*: speak aixese for _LARGEFILE64_SOURCE
12-02-29 cc.darwin.i386*: handle default cc vs kernel bittedness
12-02-29 C+probe: add __TIMESTAMP__ to the nopredefined list
12-02-29 package.sh: don't assume grep -q or /usr/local/lib in LD_LIBRARY_PATH
12-02-29 package.sh: fix ksh vs -lcmd compatibility checks
12-02-23 iffe.sh: checkcc() before checkread() for sensible diagnostics
12-02-14 package.mk: { --clobber --compare --link=lib*.a* } for --mam=static
12-02-14 package.mk: export LICENSEFILEDEFAULT instead of LICENSEFILE
12-02-14 package.sh: handle @(cc|ld).${HOSTTYPE}* intercepts
12-02-07 package.sh: add { clean clobber } actions
12-02-02 regress.sh: fix ulimit -c defaults for --nokeep
12-01-18 regress.sh: add INPUT|OUTPUT|ERROR -e 'filter' to filter before comparison
12-01-21 package.sh: fix `admin make' bug that created unused $INSTALLROOT/lib
12-01-21 Makefile: :PACKAGE: license=ast -- oops
12-01-20 cc.darwin,cc.mvs.390: tmp=/tmp/cc.${USER:-$LOGNAME}.$$.err
12-01-12 package.sh: add admin make share closure to handle alternate HOSTTYPEs
11-12-13 iffe.sh: add /*<NOSTDIO>*/ test code comment to disable default #include <stdio.h>
11-11-11 C+probe: test for .so before .sl
11-10-26 package.sh: don't forget about *.pkg for admin update
11-10-18 cc.*-icc: update and add more
11-10-11 package.sh: handle package make|view when no source installed
11-09-11 package.sh: count admin '*** termination code' errors
11-08-31 mamake.c: add -e, ignore use recursive prereq timestamps
11-08-29 iffe.sh: add ``set stdio try1.h - try2.h ...''
11-08-29 iffe.sh: trap EXIT => trap 0 for ancient sh
11-08-11 iffe.sh: handle ancient sort that doesn't have -k
11-06-01 make.probe: add more /lib64 logic
11-05-01 package.sh: fix admin ditto to sync LICENSES too
11-03-25 package.sh: initialize { $SED $TR } before first use!
11-03-21 package.sh: fix vpath probes
11-03-17 iffe.sh: fix cleanup to rm $tmp* instead of $tmp*.*
11-02-24 package.sh: change curl usage to "curl -L ..."
11-02-11 package.sh,C+probe,make.probe,mamprobe.sh: add ###.*archiac.*###
11-02-02 Makefile: add :MAPLIB: check for ancient -lw
11-02-02 make.probe: handle -print-multi-directory => 64 => /usr/lib64 /lib64
11-02-02 package.sh: HOSTTYPE=*,*cc*[,-*,...] sets CC [ and CCFLAGS ]
11-02-02 make.probe: handle gcc $ORIGIN link but exec failure -- gee thanks
11-01-25 cc.hp.ia64: bundled cc is a pile of shaving cream
11-01-07 iffe.sh: check debug==3 for is_hdr() failure
10-11-22 ditto.sh: fix timing problem between |& and exec &p
10-11-10 package.sh: fix cc cross compile check to use checkcc absolute path
10-10-10 package.sh: list main env vars at start of make action
10-10-10 ratz.c: tweak widnows delays
10-09-10 ratz.c: add _SEAR_ARGS for _SEAR_EXEC
10-09-01 package.sh: fix ratz from source logic
10-08-25 package.mk: consolidate license file search in .package.licenses.
10-08-22 ratz.c: run sear bootstrap command detached
10-08-20 C+probe: version_stamp only if version_flags works
10-08-17 package.sh: unset makerules *DIR variables in env
10-08-15 package.sh: "make" action now lists some env values
10-08-11 mktest.sh: add "DO command ..."
10-07-27 rt.sh: handle "rt X=Y ..."
10-06-29 ratz.c: non-option sear args passed to sear_exec()
10-06-25 iffe.sh: "api" op changed to not do "map-libc" type mappings
10-06-25 package.sh: "force admin ditto" => no ditto --update option
10-06-22 C+probe: handle cc that require .[ci] input for version info
10-06-21 ditto.sh: change default remote access to ssh (about time)
10-06-12 regress.sh: DISGNOSTICS [ 1 | 0 | pattern ] and fix EXIT for all
10-06-09 package.sh: add AT&T to usable nmake check
10-06-06 iffe.sh,iffe.tst: add { api ver } ops
10-04-22 package.sh: update "html binary|source" NAME/PASSWORD info
10-04-15 iffe.sh: don't forget candidate headers for hdr|sys!
10-04-11 WWW.mk: disable man page metarule -- now done by admin-man(1)
10-02-14 package.sh: $CC verification needs $INSTALLROOT/bin in PATH
10-02-11 package.sh: fix package admin make report error count
10-02-02 package.sh: fix write binary bug that did scp on local fs
10-02-02 package.mk: up to date binary targets must still be in PACKAGE.*.lst
10-01-01 package.sh: fix premature $INSTALLROOT/bin during cross compile check
10-01-01 make.probe: handle ['"] in CC.VERSION.STRING
09-12-04 iffe.sh: add "opt name" to check for name in $PACKAGE_OPTIONS
09-11-30 mktest.sh: change RESET to STATE.RESET to make it global
09-11-14 make.probe: use gcc { -print-multi-directory -print-search-dirs }
09-11-11 package.sh: re-order and combine cc checks
09-10-27 C+probe,make.probe,probe.win32: add CC.SUFFIX.DEBUG
09-10-21 iffe.sh,Makefile: test -e is not in ksh88!
09-10-06 iffe.sh: handle cc -E #error with 0 exit status (sgi)
09-10-06 package.sh: stub in ar intercept checks -- not used yet
09-10-06 ar.ibm.risc: add ar intercept because some aix require -Xfoo first!!
09-09-24 regress.sh: fix UMASK logic to create test support files before umask
09-08-28 release.c: change docs to mention stdin if no file operands
09-08-24 package.sh: fix isascii() bug that failed on od(1) trailing space
09-08-20 make.probe: add CC.SHARED.NAME
09-08-20 regress.sh: add { JOB CONTINUE EXITED KILL FIFO }
09-08-11 package.sh: filter lines containing : for package results
09-07-31 make.probe: add CC.AR.ARFLAGS (for aix ar -xany)
09-07-31 package.sh,cc.*: fix -dumpmachine to handle 32/64/* bit options
09-06-24 package.sh: fix admin.db output formatting
09-05-05 package.sh: export dll hackery environment vars
09-05-05 package.sh: handle non-identifier hostnames
09-05-05 mamake.c: pass undefined ${...} identifiers to the shell
09-05-05 mamake.rt: add macro expansion regression tests
09-05-01 iffe.sh: fix output initialization *again*
09-04-28 package.sh: handle admin.db contact field $9
09-04-15 iffe.sh: add implicit "ini" op to initialize io for subsequent ops
09-03-31 regress.sh: EXPORT before test => global ENVIRON[]
09-03-26 package.sh: test fail pattern is 'fail[es]'
09-03-26 UNIT - ... appends (options) to command line
09-03-19 TEST.mk: x.tst => x only if x is command target
09-03-15 regress.sh: add ${MAIN} for base name of main unit
09-03-10 TEST.mk: add .SOURCE:tests if tests is a dir
09-03-03 regress.sh: allow command line unit to override UNIT
09-03-03 mktest.sh: handle IO == $'
09-02-02 package.sh: delay $INSTALLROOT/bin/.paths generation until mamprobe runs
09-01-30 cc.mvs.390: c89 balks at [ ()] in -Dname="..."!
09-01-27 package.sh: add isascii() to use ratz instead of tar
09-01-20 hurl.sh: add --size=bytes option
09-01-08 TEST.mk: add test.* prereqs, multiple arg lists with :T=*: binding
09-01-03 regress.sh: fix UNIT to allow command line override
09-01-03 mktest.sh: handle TWD
08-12-24 package.sh: fix cross-compile HOSTTYPE logic
08-12-15 package.sh,hurl.sh: handle http codes { 301 302 303 }
08-10-16 make.probe '-fno-stack-protector -fno-stack-protector-all' to cop out!!
08-09-30 rt.sh: fix ksh93 regression test signal count
08-09-26 regress.sh: ignore SIGPIPE for SET pipe-input
08-09-24 package.sh: package only test foo => make --recurse=only recurse tests foo
08-09-20 make.probe: handle another /usr/bin/file shared lib description
08-09-20 regress.sh: add --pipefail for SET pipe-input ...
08-09-17 Makefile: add gdbm1.c for <gdbm-ndbm.h>
08-09-10 make.probe: add CC.NOPROTECT
08-08-08 mktest.sh: add --width=width
08-08-05 dbm.req: favor sleepycat ndbm compatibility
08-08-04 C+probe: fix stdlib initialization logic
08-06-24 package.sh: fix $INSTALLROOT/bin/cc intercept time stamp file typo
08-06-20 TEST.mk: make the localyunit before *.rt => *.tst -- doh
08-06-20 mktest.sh: prepend $PWD onto PATH for local units -- doh^2
08-06-11 regress.sh: fix bug that skipped the last test
08-05-20 regress.sh: add --local to put *.tmp dir in local fs
08-05-05 regress.sh: add IF command ... ELIF command ... ELSE ... FI
08-05-01 package.sh: package test => ulimit -c 0
08-04-28 regress.sh: fix EXPORT quoting
08-04-28 regress.sh: fix UNIT set check args too
08-04-24 rt.sh: exit code > 256 => signal termination
08-04-10 C+probe: change probe_so order to check .so last (macos ld workaround)
08-04-01 package.sh: handle multiple admin HOSTTYPEs per HOST
08-03-28 C+probe: add C++ #include <iostream> (no extension) dir probes
08-03-17 regress.sh: fix trap on EXIT, add terminated note to final tally
08-02-28 make.probe: fix probe_warn to include ld!
08-02-02 make.probe: add CC.RUNPATH to match default -L order
08-01-31 package.sh: check lib64 for LD_LIBRARY_PATH
08-01-31 iffe.sh: tweak ancient /bin/sh workarounds
08-01-28 make.probe: darwin ld export dynamic is -force_flat_namespace
08-01-28 C+probe: handle sgi cc error message but exit 0 botch(es)
08-01-23 package.sh: fix checksum doc typo
08-01-09 C+probe: add __FUNCTION__ to the undef (don't check) list
07-12-14 iffe.sh: add set nooptimize
07-12-03 package.sh: add LC_ALL=C
07-11-27 package.sh: fix overaggressive *.md5 cleanup
07-11-20 iffe.sh: treat exit status >= 250 as normal error with no signal
07-11-05 package.sh: fix write op error count pattern
07-11-05 package.mk: fix $(~req) .ver binding
07-08-11 probe.win32: add cl.exe setuid workaround, CC.VERSION[.STRING]
07-08-01 package.sh: handle 'package read lcl|tgz'
07-05-08 regress.sh: execute basename instead of absolute path for short $0
07-04-27 cc.sgi.mips[34]: for #error to exit non-zero -- a no brainer
07-04-20 mktest.sh: defer to systems without 'grep -q' -- sigh
07-04-11 mamprobe.sh: handle $(CC.*) => ${mam_cc_*}, $(...) => ${...}
07-04-11 make.probe: fix CC.PICBIG probe, default { CC.PIC CC.DLL } to BIG
07-04-04 iffe.sh: prepend ${tst}${ext} to each .c probe
07-03-28 package.sh: fix binary tgz architecture type duplication
07-03-28 package.mk: add binary write PACKAGE.$HOSTTYPE.lst
07-03-28 iffe.sh: add -F header to mac test
07-03-23 make.probe: handle file(1) that returns 'archive' for .so
07-03-22 mamprobe.sh: fix STDED probe for implementations that ignore EOF
07-03-11 package.sh: add nocopyright and tst => nocopyright
07-03-11 package.mk: add copyright=0
07-03-08 C+probe: restore IFS after probe.ini
07-02-26 mamake.c: expand first of ${mam_lib*} for ${AR}
07-01-05 package.sh: fix "admin write binary" logic
07-01-01 iffe.sh: add "cmd" --verbose trace
07-01-01 iffe.sh: sort => LC_ALL=C sort
07-01-01 C+probe: LC_ALL=C
06-12-22 make.probe: lean on gcc -v for stdlib, but preserve /usr/local!
06-11-23 package.sh: *.md5 are not tarballs -- doh
06-11-23 iffe.sh: add -F, --features=feature-test-header
06-11-11 make.probe: favor lib64 over lib for hosttype==*64
06-10-31 make.probe: add "-ignore-source-dir -iquote" test
06-10-31 iffe.sh: add status{...} code block
06-10-11 regress.sh: fix DO to handle {...} (time for regress.tst?)
06-10-11 package.sh: handle already gunzip'd *.tgz
06-10-06 iffe.sh: add reference for header content tests
06-09-27 regress.sh: fix UMASK to do DO too (duh)
06-09-22 iffe.sh: drop -O for npt tests (for msvc intrinsics)
06-09-14 cc.darwin: drop -O until gcc 4.* gets its act together
06-09-11 package.sh: { cc ld ldd } intercepts check ${HOSTTYPE%.*} too
06-09-08 regress.sh: add PIPE INPUT|OUTPUT for pipe io
06-09-05 C+probe: add { probe_version version_stamp version_string }
06-09-05 make.probe: add version stamp comment, CC.VERSION[.STRING]
06-08-27 regress.sh,mktest.sh: add UMASK
06-08-25 regress.sh: add -b,--ignore-space,IGNORESPACE
06-08-25 mktest.sh: add IGNORESPACE
06-08-24 mktest.sh: handle  00 in data
06-08-24 regress.sh: handle -f* for INPUT|OUTPUT|ERROR
06-08-16 package.sh: fix 'install flat' logic
06-08-11 rt.sh: handle style=shell %K date format
06-07-17 ratz.c: fix __MVS__ FAR definition
06-07-17 iffe.sh: "header x.h" -- deprecate "include x.h" for .SCAN.iffe
06-07-17 package.sh: differentiate urls vs. assignments
06-06-27 rt.sh: add --failed, --heading
06-06-27 C+probe,TEST.mk,make.probe,mktest.sh,regress.sh: 'ulimit -c 0'
06-06-26 cc.darwin.ppc: handle -lcc_dynamic disappearance
06-06-25 mktest.sh: implement PROG
06-06-11 Makefile: add -ldbm :MAPLIB:, provide public MAPLIB.mk
06-05-06 package.sh: add PACKAGE_admin_tail_timeout
06-05-22 ratz.c: upgrade to zlib-1.2.3
06-05-09 package.sh: fix admin.db docs
06-03-11 package.sh: fix `package use - command ...'
06-03-05 make.probe: work around pedantic bash 3.1 mismatched " in `.`
06-02-14 package.sh: "results failed test" == "results test failed"
	 cc.sgi.*: add _AST_cc_OPTIONS parameterization, -OPT:Olimit=0
	 cc.linux.ia64-icc: add for intel cc
06-02-02 package.sh: freebsd stuck with os version for all arch
06-02-01 package.mk: fix locale logic (tw -d requires dir arg)
06-01-31 package.sh: require $CC only for make|test
06-01-30 package.sh,hurl.sh: use the backwards-compatible --http-passwd
	 package.sh: add more pdksh => /bin/sh checks
06-01-26 package.sh: wget --http-pass => --http-password
	 package.sh: fix wget error logic
	 hurl.sh: wget --http-pass => --http-password
06-01-11 package.mk: pass package.license.class to make --mam too
	 package.mk: variants=pattern => --variants=pattern
	 package.sh: darwin rel<=7 => darwin7.ppc
	 package.sh: freebsd rel<=4 => freebsd4
	 package.sh: freebsd rel<=5 => freebsd5
05-12-07 iffe.sh: don't emit <stdio.h> if <sfio.h>|<ast.h> (XXX)
05-12-05 make.probe: disable readonly.exe core dump via ulimit -c 0
05-09-22 mktest.sh: add EXEC [ ++NOOUTPUT ++NOERROR ++NOEXIT ]
05-09-21 mktest.sh: fix --style=shell compare to ignore \r
05-09-12 TEST.mk: all --force to force %.rt regeneration
05-09-05 TEST.mk: regenerate from %.rt only if newer, :SAVE: %.tst
05-08-25 mktest.sh: add
	 TEST.mk: add %.rt=>%.tst for mktest
05-08-18 package.sh: 'package host cpu' now checks $NPROC first
05-07-17 iffe.sh: add { define extern include print } ops
	 iffe.sh: accept output{...}end output on success only -- doh
05-07-01 package.sh: add TARPROBE for tar B flag probe
05-06-24 package.sh: fix binary read chmod via *.sum
05-06-06 package.sh: fix KEEP_HOSTTYPE logic to handle synthesized types
05-06-01 make.probe: verify that cc_pic works for hosted cc
	 cc.lynxos.ppc: make -mshared the default
	 package.sh: note $INSTALLROOT/bin/@(cc|ld|ldd) installation
05-05-25 make.probe: add CC.INCLUDE.LOCAL instead of -I- in CC.DIALECT
05-05-24 iffe.sh: really fix grouping logic -- with tests this time
	 package.sh: pipe/socket configuration mismatches => use /bin/sh
05-04-28 TEST.mk: add $(TESTS)
05-04-19 package.sh: package results test uses rt if possible
	 iffe.sh: fix 'op var - ... - ...' grouping logic
05-04-15 rt.sh: handle autom4ate style
05-04-11 regress.sh: fix unit name when command line unit also specified
	 rt.sh: handle all ast package test output formats
	 package.sh: fix make docs for options passed to underlying make
05-04-08 package.sh: cp -p makerules.mo to $OK to preserve mtime
	 regress.sh: add "TITLE name" to change TEST output title
05-04-01 rt.sh: add pretty make test + regress.sh wrapper
05-03-29 package.sh: test -e path => test -f path -o -d path
05-03-24 make.probe: fix CC.PICBIG probe to prefer -fPIC over -fpic -- doh
05-03-19 mamake.c: command line name=var also defines name.FORCE=var
05-03-11 regress.sh: unset LC_ALL when LC_* EXPORT'd
	 package.sh: old make.out saved in circular make.out.[1-9]
	 mamake.c: sync with nmake :W=O:
05-03-01 package.sh: fix flat hierarchy initialization
	 package.sh: admin action now properly resets sibling remote logs
	 package.mk: relax unknown/unwritten package messages to warnings
	 package.sh: handle space in command line name=value
	 make.probe: add mvs -Wc,dll,exportall,longname,rent to CC.DLL probe
05-02-24 package.sh: hosttype *.powerpc => *.ppc
	 cc.lynxos.ppc,ldd.lynxos.ppc: add
05-02-22 mamake.c: fix { -G --debug-symbols -S --strip-symbols } MAMAKEFLAGS bug
05-02-20 probe.win32: handle /platformsdk mount
05-02-19 package.sh,package.mk: add write tst for tgz in tst subdir
05-02-18 package.sh: accept cc -dumpmachine with 0 or 1 -
05-02-14 package.sh: handle mutiple architectures per host in admin.db
	 Makefile,package.sh: honor $INSTALLROOT/bin/.paths overrides
	 package.sh: normalize trailing [-_]bits in host type
	 iffe.sh: some ksh-compatible shells don't do *(pattern)
05-02-11 iffe.sh: back out 05-01-11 child process stdin hijack
	 cc.lynxos.i386: -dynamic instead of -static default
05-02-10 package.sh: cyg usr/doc => usr/share/doc
05-02-08 package.sh: drop -m with pax -- delta bug fixed 2005-02-08
	 iffe.sh: work around old bash 0<... redirection bug
05-02-06 package.mk: source.tgz: update generated files only when they change
05-02-02 *.sh,*probe: IFS may be unset and { ash bsh } don't on startup -- wow
05-01-11 package.sh: update setup docs to include authorize+password
	 package.mk: fix .source.cyg final directory edit
	 package.mk: notice=1 for conspicuous empty NOTICE file
	 WWW.mk: fix *-index.html installation
	 filter.sh: retain input file suffix in tmp copy
	 mamexec.c: fix non-contiguous "exec" bug that skipped lines
	 iffe.sh: fix candidate lib test to try grouping subsequent libs
	 iffe.sh: fix child process stdin hijack that skipped input lines
	 iffe.sh: --shell=osh to force read -r compatibility command
	 iffe.sh: chop iffe input leading space before # for KnR compatibility
05-01-05 package.sh: add ${TAR} ${TARFLAGS} and tar B flag for pipes
	 mamake.c: fix makefile scan to ignore lib*.[hH]
	 iffe.sh: immunize function/symbol tests from aggressive -O
04-12-28 WWW.mk: add :WWWPAGE: faq.*.mm index generator
04-12-21 ratz.c: make sure tmp dir is writable -- doh
04-12-08 iffe.sh: fix dat test for aggressive -O
04-12-01 iffe.sh: add `include file' to pull in #define's for `exp'
04-11-11 package.sh: default MAKESKIP is "*[-.]*"
04-10-22 ratz.c: change docs to note zlib license
	 mamake.c: handle --debug-symbols and --strip-symbols
	 package.sh: make (debug|strip)=1 => --(debug|strip)-symbols
	 package.mk: add :LICENSE: => package.license.class
	 mamake.c: fix recursive order logic
04-10-18 package.mk: add :LICENSE:, :OMIT: to omit package subdirs
04-10-11 package.sh: add 'authorize name' and 'password password'
04-10-01 iffe.sh: double check $static link with ! $static
	 Makefile: add BUILTIN_LIB to $INSTALLROOT/bin/.paths
	 make.probe: add CC.DIALECT EXPORT={ALL,REF,EXT,DLL}
	 package.sh: add BUILTIN_LIB to $INSTALLROOT/bin/.paths
04-09-21 package.mk: $(init)$(name) is now an implicit prereq
04-09-09 package.sh: copy makerules.mo to $INSTALLROOT/bin/ok
04-09-01 package.mk,package.sh: rename *.txt => *.README
	 package.mk: add the runtime package type (no *.[ah])
	 iffe.sh: fix key test reports
04-08-26 Makefile: { add m2.c m3.c } -lm tests for { frexp[l] ldexp[l] }
04-08-11 package.mk: handle HOSTTYPE for solaris > 9 
	 package.sh: add `checkaout proto' for { make view }
	 package.sh: check for { md5sum md5 }
	 iffe.sh: add {if|elif|else|endif} test ...
	 iffe.sh: add 'exp - expression' and '( expression )'
	 iffe.sh: add 'name = test ...' user defined macros
	 iffe.sh: add '! test ...' negation
	 TEST.mk: add implied { .c .sh } generated prereq
	 cc.darwin.ppc: handle 10.3 -dylib mess
04-08-01 package.mk: let include handle nested requirements -- duh
04-07-31 package.sh: attempt a second ping before admin assumes host down
04-07-26 package.sh: fix hp.ia64 HOSTTYPE
04-07-23 probe.win32: generalize #include dir order search
04-07-17 regress.sh: add INPUT -x for chmod +x
04-07-01 regress.sh: TMP => TWD
04-06-29 regress.sh: put COMMAND in $TWD too
04-06-21 regress.sh: mkdir -p INPUT and OUTPUT intermediate dirs
	 TEST.mk: add :TEST: -- to disable .c .sh search
04-06-18 TEST.mk: add .SCAN.tst
04-06-17 regress.sh: TEST returns true if active, false otherwise
	 regress.sh: add CD to change test pwd from $TWD
04-06-16 regress.sh: add TWD for ./unit.tmp override
	 regress.sh: DO now flushes previous test
	 regress.sh: INPUT and OUTPUT handle -f for printf instead of print
04-06-11 package.sh: make sure $INSTALLROOT/bin is in front of $PATH
	 package.sh: skip nmake if older than 2000-10-31
04-05-20 package.sh: fix arg vs. package parse with - or '' to disambuguate
04-05-11 package.sh: package verbose update lists closure for package setup
	 package.sh: add src/lib/libardir to nmake proto bootstrap
	 regress.sh: probe for rm -u vs. chmod -R u+rwx
04-05-01 package.sh: $CC must be C, not C++; allow release command on $PATH
04-04-15 make.probe: check probe_libdir false positives
	 package.sh: add lib/package/*.lic src package subdirs
	 package.mk: add mamfile=0 to inhibit Mamfile generation
	 iffe.sh: config name_DECLARED => HAVE_name_DECL
	 iffe.sh: fix mac to handle default value
04-04-11 iffe.sh: normalize sed [\\\\/] quoting
04-04-04 package.mk: only checksum generated tarballs
	 mamprobe.sh: add STDCHMOD
04-04-01 C+probe: set export LANG=C for uniform error messages
	 make.probe: another CC.STDLIB tweak
	 package.sh: fix regress core dump pattern, expand [a-z] match ranges
04-03-31 Makefile: add intl :MAPLIB: test
	 make.probe: fix CC.STDLIB search; drop CC.* path duplicates
04-03-28 iffe.sh: drop unused exec $stdin<&0 dup
04-03-25 Makefile: add iconv :MAPLIB:
	 package.sh: use ${PING:-ping -c 1 -w 4}, allowing admin.db override
04-03-24 package.mk: add *.md5 checksum for each *.(c|exe|tgz)
	 package.sh: update base change on md5 sum instead of size
	 iffe.sh: adjust case label  and keyword quoting for ancient /bin/sh
04-03-22 probe.win32: ncc => nld
04-03-19 CONVERT.mk: change the instructions and old source dir default
	 package.mk: fix recurse=list check
	 package.mk: add *.md5 checksum for each *.(c|exe|tgz)
	 package.sh: fix update base/delta/sync existence check
04-03-18 iffe.sh: -d2 does not remove core dumps on exit
04-03-17 package.sh: fix make recurse arg/action order
04-02-29 package.sh: add regress action to compare current and previous tests
	 package.sh: fix sgi.mips[23] HOSTTYPE test for old irix cc
	 package.sh: add `export variable ...'
	 package.sh: admin action now handles host name with non-id chars
	 package.sh: non-numeric M T W in admin.db disables that action
	 package.sh: fix admin write binary local vs. shared clash
	 cc.hp.pa: add _AST_CC_hp_pa_DEFAULT=+DAportable
	 cc.hp.pa64: sync with cc.hp.pa
	 cc.ibm.risc: -bnolibpath => -blibpath:/usr/lib:/lib
	 probe.win32: sync with make.probe
	 make.probe: fix last chance dynamic test
	 make.probe: add hp.pa CC.EXPORT.DYNAMIC -Wl,-E
	 make.probe: add ibm.risc CC.EXPORT.DYNAMIC -bexpall
	 make.probe: move probe_dll_def to the end of probe_dll
	 package.mk: capture subcomponent mamfile recursion
04-02-24 make.probe: strip "..." from cc/ld traces
	 iffe.sh: add ``set [no]define'' to disable macro #define/#undef
04-02-23 make.probe: rework CC.LD search
04-02-14 make.probe: add CC.EXPORT.DYNAMIC for main dynamic sym export
	 make.probe: resurrect CC.PIC with separate semantics from CC.DLL
	 make.probe: add CC.SHARED.LD for CC.SHARED linker
	 C+probe: clear DISPLAY to stifle interactive windows
04-02-11 iffe.sh: handle ``siz void*'', add cross{ ... }end
	 make.probe: add { CC.AR CC.SIZE }, fix cross command search
	 cc.darwin.ppc: change $cc => $CC for old ksh + libast conf bug
04-02-09 make.probe: drop -nostartfiles from CC.SHARED for C++
04-02-04 package.sh: fix cross compilation bug that mixed binary formats
04-02-02 package.sh: package admin now ditto's bin/package too
04-01-30 cc.sgi.mips3: drop warning 3421
04-01-11 regress.sh: output label#count for tests in loops
04-01-05 regress.sh: fix bug that ignored the first SAME
04-01-04 crossexec.sh: fix typo that did not recognize rcp
03-12-19 mamake.c: add `foolib:foo:libfoo' to recurse()
03-10-11 regress.sh: add EXPORT, export COLUMNS=80 for message consistency
03-09-23 ratz.c: fix tar header number parse bug that skipped to next number
	 regress.sh: rm cleanup now handles files matching -*
03-09-11 iffe.sh: add unnamed { ... } blocks
	 regress.sh: add COPY from to, like MOVE but comprison still done
	 regress.sh: rm -rfu to handle test dirs w/o u+rwx
03-08-14 Makfile: add hello.c to the manifest
03-08-11 package.sh: fix `html binary' generation
03-06-21 package.sh: fix INITROOT initialization bug
	 package.sh: make sure admin logs exists before tail'ing
03-06-11 probe.win32: fix $(BINDIR) typo that expanded in sh instead of make
	 cc.mvs.390: return code 4 yields exit code 3 but its *really* ok
	 package.sh: fix onpath function global var conflict
	 make.probe: add CC.DIALECT { GNU -dD }
	 package.mk: add Mamfile to lcl manifest
03-06-10 package.sh: fix setup action typo that only checked the INIT package
	 package.sh: *.s390x => *.s390-64
03-06-09 package.mk: add cyg :POSTINSTALL:
03-06-08 make.probe: fix CC.STDLIB logic
	 hurl.sh: add User-Agent identification
	 package.sh: tweak source and binary installation instructions
	 cc.hp.pa,ld.hp.pa: +-Wl,+cdp,${INSTALLROOT}/lib/: drops abs lib paths
	 ldd.hp.pa: add
03-06-06 package.sh: fix $INSTALLROOT/bin/ldd check
	 make.probe: add CC.STDLIB verification
03-06-04 make.probe: add +forceread +noforceread
03-05-11 hurl.sh: handle http://host:port/path
03-05-06 package.sh: fix setup action PACKAGEROOT and INIT logic
03-05-05 package.mk: fix cygwin tarball names
03-04-30 package.sh: move (cc|ld|ldd).$HOSTTYPE updates from Makefile
03-04-27 make.probe: fix mvs CC.PREFIX.SHARED "lib" => ""
	 make.probe: add CC.DLL.DIR = $(BINDIR) or $(LIBDIR) 
	 make.probe: add { CC.LD.LAZY CC.LD.NOLAZY CC.LD.RECORD CC.LD.NORECORD }
	 probe.win32: sync with latest CC.*
03-04-25 mamprobe.sh: add args to `. $makeprobe' for ancient sh
03-04-23 package.mk: fix dup "covered by" licenses
03-04-22 probe.win32: CC.DIALECT += "LIBPP -I-" for all cc's
	 package.sh: fix admin write binary tarball snarf
03-04-21 package.mk: package covered *.@(pkg|lic) too
03-04-15 package.mk: don't generate incremental archives for lcl 
	 package.mk: add incremental=[source:1 binary:0] archive control
	 package.sh: generate $INSTALLROOT/bin/cc wrapper for CC != cc
	 package.sh: admin must ditto lib/package/*.@(pkg|lic) too
	 mamake.c: ignore time of ignore prereqs
	 mamake.c: -D2 lists propagated times
03-04-11 package.mk: tidy up cyg tarballs
	 package.sh: fix old shell clash between get() and $get
03-04-05 package.mk: restore *.inx generation somehow lost during cyg additions
	 package.sh: add pthread_num_processors_np() last resort for cpu count
	 package.sh: use `make believe' to accept mamake generated files
	 package.sh: handle `make [make-flags] [target ...]'
	 mamake.c: ignore -e
03-03-21 package.mk: fix cyg old make typo
	 package.sh: switch to `package setup' instructions
03-03-19 package.sh: add registry checks for `host cpu'
	 package.sh: `results failed' now lists core dump messages
03-03-17 package.sh: on cygwin verify 'ntsec binmode' in $CYGWIN or die
	 Makefile: install gcc wrapper if no cc
	 package.mk: add :DETAILS: { :README: :EXPORT: :INSTALL: :TEST: } ops
03-03-12 package.mk: add :DETAILS: for style-specific details
03-03-11 package.sh: add beta setup/update support
	 TEST.mk: add (TESTCC) prereq for .sh tests
03-03-07 hurl.sh: add
03-03-06 iffe.sh: fix lib win32 test cygwin vs native incompatibility
	 iffe.sh: change internal stdio.h guard to handle C++ inline vs. macro
03-03-03 package.sh: check for curl or wget for update
	 package.sh: add setup action == update read make
	 package.sh: fix packageroot() typo that showed up in non ~user shells
	 mamake.c: treat name+=value args like name=value
	 mamake.c: add ${var?*|value?match?no-match?}
	 mamake.c: fix archive vs. dynamic bind logic
03-02-28 package.sh: add the "cyg" (cygwin) package type
	 package.mk: add "cyg" stubs, :CATEGORY: for category name(s)
03-02-25 mamake.c: add -D4 system(3) debug trace
03-02-24 package.mk: change --mismatch to --corrupt=accept
03-02-14 ratz.c: add _WIN32 setmode([01],O_BINARY) and fopen "rb"/"wb"
03-02-12 Makefile: handle getconf LIBPATH with host pattern
03-01-31 package.mk: fix .lic search
03-01-30 package.sh: handle { INIT ksh nmake } already installed elsewhere
	 package.sh: admin handles command outside of $PACKAGEROOT/bin
	 Makefile: install $(INSTALLROOT)/lib/make/package.mk
03-01-28 package.sh: admin remote commands on one line to please syslog
03-01-23 probe.win32: borland and mingw32 tweaks
03-01-22 package.sh: fix $CC test to ignore set -x trace -- duh
03-01-16 ditto.sh: tw --chop on by default
03-01-14 package.sh: use /bin/cp to copy previous binaries to bin/ok/
	 package.sh: admin now initiates remote exec and copy from local host
03-01-12 package.sh: handle admin "xxx:" default root
03-01-03 probe.win32: add /usr/include/borland path truncation workaround
02-12-10 iffe.sh: add <&$nullin >&$nullout to checkread() $cc
02-12-06 probe.win32: fix inlcude => include typo, add lcc lib
	 probe.win32: CC.MAKE.OPTIONS = nativepp=0
02-12-04 mamake.c: fix ${foo-bar} to expand foo if defined
02-11-28 probe.win32: add C++ and -I- CC.DIALECT checks
02-11-26 package.sh: package release now checks for second level files
02-11-22 package.sh: update action now uses HTTP/1.0
02-11-21 probe.win32: update the vc include dir test
02-11-20 make.probe: fix CC.LD.ORIGIN typo that expanded make var
02-11-13 packahe.mk: fix list.install => list.installed typo
02-11-12 make.probe: add CC.LD.ORIGIN for a.out origin dir relative dll search
	 make.probe: add CC.LD.STRIP for link time a.out strip
	 package.sh: fix package_use vs. PACKAGE_USE check
02-10-24 WWW.mk: fix bug that required a :WWWBIN: assertion to post
02-10-23 mamake.c: fix unuinitialized time in make()
	 ratz.c: fix meter buffer overflow
02-10-20 package.sh: fix lib/probe/C/make/probe update test
02-10-18 probe.win32: update for mingw
	 make.probe: add bash workaround to SHELLMAGIC test
	 package.sh: work around yet another cygwin hassle
02-10-17 iffe.sh: short circuit id check for *[-+/\\]*
02-10-08 regress.sh: unset FIGNORE to avoid rm . errors
	 package.sh: unset FIGNORE to avoid rm . errors
	 package.sh: $CC must at least compile and executable hello world
02-10-04 package.sh: $INSTALLROOT/lib/package/tgz=>$PACKAGEROOT/lib/package/tgz
	 package.mk: $(ED) => $(STDED), $(EDFLAGS) => $(STDEDFLAGS)
	 iffe.sh: add identifier checks for tests that (implicitly) require them
	 iffe.sh: disambiguate a few --config macros
02-10-02 iffe.sh: fix shell=bsh `hdr a/b'
02-09-30 package.sh: handle chmod of -* files
	 package.sh: verify that $SHELL is Bourne compatible
	 package.sh: tighten PACKAGE_USE logic PATH,LIBPATH,etc. validation
	 iffe.sh: fix bug that didn't define mac variable on success
02-09-22 package.sh: handle admin_action=ditto
	 iffe.sh: --config sizeof(foo) macro is SIZEOF_foo
	 iffe.sh: fix long.long test so it doesn't defeat uwin "typ long.long"
	 mamprobe.sh: convert $("foo") nmake string constants
02-09-21 mamprobe.sh: "-" info-path writes probe info to stdout
02-09-11 make.probe: move from nmake src to be part of mamprobe.sh
	 mamprobe: generate from mamprobe.beg C.probe make.probe mamprobe.end
	 mamake.c: pass cc absolute path to mamprobe
	 package.sh: generate mamprobe -- yuk (at least its confined to INIT)
	 iffe.sh: lcl,nxt: drop default sys/ check
	 ditto.sh: tw --logical by default; add --physical
02-09-10 package.sh: SHELLMAGIC creeps into package too -- duh and fooey
02-09-09 ditto.sh: test that remote .profile exists before sourcing
02-09-06 package.sh: don't ditto nfs junk
	 ditto.sh: --show now lists directory ops instead of enumerating all
02-09-05 ditto.sh: add --remote={rsh|ssh}
	 package.sh: add admin [[{rsh|ssh|-}]:]directory
02-09-02 iffe.sh: change 'print -r --' to 'print -r -' for ksh86 compatibility
02-09-01 cc.unix.mc68k: add for ancient 3b1
02-08-22 package.sh: fix component() to test for components -- duh
	 Makefile: add LICENSE:.DONTCARE to workaround mam
02-08-11 iffe.sh: provide defaults for LD_* additions
02-08-07 ratz.c: change -m to use * instead of non-portable inverse video
02-07-17 mamprobe.sh: close tmp file in trap before rm for cygwin
	 package.sh: fix "type" to handle i1586 (P4)
	 package.sh: add the view action
02-06-28 package.sh: handle multiple packages for release action
02-06-27 package.sh: catch sol*.sparc=>sol*.sun4 when CC=gcc
02-06-14 package.sh: fix admin_action to not include qualifiers
	 package.sh: fix help/html doc typo
02-06-11 package.sh: fix ditto update doc to `PACKAGEROOT field matching *:*'
02-06-07 WWW.mk: change substitute $(") to 
02-06-06 package.sh: clarify output streams for help/html
02-05-22 mamake.c: fix executable file check to use (S_IXUSR|S_IXGRP|S_IXOTH)
02-04-04 package.sh: fix update to differentiate *.sun4 and sun4
02-03-27 package.sh: yacc/bison warning only if both missing
02-03-24 mamake.c: all shell actions wrapped with -c to avoid #! problems
02-03-23 package.sh: recover $PACKAGEROOT/bin/package if not in INIT package
	 package.sh: precheck $CC, not `cc'
	 package.sh: fix install to use pax -ps to preserve set-uid/gid
	 package.sh: fix install to use list.installed for existing files only
02-03-17 package.sh: fix PAX initialization that was sometimes omitted for read
	 package.sh: fix update delta sync fetch
02-02-14 iffe.sh: fix macro{ }end docs to include "
	 iffe.sh: add dfn to extract #define from headers
	 iffe.sh: handle nxt #include ok but no line sync
	 iffe.sh: drop local header clash logic
	 iffe.sh: add -X, --exclude=dir to exclude -I dirs
	 iffe.sh: lcl,nxt now generate <...> headers instead of "..."
	 package.sh: admin.db root dir matching -* disables host
	 package.mk: fix package.src.pat typo -- too many )
	 package.mk: add { :COVERS: :DESCRIPTION: :REQUIRES: }
	 package.sh: handle { :COVERS: :DESCRIPTION: :REQUIRES: }
	 Makefile: move proto.c generation to the proto component dir
02-02-02 execrate.sh: add for .exe challenged win32 systems/commands
	 mamprobe.sh: add STD* commands/flags
	 mamake.c: update mamprobe info when older than mamprobe executable
	 package.sh: move ed/ex workaround to mamprobe.sh
	 package.sh: fix `host type' bug that incorrectly assumed sun4 for sol
	 package.sh: add execrate(1) hooks for challenged systems
	 package.sh: add check for { cc ar nm yacc/bison } before make
	 ratz.c: fix "rb" vs. "r" macro tests
	 iffe.sh: add nxt, similar to lcl but defines _nxt_foo for #include
	 iffe.sh,package.sh: remove vaibale from sccs,cvs ident strings -- duh
02-01-24 C+probe: check CC.DYNAMIC to handle cc that accept but ignore -B*
	 iffe.sh: handle 'mem struct.a.b'
02-01-22 iffe.sh: cache (internal) `foo vs. struct foo' test results
	 package.sh: uts.370 => uts.390
02-01-18 package.sh: fix uts hosttype
02-01-17 package.sh: add 'results failed ...' to list failures only
	 package.sh: change ARCH internal var to all_types to avoid env conflict
	 iffe.sh: fix hdr/lib precheck that missed some -- ouch
	 iffe.sh: fix noexecute test that forgot to check compile first!
02-01-15 ratz.c: fix path[] type typo
02-01-01 package.mk: tighten license search
02-01-08 package.sh: `pwd` => ${PWD:-`pwd`}
	 package.mk: expand license file pattern match
02-01-04 iffe.sh: fix `exp name "value"' bug that duped "value"
	 iffe.sh: fix initial <sys/types.h> check to honor --config
01-12-25 iffe.sh: fix bug where -o file restored old file
01-12-23 package.mk: uniq the closure lists
01-12-07 ratz.c: fix --meter to retain paths containing " -- "
01-11-30 ratz.c: use sear_system() to execute; should work on all windows
01-11-28 ratz.c: fix sear_rm_r() to check SetCurrentDirectory() status
01-11-26 ditto.sh: drop n+=v for ksh compatibility
01-11-21 ditto.sh: add rsync script replacement [hey, it works!]
	 package.sh: add [ditto]:directory notation to admin.db
01-10-31 package.sh: handle *.sum paths with embedded space
	 package.sh: change executable() to onpath()
	 package.sh: executable([!] foo) replaces test [!] -x foo (.exe hack)
	 package.sh: add os2 fix to `host type'
	 mamake.c: add .exe hack
	 iffe.sh: fix intrinsic function lib test
	 mamprobe.sh: update pic probe to match make.probe for linux.ia64
01-10-30 package.sh: make action skeleton view now checks subdirs
01-10-20 package.sh: don't recurse into leaf dirs matching $MAKESKIP
	 package.mk: tarball package.notice replaces `license accepted' prompt
	 package.sh: eliminate `license accepted' prompt
	 package.sh: add update to download latest from a url
	 package.sh: use builtin arithmetic when we know its ksh
	 iffe.sh: unkown -> unknown
01-10-18 package.sh: convert to YYYY-MM-DD delta releases instead of NNNN
	 package.mk: convert to YYYY-MM-DD delta releases instead of NNNN
	 ratz.c: fix -m for paths containing <\>n\r\v
01-10-16 ratz.c: _SEA_* => SEAR_*
	 ratz.c: preserve stdin for sear_exec()
	 ratz.c: add recursive sear_rm_r() to sear_exec() tmp dir cleanup
01-10-10 mamprobe.sh: add mam_cc_SHELLMAGIC
	 package.sh: add nfs wakeup call to admin to avoid stale file handles
01-10-04 cc.darwin.ppc: -flat_namespace is not longer the default (huh)
01-10-01 package make: prepend $INSTALLROOT/bin/ok to PATH
	 package read: save cpy of bin/package when reading the INIT package
	 mamprobe.sh: allow cc path with optional arguments
01-09-24 Makefile,package.sh: add $INSTALLROOT/bin/.paths initialization
01-09-19 package.mk: add recurse to list.package.*
	 package.sh: bootstrap build nmake with _BLD_STATIC for _WIN32
01-09-11 ratz.c: add _SEA_SKIP & _SEA_COMMAND for self extracting archives
01-09-07 package.mk: fix output capture to not generate files names with spaces
01-09-07 package.mk: fix delta release number search
01-08-11 package.mk: handle single gz executable packages (e.g., for ksh)
	 package.sh: fix package install to require nmake only if no *.sum
	 iffe.sh: drop ancient menu and prompt actions; check ./hdr.h clash
01-07-17 package: fix use cross compile test to generate files in /tmp 
01-06-27 ratz: handle hard and soft links if possible
01-06-07 Makefile: fix :MAPLIB: for sco
01-05-31 crossexec.sh: add
	 iffe.sh: add -x crosstype to run crossexec
	 iffe.sh: exp test now handles pass{}end fail{}end yes{}end no{}end
	 package.sh: add package host canon external-host-type-name
	 package.sh: fix `use USER' lookup for shells that support ~USER
	 cc.*: add -dumpmachine to dump target HOSTTYPE
01-05-18 iffe.sh: drop $HOME/tmp/t.sh debug trace -- oops
01-05-01 mamake.c: scan() now handles :PACKAGE: foo:command
01-04-26 *.sh: expand [a-z][A-Z][0-9] for non-contiguous character codes
	 iffe.sh: fix run *.sh for shells that don't $* across . command
	 cc.mvs.390: recode for /bin/sh
01-04-25 package.mk: include non cc-g variants by default
	 package.sh: *[._]* => *?[_.]* for mvs.390 /bin/sh
01-04-24 TEST.mk: no tests for VARIANT=="DLL"
01-04-22 package.mk,package.sh: tarball text members are ascii encoded
01-04-18 package.mk: allow package name to be the same as one of its components
         cc.mvs.390: handle .C .cpp .cxx
         cc.mvs.390: compensate for -o that does not overwrite
01-04-01 regress: fix SAME that just skipped it -- we should regress regress!
	 iffe: fix bug that didn't emit _hdr_foo for internal hdr tests
	 iffe: fix lcl bug for cc -E that doesn't emit line syncs
	 ratz: add ascii=>ebcdic conversion for text archive members
	 mamake: fix buffer overlap bug that clobbered the probe file path
01-03-17 iffe: handle : separator as first arg
01-03-15 mamake.c,ratz.c,release.c: add <stdlib.h> and <string.h>
01-02-26 iffe.sh: fix bug that omitted runtime #define for `mac' op
01-02-22 cc.ibm.risc: handle SF_CLOSE clash in <sfio.h>
01-02-14 cc.sgi.mips3,cc.sgi.mips4: handle -mips2 -mips3 -mips4 for cross cc
	 C+probe: quote "$cc" when its an argument!
	 mamake: execute actions with $SHELL, ignored signals back to default
	 package.sh: nmake check error output to /dev/null
	 package.sh: fix INIT a.out updates for knr cc
	 package.sh: package list now handles large tgz dirs
	 package.sh: *-ok executables moved to ok/* for *.dll systems
	 iffe.sh: change "exec >&-" to "exec >/dev/null" else linux mkdir fails!
	 mamake: handle `bind -lx [dontcare]'
01-02-12 ratz.c: fix _PACKAGE_ast includes
	 package.sh: $HOSTTYPE env overrides if $PACKAGEROOT/arch/$HOSTTYPE/
	 package.sh: $CC ^HOSTTYPE=[A-Za-z_0-9.]*$ overrides HOSTTYPE
	 iffe.sh: fix dat code that used previous $tmp.exe
	 iffe.sh: fix dat code for _DLL imports
01-02-09 iffe.sh: add copy() for shells with the dissappearing here doc bug
01-02-08 Makefile: guard against null $(CC.HOSTTYPE)
01-02-06 Makefile: separate out cc,ld,ldd workarounds (so they will be packaged)
01-02-02 package.sh: fix package use for $INSTALLROOT != */$HOSTTYPE
	 package.sh: create intermediate recursion makefiles when needed
	 package.sh: add $SECONDS to the DEBUG trace prompt
01-01-01 ratz.c: #ifdef for uwin ncc
	 iffe.sh,package.sh: check PACKAGE_PATH for local installations
	 package.sh: add psrinfo for osf.alpha host cpu 
	 package.sh: change pax --meter probe; some hang on /dev/tty
	 package.sh: fix `install flat ARCH'
	 mamake: eliminate loops from scan order
	 C+probe: add probe_verbose -V for aix cc=xlc
	 cc.ibm.risc,ldd.ibm.risc: add
	 package.mk: list refs to top-level licenses only
	 package.mk: add local link table to change log html
00-12-25 package.sh: `no package archives' is a hard error, duh
	 package.sh: reorder host type logic for lame shells
	 mamake.c: getcwd => getwd for NeXT -- how about posix==default guys
	 iffe.sh: really gross workaround for NeXT -lposix stdout null's
	 iffe.sh: handle cc -E that insists on compiling
00-12-15 iffe.sh: ancient sh function call blows $*; call only when $# == 0
	 *.sh: `getopts 2>/dev/null` => `(getopts)2>/dev/null` for ancient sh
	 package.sh: fix LD_LIBRARY*_PATH initialization
	 cc.next.m68k: add for _POSIX_SOURCE and linker multiply defined syms
00-12-12 ratz: add --meter
	 package.sh: a few VPATH fixes
	 Makefile: don't override *.mips* cc if -version not accepted
00-12-11 package.mk: *.inx now contains name=value
00-12-07 package.sh: handle PC netscape . => _ pathname mangle
	 WWW.mk: .tar.gz => .tgz
00-11-27 package.sh: add checklicense() to do license checks at read time
	 package.mk: change component list from preformat to table
00-10-31 package.mk: *.pkg must assert closure
	 package.mk: add cc- variants to list.package.binary
	 package.sh: omit dups from package list
	 package.sh: invalid arg gives one line Usage
	 package.sh: relax checkaout checks for non-owners
	 package.sh: package use sets NPROC if not already set or [01]
	 proto.c: add $(INSTALLROOT)/include/ast hack
00-10-26 WWW.mk: add .SOURCE rhs to :WWWPAGE:
00-10-25 package: fix install
	 package.mk: add list.install
00-10-22 regress: fix VIEW to skip empty dirs
00-10-19 package.mk: $(PACKAGEROOT)/bin/nmake => $(PACKAGEROOT)/bin/manmake
	 iffe: validate #define identifiers
00-10-18 C+probe: mac os10 additions
	 package: add DYLD_LIBRARY_PATH initialization
	 add ldd.$(CC.HOSTTYPE)
00-10-01 iffe: handle -I* -L* options
00-09-21 mamake: add libxxx and xxx to makefile ordered prereqs
00-09-19 C+probe: add probe_longlong
00-09-11 package: drop manmake and $PACKAGEROOT/bin/nmake
00-09-08 iffe: verfiy that $cc is a C compiler
00-06-14 mamprobe: fix win32.* probe
	 mamake: fix bug that used lower view path for generation
	 package: don't clobber $PACKAGEROOT/bin/nmake
00-06-01 C+probe: fix stdinclude *again*
	 package: fix write delta source to use default pax format
	 package: add disambiguating bias for sgi.mips3 over sgi.mips4
	 package.mk: fix for directory content packages lib ast-locale
00-05-01 iffe: fix invalid _LIB_ macro identifier 
00-04-11 C+probe: uniq stdinclude and stdlib, fix usrinclude
00-04-01 regress: fix explicit OUTPUT bug that didn't compare with expected
00-03-17 package: all archives are .tgz for binary download
	 package: $(PACKAGEROOT)/LICENSES/* in source and binary archives
	 package: implement install and verify actions
	 iffe: add exp, pth file dir ..., fix lib - -lfoo, fix lib - - -la -lb
	 iffe: -L* must affect LD_LIBRARY* hacks for .exe tests -- yuk
	 package.mk: add *.pkg :INDEX:
00-03-07 package: add admin action
00-03-06 makefile: install optional make probe override script C+make+probe.lcl
00-02-14 --- release 1.0 ---
	 ratz: treat "foo/" as a dir, not a regular file
	 package: clarify source and binary installation instructions
	 package: fix so binary packages can install without cc
	 package: "ratz" now a non-archive package (the only one) for bootstrap
	 package: handle VPATH=a:b arg
	 package.mk: "ratz" package adjustments
	 Makefile: use :PACKAGE_INIT: to support binary INIT packages
	 WWW.mk: add :WWWALL:
	 C.probe: fix .so check that let .dll slip through
	 iffe: fix config sh var assignment for HAVE_member_IN_struct
	 iffe: fix config sh var assignment for symbol_DECLARED
	 package: delay PATH export until dll hack exports complete
	 package: don't forget binary package $(INSTALLROOT)/lib(32|64)
	 package: add delta change log for source packages
00-02-10 mamprobe: add mam_cc_DLLBIG
	 package: fix spelling typos
	 package: add html help output
	 package.mk: beef up source and binary help => html
00-02-08 package: mkdir man/man[138] in the new arch to cover MAM bug
00-01-28 package,release: add -rcount to release
	 package: fix linux "host cpu" and "host rating"
	 package: copy *.lic to $PACKAGEBIN for "make" and "write binary"
	 package: fix 'release change log' case match
00-01-24 package: add copyright action
	 mamprobe: add -D_BLD_DLL to mam_cc_DLL
00-01-11 package: tsort for package write
	 package: early verification that $CC works
	 package: add non-interactive command arg for use action
	 proto: fix -C intermediate mkdir()
	 mamprobe: unixware.i386 ksh workaround
	 C.probe: move hosttype to C.probe (with unixware.i386 workaround)
	 WWW.mk: fix mm2html option quoting
	 WWW.mk: add .SCAN.mm
	 WWW.mk: don't force static=1; grab dll's instead
	 *.sh: fix getopts test to handle botched implementations like osf.alpha
	 iffe.sh: fix read -r test
99-12-25 iffe: tweak verbose messages
	 iffe: hand code non-optget getopts parse
	 iffe: fix bash quoting bug again
	 iffe: do test -w . after option parse
	 package: fix PACKAGEROOT search
99-11-19 --- release 0.2 ---
99-11-19 first working package & friends
99-10-31 change from lib0ast to INIT; add MAM and package bootstrap
	 hostinfo: gobbled by package
99-10-01 iffe: add --config, yes{...}end no{...}end, fix read -r workaround
99-09-27 iffe: add --all --verbose, --* set options
99-09-22 regress: -v disables long line truncation
99-09-11 WWW.mk: WWWDIR and MM2HTMLINFO are now lists searched in $(HOME)
99-08-11 hostinfo: fix type sgi.mips4
99-06-24 WWW.mk: add
99-06-08 hostinfo.sh: ${TMPDIR:-/tmp}
99-06-07 TEST.mk: add
99-06-01 iffe: add `siz type' for _siz_type == sizeof(type)
99-05-11 hostinfo,iffe,regress,use: long options
99-05-01 C.probe: fix over aggressive stdinclude, e.g., /usr/include/machine
99-04-01 hostinfo: sgi.mips? -o32 and -n32 checks
	 iffe: check that . is writable
99-03-17 hostinfo: fix for cc not found
	 dl.c,hello.c,m.c: headers in conditionals to force .DONTCARE
	 C.probe: extra check for include dirs pulled in by <sys/types.h>
99-03-03 regress: add `UNIT - ...' for extra args
	 Makefile: add (_hosttype_) prereq for cc
99-01-23 hostinfo: tweak rating, use /proc/cpuinfo if there
99-01-11 C.probe: shlib before lib, /usr before /
98-12-25 iffe: work around win32.alpha intrinsic clash with -O
98-11-11 regress: fix UNIT PATH lookup
98-11-01 regress: add PROG
98-10-01 hostinfo: add unixware.*
	 use: export PACKAGE_* 
98-08-11 C.probe: add /usr/include check (for sco CC)
	 hostinfo: handle uwin uname update
98-05-01 regress: fix bug sometimes didn't list last test
98-04-01 hostinfo: add cc path arg
	 hostinfo: now works with /bin/sh
	 Makefile: strengthed -lm probe
98-01-23 Makefile: check for -ldl -lm
	 C.probe: handle gcc -v -E phony include dirs
	 iffe: fix lcl by dropping sort -u -- we need the real first
	 iffe: `mem x' to test if x is a non-opaque struct
98-01-11 $(INSTALLROOT)/lib32 for sgi.mips3
	 $(INSTALLROOT)/lib64 for sgi.mips4
	 add cc.hp.pa
98-01-01 cc.sgi.mips*: turn off ld library multiply defined
97-10-11 regress: add VIEW function for locating data
97-10-01 Makefile: -ldl test moved to libdll Makefile
97-08-11 regress: add MOVE
	 regress: add SAME
	 regress: use getopts
	 regress: `EXEC' repeats previous test
97-07-17 use: tweak PATH and LIBPATH bootstrap order
	 iffe: fix lcl bug that botched pathnames with embedded spaces
97-06-12 iffe: add npt `needs prototype' test
97-05-09 hostinfo: mvs.* => mvs.390
	 Makefile: cc.$(_hosttype_) workaround installed here
	 iffe: fix nolink{ ... }end
	 iffe: add [no]static{ ... }end for static link test
	 C.probe: _probe_PATH => _probe_export which must be eval'd
97-04-01 use: _RLD_ROOT set too
97-03-17 mm2html: changed inner loop
	 mm2html: handle .if|.ie|.el, .so
	 mm2html: handle different man styles
	 mm2html: differentiate mm/man in some non-obvious cases
	 hostinfo: r5000 is not mips4
97-02-14 hostinfo: validate type with cc
96-12-25 C.probe: uwin tweaks
	 iffe: use `...` instead of $(...) for alpha /bin/sh
	 iffe: fix `typ' divide by 0
	 iffe: `lcl' now drops X: prefix
	 iffe: +l* -> -l*
	 iffe: eval around ${...#%...} for bsd /bin/sh
	 use: add sgi.mips LD_LIBRARY<abi>_PATH variants
	 use: add -e to list exports
	 iffe: lcl leaves leading [a-zA-Z]: for dos
	 iffe: fix no{link|output|execute} logic
	 C.probe: don't automatically add /usr/include for non-hosted compilers
	 C.probe: don't automatically place /usr/include last
	 C.probe: check gcc style -v -E for stdinclude usrinclude
96-11-28 iffe: check BASH_VERSION for IFS botch
	 iffe: typ long.xxx only if sizeof(long xxx) != sizeof(xxx)
	 hostinfo: fix sgi.mips[234] tests
	 hostinfo: fix ncr.i386 tests
96-10-31 iffe: work around old bsh here doc bug by running separate sh
96-10-11 iffe: *.iffe and *.iff for iffe src files
	 hostinfo: tighten sgi.mips cpu type check
96-10-01 C.probe: add probe_libdir to catch alpha /usr/shlib
96-09-17 iffe: fix typ bug that failed for single id types!
96-08-31 hostinfo: handle recent sgi hinv cpu changes
96-07-17 make sure sizeof(long xxx)>sizeof(xxx) for typ long.xxx
96-05-09 C.probe: drop multiple / in stdinclude
96-02-29 use: package root must have bin and lib subdir
	 mm2html: add
	 C.probe: probe_members += -whole-archive for gcc
	 iffe: add + fix the blasted `...'...\...'...`
96-01-31 use: add pkg dir
	 hostinfo: add tandem
96-01-01 hostinfo: windows_nt|windows[0-9][0-9] -> win32
95-11-24 hostinfo: linux-aout.* for non-elf linux
95-11-11 use: add aix LIBPATH
95-10-11 hostinfo: no args prints type
95-08-11 use: add
95-05-09 save original PATH in _probe_PATH
	 beef up library dir probe
95-04-01 use c source suffix if it still preserves the dialect
	 add hostinfo
	 add lib/hostinfo/typemap user type map
	 add sol.sun4 cpu count
	 fix C.probe to properly handle C/C++ combined compiler drivers
	 add NeXT to hostinfo
	 bummer: mach has /usr/bin/hostinfo
95-03-19 fix dialect executable test
95-03-19 --- release 0.0 ---


January 05, 2015

ast-2020.0.0/lib/package/INIT.pkg000066400000000000000000000006021354756417200161450ustar00rootroot00000000000000INIT :PACKAGE: :CATEGORY: admin utils :INDEX: the package command with support scripts and utilities :DESCRIPTION: The INIT package is required by all but the standalone and self extracting archive packages. It contains the package command, support scripts, and utilities. The package command installs binary packages, makes source packages, and generates new package tarballs. ast-2020.0.0/lib/package/INIT.req000066400000000000000000000000001354756417200161430ustar00rootroot00000000000000ast-2020.0.0/lib/package/INIT.ver000066400000000000000000000000351354756417200161600ustar00rootroot00000000000000INIT 2014-12-24 2014-12-24 1 ast-2020.0.0/lib/package/LICENSES/000077500000000000000000000000001354756417200161065ustar00rootroot00000000000000ast-2020.0.0/lib/package/LICENSES/bsd000066400000000000000000000035071354756417200166060ustar00rootroot00000000000000+------------------------------------------------------------------------------+ | This license covers all software that refers to the URL | | http://www.opensource.org/licenses/bsd-license.php | +------------------------------------------------------------------------------+ The BSD License Copyright (c) , All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ast-2020.0.0/lib/package/LICENSES/epl000066400000000000000000000275531354756417200166250ustar00rootroot00000000000000+------------------------------------------------------------------------------+ | This license covers all software that refers to the URL | | http://www.eclipse.org/org/documents/epl-v10.html | +------------------------------------------------------------------------------+ Eclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. ast-2020.0.0/lib/package/ast-ast.pkg000066400000000000000000000003161354756417200167600ustar00rootroot00000000000000ast-ast :PACKAGE: libast :LICENSE: *.open :CATEGORY: devel libs :INDEX: the ast library, period :DESCRIPTION: The AT&T Software Technology ast-ast package from AT&T Research contains the ast library. ast-2020.0.0/lib/package/ast-base.pkg000066400000000000000000000015531354756417200171070ustar00rootroot00000000000000ast-base :PACKAGE: \ ksh93 pax html proto bzip tw builtin libast libardir libcmd \ libdll libexpr libodelta librecsort libsum libuu libvdelta \ libbz libz tests coshell cpp cs mam msggen msgcc nmake probe ss \ libcoshell libcs libmam libpp libcodex paxlib codexlib \ libdss libpz dsslib libvcodex libvgraph vcodexlib :COVERS: ast-make ast-ksh ast-ast :LICENSE: *.open :CATEGORY: devel libs shells :INDEX: ksh, ksh builtin commands, pax, nmake, tw, sfio, and ast libraries :DESCRIPTION: The AT&T Software Technology ast-base package from AT&T Research contains commands and libraries required by all other ast based packages. Included are ksh93, ksh93 builtin commands, a pax that generates compact delta archives, nmake, coshell for network execution, a multi-dialect C preprocessor and companion library, and libraries shared by the other ast packages. ast-2020.0.0/lib/package/ast-base.req000066400000000000000000000000001354756417200170770ustar00rootroot00000000000000ast-2020.0.0/lib/package/ast-base.ver000066400000000000000000000000411354756417200171110ustar00rootroot00000000000000ast-base 2014-07-21 2014-07-21 1 ast-2020.0.0/lib/package/ast-dss.pkg000066400000000000000000000005171354756417200167650ustar00rootroot00000000000000ast-dss :PACKAGE: dss libdss libpz dsslib :REQUIRES: ast-base :LICENSE: *.(open|proprietary|special) :CATEGORY: algorithms database utils :INDEX: data stream scan command and support libraries :DESCRIPTION: The AT&T Software Technology ast-dss package from AT&T Research contains the dss command, plugins and support libraries. ast-2020.0.0/lib/package/ast-ksh.pkg000066400000000000000000000066221354756417200167640ustar00rootroot00000000000000ast-ksh :PACKAGE: ksh93 msggen libast libcmd libcoshell libsum libdll :COVERS: ksh :LICENSE: *.open :CATEGORY: shells :INDEX: ksh and support libraries :DESCRIPTION: The AT&T Software Technology ast-ksh package from AT&T Research contains ksh and support libraries. This is the minimal set of components needed to build ksh. :DETAILS: cyg :README: This package installs a standalone ksh93 executable ksh93.exe and its man page ksh93.1. If /bin/ksh.exe does not exist then these symlinks /bin/ksh.exe => ksh93.exe /usr/share/man/man1/ksh93.1 => ksh.1 are created. This allows alternative ksh impelementations, e.g., /bin/pdksh.exe, to be selected by changing the ksh.exe and ksh.1 symbolic links. In addition, ksh and ksh93 paths are added to /etc/shells if not already present. $() Each builtin or special command accepts the --man and --html options to list the man page on the standard error. The --??? option describes the self documenting options available to all builtin and special commands. $() The stanadlone ksh is statically linked with the ast libcmd library which provides several builtin versions of /bin commands. "builtin | grep /opt/ast/bin" lists the libcmd builtins on the standard output. /opt/ast/bin/FOO accesses the FOO builtin, whether the /opt/ast/bin directory exists or not. "builtin FOO" allows /opt/ast/bin/FOO to be accessed as FOO, bypassing the $PATH setting. To enable all libcmd builtins do one of the following: (a) create the directory /opt/ast/bin and the file /opt/ast/bin/.paths with this line BUILTIN_LIB=. and place /opt/ast/bin before /bin and /usr/bin in $PATH (this will affect all ksh subshells and scripts) (b) run "builtin $( builtin | sed -e '/\//!d' -e 's,.*/,,' )" (this will affect only the current shell) Some scripts may run significantly faster with libcmd builtins enabled. $() The ast library checks the DOSPATHVARS environment variable for variable path values to convert to and from native windows format when cross-executing between cygwin and non-cygwin programs. The value is a space separated list of environment variables to convert. PATH is handled by cygwin so it is not converted by the ast library. $() The astksh cygwin source package provides a bootstrap build environment that is not suited for an edit/build/debug cycle. If you want to explore and modify the source then you should install the (non-cygwinized) ast-base package which includes AT&T nmake. With ast-base you will also be able to regenerate the astksh cygwin source and binary packages. $() For more information on ksh and other AT&T ast tools see http://www.research.att.com/sw/download/ :EXPORT: SHOPT_CMDLIB_DIR=1 bin/ksh93.exe :INSTALL: bin/ksh.exe share/man/man1/ksh93.1 :INSTALL: man/man1/sh.1 :POSTINSTALL: if [ ! -e /bin/ksh.exe ] then ln -fs ksh93.exe /bin/ksh.exe ln -fs ksh93.1 /usr/share/man/man1/ksh.1 else echo "/bin/ksh.exe already exists" fi if [ -f /etc/shells ] then for i in /bin/ksh93 /bin/ksh /usr/bin/ksh93 /usr/bin/ksh do if grep $i /etc/shells >/dev/null 2>&1 then echo "$i already in /etc/shells" else echo $i >> /etc/shells echo "$i added to /etc/shells" fi done else echo "no /etc/shells file" fi exit 0 :TEST: bin/ksh KSH=$<; cd src/cmd/ksh93/tests; CYGWIN="$$CYGWIN ntsec binmode" SHELL=$$KSH $$KSH shtests ast-2020.0.0/lib/package/ast-ksh.req000066400000000000000000000000001354756417200167520ustar00rootroot00000000000000ast-2020.0.0/lib/package/ast-ksh.ver000066400000000000000000000000401354756417200167630ustar00rootroot00000000000000ast-ksh 2014-12-24 2014-12-24 1 ast-2020.0.0/lib/package/ast-make.pkg000066400000000000000000000007731354756417200171150ustar00rootroot00000000000000ast-make :PACKAGE: \ nmake cpp probe 3d ksh93 coshell cs ss pax paxlib tw \ libast libardir libcmd libsum libdll libcoshell libpp :AUXILIARY: bin/proto bin/pax :LICENSE: *.open :COVERS: ast-ksh ast-ast :CATEGORY: devel libs shells :INDEX: ksh, pax, nmake :DESCRIPTION: The AT&T Software Technology ast-make package from AT&T Research contains an almost minimal set of commands and libraries required to run ast nmake. ksh, coshell, pax, tw, and the 3d user-level filesystem are also included. ast-2020.0.0/lib/package/ast-make.req000066400000000000000000000000001354756417200171020ustar00rootroot00000000000000ast-2020.0.0/lib/package/ast-make.ver000066400000000000000000000000411354756417200171140ustar00rootroot00000000000000ast-make 2014-03-17 2014-03-17 1 ast-2020.0.0/lib/package/ast-open.README000066400000000000000000023061631354756417200173210ustar00rootroot00000000000000The AT&T Software Technology ast-open package from AT&T Research contains all of the ast open source commands and libraries. This package is a superset of the following packages: ast-base ast-make ast-ksh ksh ast-ast ast-dss; you won't need these if you download ast-open. Source Package Installation Instructions: (1) Do not install packages as root/super-user. Although some components may have setuid executables, few must be owned by root. These are best changed manually when the security implications are understood. (2) Choose a package root directory and cd to it. This will be a local work area for all packages. (3) These instructions bypass the click to download package links on the download site. If you already clicked, or if your system does not have curl(1), hurl(1), lynx(1) or wget(1) then use the alternate instructions for (3),(4),(5) in plan B below. Plan B installs the hurl(1) script which works with ksh and modern bash. The top level URL is: URL=http://www.research.att.com/sw/download (4) If the bin/package script does not exist then run: test -d bin || mkdir bin url=$URL/package (wget -O - $url||curl -L $url||hurl $url) > bin/package chmod +x bin/package (5) Determine the list of package names you want from the download site, then use the package(1) command to do the actual download: bin/package authorize "NAME" password "PASSWORD" \ setup source $URL PACKAGE ... (Refer to the AUTHORIZATION paragraph on the main download page for NAME/PASSWORD details.) This downloads the closure of the latest source package(s); covered and up-to-date packages are not downloaded again unless package force ... is specified. Package content is verified using md5sum. If the package root will contain only one architecture then you can install in bin and lib instead of arch/HOSTTYPE/bin and arch/HOSTTYPE/lib by running this instead: bin/package authorize "NAME" password "PASSWORD" \ flat setup source $URL PACKAGE ... To update the same packages from the same URL run: bin/package setup source (6) Build and install; all generated files are placed under arch/HOSTTYPE ($INSTALLROOT), where HOSTTYPE is the output of bin/package (with no arguments.) name=value arguments are supported; CC and debug=1 (compile with -g instead of -O) are likely candidates. The output is written to the terminal and captured in $INSTALLROOT/lib/package/gen/make.out: bin/package make (7) List make results and interesting errors: bin/package results Run the regression tests: bin/package test List test results and errors: bin/package results test (8) The generated binaries are position independent, i.e., they do not contain hard-coded paths. However, commands with related files, like file(1) and nmake(1), require the path of the bin directory to be exported in PATH. (9) You can run the binaries directly from the package root, or you can install them in a public root after you are satisfied with the make and test actions (requires the AT&T nmake(1) command): bin/package flat install DIRECTORY PACKAGE This will install in DIRECTORY/bin and DIRECTORY/lib. If you want to preserve the arch/HOSTTYPE hierarchy under DIRECTORY then omit the flat argument. If you don't have nmake(1) then the following will do a flat install: cd $INSTALLROOT cp -p -r bin lib include DIRECTORY (10) To summarize, after the first time the download, build, and test cycle for the latest source release is: bin/package setup source bin/package make bin/package test Source Package Installation Instructions -- Plan B: (3) Create the subdirectory lib/package/tgz and download all package archives into that directory. (4) If the bin/package script does not exist then manually read the INIT source package: gunzip < lib/package/tgz/INIT.YYYY-MM-DD.tgz | tar xvf - Note that some browsers automatically unzip downloaded without warning. If the gunzip fails try: tar xvf - lib/package/tgz/INIT.YYYY-MM-DD.tgz If your system does not have tar(1) or gunzip(1) then download the ratz source package, compile it, and manually read the INIT source package: mkdir bin cp lib/package/tgz/ratz.YYYY-MM-DD.c lib/package/tgz/ratz.c cc -o bin/ratz lib/package/tgz/ratz.c bin/ratz -lm < lib/package/tgz/INIT.YYYY-MM-DD.tgz (5) Read all unread package archive(s): bin/package read Both source and binary packages will be read by this step. All recorded changes follow. :::::::: ksh93 :::::::: 14-12-24 --- Release ksh93v- --- 14-12-24 A bug which occurred when the undocumented alarm builtin received an alarm timeout while in the read builtin has been fixed. 14-12-24 A bug in the startup of interactive restricted ksh which give a restricted error message for redirection to /dev/null has been fixed. 14-12-24 A bug in which the output from builtin --? was garbled has been fixed. 14-12-24 The SIGINFO signal has been added to DARWIN. 14-12-23 A bug in which job control was being disabled by using `...` command substitution has been fixed. 14-12-22 Some patches for compilation on Darwin have been added. 14-12-02 The requirement that unquoted { and } must match inside string with ${name op string} has been removed (at least for now). 14-11-26 A bug in which hitting interrup while a PS1.get function was executing could cause in infinite loop has been fixed. 14-11-25 +If tab completion for a command name that is an alias is attempted, it will use the completion for the command it is aliased to. 14-11-24 Two bugs with programmable completion have been fixed. 14-11-24 A parser bug with line continuation after the =~ operator with [[...]] has been fixed. 14-11-20 A fix in read for some multibyte locales such as shift JIS has been made. 14-11-02 Merged in changes from Apple for Mac/OS. 14-10-29 Several bugs in the read -m json builtin have been made. 14-09-29 A bug which allowed builtin -d to delete a special built-in has been fixed. 14-09-24 +When listing jobs, the shell now shows the directory that the job was started from when it was not started from the current working directory. 14-09-09 A bug in which `` command substitutions could hang with large output has been fixed. 14-09-02 A bug in the test and [...] command for arithmetic operations when one of the operands was a variable. 14-08-28 a bug which could cause a core dump when unsetting a function that is in the active call chain has been fixed. 14-08-22 A bug in which a command substitution of a function that fails, does not cause an assigment command to fail has been fixed 14-08-05 A bug in which print -s would fail with bad file unit number has been fixed. 14-07-22 A bug in which a non-zero exit status not last element of a pipeline could cause the pipeline to fail when pipefail is off has been fixed. 14-07-21 +A -m method option has been added to read to read compound variables using a specified method. Currently only methods ksh and json are implemented. -m ksh is equivalent to -C. 14-07-18 +In bash mode, the last element of a pipe is run in a subshell unless the option lastpipe is on. 14-07-15 Fixed a bug in which json format output with 'print -j' had a comma after the last element. 14-07-11 +Added -t flag and -P flag to whence and type for bash compaiblity. 14-07-11 +Added -p flag to alias to output aliases for re-input. 14-07-10 In bash mode x=() creates an empty index array instead of an empty compound variable. 14-07-01 Some ifdefs were added so that ksh93 compiles with SHOPT_COMPLETE disabled. 14-06-30 +The variable COMP_WORDBREAKS for programmable completion. 14-06-25 A bug on some systems in which cd to a directory without execute permission would not fail has been fixed. 14-06-25 +The BASH_SOURCE variable was added when ksh is run in bash mode. 14-06-25 +The -D and -E options have been added to the complete builtin. 14-06-19 References to dgk@research.att.com were deleted. 14-06-19 +The -l flag to trap and the -p flag to umask were added as in bash. 14-06-17 +In bash mode ${!parameter} is treated like ${$parameter}. 14-06-17 Fixed a bug in which eval inside a dot script invoked by a profile file terminated the dot script prematurely after running the eval command. 14-06-16 +Added parameter expansion operator ${$parameter} for variables and positional parameters. 14-06-06 Added -a option to read which is equivalent to -A. 14-06-05 Fixed a bug in builtin -p. 14-06-05 +Added -n option to builtin to disable builtins. 14-06-04 Fixed a couple of file completion bugs. 14-06-02 +When compiled with the SHOPT_BASH and run with the name bash, the shell now uses dynamic scoping for name() and function name. In addition the builtins declare and local are supported. The SHOPT_BASH option is on by default in the Makefile. More work remains with the bash compatibility option. 14-05-25 Fixed a bug in vi command completion in which tab did not work after a space. 14-05-25 +Replaced the -p option for read with -p prompt. For backword compatibility, if a coprocess is running and prompt begins with - or is a valid variable name, -p causes the read from a pipe. 14-05-25 +Modified the -u option for read and print so that it accepts the option argument p to indicate the coprocess file descriptor. 14-05-08 A bug in the option parser which could cause 'X -a v=((...)...) to core dump has been fixed. 14-05-07 A change to improve the performance of appending an element to an array has been fixed. 14-05-02 +A compilation option to add programmable completion with the two new builtins, complete and compgen has been added. It should behave the same as it does with bash. Please try this out and report any problems you find. Use compgen --man and complete --man to get the man pages. Use the bash documentation for now for information about programmable completion. The compilation is on by default for now. 14-04-05 A bug in which type name starting with the letter a, did not allow instances to be created has been fixed. 14-04-03 A bug which caused a syntax error when a here-doc was embedded in `` command substitution has been fixed. 14-03-31 A bug in `` command substition of a pipeline which could cause memory problems has been fixed. 14-03-25 A bug in which the assignment A=() when A is an index array of types did not eliminate the zero-th element has been fixed. 14-03-24 A bug in which the braceexpand option was ignored when noglob was on has been fixed. 14-03-17 A bug in which a timer alarm during a built-in could cause a core dump has been fixed. 14-03-03 A bug in which creating an empty array of a type variable with required fields has been fixed 14-02-12 A bug which occurs in an interactive shell when a file is opened as file descriptor 3 for reading which causes a subsequent read command to fail to read a line from the file has been fixed. 14-02-06 The description of .sh.match in the sh.1 man page was fixed. 14-02-05 A typeset -p bug for an associative array of types has been fixed. 14-01-29 A process substitution bug which caused a process to hang has been fixed. 14-01-27 Another bug in which extended regular expressions give with the =~ operator in [[...]] gave syntax errors with multiple (...){...} has been fixed. 14-01-23 The value of errno is now saved and restored during shell interrupt handlers. 14-01-21 A bug in which a read from a script invoked with set -m could stop when trying to read, and cause the parent to try to restart which causes a loop has been fixed. 14-01-20 A bug in the right shift operator in arithmetic expressions when the shift count is greated then the number of bits in a long integer has been fixed. 14-01-20 Another memory leak which occured for functions defined in subshells has been fixed. 14-01-14 Fixed a memory leak which occurred for local variables in a function that is invoked by a subshell. 14-01-10 [[...]] now supports hexidecimal constants with aritmetic operators. 14-01-09 A bug which could cause a core dump with nested subshells and functions has been fixed. 14-01-09 A second bug in which appending to an empty array of types does starts with element 1 rather than 0 has been fixed. 14-01-06 A bug which could cause a core dump when KSH_VERSION is exported in the envirnment has been fixed. KSH_VERSION is a name reference to .sh.version. 14-01-06 Fixed a bug that could cause a core dump wiith large prompts. 14-01-06 A bug in which appending to an empty array of types does starts with element 1 rather than 0 has been fixed. 14-01-02 A bug in which set -o nounset can trigger unset errors when reading function definitions has been fixed. 13-12-31 The documente feature that state that unset a type subvariable that is readonly is required to be specified when creating an type instance now works. The man page generated with typename --man now lists these fields as required fields. 13-12-31 A bug in which extended regular expressions give with the =~ operator in [[...]] gave syntax errors with (...){...} has been fixed. 13-12-30 A bug in the left shift operator in arithmetic expressions when the shift count is greated then the number of bits in a long integer has been fixed. 13-12-05 If cd is invoked with no arguments and HOME is unset, it attempts to find the home directory and use that. Otherwise an error occurs. 13-12-04 A bug in the handling of $( on an empty directory. 13-05-30 A bug with set -m in a script wich could cause the script to hang has been fixed. 13-05-30 Two bugs related to the processing of a nameref foo=$1 where $1 is of the form arr[subscript] where subscript is an arithmetic expression has been fixed. 13-05-29 ksh93 now intercepts the LC_TIME variable. 13-05-29 A bug in which builtin -d date did not delete the date builtin has been fixed. 13-05-29 namespace commands are no longer allowed inside function definitions and now generate a syntax error. 13-05-28 Fixed bugs in typeset -c for copying attributes for simple variables. 13-05-28 Fixed two bug for typeset -c and typeset -m for variable .sh.match. 13-05-28 +Added -j option to print (and %(json)B format specifier to printf) which will print a compound shell variable in JSON format. This is expermental. Let me know if I got things wrong. 13-05-23 A bug for enumeration types in which unset elements of an array expanded to the default enum name rather than to the empty string has been fixed 13-05-23 A bug in which set -u did not fail for unset array elements of an array of short ints (typeset -is) has been fixed. 13-05-22 +Added -c option to typeset which is similar to typeset -m except that the variable is copied rather than moved. This is experimental and there are known bugs. If it can't be made reliable it will not be added. 13-05-20 Fixed a bug in which running script < file, where script did reads generated output the the terminal in error has been fixed. 13-05-20 Updated documentation for typeset -s and typeset -l for integer and floating point types. 13-05-17 A bug in the ${b[i}} when b is an enumeration variable whose value corresponds to the 0'th element. 13-05-17 A bug in which set -o nounset caused ((boold=true)) to fail has been fixed. 13-05-16 A bug in which a nameref to a compound sub-variable that does not exit failed when called from a function with static variables has been fixed. 13-05-15 +The set -s -Aarray sort option added on 13-04-25 now works for sorting an indexed array of type instances. 13-05-15 A bug in which ${!foo*} did not contain foo when $foo exists has been fixed. 13-05-15 typeset -m foo=bar now generates an error when set -o nounset is on and variable bar is unset. 13-05-14 A bug in which bar was not empty after typeset -m foo=bar has been fixed. 13-05-13 A bug in which the exit trap could be executed twice with ${...;} has been fixed. 13-05-10 Added more documentation with enum --man. 13-05-10 With print -v for with nested compound variables, the output contains typeset -C for sub-variabes that are compound assignments. 13-05-10 Reduced the number of warning when running gcc with -Wshadow option. 13-05-09 Updated man page to mention _Bool enumeration and bool preset alias. 13-05-08 Modified the code to that CHLD traps are delayed when a trap from another signal is being modified. 13-05-08 Added a ksh -n options that suggests that x=$((expr)) be replaced by ((x=expr))> 13-05-07 A bug in which typeset -p and print -v did not display elements that were compound variables without any sub-variables has been fixed. 13-05-06 Fixed a bug with typeset -m when varaible is a name reference to a local variable from a calling function. 13-05-06 A bug in which shcomp failed to compile some scrips that defined enums has been fixed. 13-05-03 Fixed a bug with typeset -m a[i]=a[j] when a is a numeric array type. 13-05-02 Fixed another typeset -m but form moving types containing compound variables. 13-05-02 Fixed another typeset -m bug for moving a compound variable contained in a type variable. 13-05-01 Fixed two bugs additional bugs related to typeset -m for compound variables. 13-05-01 +Increased to maximum number of enumeration elements from 32K to 2G. 13-04-30 A bug in which typeset -m did not preserve attributes has been fixed. 13-04-30 A bug with with read -C var when var contained index array subscripts that caused side effects on evaluation has been fixed. 13-04-29 A bug in defining and using multi-dimensional types and enums has been fixed. 13-04-25 A bug which caused iffe to fail on some systems has been fixed. 13-04-25 +The -K option has been added to set to sort indexed arrays of compound elements based on a list of keys. 13-04-18 Fixed a bug with process substitution on systems that don't support /dev/fd. 13-04-18 Added serialization to processing of CHLD traps. 13-04-17 A bug in arithmetic in which x[i].foo in a loop would not be re-evalued when subscript i changed value has been fixed. 13-04-15 Fixed a couple of problems with regression tests. 13-04-15 ksh now waits for background jobs started in functions contained in command substitution. 13-04-11 Made code changes based on warning from the "clang" tool. 13-04-11 Fixed two core dumps on some architectures related to uninitialzed data. 13-04-10 ksh now waits for background jobs started in $() and ${...;} to complete as it did in ksh93u+. 13-04-10 A bug in which x=\\x; case x in $x) echo yes;; *) echo no; esac printed yes has been fixed. It should print no. 13-04-08 +ksh now sets .sh.sig.pid and .sh.sig.status for CHLD traps. The .sh.sig.status can be one of exited, killed, dumped, stopped or continued. 13-04-08 +The CHLD trap is now triggered with STOP and CONT signals. 13-04-05 A bug in which a command with one or more >(...) process substitution arguments did not wait for all >(...) to complete before running the next command has been fixed. 13-04-04 A bug in which monitor mode was not working for scripts has been fixed. 13-04-04 A bug in which an unset variable error with set -u on did not terminate the current script has been fixed. 13-04-03 The shell now uses mmap() on systems that suppport it for command substitution. 13-04-03 +Functions that are used in brace group command substitution ${ ... } can assign the result to .sh.value instead of writing to standard out with the same result, but faster. 13-04-02 A bug in the handling of string files in a type that is a member of another type has been fixed/ 13-04-02 A bug in cd ../.foobar, where ../.foobar exists, has been fixed. 13-03-29 A bug in which read -r -d delim ignored -r has been fixed. 13-03-28 A bug in which the KEYBD trap did not work correctly lines that are continued has been fixed. 13-03-28 read with line delimiter 0 and field separator \n did not split on '\n' and has been fixed. 13-03-28 A bug in which "typeset -a" could cause a core dump has been fixed. 13-03-27 +The variable .sh.sig containing siginfo information is no set during a SIGCHLD trap. 13-03-26 A bug resulting from one of the memory leak bugs fixed on 13-03-15 has been fixed. 13-03-22 A bug in displaying indexed arrays of types in a compound variable has been fixed. 13-03-22 A bug in which typeset -T did not display subtype names correctly do to a caching problem has been fixed. 13-03-21 A bug in which ${...PATH=...} command substitution did not preserve path bindings has been fixed. 13-03-20 The exit value from the expansion of the PS1 prompt no longer affects the exit status of the shell. 13-03-20 A fork bomb which could occur when a job was stopped in a shell with monitor mode, but not a job control shell has been fixed. 13-03-19 A new patch to replace the patch removed on 13-03-06 for non utf8 locales in command substitution has been added. 13-03-17 A bug with print -v for an array of integer or floats has been fixed. 13-03-15 Two memory leaks related to arrays created in functions has been fixed. 13-03-14 A bug in reading an instance of an indexed array variable has been fixed. 13-03-12 Initialized a variable in sh/macro.c that had been uninitialized. 13-03-12 Fixed a bug that could cause a core dump with associative arrays used withing types. 13-03-12 Empty fields and empty arrays as type elements are not displayed when expanding a type instance. 13-03-11 The trap command now blocks signals that have traps until the trap command completes. 13-03-11 Signals that have traps that occur while processing a trap are deferred until the trap command completes. 13-03-10 A bug in the expansion of a compound variable containing nested types that contains arrays has been fixed. 13-03-06 The patch made on 13-02-07 to handle non utf8 locales has been removed (for now) because it broke a utf8 locale script. 13-03-05 A bug in which ${!var*} to not expand correctly when it was at the beginning of a script for after a call to enum has been fixed. 13-03-05 A bug in the expansion of a compound variable containing nested types has been fixed. 13-03-04 A bug in the for loop optimizer which could falsely treat typeset -b as loop invariants has been fixed. 13-02-27 The exit value from expanding the PS[1-4] prompts no longer affect the exit status of the shell when you exit with EOF. 13-02-22 'kill %' caused the shell to core dump. This has been fixed. 13-02-21 The 12-01-16 bug fix prevented .sh.match from being used in the replacement string. The previous code was restored and a different fix which prevented .sh.match from being computed for nested replacement has been used instead. 13-02-20 Fixed two bugs related to reading compound variables with read -C that contain sub-elemects that are type variables. 13-02-19 Fixed a bug introduced on 13-01-17 when adding the feature of allowing math functions to pass arrays as arguments. 13-02-13 A bug in which hitting interrupt with reading from a terminal sent the interrupt to the current process rather than the current process group has been fixed. 13-02-13 A bug in which x.name and x[0].name were not treated the same has been fixed. 13-02-08 +The -p option was added to enum to display the values that are valid for the enum. 13-02-07 +A preset alias named bool which is an alias for an enum named _Bool which has values true and false has been added. 13-02-07 A bug in the processing of multibyte characters in non utf8 locales in command substitution has been fixed. 13-02-05 Fixed emacs tab completion bug in which typing in a directory with one element that contained an element of one entry did not expand to both names. 13-02-24 Increased the maximum level of recursion for evaluating variables inside arithmetic expressions from 9 to 1024. 13-02-24 Added exp10 math function. 13-01-31 A bug in integer division which occured for numbers between INT_MAX and UINT_MAX has been fixed. 13-01-31 A bug in the parser that did not allow for redirections with ((...)) arithmetic statements has been fixed. 13-01-17 +User define math functions introduced on 10-03-24 now allow passing arrays as arguments. 13-01-10 +ksh now treats ESC-O-letter the same as ESC-[-letter in vi and emacs edit modes. 12-12-10 A bug with enumerations types when declaring an indexed array of an enumeration type has been fixed. 12-11-30 A bug in which whence or type on a preset alias did not output the value has been fixed. 12-11-28 Assigning an element of an indexed array as an empty array now correctly displays this with typeset -p. 12-11-28 typeset -p of an array variable whose 0 element was an array variable with no elements did not output correctly and has been fixed. 12-11-20 Numerous changes related to new algorithm for shell redirections using the spawnvex() library. Not yet used in all cases. 12-11-14 A bug with caused by using spawnvex*() functions for redirections of simple commands with here-documents has been fixed. 12-11-12 A memory leak which occured while doing path search has been fixed. 12-10-24 A bug which caused the shell to report a syntax error when a command substitution appeared on the line that started a here document has been fixed. 12-10-23 The shell now uses the new spawnvex*() functions for redirections of simple command that are not builtin. 12-10-21 Here documents with $() and ${ } use larger buffers. 12-10-21 Builtins now use mmap() for files that are opened for reading. 12-10-18 A bug in which preceding a special builtin with command did not prevent assignments from remaining has been fixed. 12-10-17 A bug in the self documentation for types which causes the field descriptors to be off by 1 has been fixed. 12-10-17 An array bug which caused a regression test to fail has been fixed. 12-10-16 A bug in the exit status for command substitution caused by no longer using pipes has been fixed. 12-10-16 A bug in the self documentation for types with discipline functions led to an extra line containing -. and has been fixed. 12-10-16 Fixed a bug with typeset -p that could cause a core dump. 12-10-15 Fixed a bug in which unsigned long was used when unsigned long long was needed. 12-10-15 Fixed a bug in which could cause long double data to not aligned correctly in types. 12-10-09 A bug in which nested types were not able to invoke a discipline method defined by an embedded type has been fixed. 12-10-09 +read -d '' now reads up to a NUL byte. 12-10-04 libcmd builtins are statically linked into ksh93 and by default are bound to the path /opt/ast/bin whether this path exists or not. Changing the .sh.op_astbin variable changes the binding. 12-10-02 Fixed a bug that could cause a core dump when unsetting type instances. 12-10-02 Command substitution for using $() no longer uses a pipe and waits for the process to complete before finishing. 12-10-01 Updated man page for [[ s1 < s2 ]] and [[ s1 > s2 ]] to clearify that the string comparisons are based on the locale. 12-10-01 +Added the variable SH_OPTIONS which consitst of name=value pairs. For defined options it assigned value to the variable .sh.op_name. 12-10-02 +Add the variable .sh.op_astbin to define the directory where several shell builtins will be bound. 12-09-28 Fixed a bug that caused core dumps when unsetting an array of types on some systems. 12-09-28 Fixed a LINENO bug that causes function line numbers to be wrong on some 32 bit systems. 12-09-24 The LINENO variable can now handle scripts with more than 2147483647 lines. 12-09-24 The number of elements for an indexed array for a 64 bit architecture has been increased to 2147483647. 12-09-21 A bug in which the output of a two dimensional sparse indexed array would cause the second subscript be treated as an associative array when read back in has been fixed. Elements that are sparse indexed arrays now are prefixed type "typeset -a". 12-09-19 A bug in which running more that 32767 subshell could cause the shell to core dump has been fixed. 12-09-19 A bug in which the freeing of a compound variable with types and arrays when leaving a function has been fixed. 12-09-18 A bug in which compound -a for a type element did not display the -C attribute has been fixed. 12-09-14 >; file now fails if the user does not have write permission on file. 12-09-13 Fixed a compilation problem with Solaris which does not have SOCK_CLEXEC. 12-09-12 Moved from using libast spawnveg() to new libast spawnvex(). 12-09-12 Changed the default build to disable SHOPT_FIXEDARRAY. 12-09-11 Fixed two bugs related to name references to compound array variables. 12-09-10 +Added ~{fd} expansion where fd is the number of an open file or a variable whose value is the number of an open file. 12-09-10 Fixed a bug in typeset -m the .sh.match is being renamed. 12-09-07 Fixed a bug in .sh.match code that coud cause the shell to quitely 12-09-07 Modified the code to use bool instead of int in several places. 12-09-05 Modified pipe and socketpair creating to create file descriptors with close-on-exec set. 12-08-31 A bug in vi mode in which ~/tst/make/users/hv did not expand correctly has been fixed. 12-08-31 A bug that could cause a core dump after typeset -m var=.sh.match has been fixed. 12-08-30 For an associative array A, $((A[sub])) no longer cause subscript sub to be created. 12-08-29 A scoping error in setting the scope for a reference when the reference contained subscripts containing a variable from a different scope has been fixed. 12-08-27 A number of changes to open files with close-on-exec has been made. 12-08-24 A bug in which unsetting instance variables in a type could effect the value of that instance in other type instances has been fixed. 12-08-23 A bug in which name references to compound variable array elements did not work correctly has been fixed. 12-08-22 .sh.match now handles subpatterns that had no matches with ${var//pattern} correctly. 12-08-21 A bug in setting .sh.match after ${var//pattern/string} when string is empty has been fixed. 12-08-21 A bug in setting .sh.match after [[ string == pattern ]] has been fixed. 12-08-21 The poll builtin from Roland Mainz has been added with the option SHOPT_POLL. 12-08-21 A bug in which read -S did not handle "" inside double quotes has been fixed. 12-08-21 A bug in which a compound variable defined in a type could not have elements added to it has been fixed. 12-08-20 A bug in which creating a two dimemsional associative array could add an extra 0 element to the second subscript has been fixed. 12-08-20 typeset -H foo no longer unsets foo when foo has been exported to the shell. 12-08-20 A file descriptor for the current directory is now made available to built-ins in the context pointer. 12-08-10 Rewrote .sh.match expansions fixing several bugs and improving performance. 12-08-09 A bug in which assignments following a process substitution argument were treated as assignments rather than arguments has been fixed. 12-08-07 Fixed a bug in which discipline functions define in a type from within a namespace where not being run in the namespace. 12-08-07 .sh.match no longer gets set for patterns in PS4 during set -x. 12-07-25 Each shell variable now contains a pointer to the shell pointer. 12-07-20 interface updated to pass the shell interpreter pointer to most functions. 12-07-17 A bug in which the restricted option set in a subshell prevented some variables from getting restored when the subshell completed has been fixed. 12-07-16 The code was modified to do automatic retry for several system calls the fail with errno set to EINTR. 12-07-12 +Added -q option was added to kill to send queued signals on systems that support sigqueue(). 12-07-12 +Added -p option to builtin to output builtins in a format that can be used to reinput. 12-07-09 A bug in which file descriptors created with {n}< file were not being closed has been fixed. 12-07-09 The 12-04-04 fix for cd .. was not correct causing cd /etc;cd .. to remain in /etc. This has been fixed. 12-07-05 Eliminated compile options and code for ECHOPRINT and OLDTERMIO. 12-07-05 Eliminated compile options BGX, ESH, HISTEXPAND, TYPEDEF and VSH. They are the default. 12-07-02 A bug in which builtin name did now work for builtins found in a library added by builtin -f lib has been fixed. 12-07-02 +The -a option was added to trap to cause the current setting to be appended to the new trap setting rather than replacing it. 12-07-02 A bug in the edit modes which after a directory did not refresh the input line has been fixed. 12-07-02 A bug in which an exit status > 256 corresponding to a signal was not returned by a function to indicate a signal exit has been fixed. 12-06-28 --- Release ksh93u+ --- 12-06-28 Fix ulimit -a to list (Kibytes) instead of (kbytes). 12-06-27 Fix unitialized data reference for as first char in --vi mode. 12-06-26 The formatting of printf "%q" for multibyte locales has changed to output using \u[xxx] format for valid wide characters. 12-06-25 The size limit for read -N and read -n has been raised to INT_MAX. 12-06-22 A bug in which an exit trap set in a subshell might not be triggered when the last command was a simple executable has been fixed. 12-06-22 A bug which could cause the shell to hang when a coprocess exits while a command inside a command substitution is reading from it has been fixed. 12-06-21 +ksh new accepts for commands of the form for i; do;...;done 12-06-19 Tab completion after a / when there is only one match not completes with that match rather than generating a menu of matches. 12-06-19 A bug in which patterns containing {...} where not processed correctly inside ${var/pattern/string} has been fixed. 12-06-18 Code modified to eliminate fts_notify variable. 12-06-15 Change the .paths plugin/builtin library variable name from BUILTIN_LIB to PLUGIN_LIB to prevent new plugin_version() aware -lcmd from causing older non-plugin_version() aware ksh to dump core. 12-06-14 builtin without argument no longer lists .sh.tilde as a built-in. 12-06-12 For assignments if the form x=(foo bar), foo is only check for an alias if it is float, integer, compound, or nameref. 12-06-12 +The shell supports 64 bit i-nodes even for 32 bit binaries. 12-06-11 A bug wth >; redirection systems for which vfork() was the same a fork() has been fixed. 12-06-11 A bug in path lookup that ignored buffer boundaries has been fixed. 12-06-08 typeset -a var and typeset -A var, first unset var when var is a compound variable. 12-06-08 A bug in which running shcomp on a program containg namespace could core dump has been fixed. 12-06-06 A bug in which unset of an associative array of compound variables did not completely unset the variable has been fixed. 12-06-06 A bug in which exporting left or right justified fields could loose the field width has been fixed. 12-06-06 A bug on Solaris11 in which >; did not work for /dev/null was fixed. 12-06-05 A race condition which occured when stopping a builtin command invoked from a subshell has been fixed. 12-06-05 A bug with appending elements to an empty indexed array has been fixed. 12-06-04 A bug in which continuing a stopped builtin could cause it to terminate has been fixed. 12-06-04 By default, builtins added at runtime will restore the current directory if they are killed or stopped. 12-06-04 A bug in handling \\ in read has been fixed. 12-05-31 Use getrlimit64/setrlimit64 on systems that support it. 12-05-31 Fix 64 bit big-endian arithmetic bug that mishandled nan and inf. 12-05-31 Handle ECONNRESET like EPIPE. 12-05-31 Change .paths parse to use only the last BUILTIN_LIB from the top and treat BUILTIN_LIB value as a ':' separated list of lib names. 12-05-29 Fix BUILTIN_LIB binding bug that ignored subsequent lookups. 12-05-29 shtests: --nocompile omits the compile test and --compile does only the compile test. 12-05-25 A command substitution containing a here-document that itself contains a here-document no longer hangs. 12-05-24 When the redirection operatory >; is directed to a symlink, it now overwrites the file named by the link rather than the link. 12-05-21 +Added printf formats %(type)q where type can be html, url, pattern, ere, or csv. 12-05-18 A bug with appending elements to an indexed array has been fixed. 12-05-18 The exit status from getopts --man interactively was 0 instead of 2 and has been fixed. 12-05-18 Another bug with SHOPT_EDPREDICT which could cause a core dump has been fixed. 12-05-17 A bug with fixed size arrays which could cause a core dump has been fixed. 12-05-17 A bug in which the here-document <<< $(^V, the terminal was not restored to insert mode after a character is entered has been fixed. 12-04-27 A bug in which old attributes were not cleared when assigning a value using typeset has been fixed. 12-04-26 +Enabled multiline editing by default. set +o multiline can disable. 12-04-25 The 12-04-17 PATH fix created a new bug which was fixed. 12-04-25 Fixed a big memory leak problem in which unsetting compound variables did not free all the space. 12-04-25 A bug in which test ! ! ! was treated as an error has been fixed. 12-04-24 A bug with print -v for a compound variable that contained fixed arrays which prevented the output from being used again as input has been fixed. 12-04-23 +kill provides the STKFLT signal on systems that support it. 12-04-23 +The -L option was added to kill. The -L option is the same as -l except that without arguments the output format is in the form of a select menu. 12-04-23 A bug in which the exit status for an interactive shell was always 0 has been fixed. 12-04-20 Entering blank lines interactively no longer resets the exit status. 12-04-18 A bug in file completion in which the second tab completion on a file would list the completion rather than inserting the completion has been fixed. 12-04-18 A bug in which "${arr[@]:i:j}" and "${@:i:j}" generated the empty string when i was a valid subscript and j was <=0 rather than generating nothing has been fixed. 12-04-17 A bug in which read -d delim from a terminal did not respond to interrupt and did not terminate when the delimiter was entered has been fixed. 12-04-17 A bug in which a directory in PATH containing a .paths file that contains a line with FPATH=dir, where dir does not exist could cause the path search to fail has been fixed. 12-04-16 A bug in which $(trap -p) did not display traps such as ERR and DEBUG that are not associated with signals has been fixed. 12-04-11 A bug in which unsetting a variable did not unset attributes when the variable did not have a value has been fixed. 12-04-11 A bug in which read -A for an array whose index is an enumeration type, lost the enumeration type has been fixed. 12-04-10 Shared libraries loaded from a library named by a BUILTIN_LIB= found in a .paths file found in a directory on PATH now add builtins that are associated with the directory in PATH containing the .paths file. 12-04-09 Increased I/O buffer sizes for better performance. 12-04-09 A bug in which the leading 0 was stripped from $x, when $x contained a heximadecimal constant inside an arithmetic expression inside a for or while loop. 12-04-06 Modified namespaces to hand variables FPATH, PATH, and OPTIND that are defined in name spaces appropriately. This also fixed OPTIND and OPTARG processing for functions. 12-04-04 A bug in which cd .. fails when the current directory has been renamed has been fixed. 12-04-02 Made some namespace changes and added a regression test. 12-03-30 A bug with namespaces in which PATH and FPATH set in a namespace was not restored when leaving the namespace has been fixed. 12-03-29 A bug in which appending an index array onto an array without elements caused the first element to be 1 rather than 0 has been fixed. 12-03-29 A bug which could cause a core dump when copying a large index array has been fixed. 12-03-28 The shell now generates an error message when the sizes with L, Z, and R are > 32767 on 32 bit binaries instead of generating a core dump. 12-03-28 A bug in left and right justification in which the width of invalid characters was not taken as zero has been fixed. 12-03-26 A bug in which typeset -p ref, when ref is a reference to an index array element did not display the subscript has been fixed. 12-03-23 A bug in lowercase and uppercase fields when expanding ${name:=val} when name is the empty string has been fixed. 12-03-22 A namespace bug in which a type t defined in namespace foo could not be referenced outside the namespace as .foo.t has been fixed. 12-03-22 A bug in name reference scoping in which a name function called from another function is pass a name reference to a compound variable instance to be created and the compound variable is in the global scope. 12-03-22 A bug in which ${ref[@}} did not behave like ${arr[i][@]} when ref is a name reference to arr[i] has been fixed. 12-03-21 A bug in which assigning a compound variable into arr[i], where arr[i] is an array variable did not work correctly has been fixed. 12-03-21 A bug with multi-dimenstional index arrays in which ${arr[i][j]} could generate a bogus error message when i was > 9 has been fixed. 12-03-21 A bug in which typeset v=foo, typeset -p v[0] generated a core dump has been fixed. 12-03-20 A bug in vi edit mode in which the sequence bar0il left the cursor on the b rather than the a has been fixed. 12-03-20 A bug which caused a core dump when defining a type with a field as ' integer -a data=([0]=0)' has been fixed. 12-03-19 Using typeset -a array when array is an associative arry not generated an error message. 12-03-19 typeset +a, typeset +A, and typeset +C not displays the variables with the attributes a, A, and C respectively instead of an error. 12-03-19 A bug in which typeset -pC, typeset -pa, and typeset -pA output all variables rather than those of type C, a, or A only has been fixed. 12-03-18 A bug in which unset foo where foo is a name reference to a compound variable defined inside a function is not unset has been fixed. 12-03-18 A bug with SHOPT_EDPREDICT which could cause a core dump when the list of matches became empty has been fixed. 12-03-15 The assignment, typeset -C foo=(a b c) now generates a syntax error since a is not an assignment command. 12-03-16 A bug in which an unset discipline from a variable defined in a subshell is not invoked in the subshell has been fixed. 12-03-08 The assignment typeset -a (x=1 y=2) now creates an index array of two elements rathern than an array of one element which is a compound variable. 12-03-02 +The vi and emacs edit modes now list all the entries in a directory when entering a for completion after a /. 12-03-02 A bug in which a program that exits with value 12 when called from a command substitution in which standard output has been redirected caused the shell to hang has been fixed. 12-03-01 A bug in which the shell could not parse [[ ']' == ~(E)[]] ]] has been fixed. 12-02-29 --- Release ksh93u+ --- 12-02-29 A bug in which ~user expanded first in a subshell prevented it from expanding later in a program has been fixed. 12-02-29 A bug which could lead to a core dump when more that four shared libraries were added with the builtin command has been fixed. 12-02-29 Fixed a few bugs which caused SIGCHLD to be blocked preventing background jobs from being reaped until a foreground job was run. 12-02-27 A bug in which sh -c for a simple command caused a fork() has been fixed. 12-02-27 A timing bug on systems such as AIX that doesn't support vfork() that could cause the exist status to get lost has been fixed. 12-02-22 A private file descriptor that was not close-on-exec for a command substitution and has been fixed. 12-02-14 A bug in which ^Z did not stop a pipeline when the last component was a shell built-in has been fixed. 12-02-14 getconf("PATH") used to initialize ed(1) path. 12-02-13 +In earlier version read from standard input would fail when called from the KEYBD trap. Now read options -N, -n, and -t should work when called from a KEYBD trap. 12-02-13 If FCEDIT is not set and fc is invoked without the -e option, ed will be invoked if found instead of /bin/ed. 12-02-10 Another bug in the saving and restoring of IFS in a subshell that caused a core dump has been fixed. 12-02-08 A bug in which .sh.fun disciplines could be cleared after a function completes has been fixed. 12-02-08 A bug in job control in which the foreground process group was not set correctly after restarting a stopped pipeline has been fixed. 12-02-07 A bug in which numbers with leading zeros could be treated as octal constants outside of ((...)) has been fixed. 12-02-06 A bug in arithmetic with compound variables containing multiple array elements has been fixed. 12-02-02 A bug in the ulimit option table was fixed. 12-01-26 A bug in which a set command that did not change monitor could effect the behavior of the monitor when monitor mode is on is fixed. 12-01-21 +You can now test whether the shell implements a math function using typeset -f .sh.math.name, where name is the name of the function. 12-01-21 A bug in which typeset -L and typeset -R did not handle multibyte characters correctly has been fixed. 12-01-20 A bug that could cause the shell to hang waiting for an incorrect job pid has been fixed. 12-01-19 A memory leak which occured for a nested command subtiution has been fixed. 12-01-17 A bug in which typeset -u PS1 could enable the uppercase attribute for some other variables, for example, HISTFILE has been fixed. 12-01-16 A bug in which .sh.match was not correct after a substring match when the replacement string contained a substring match has been fixed. 12-01-12 +Files that are sourced from profile files are now read and executed one command at a time so that alias definitions take effect as they do for profile files. 12-01-12 A bug in which whence -p would find a function if one existed and there was no command of that name on PATH. 12-01-11 Change b_* prototype (int, char**, void*) => (int, char**, Shbltin_t*). 12-01-05 A bug in which read was not terminating for a signal that had a trap set has been fixed. 12-01-01 A timing problem with >; has been fixed. 12-01-01 A macro expansion memory leak has been fixed. 11-12-26 A bug in array assignments of the form arr=( $arr[i] ...) in which arr was not unset before the assignment has been fixed. 11-12-20 A number of code changes were made based on the results of errors indicated by static code analysis. 11-12-13 In vi edit mode a literal can now be entered by preceding it with a backslash. 11-12-13 When tab is entered for completion after a ' or ", the ' and " characters are no longer deleted. 11-12-07 A bug in which a program in the current direcotry with a . in the name could fail to execute when both PATH and FPATH end with :. has been fixed. 11-12-07 I fixed a bug in which a variable expansion in a large here-document could be expanded to a null string. 11-12-06 An optimization to read was added in the case the the read command was redirected from a file. 11-12-06 Changes were made to make the line limit for read unlimited by default. 11-12-05 A bug in which unsetting an array variable did not completely clear the variable in some cases has been fixed. 11-12-02 +The printf alternative character # when applied to the %q format will quote argument in a form suitable for a field in a .csv format file. 11-12-02 +A -S option was added to read to be able to read .csv format files. 11-11-28 A bug in which redirection of standard error in a function called from command substitution caused standard error to be lost has been fixed. 11-11-21 [[ (-n foo) ]] no longer requires a space before (. 11-11-11 The readonly attribute for a variable now applies to compound assignments to that variable. 11-11-07 Changes were made to reduce the stack size to allow deeper function recursion. 11-10-10 +Added alternate flag to printf %H for encoding of URI's. 11-10-10 A bug which could lead to a core dump when the shell was invoked with more than twenty five open files has been fixed. 11-10-06 A bug in the scoping of name references in functions called by other functions has been fixed. 11-10-05 A bug in which wait on a pid may return the exit status of an earlier background job with that pid instead has been fixed. 11-09-22 A bug in which a read timed out with TMOUT did not always restore the terminal state has been fixed. 11-09-21 An optimization that allowed the last command in a script to use the same process id as the script has been eliminated. 11-09-21 Added letoctal option that enables the let command to recognize octal constants starting with 0. 11-09-20 A bug in which ${var.} could cause a core dump has been fixed. 11-09-20 A bug with SHOPT_EDPREDICT when neither vi or emacs was enabled for lines beginning with # when in a multibyte locale has been fixed. 11-09-20 A bug in emacs edit mode with SHOPT_EDPREDICT that would cause history searches matching comments lines to generate predictions has been fixed. Only user typed comment lines generate predictions. 11-09-20 A bug in emacs edit mode with a search that matches a comment line that could cause a core dump has been fixed. 11-09-16 A bug in which a command name ending in .. could cause the shell to abort has been fixed. 11-09-16 The characters ! + - % and @ in file names are no longer escaped with file name completion. 11-09-13 The let command no longer treats numbers starting with 0 as octal constants. 11-09-08 A bug in which printf "%R" could cause a core dump for invalid shell patterns has been fixed. 11-08-09 With set -u, ${var#pattern} reported that var was unset for special variables. 11-08-03 A bug in which the shell did not preserve the exit status for a coprocess has been fixed. 11-08-02 A bug in the saving and restoring of IFS in command substitution that caused a core dump has been fixed. 11-07-21 Modified the 10-08-27 bug fix so that background jobs started in for and while loops created interactively generate completion messages. 11-07-20 I fixed a bug in here documents in which multi-byte characters that crossed buffer boundaries were not processed correctly. 11-06-22 The shell compiler now supports process substitution. 11-06-22 +Added code to support process substitution on systems that do not supply the /dev/fd directory. 11-06-21 Fixed extraneous jobs Done messages when builtin is at the end of a pipeline. 11-06-20 Fixed two regression tests. 11-06-20 Fixed a bug introduced on last update. 11-06-14 A bug with pipefail in which the shell would wait for background jobs to complete has been fixed. 11-06-09 A bug which caused the options.sh regression test to fail on OS390 Linux has been fixed. The bug could also have affected other systems. 11-06-07 +A number of changes to support the still undocumented namespace option have been added. 11-06-06 A bug in which command substitution of eval would hang when it had standard error redirected to standard output has been fixed. 11-06-01 A bug in case statement fall through (;&) ignoring set -e was fixed. 11-06-01 A bug in which creating a left or right justified upper or lowercase variable with an empty string has been fixed. 11-06-01 A bug in which the .paths directory wasn't read when a subshell was executed before any other command has been fixed. 11-05-31 The shell now gives an error when a type variable is assigned to an array instance when the array has been declared a compound variable array. 11-05-31 A bug in which typeset -m of an array instance did not remove the original instance has been fixed. 11-05-28 A bug in which typeset -m dest=src fails when src and are passed as name references was fixed. 11-05-28 A bug in which typeset -m "c.board[1][i]=el", where el is a compound variable core dumps has been fixed. 11-05-28 Two bugs in the display of arrays of compound variables with print -v have been fixed. 11-05-27 A bug with command substitution with the shift jis locale has been fixed. 11-05-25 A bug in which unset -f foo, called within function foo could cause the shell to core dump has been fixed. 11-05-24 A bug in unsetting arrays of compound variables that could lead to a core dump has been fixed. 11-05-24 A scoping bug in with typeset -m for variables passed as references has been fixed. 11-05-09 A bug in which 'typeset +p array[$i]' in a subshell could cause an exception has been fixed. 11-05-03 Two more scoping bugs with name references and read -C were fixed. 11-05-03 A potential race condition which occurs when here-documents are processed in asynchronous blocks has been eliminated. 11-05-02 Another scoping bug with name references defined in a function has been fixed. 11-05-02 A bug in which the shell discards saved exit status of a job if it is followed by a subshell execution has been fixed. 11-04-28 The shell now checks for numerical overflows with process ids. 11-04-28 Another scoping bug with compound variables defined by name references inside a function has been fixed. 11-04-28 A bug which caused a core dump on 32 bit systems with the basic.sh regression test has been fixed. 11-04-27 A scope binding error for name references has been fixed. 11-04-27 Assignment of compound variable to compound array element by name is now working. 11-04-26 I fixed a bug with SHOPT_FIXEDARRAY compilation that could cause an a core dump for not fixed arrays. 11-04-25 A bug in the references to two dimensional compound arrays has been fixed. 11-04-20 A bug in which a name reference to a multidimentional index array index, nameref x=foo[3][4], did not work correctly has been fixed. 11-04-18 Changes were added to allow fixed size arrays of variable sized objects when the SHOPT_FIXEDARRAY compile option defined on 10-09-28. 11-04-18 A bug in which name references to array elements could fail has been fixed. 11-04-15 +A compile option, SHOPT_2DMATCH, has been added which causes .sh.match to be a two dimensional array after ${var//pat/str} where the first dimension is the pattern number and the second is the match instance. 11-04-11 A bug in which readonly var, where var is exported could cause var to be unset has been fixed. 11-04-06 A tokenizer bug in which ${x/{3}(\d)/ } would cause in infinite loop has been fixed. 11-04-05 A bug in which ${!x.} could cause a core dump has been fixed. 11-04-04 A bug in which cleaning out the history file could terminate before keeping all the recent history events has been fixed. 11-03-29 A bug in which ${#array[@]} was 1 rather than 0 after issuing typeset array[7] has been fixed. 11-03-29 The subscript out or range message for fixed arrays has been fixed. 11-03-29 A bug in which suspend could cause a core dump has been fixed. 11-03-24 For the showme option added 09-09-09, commands beginning with a ; inside an arithmetic for loop, no longer produce syntax errors. 11-03-18 A bug in _WINIX ~domain/user expansion has been fixed. 11-03-16 A bug in the pipefail option which could cause a script to hang has been fixed. 11-03-12 The shell no longer treats ${##pattern} as a syntax error. 11-03-11 A bug in typeset -u on systems that don't supply the towctrans() function has been fixed. 11-03-11 A bug in which a compound assignment of the form var[sub]=(...) would evaluate sub for each assignment has been fixed. 11-03-07 A bug in which reassigning a compound variable to an associative array index could incorrectly increase the count of the number of elements has been fixed. 11-03-04 +The tilde expansion on windows has been modified to handle user names of the form domain/user so that ~domain/user now expands to the home directory of that domain user. 11-03-03 A bug in which the width of the prompt was calculated incorrectly which cause the wrong line length for edit commands has been fixed. 11-03-02 A bug in which a global variables set from within a function inside a subshell can leave side effects in parent shell has been fixed. 11-03-01 A bug in which whence -a could dump core when the first match was due to : in PATH and the program was in the current directory. 11-02-28 A bug in emacs mode with SHOPT_EDPREDICT (added on 10-05-20) which disabled prediction on a line starting with # when the cursor was not at the end of line has been fixed. 11-02-28 The output format for compound variables with set has been fixed. 11-02-25 A bug which could lead to a core dump occurred when a shell script without #! is invoked by name from a parent shell that has name references defined and the script creates name references of the same name. 11-02-21 The shell now fails with a syntax error when a here-document in a command substitution is not completed before the closing ), for example, $( foobar <&- doesn't work has been fixed. 11-02-07 A bug on some systems for which a command subtitution could hang has been fixed. 11-01-28 A bug in file name completion for files containing both multibyte characters shell special characters has been fixed. 11-01-18 The .sh.match variable now shows elements that do not match as as not set rather than an empty string. 11-01-18 A bug with typeset -m of an array into an element of an indexed array has been fixed. 11-01-13 A bug in handling of arrays of compound variables inside ((...)) which reported a syntax error been fixed. 11-01-10 A bug in arithmetic assignment operators of the form op= for array variables when the same array was referenced on the left and the right hand side with different indices has been fixed. 11-01-10 A bug in which the output of time was lost when { time...;} 2>&1 occurred inside command substitution has been fixed. 11-01-07 [[ -v sh.match[i] ]] was returning false when sh.match[i] was set. 11-01-05 Added and modified warning messages with sh -n. 11-01-02 Fixed bugs with typeset -l/-u/-M and arrays. 10-12-28 Fixed a bug with typeset -l/-u/-M values in arithmetic expressions. 10-12-26 Fixed a time parsing bug in sleep and localeconv() initialization. 10-12-23 Prevented the shell from generating a core dump when it sends itself a termination signal because the last command terminated with that signal. This prevents a core dump to be overwritten by the shell. 10-12-22 A bug in the expansion of ${A[@]} ${B[@]}, introduced in 10-12-01 when A="" B=B has been fixed. 10-12-21 +Use MS_3D in b_vpath() for setting win32 WoW mount defaults. 10-12-17 A bug in the expansion of ${var:i:j} which caused a core dump when i > ${#var} has been fixed. 10-12-16 +sleep now treats . as decimal point even in locales that use comma. 10-12-16 +typeset -M mapname was added to generalize on toupper and tolowwer mapping as provided with wctrans(). 10-12-10 A bug in which typeset -l displayed namespaces as well as lower case variables has been fixed. 10-12-06 A bug in which a pipeline could terminate prematurely for a pipeline whose right hand side is a builtin, and whose left hand side ends in a simple command that has standard output redirected has been fixed. 10-12-06 A bug in hexfloat assignments when the right hand side is a string variable starting with 0x has been fixed. 10-12-01 A bug in the expansion of ${$1+"$@"} which causes the last positional parameter to disappear when it is empty has been fixed. 10-12-01 A number of changes were made to reduce the startup time. 10-11-29 When wait is interrupted by a signal that is caught, it now exits with a non-zero exit status. 10-11-29 When a variable is used directly in an arithmetic expression, leading zeros no longer cause the value to be treated as an octal constant. This was true in previous versions for justified variables. 10-11-29 An incorrect warning message was eliminated with the -n option for arithmetic expressions with associative arrays. 10-11-29 Some changes were made to slightly reduces startup time. 10-11-24 A bug in which a name reference is make to arr[0] when arr is not an array has been fixed. 10-11-23 If a type definition is made without a compound variable assignment it produces an error message and no longer shows up as a defined type. 10-11-22 The handling of \ inside [...] for for shell and ~(E) patterns has been fixed. 10-11-22 A patch was made to pfsh to handle an error case. 10-11-22 +Modified types defined in namespace so that they do not clash with types in other namespaces. Types can be referenced using .namespace.typename. 10-11-22 A bug which caused functions addressed as .namespace.funct to not work has been fixed. 10-11-22 A bug in which if nr was a name reference to an unset associative array subscript, then ${!nr} did not output the subscript correctly has been fixed. 10-11-18 A bug in which shcomp -n was not processing double quotes correctly has been fixed. 10-11-18 Fixed a bug in which typeset -T foo; typeset -T could cause a core dump. 10-11-17 Fixed a bug in which the error message for set -u could come out garbelled. 10-11-17 Modified the parser so that typeset -a var=(...) no longer checks the first index for aliases and reserved words. 10-11-17 A bug in which a subshell command consisted of only a for or until command has been fixed. 10-11-16 Fixed a bug in which typeset -u would display namespace variables as well as upper case variables. 10-11-16 A bug which could cause a core dump when unsetting a type variable when there are references to type elements has been fixed. 10-11-15 A bug which could cause a core dump when unsetting a compound array variable when there are references to array subscripts has been fixed. 10-11-15 A bug in which using typeset -m to move an indexed array instance to another array could cause the array to display incorrectly has been fixed. 10-11-12 A bug in which the unset discipline function for a type is called when the type is initialized has been fixed. 10-11-12 The sequences \< and \> are now preserved after patterns containing ~(E) in ${var/pattern/string} expansions. 10-11-11 A bug in typeset -m when the variables were compound array instances has been fixed. 10-11-10 A bug in output of a compound variable with types containing types has been fixed. 10-11-10 Fixed ``name=value export [-p]'' to list environment. 10-11-09 shtests resets SIGPIPE to SIG_DFL for all tests. 10-11-09 Fixed a bug in expansion of $"..." when used in assignments. 10-11-09 Fixed a getaddrinfo() memory leak that didn't call freeaddrinfo() after an interrupt. 10-11-08 Modified the behavior of set -u so that the shell terminates with error message when when var is unset with ${!var} and ${#var}. 10-11-02 Fix a bug in which a signal received while in a subshell could be ignored. 10-10-26 Fix a bug where terminal interrupt was ignored while in vi/emacs edit search mode. 10-10-26 Fix $'a\0b'c to expand to 'ac'. 10-10-26 Provide user defined round() if not in . 10-10-26 Fix bug where $((undefined_function(1))) dumped core. 10-10-22 Provide user defined iszero() if not in . 10-10-22 Fixed a bug with BGX compile option that could cause the shell to hang. 10-10-22 Fixed a bug with user define math function on systems for which char is unsigned. 10-10-21 A bug in which function autoloaded in a function leaves a file open has been fixed. 10-10-20 Modified the behavior of set -u so that the shell terminates when when var is unset with ${var op string} when op is #, % or /. 10-10-20 Fixed a bug with the AUDIT option in which the audit file was not not close-on-exec. 10-10-20 +Made a number of changes and fixes for the NAMESPACE compile option which as added on 10-06-09 but some problems still remain. 10-10-15 Fixed a bug in which arithmetic functions (added on 10-03-24) did not work when the function definition was in the same compound command in which the function was referenced. 10-10-13 A bug in which creating an associative array of compound variables with no members as an element of a compound variable did not work has been fixed. 10-10-08 A bug in which killing the last command in a function defined with function name, terminated the calling script has been fixed. 10-10-08 A bug which could cause a core dump if IFS is unset inside a function has been fixed. 10-10-07 +To reduce unwanted side effects, invoking typeset without the export option and without an assignment now causes the variables to be unset if the variable is inherited from the environment. 10-10-06 The closing brace for ${ command } is now a token no matter what character follows it. 10-10-04 The change for $'...' expansion on 10-08-09 did not expand parameters contained in the error message and this has been fixed. 10-10-04 A bug in which a declaration of indexed array (-a_ in a type definition would be displayed as a compound indexed array (-C -a) has been fixed. 10-09-30 The C99 math function ldexp has been added. 10-09-30 A bug with two dimensional arrays with expansion of the form ${ref[0..5]} where ref is a nameref to array[i] has been fixed. 10-09-29 A bug in which an eval with redirections invoked from a dot script would not restore the file has been fixed. 10-09-29 A bug in which loading a function from FPATH could leave a file descriptor open has been fixed. 10-09-28 +A new compile option SHOPT_FIXEDARRAY has been added and is being evaluation. It allows fixed sized indexed arrays be to defined using "typeset array[dim1][dim2]...[dimn]". Fixed sized arrays are used the same way indexed arrays are. Currently, only fixed arrays of fixed objects (float, int, and justifies objects) are supported. 10-09-22 A bug which could cause an exception when a function with static variables was redefined has been fixed. 10-09-21 A bug in the processing of (command&) which created a job in the parent process has been fixed. 10-09-21 A for loop optimization bug with arithmetic expression evaluation has been fixed. 10-09-21 A bug in which a recursive function containing a pipeline could lead to an exception fixed after 8 levels of recursion has been fixed. 10-09-18 A bug in which the count of elements in an array was wrong leading to an exception has been fixed. 10-09-13 A bug which occurred when both xtrace and showme options where specified in which the xtrace option disabled showme has been fixed. 10-09-13 A bug in which creating a reference to an array variable with any elements could cause subsequent array elements to be treated as compound variables has been fixed. 10-09-09 A bug which caused ((c.ar[x][y])) to be treated as a syntax error has been fixed. 10-09-08 A bug in the processing of references to multidimensional arrays in arithmetic expressions has been fixed. 10-09-08 A bug in the handling of multi-dimensional arrays which caused the number of elements in each dimension to be incorrect has been fixed. 10-09-07 The change for messages on 10-08-09 did not handle message in assignments and this has been fixed. 10-09-07 A bug in the indentation of compound variables in arrays when output with print -v has been fixed. 10-09-07 A rare bug with indexed arrays when assigned a null string that could cause a core dump has been fixed. 10-09-03 A number of changes were made for jobs pools. 10-08-31 typeset -p was modified to output name references after other variables so that the output could be used as input. 10-08-31 A bug with typeset -p in which variables with attributes but without attributes were not displayed correctly has been fixed. 10-08-27 +When running a subshell, the current pool is unset. 10-08-27 A bug in which jobs started from within for or while lists in interactive shells could generate completion messages has been fixed. 10-08-25 Fixed a couple of bugs related to job pools. 10-08-24 +[[ -e /dev/xxx/ ]] can be used to check whether special files of those names are handled by the shell. 10-08-24 A bug in the running of a compiled dot script in which only the first command was executed has been fixed. 10-08-23 A bug which sometimes caused a core dump with a configure script has been fixed. 10-08-20 A bug in command substitution which caused a configure script to hang has been fixed. 10-08-19 Eliminated unnecessary ; from output of compound variable with typeset -p. 10-08-17 Fixed a bug in command substitution in which under certain circumstances a file whose size is a power of 2 plus one, and the last character was not a new-line, could cause memory corruption. 10-08-13 +Added static discipline functions to type similar to C++ static class functions. 10-08-11 A bug in time when applied to a pipeline in which the shell did not wait for all elements of the pipeline to complete has been fixed. 10-08-11 Restored sh_fmtq() quoting to not quote NAME= in NAME=VALUE. 10-08-09 +Modified the expansion of message strings, $"...", so that they are expanded each time they are referenced rather than expanding them when the script is compiled or read in. 10-08-06 +The process id for jobs in job pools is now of the form poolname.n where n is the jobid in that pool. Commands that accept job names or numbers now understand names in this format. 10-08-05 A bug in which an assignment from within an arithmetic expression inside a function would create a local variable has been fixed. 10-08-04 A bug in the expanding of variables whose names contain multibyte characters has been fixed. 10-08-04 A bug which caused an exception when processing scripts compiled with shcomp -n has been fixed. 10-08-02 Tests using very small buffer sizes uncovered a number of bug most connected with here documents which have been fixed. 10-07-27 The format modifier , used for digit grouping with d and f formats has been documented. 10-07-26 cd '' now produces and error rather than changing to the current directory. 10-07-26 A bug in multi-byte locales which the last character of a multi-byte character is a \ or pattern character which could occur when the character was the last character of a command substitution has been fixed. 10-07-23 Another bug in the processing of ${var:offset;len} in multi-byte locales when len is larger than the number of characters has been fixed. 10-07-23 Many coding changes have been made to eliminate most of the uses of global variables in the shell code. 10-07-22 Fixed a bug in which discipline functions were not being invoked when it was invoked as ref.discipline where ref was a name reference to an array instance. 10-07-22 Fixed a bug in which discipline functions were not being invoked it was invoked on a two dimensional array, i.e., arr[5][9].discipline. 10-07-19 Fixed a buffering problem which occurred when running a script with ssh and the parent ssh process is killed. 10-07-14 Modified the parser to treat ((...)) inside [[...]] as ( (...) ) to that it is a nested (...). 10-07-09 A bug in the handling of process substitution inside command substitution as part of a pipeline has been fixed. 10-07-07 A bug in the output for compound variables containing multi-dimensional arrays has been fixed. 10-07-06 ksh now recovers from changes made by bash to the history file without loosing history commands. 10-06-25 A bug in which a large here document containing command substitutions of a dynamically loaded function that contained a here document could get truncated has been fixed. 10-06-24 If after executing a script found in FPATH, if a function, builtin, or type name corresponding to that script is not defined, the shell now outputs an error message and returns value 126. 10-06-23 Floating point functions that happened to return integer values were being treated as if the function returned integers so that integer division could be used instead of floating point division. 10-06-22 Fixed a bug in earlier ksh93u in which an arithmetic assignment to a variable in the global scope would instead create a local variable if the variable had an attribute but did not have a value. 10-06-18 Modified trap handling so that if the same signal is received when executing the handler, it is deferred until the handler completes. 10-06-16 Fixed a bug in which ulimit -v was setting the the cpu limit on Linux. 10-06-14 +The command 'typeset -T' now generates the list of type definitions in a format that can be used as input to the shell. 10-06-09 Put in patch from Solaris for output quoting with %q. 10-06-09 +Made changes to the NAMESPACE compile option so that it now seems to work. With this option, namespace { command;} will run command in the namespace .name so that all variables and functions created by command are accessible outside the name space via .name.var and .name.fun. Variables and functions that are not in the namespace are not modified when running command. 10-06-07 Change most internal interfaces to take Sh_t* argument. 10-06-03 +Types can be loaded on first reference by putting definitions in PFPATH. 10-06-03 +The shell is now able to parse commands which use type statements before the typeset -T command to define the type executes. 10-06-03 A bug in the quoting for name reference declarations which did not properly handle [ and ] in subscripts for associative arrays. 10-06-02 A bug in which a discipline function defined by a type instance to override the default was not being registered has been fixed. 10-06-02 A bug in which read -C of an associative array of compound variables was not working has been fixed. 10-06-02 A bug in which the error message for an unset parameter with set -u did not contain the name of the variable has been fixed. 10-06-01 A bug in typeset -m for moving an indexed array instance to a variable has been fixed. 10-06-01 A bug in which caused memory to be freed twice when unset was called for an indexed array that had get or set disciplines has been fixed. 10-06-01 A bug in which the %b format of printf was not preserving NUL bytes with \0 has been fixed. 10-06-01 A bug in the handling of name references to array variables in arithmetic expressions has been fixed. 10-05-28 Fixed bugs in changing attributes for two dimensional arrays. 10-05-28 Eliminated a few unreferenced variables and a reference to uninitialized memory. 10-05-27 Rewrote the subshell code to avoid using pipes an many cases. 10-05-24 Fixed a bug which cause an exception when both -l and -s were specified with typeset -i. 10-05-21 Inputting of three dimensional indexed arrays with ( ( (...)...)...) was not working and has been fixed. 10-05-21 A bug in which adding the attributes -Ai to a variable via a name reference could cause the value to display incorrectly has been fixed. 10-05-21 A bug in which using $var inside ((...)) did not work when var was a hex float variable. 10-05-20 +The compile option SHOPT_EDPREDICT has been added. When this option is on, as you type a line beginning with a # the following characters are treated as a shell pattern and cause matching lines from the history file to be displayed as a numbered list as you type. You can scroll up and down this list or you can use nTAB to make this the current line (n defaults to 1 of omitted) or n to execute. 10-05-20 A bug which caused an exception when multiple levels of composite functions in arithemtic expressions has been fixed. 10-05-19 <<< with an empty string no longer gives an error. 10-05-19 A bug in arithmetic evaluation when a name reference to an array instance was used has been fixed. 10-05-14 A bug in which the shell treats a valid index array assignment, typeset -a x=(foo (x=3;y=4) bar) as a syntax error has been fixed. 10-05-13 A bug in creating name references to associative array variable after a lookup of one of its elements has been fixed. 10-05-12 Two bugs in the handling of function static type variables in subshells have been fixed. One could cause an exception and the other would leave side effects in the parent shell. 10-05-10 A bug in which static variables in functions were not being saved and restored properly when running subshells has been fixed. 10-05-05 A bug in which print -v did not work correctly when an operand was an indexed array element referring to a compound variable has been fixed. 10-05-05 A change to improve performance by special casing empty string assignments to avoid repeated malloc() and free(). 10-05-05 A bug in which creating a name reference to a non-existent associative array element would create the array element has been fixed. 10-05-04 A bug in which name references to static variables in the static scope were not found has been fixed. 10-04-30 Do not use socketpair() on systems that implement ioctl(I_PEEK) on pipes. 10-04-29 +When the current job pool is set, coprocess are run in a job pool. 10-04-28 A type defined with a member foo that is an associative array without elements followed by an expansion ${bar.foo[a]} and an assignment bar.foo[a]=b, no longer indicates that ${#bar.foo[@]} has 0 members. 10-04-27 Another bug in which a nested command substitution could hang if it generated too much data has been fixed. 10-04-26 A type defined with a member that is an indexed array without elements would behave as if the 0th element of each instance was defined after a non-zero element was specified and this has been fixed. 10-04-26 A bug in which types defined in a subshell were not undefined when the subshell completed has been fixed. 10-04-23 For file completion in commmand line editing, file names starting with # are now escaped so that they are not treated as comments. 10-04-23 A bug in which ${t.var:=value}, where t is an instance of a type variable, could assign value to the type variable rather than to the type instance has been fixed. 10-04-23 +Added &| which can be used in place of | to have portions of a pipeline executed in the pool. 10-04-22 +The .sh.pool variable was added for use with job pools. 10-04-22 A bug in which a nested command substitution could hang if it generated too much data has been fixed. 10-04-20 A bug which corrupted one byte of memory when read was called with reads that did not use a delimiter has been fixed. 10-04-19 The display of a compound variable with an embedded array with attributes was sometimes not working correctly and has been fixed. 10-04-16 A bug in which attributes were not be propagated to elements in an associative array has been fixed. 10-04-15 A bug which caused scripts containing user defined math functions to fail to compile with shcomp has been fixed. 10-04-15 +Job pools have been added with the SHOPT_COSHELL compilation option. A job pool allows a collection of background jobs to run either locally or remotely and to be managed as a unit. The command '& name ...' creates or uses a named job pool for subsequent background jobs. kill, wait, and jobs allow the pool name as operands. 10-04-14 A bug in which a coprocess connection could terminate prematurely when running a nested subshell has been fixed. 10-04-12 +Enumeration constants can be used in arithmetic expressions with the ==, != and = operators when the left hand side is an enum variable and the right hand side is an enumeration constant. 10-04-07 A bug in which setting the trap on CHLD to ignore could cause an incorrect exit status has been fixed. 10-04-06 A bug in which LINENO was not incremented for a here-document when the here-document word was followed by a comment has been fixed. 10-04-06 The optimization that execs the last process of a script rather than creating a new process has been removed when a trap on interrupt has been set. 10-04-06 Unsetting the 'C', 'A' or 'a' typeset attribute now produces an error message rather than generating an exception. 10-04-06 A bug in which .sh.name contained the subscript and .sh.subscript was empty in some cases with discipline functions on array instances has been fixed. 10-04-05 A bug in the edit modes where preceding the interrupt character with the literal next character did not work has been fixed. 10-04-05 A bug in the creation of type instances of arrays which could cause an exception has been fixed. 10-03-30 A bug in the display of a compound variable containing an indexed array of compound variables has been fixed. 10-03-24 +Arithmetic functions can be defined using the shell function syntax, 'function .sh.math.name x y z{...}' , where name is the function name invoked within ((...)) and x y z are long double arguments passed as name references. y and z are used for functions with two and three arguments respectively. The value of the function is the value of the long double .sh.value variable when the function returns. 10-03-24 A bug in which integer division was mistakenly used when the numerator was a binary operator with the first operand floating point and the second integer, e.g. (.1**3)/3, has been fixed. 10-03-24 The >; file operator was modified so that the temporary file is created in the same physical directory as file. 10-03-23 A warning message was added to sh -n when $var was used inside ((...)) instead of var. 10-03-19 fmin was added to the list of math function on the man page. 10-03-19 Fixed the return value for unalias when the alias did not exist. 10-03-19 A bug in which the SHLVL variable exported the value it had on input rather than the incremented value has been fixed. 10-03-19 A bug which causes whence -q to go into an infinite loop has been fixed. 10-03-19 Removed space between Stopped message and (SIGTTIN) and (SIGTTOUT). 10-03-17 Modified profile shell execution so that when builtins that correspond to executable have extended attributes, they are executed by pfksh instead of being treated as built-ins. 10-03-16 A bug in whence -a which produced duplicate lines of output has been fixed. 10-03-16 A bug in the handling of process groups in monitor mode for command substitutions has been fixed. 10-03-15 Fixed a bug in which read -u[fd] could cause the shell to core dump when fd was greater than open_max. 10-03-15 +Modified the shell I/O so that the shell will not fail if the ulimit for open_max is increased as part of the script. 10-03-12 A bug in which a here-document containing command substitutions that contained here-documents did not process correctly has been fixed. 10-03-12 A bug in which the terminal is not restored to canonical mode after read times out when in a multibyte locale with no edit mode enabled has been fixed. 10-03-05 --- Release ksh93t+ --- 10-03-05 A variable unset memory leak has been fixed and tests/leaks.sh has been added to verify the fix. 10-03-04 Documentation, comment, and diagnostic spelling typos corrected. 10-02-14 Fix sh_getenv() initialization to cooperate with the 3d fs. 10-02-12 A bug in which the get discipline function was not invoked for associative array subscripts for unset array elements has been fixed. 10-02-12 A bug which could occur if the last line of a script was an eval that executed multiple commands has been fixed. 10-02-02 A buffer overflow in read and another in binary type base64 encoding were fixed. 10-01-20 A bug in the evaluation of arithmetic expression in which the subscript was evaluated twice for $((foo[x++]++)) has been fixed. 10-01-19 A workaround for a double-free of a trap in both a subshell and its parent has been added. 10-01-18 A bug in type handling of typeset -H has been fixed. 10-01-15 The "adding empty subscript" warning now only emitted with -x set. 10-01-01 A bug in the parser in which '$((case i in i):;esac);:))' was not parsed correctly was fixed. 10-01-01 A bug in the parser in which '$(( 2 , 3.6 ))' dumped core for locales with radix char , and thousands separator . has been fixed. 09-12-28 A bug in the handling of SIGCLD on systems that generated SIGCLD while blocked waiting for process to complete has been fixed. 09-12-24 ast setlocale() reworked to differentiate env var changes from user override. 09-12-18 A bug with the SHOPT_BGX option set which disabled traps for signals < SIGCHLD when a trap for a signal > SIGCHLD was set has been fixed. 09-12-18 A bug where [[ -v var ]] was incorrect for some variables (including LC_* vars) has been fixed. 09-12-15 A bug that produced a syntax error when a multibyte character straddled a buffer boundary has been fixed. 09-12-11 A bug where the subscript of an unset variable was not evaluated has been fixed. 09-12-09 A bug where shcomp dumped core on certain syntax errors has been fixed. 09-12-07 A bug where a parent shell environment var reset in a subshell removed the value in subsequent children of the parent shell has been fixed. 09-12-04 A bug in which in some cases a trap in a function executed in a subshell could trigger twice has been fixed. 09-12-03 A bug in which SHLVL exported with some attributes could cause the shell to abort at startup has been fixed. 09-12-02 A bug with pipefail in which the shell could hang waiting for the writer to complete before the last reader command has been fixed. 09-11-30 A bug in which a trap could be inherited by the first element of a pipeline when the command had more than 63 arguments that did not contain any macro expansions has been fixed. 09-11-19 When read from a terminal was called from with a while or for loop, and an edit mode was on, a backspace or erase no longer will overwrite the prompt. 09-11-17 +Change .paths parse to handle BUILTIN_LIB=foo BUILTIN_LIB=foo-1.2. 09-11-17 Inside a function, typeset foo.bar will bind foo to global variable foo if local variable foo does not exist, instead of creating a local variable. 09-11-17 "read -n1" from the terminal has been fixed to read exactly one character. 09-11-11 Job control now works for subshell commands, (...). 09-11-11 If set -e is on for an interactive shell errors in special builtins now cause the shell to exit. 09-11-11 A bug in which an interrupt handler processed during the read builtin when IFS did not contain a new line has been fixed. 09-11-09 A bug in which a variable that has been unset in a subshell and then exported from that subshell does not show up in the environment has been fixed. 09-11-02 ``,2'' is now a valid numeric constant for locales with decimal_point=','. 09-11-02 A bug where "return" in .profile did not restore the shell state has been fixed. 09-10-31 A bug that corrupted saved exit status when pids wrapped around has been fixed. 09-10-26 A bug in { LANG LC_ALL LC_category } ordering has been fixed in -last. 09-10-16 A bug where notification to libast that the environment has changed has been fixed. 09-10-12 A bug in which a function loaded in a subshell could leave side effects in the parent shell has been fixed. 09-10-12 A bug in converting a printf %d operand to a number when the operand contains multiple subscripts for the same variable has been fixed. 09-10-09 A bug in the handling of the escape character \ in directory prefixes in command completion has been fixed. 09-10-09 $PATH processing has been changed to delay dir stat() and .paths lookup until the directory is needed in the path search. 09-09-28 Call the ast setlocale() intercept on unset too. 09-09-24 A bug in which LANG=foo; LC_ALL=foo; unset LC_ALL; did not revert LC_CTYPE etc. to the LANG value has been fixed. 09-09-17 A bug in which unsetting SVLVL could cause a script invoked by name without #! to core dump has been fixed. 09-09-16 A bug in which a pipeline in a here-document could hang when the pipefail option was on has been fixed. 09-09-09 A bug in the processing of line joining in here documents which occurred when a buffer began with has been fixed. 09-09-09 +A leading ; with commands in a brace group or parenthesis group no longer causes an error. It now is used for the "showme" option. 09-09-09 A bug in which a subshell containing a background process could block until the background process completed has been fixed. 09-09-04 A bug in handing ${var[sub]}, where var is a nameref has been fixed. 09-09-03 A bug which caused an index array to have the wrong number of elements when it was converted from a compound variable by adding an another element has been fixed. 09-09-03 Specifying export for a compound variable now generates an error. 09-09-02 $"..." localizations strings are no longer recognized inside `...`. 09-09-01 A bug in the for loop optimizer in the handling of type static variables has been fixed. 09-09-01 An error message is not displayed when * and @ are used as subscripts. 09-09-01 Several bugs in the processing for types that included an associative array of another type has been fixed. 09-09-01 A bug in the tracing of [[ a < b ]] and [[ a > b ]] has been fixed. 09-08-26 The .sh.file variable was not being set for a script that was run by name and didn't start with #! and this has been fixed. 09-08-25 A bug in which a function called to deeply from command substitution did not display an error message has been fixed. 09-08-24 +When processing profiles, ksh93 now violates the POSIX standard and treats &> as a redirection operator similar to bash. 09-08-23 A bug in the handling of the trap on SIGPIPE that could lead to a memory fault has been fixed. 09-08-21 A bug in the handling of the comma operator in arithmetic expressions that could cause a core dump on some systems has been fixed. 09-08-20 A bug in which a compound variable containing an array of a type that doesn't have any elements now expands correctly. 09-08-19 A bug which disabled function tracing inside a function after a call to another function has been fixed. 09-08-19 A bug in which initializing a compound variable instance to another compound variable by name has been fixed. 09-08-18 A bug in which compound variable instances could be lost after an instance that invoked a type method discipline has been fixed. 09-08-18 A bug in which a discipline function for a type applied to an array instance when invoked in a function ignored the subscript has been fixed. 09-08-18 A scoping error with variables in arithmetic expression with type variables when reference with a name reference has been fixed. 09-08-10 Several memory leaks were fixed primarily related to subshells. 09-08-06 A bug in which setting the trap on CHLD to ignore could cause a script to hang has been fixed. 09-07-08 A bug in the processing of name reference assignments when it contained pattern expansions with quoting has been fixed. 09-06-22 +The default width for typeset -X has been changed so that there should be no loss of precision when converting to a string. 09-06-19 A bug in the printing of array elements for binary variables with printf %B has been fixed. 09-06-19 A bug which caused a core dump with trap DEBUG set with an array assignment with no elements has been fixed. 09-06-19 A bug with read with typeset -b -Z has been fixed. 09-06-19 Two bugs related to read -b for array variables has been fixed. 09-06-19 A bug with typeset for compound variables containing arrays of compound variables has been fixed. 09-06-18 A bug in appending a compound variable to a an indexed array of compound variables has been fixed. 09-06-18 A bug which occurs when appending a compound variable to an indexed array element has been fixed. 09-06-18 Setting VISUAL to a value other than one ending in vi or emacs will no longer unset the edit mode. 09-06-17 A bug in typeset -m when moving a local compound variable to a global compound variable via a name reference has been fixed. 09-06-17 A bug in appending to nodes of an array of compound variables when addressing them via nameref has been fixed. 09-06-17 A bug in typeset -p var, when var is an array of compound variables in which the output only contained on array element has been fixed. 09-06-17 The prefix expansion ${!y.@} now works when y is a name reference to an element of an array. 09-06-16 Traps on signals that are ignored when the shell is invoked no longer display. Previously they were ignored as required but would be listed with trap -p. 09-06-12 A bug in vi edit mode in which hitting the up arrow key at the end of a line longer than 40 characters which caused a core dump has been fixed. 09-06-11 A bug in which "eval non-builtin &" would create two processes, one for the & and another for non-builtin has been fixed. 09-06-08 When var is an identifier and is unset, ${var} no longer tries to run command substitution on the command var. 09-06-08 +Process substitution arguments of the form <(command) can now be used following the < redirection operator to redirect from command. 09-05-13 A bug in which redirections of the form 2>&1 1>&5 inside command substitution could cause the command substitution to hang has been fixed. 09-05-12 To conform with POSIX, the -u option only checks for unset variables and subscript elements rather than checking for all parameters. 09-05-12 A bug which could cause a core dump when a variable whose name begins with a . was referenced as part of a name reference inside a function has been fixed. 09-05-01 A bug that caused a core dump when SIGWINCH was received and both vi and emacs mode were off has been fixed. 09-04-22 +Default alias compound='typeset -C' added. 09-04-15 A bug that caused ${...;} to hang for large files has been fixed. 09-04-08 A change was made in the -n option which printed out an incorrect warning with <>. 09-04-07 The emacs edit command M-_ and M_. and the vi command _ was fixed to handle the case there there is no history file. 09-04-05 A bug in handling new-lines with read -n has been fixed. 09-04-05 The ENV variable defaults the the file named by $HOME/.kshrc rather then to the string $HOME/.kshrc. 09-03-31 A bug in which a nested command substitution with redirections could leave a file descriptor open has been fixed. 09-03-24 +ksh now only uses the value of the _ variable on startup if it can verify that it was set by the invoking process rather than being inherited by some other ancestor. 09-03-24 +When ksh is invoked without -p and ruid!=euid, and the shell is compiled without SHOPT_P_UID or ruid=SHOPT_P_UID then euid is set to ruid. A bug that did the wrong test (ruid&1 inside a command substitution wasn't working correctly has been fixed. 09-02-02 A bug in the call stack of arithmetic function with 2 args returning int has been fixed. 09-01-30 A bug in which 'eval print \$0' inside a function was giving the wrong value for $0 has been fixed. 09-01-28 A bug in which a command substitution could return an exit status of 127 when the pipefail option is enabled has been fixed. 09-01-26 ksh93 now generates an error message if you attempt to create a global name reference to a local variable. 09-01-26 +The [[ -v var ]] operator was modified to test for array elements. 09-01-23 +The redirection operator <>; was added. It is similar to <> except that if the command it is applied to succeeds, the file is truncated to the offset at the command completion. 09-01-23 The default file descriptor for <> was changed to 1. 09-01-20 A bug in which the exit status specified in an exit trap was not used when a process terminated with a signal has been fixed. 09-01-19 A bug in which a signal whose default action is to terminate a process could be ignored when the process is running a sub-shell has been fixed. 09-01-19 A bug in which sending SIGWINCH to a process that reads from a pipe could cause a memory fault has been fixed. 09-01-16 +The -R unary operator was added to [[...]] and test to check whether a variable is a name reference. 09-01-16 +The -v unary operator was added to [[...]] and test to check whether a variable is set. 09-01-14 The unset built-in was modified to return 0 exit status when unsetting a variable that was unset to conform with the POSIX standard. 09-01-14 The unset built-in was modified to continue to unset variables after encountering a variable that it could not unset to conform to the POSIX standard. 09-01-14 The parameter expansion ${x+value} no longer expands the value of the variable x when determining whether x is set or not. 09-01-13 A bug in which background jobs and pipelines that were not waited for could, in rare instances, cause the shell to go into an infinite loop or fail has been fixed. 09-01-06 A bug in indexed arrays of compound variables in which referencing non-existent sub-variable in an arithmetic expression could cause the sub-variable to be created has been fixed. 09-01-05 A bug in which the \ character did not escape extended regular expression pattern characters has been fixed. 08-12-24 A bug in which killing the last element of a pipe did not cause a write to the pipe to generate a SIGPIPE has been fixed. 08-12-19 A bug which could cause command substitution to hang when the last element of a pipeline in a command substitution was a built-in and the output was more that PIPE_BUFF. 08-12-18 A bug which occurs when a here documented marker embedded in a command substitution occurs on a buffer boundary has been fixed. 08-12-17 A bug in the output of typeset -p for variables that had attributes but did not have a value has been fixed. 08-12-16 A bug in which a name reference to a name reference variable that references an array element has been fixed. 08-12-16 A bug in which a variable given both the -A and -C attribute along with an initial assignment didn't work correctly has been fixed. 08-12-10 The [[ -t fd ]] test was fixed to handle fd>9. 08-12-10 A bug where function stack misalignment could cause a bus error has been fixed. 08-12-09 Command completion was changed to use \ to quote special characters instead of quoting the argument in single quotes. 08-12-07 A bug in typeset -m which occurred when the target node was an associative array element has been fixed. 08-12-07 A timing bug on some systems (for example darwin), that could cause the last process of a pipeline entered interactively to fail with an "Exec format error" has been fixed. 08-12-04 +SHOPT_BGX enables background job extensions. Noted by "J" in the version string when enabled. (1) JOBMAX=n limits the number of concurrent & jobs to n; the n+1 & job will block until a running background job completes. (2) SIGCHLD traps are queued so that each completing background job gets its own trap; $! is set to the job pid and $? is set to the job exit status at the beginning of the trap. (3) sleep -s added to sleep until the time expires or until a signal is delivered. 08-12-04 The sign of floating point zero is preserved across arithmetic function calls. 08-12-04 A bug that caused print(1) to produce garbled stdout/stderr output has been fixed. 08-12-04 A bug in which printf "%d\n" "''" did not output the numerical value of the EURO symbol, 8354, has been fixed. 08-11-24 + /dev/fd* and /dev/std* redirections are first attempted with open() to preserve seek semantics; failing that the corresponding file descriptors are dup()'d. 08-11-20 A bug which could cause a core dump if a function compiled with shcomp was found has been fixed. 08-11-20 A bug in which jobs were not cleared from the jobs table for interactive shells when the pipefail option is on has been fixed. 08-11-11 A bug in which a field that was unset in a type definition and later set for an instance could appear twice when displaying the variable has been fixed. 08-11-11 A bug in which running a simple command & inside a function would not return the correct process id has been fixed. 08-11-10 A bug in which the exit status of a command could be lost if the pid was that of the most recent command substitution that had completed has been fixed. 08-11-10 The maximum depth for subshells has been increased from 256 to 65536. 08-11-06 A bug which could cause a core dump when the _ reference variable was used as an embedded type with a compound assignment has been fixed. 08-10-31 --- Release ksh93t --- 08-10-31 Variable scoping/initialization bugs that could dump core were fixed. 08-10-24 The lexer now accepts all RE characters for patterns prefixed with a ksh ~(...) option expression. 08-10-24 +For ${var/pat/sub} \0 in sub expands to the text matched by pat. 08-10-18 A bug in array scoping that could dump core has been fixed. 08-10-10 read -n and -N fixed to count characters in multibyte locales. 08-10-10 A bug that mishandled _.array[] type references has been fixed. 08-10-09 +${.sh.version} now contains a concatenation of the following (after 'Version') denoting compile time features: A SHOPT_AUDIT B SHOPT_BASH L SHOPT_ACCT M SHOPT_MULTIBYTE 08-10-09 A bug that caused subshell command substitution with redirection to hang has been fixed. 08-10-08 Output errors, other than to stderr, now result in a diagnostic. 08-10-08 ksh93 now supports types that contain arrays of other types as members. Earlier versions core dumped in this case. 08-10-05 A bug which caused the shell to emit a syntax error for an arithmetic statement of the form (( var.name[sub] = value)) has been fixed. 08-10-01 A bug that caused subshell command substitution to hang has been fixed. 08-09-29 When the -p export option of typeset is used with other options, only those variables matching the specified options are displayed. 08-09-29 When the shell reads the environment and finds variables that are not valid shell assignments, it now passes these on to subsequent commands rather than deleting them. 08-09-29 A bug in the display of compound variables containing an indexed array of compound variables has been fixed. 08-09-29 A bug in the display of compound variables containing an associative array with a subscript containing a . in the name has been fixed. 08-09-26 A core dump in the subshell environment restore has been fixed. 08-09-24 $(...) has been fixed to properly set the exit status in $?. 08-09-23 $(<...) with IFS=$'\n\n' has been fixed to retain all but the last of multiple trailing newlines. 08-09-23 The -p option to typeset when used with other attributes, restricts the output to variables with the specified attributes. 08-09-22 A bug that sometimes lost the exit status of a job has been fixed. 08-09-21 A bug that retained trailing command substitution newlines in cases where the command caused the shell to fork has been fixed. 08-09-19 type, whence -v, and command -v were fixed to comply with POSIX by writing 'not found' diagnostics to the standard error. 08-09-18 test and [...] were fixed to comply with POSIX in the case of test '(' binop ')' where binop is a valid binary test operator. 08-09-16 +If a method discipline named create is specified when defining a type, this function will be called when an instance is created. 08-09-15 +The variable _ is now set as a reference to the compound variable when defining a compound variable or a type. 08-09-10 The shell now prints an error message when the type name specified for an indexed array subscript is not an enumeration type. 08-09-10 A bug in which a subshell that spawned a background process could loose output that was produced after the foreground completed has been fixed. 08-09-10 A timing bug on some systems that could cause coprocesses started by a subshell to not clean up and prevent other coprocesses has been fixed. 08-09-09 The typeset -m option is now able to rename array elements from the same array. 08-09-09 The exit status of 2 from the DEBUG trap causes the next command to be skipped. An exit value of 255 from a DEBUG trap called from a function causes the function to return. 08-09-08 A bug in which a coprocess created in a subshell that did not complete when the subshell terminated could prevent a coprocess from being created in the parent shell has been fixed. 08-09-05 An assignment of the form name1=name2 where name1 and name2 are both compound variables causes name1 to get a copy of name2. name1+=name2 causes name2 sub-variables to be appended to name1. 08-09-05 A bug in which unsetting a compound variable did not unset all the sub-variables has been fixed. 08-09-01 A bug in the subshell cleanup code that could cause SIGSEGV has been fixed. 06-08-26 +The SHLVL variable which is an environment variable used by bash and zsh that gets incremented when the shell starts. 08-08-25 +For an indexed array, a negative subscript now refers to offsets from the end so that -1 refers to the last element. 08-08-24 An alignment error for shorts on 64 bit architectures has been fixed. 08-08-22 If oldvar is a compound variable, typeset -C newvar=oldvar creates newvar as a copy of oldvar. 08-08-19 +The ALRM signal no longer cause the sleep builtin to terminate. 08-08-13 When used in an arithmetic expression, the .sh.version variable now produces a number that will be increasing for each release. 08-08-11 A bug in which type instantiation with a compound assignment in a dot script in which the type is defined has been fixed. 08-08-07 +The -m option has been added to typeset to move or rename a variable. Not documented yet. 08-08-06 A bug in read when used in a loop when a prompt was specified when reading from a terminal has been fixed. 08-08-01 A bug with the pipefail option in which a nested pipeline could cause an asynchronous command to block has been fixed. 08-08-01 A for loop optimizer bug that treats .sh.lineno as an invariant has been fixed. 08-07-30 A bug in which expanding compound variable that had a get discipline from with a here document could cause a syntax error has been fixed. 08-07-18 A bug in which a nameref caused a local variable to be created rather than binding to an existing variable in the global scope has been fixed. 08-07-17 A bug which occurred when a nameref was created from within a function that was part of a pipeline has been fixed. 08-07-14 +The compile option SHOPT_STATS was added. With this option the compound variable .sh.stats keeps usage statistics that could help with performance tuning. 08-07-10 +The output of set now always uses a single line for each variable. For array variables, the complete set of values is now displayed. 08-07-09 +The typeset -C option can be used with arrays to indicate that each element should default to a compound variable. 08-07-08 +The %B format now outputs compound variables and arrays. The alternate flag # can be used to cause output into a single line. 08-07-03 When the window change signal, WINCH, is received, the current edit line is redrawn in place. 08-07-01 A bug in the handling of shared variables when inside an embedded type has been fixed. 08-06-29 A bug in multiline edit mode which occurred when the prompt length was three characters or less has been fixed. 08-06-23 A bug in which the SIGCLD was not be triggered when background jobs completed has been fixed. 08-06-23 _KSH_VERSION added as a name reference to .sh.version. 08-06-20 type now outputs 'special builtin' for special builtins. 08-06-19 A couple of bugs in multi-dimensional arrays have been fixed. 08-06-19 A bug in which a syntax error in a dot script could generated a syntax error in the next subsequent command has been fixed. 08-06-17 Reduced the maximum function call depth to 2048 to avoid exceptions on some architectures. 08-06-16 A bug in which printf "%B" could generate an exception when the specified variable was not set has been fixed. 08-06-16 +When typeset -p is followed by variable names, it now displays the attributes names and values for the specific names. 08-06-14 A bug that could effect the drawing of the screen from multiline emacs or gmacs mode when walking up the history file has been fixed. 08-06-13 A bug in which a compound variable defined in a subshell could have side effects into the parent shell has been fixed. 08-06-13 A number of bugs related to using .sh.level to set the stack from for DEBUG traps have been fixed. 08-06-13 +The .sh.lineno variable has been added. When .sh.level is changed inside a DEBUG trap, the .sh.lineno contains the calling line number for the specified stack frame. 08-06-13 The .sh.level variable has been documented and now works. 08-06-11 +The -C option has been added to read for reading compound command definitions from a file. 08-06-11 +The . command is now permitted inside a compound command definition. The dot script can contain declaration commands and dot commands. 08-06-09 +Add -C option to typeset so that typeset -C foo, is equivalent to foo=(). 08-06-09 Added -n warning message for typeset option orderings that are valid with ksh88 but not valid with ksh93, for example Lx5. 08-06-09 A bug in which the return value for an assignment command containing a command substitution with that failed was zero when the assignment contained redirections has been fixed. 08-06-09 A bug in the quoting of $ inside a ERE pattern ~(E)(pattern) has been fixed. 08-06-06 A bug when processing `` command substitution with the character sequence \$' has been fixed. 08-06-02 +When defining a type, the typeset -r attribute causes this field to be required to be specified for each instance of the type and does not allow a default value. 08-06-02 Several bugs in which compound variables were modified by subshells have been fixed. 08-05-22 +The ceil function has been added to the math functions. 08-05-21 A bug in which a name reference defined in a function and passed as an argument to another function could cause an incorrect binding. 08-05-21 A bug in freeing compound variables that are local to functions has been fixed. 08-05-19 +The array expansions ${array[sub1..sub2]} and ${!array[sub1..sub2]} to expand to the value (or subscripts) for array between sub1 and sub2 inclusive. For associative arrays, the range is based on location in the POSIX locale. The .. must be explicit and cannot result from an expansion. 08-05-15 The trap on SIGCLD is no longer triggered by the completion of the foreground job as with ksh88. 08-05-14 A bug in the implementation of the editing feature added on 07-09-19 in emacs mode has been fixed. 08-05-12 A bug in processing the test built-in with parenthesis has been fixed. 08-05-12 The unset built-in now returns non-zero when deleting an array subscript that is not set. 08-05-08 +Changing the value of HISTFILE or HISTSIZE will cause the old history file to be close and reopened with the new name or size. 08-05-08 When FPATH is changed functions that were found via a path search will be searched for again. 08-05-08 A parser bug in which reserved words and labels were recognized inside compound indexed array assignment after a new-line has been fixed. 08-05-07 A bug in getopts when handling numerical option arguments has been fixed. 08-05-07 +The typeset -S option was added for variables outside type definitions to provide a storage class similar to C static inside a function defined with function name. When outside type definitions and outside a function, the -S option cause the specified variable so be unset before the assignment and before the remaining attributes are supplied. 08-05-07 A bug that affected the cursor movement in multiline mode when a character was deleted from near the beginning of the any line other than the first. 08-05-01 In multiline edit mode, the refresh operation will now clear the remaining portion of the last line. 08-05-01 A bug in computing prompt widths for the edit modes for prompts with multibyte characters has been fixed. 08-05-01 A bug in the multiline edit mode which could cause the current line to be displayed incorrectly when moving backwards from third or higher line to the previous line has been fixed. 08-05-01 A bug in which options set in functions declared with the function name syntax were carried across into functions invoked by these functions has been fixed. 08-04-30 A bug which could cause a coprocess to hang when the read end is a builtin command has been fixed. 08-04-30 +The emacs and vi editors have been modified to handle window change commands as soon as they happen rather than waiting for the next command. 08-04-28 A bug in which ${!x} did not expand to x when x was unset has been fixed. 08-04-27 A bug in which the assignment x=(typeset -a foo=([0]=abc)) created x.foo as an associative array has been fixed. 08-04-25 A bug in which $# did not report correctly when there were more than 32K positional parameters has been fixed. 08-04-04 Choose the name _ as the sub-variable that holds type or instance specific data used by discipline functions. 08-03-27 A bug in which the terminal group was not given back to the parent shell when the last part of a pipeline was handled by the parent shell and the other parts of the pipeline complete has been fixed. The symptom was that the pipeline became uninterruptable. 08-03-25 A bug in restricted mode introduced in ksh93s that caused scripts that did not use #! to executed in restricted mode has been fixed. 08-03-25 A bug in which the pipefail option did not work for a pipeline within a pipeline has been fixed. 08-03-24 A bug in which OPTIND was not set correctly in subshells has been fixed. 08-03-24 A bug which could cause a memory exception when a compound variable containing an indexed array with only element 0 defined was expanded. 08-03-20 A bug in which ${!var[sub].*} was treated as an error has been fixed. 08-03-20 Associative array assignments of the form ([name]=value ...) now allow ; as well as space tab and new line to separate elements. 08-03-18 A buffering problem in which standard error was sometimes not flushed before sleep has been fixed. 08-03-17 A bug in which a signal sent to $$ while in a subshell would be sent to the subshell rather than the parent has been fixed. 08-03-17 + A --default option added to set(1) to handle set +o POSIX semantics. set --state added as a long name alias for set +o. 08-03-14 A bug in which using monitor mode from within a script could cause the terminal group to change has been fixed. 08-03-10 The new ${...} command substitution will treat the trailing } as a reserved word even if it is not at the beginning of a command, for example, ${ date }. 08-03-10 If the name of the ENV begins with /./ or ././ then the /etc/ksh.kshrc file will not be executed on systems that support this interactive initialization file. 08-03-07 A bug in which ksh -i did not run the ENV file has been fixed. 08-03-07 A bug in which ulimit did not always produce the same output as ulimit -fS has been fixed. 08-03-04 A bug in multiline mode in emacs and vi mode which could cause the cursor to be on the wrong line when interrupt was hit has been fixed. 08-03-03 The change made in ksh93s+ on 07-06-18 in which braces became optional for ${a[i]} inside [[...]] was restored in the case where the argument can be a pattern. 08-03-03 A bug in which creating a name reference to an associative array instance would fail when the subscript contained characters [ or ] has been fixed. 08-02-29 +The redirection operator >; has been added which for non-special files, generates the output in a temporary file and writes the specified file only of the command has completed successfully. 08-02-15 A bug in ${var/pattern/string} for patterns of the form ?(*) and +(*) has bee fixed. 08-02-07 A bug in which test \( ! -e \) produced an error has been fixed. 08-02-14 +The typeset -a option can now optionally be followed by the name of an enumeration type which allows subscripts to be enumerations. 08-02-14 +The enum builtin which creates enumeration types has been added. 08-02-12 The backoff logic when there are no more processes has been fixed. 08-02-07 The -X option has been added to typeset. The -X option creates a double precision number that gets displayed using the C99 %a format. It can be used along with -l for long double. 08-01-31 The -T option to typeset has been added for creating typed variables. Also the -h and -S options have been added to typeset that are only applicable when defining a type. 08-01-31 The prefix expansion operator @ has been added. ${@name} expands to the type of name or yields the attributes. 07-11-15 A bug in the macro expander for multibyte characters in which part of the character contains a file pattern byte has been fixed. 07-10-03 A bug in which : was not allowed as part of an alias name has been fixed. 07-09-26 A bug in which appending a compound variable to a compound variable or to an index array didn't work has been fixed. 07-09-19 In both emacs and vi edit mode, the escape sequence \E[A (usually cursor up, when the cursor is at the end of the line will fetch the most recent line starting with the current line. 07-09-18 The value of ${!var} was correct when var was a reference to an array instance. 07-09-18 The value of ${!var[sub]} was not expanding to var[sub] and this was fixed. It also fixed ${name} where name is a name reference to var[sub]. 07-09-18 +It is now legal to create a name reference without an initialization. It will be bound to a variable on the first assignment. 07-08-30 +A discipline function can be invoked as ${x.foo} and is equivalent to ${ x.foo;} and can be invoked as x.foo inside ((...)). 07-07-09 A bug in which typeset -a did not list indexed arrays has been fixed. 07-07-03 +The command substitution ${ command;} has been added. It behaves like $(command) except that command is executed in the current shell environment. The ${ must be followed by a blank or an operator. 08-04-17 --- Release ksh93s+ --- 08-04-17 A bug in which umask was not being restored correctly after a subshell has been fixed. 08-04-15 A bug in which sending a STOP signal to a job control shell started from within a shell function caused cause the invoking shell to terminate has been fixed. 08-04-11 A bug which caused $(exec > /dev/null) to go into an infinite loop has been fixed. 08-03-27 A bug in which typeset -LZ was being treated as -RZ has been fixed. 08-03-06 A bug with ksh -P on systems that support the the profile shell, in which it would exit after running a non-builtin has been fixed. 08-01-31 A bug in which command substitution inside ((...)) could cause syntax errors or lead to core dumps has been fixed. 08-01-17 A bug in which discipline functions could be deleted when invoked from a subshell has been fixed. 08-01-17 A bug in which a command substitution consisting only of assignments was treated as a noop has been fixed. 08-01-17 A bug in which discipline functions invoked from withing a compound assignment could fail has been fixed. 08-01-16 Incomplete arithmetic assignments, for example ((x += )), now generate an error message. 08-01-16 A bug in which a set discipline defined for a variable before an array assignment could cause a core dump has been fixed. 08-01-03 A bug in on some systems in which exit status 0 is incorrectly returned by a process that catches the SIGCONT signal is stopped and then continued. 07-12-13 A race condition in which a program that has been stopped and then continued could loose the exit status has been fixed. 07-12-12 Code to check for file system out of space write errors for all writes has been added. 07-12-11 A bug in the macro expander for multibyte characters in which part of the character contains a file pattern byte has been fixed. 07-12-06 A bug in the emacs edit mode when multiline was set that output a backspace before the newline to the screen has been fixed. 07-12-04 A bug in which using TAB after a variable name listing expansion in the edit modes would cause the $ to disappear has been fixed. 07-11-28 A bug in which setting IFS to readonly could cause a subsequent command substitution to fail has been fixed. 07-11-27 A work around for a gcc 4.* C99 "feature" that could cause a job control shell to go into an infinite loop by adding the volatile attribute to some auto vars in functions that call setjmp(). 07-11-27 A bug in which the shell could read ahead on a pipe causing the standard input to be incorrectly positioned has been fixed. 07-11-27 A bug in which compound variable UTF-8 multibyte values were not expanded or traced properly has been fixed. 07-11-21 A bug where an unbalanced '[' in a command argument was not treated properly has been fixed. 07-11-15 A bug in which compatibility mode (no long option names) getopts(1) incorrectly set the value of OPTARG for flag options has been fixed. 07-11-15 A bug in which "hash -- name" treated "--" as an invalid name operand has been fixed. 07-11-15 typeset now handles "-t -- [-r] [--]" for s5r4 hash(1) compatibility. 07-11-15 A bug in which the umask builtin mis-handled symbolic mode operands has been fixed. 07-11-15 Bugs in which shell arithmetic and the printf builtin mis-handled the signs of { -NaN -Inf -0.0 } have been fixed. 07-11-15 +The full { SIGRTMIN SIGRTMIN+1 ... SIGRTMAX-1 SIGRTMAX } range of signals, determined at runtime, are now supported. 07-11-15 A bug in which creating an index array with only subscript 0 created only a simple variable has been fixed. 07-11-14 A bug in which appending to an indexed array using the form name+=([sub]=value) could cause the array to become an associative array has been fixed. 07-11-14 A bug in which typeset without arguments could coredump if a variable is declared as in indexed array and has no elements has been fixed. 07-11-14 A bug in which creating a local SECONDS variable with typeset in a function could corrupt memory has been fixed. 07-11-14 A bug which could cause a core dump when a script invoked by name from a function used compound variables has been fixed. 07-11-05 A bug in which printf %d "'AB" did not diagnose unconverted characters has been fixed. 07-11-05 printf %g "'A" support added for all floating point formats. 07-11-01 A bug in which typeset -f fun did not display the function definition when invoked in a subshell has been fixed. 07-10-29 The sleep builtin was fixed so that all floating point constants are valid operands. 07-10-10 A bug in which the locale was not being restored after LANG=value command has been fixed. 07-09-20 A bug in which a nameref to a compound variable that was local to the calling function would not expand correctly when displaying is value has been fixed. 07-09-19 A bug which cause cause a core dump if .sh.edchar returned 80 characters or more from a keyboard trap has been fixed. 07-09-14 A bug in which could cause a core dump when more than 8 file descriptors were in use has been fixed. 07-09-10 A bug in which creating a name reference to an instance of an array when the array name is itself a reference has been fixed. 07-09-10 The file completion code has been modified so that after an = in any word, each : will be considered a path delimiter. 07-09-06 A bug in which subprocess cleanup could corrupt the malloc() heap has been fixed. 07-08-26 A bug in which a name reference to an associative array instance could cause the subscript to be evaluated as an arithmetic expression has been fixed. 07-08-22 A bug in which the value of an array instance was of a compound variable was not expanded correctly has been fixed. 07-08-14 A bug which could cause a core dump when a compound assignment was made to a compound variable element with a typeset -a attribute has been fixed. 07-08-08 A bug in which a trap ignored in a subshell caused it to be ignored by the parent has been fixed. 07-08-07 A bug in which the set command would generated erroneous output for a variable with the -RZ attribute if the variable name had been passed to a function has been fixed. 07-08-02 A bug in which read x[1] could core dump has been fixed. 07-08-02 A second bug in which after read x[sub] into an associative array of an element that hasn't been assigned could lead to a core dump has been fixed. 07-07-31 A bug in which a pipeline that completed correctly could have an exit status of 127 when pipefail was enabled has been fixed. 07-07-09 +The SHOPT_AUDIT compile option has been added for keyboard logging. 07-06-25 In vi insert mode, ksh no longer emits a backspace character before the carriage return when the newline is entered. 07-06-25 A bug in which pipefail would cause a command to return 0 when the pipeline was the last command and the failure happened on a component other than the last has been fixed. 07-06-25 A bug in the expansion of ${var/pattern/rep} when pattern or rep contained a left parenthesis in single quotes has been fixed. 07-06-18 The braces for a subscripted variable with ${var[sub]} are now optional when inside [[...]], ((...)) or as a subscript. 07-05-28 A bug in brace expansion in which single and double quotes did not treat the comma as a literal character has been fixed. 07-05-24 The -p option of whence now disables -v. 07-05-23 Several bug fixes in compound variables and arrays of arrays have been made. 07-05-15 A bug in which the %B format of printf was affected by the locale has been fixed. 07-05-14 A bug in which \ was not removed in the replacement pattern with ${var/pattern/rep} when it was not followed by \ or a digit has been fixed. 07-05-10 A bug in which ksh -R file core dumped if no script was specified has been fixed. it not displays an error message. 07-05-07 Added additional Solaris signals to signal table. 07-04-30 A bug in which a pipeline with command substitution inside a function could cause a pipeline that invokes this function to hang when the pipefail option is on has been fixed. 07-04-30 +Added -q to whence. 07-04-18 A small memory leak with each redirection of a non-builtin has been fixed. 07-03-08 A bug in which set +o output command line options has been fixed. 07-03-08 A bug in which an error in read (for example, an invalid variable name), could leave the terminal in raw mode has been fixed. 07-03-06 A bug in which read could core dump when specified with an array variable with a subscript that is an arithmetic expression has been fixed. 07-03-06 Several serious bugs with the restricted shell were reported and fixed. 07-03-02 If a job is stopped, and subsequently restarted with a CONT signal and exits normally, ksh93 was incorrectly exiting with the exit status of the stop signal number. 07-02-26 +M-^L added to emacs mode to clear the screen. 07-02-26 A bug in which setting a variable readonly in a subshell would cause an unset error when the subshell completed has been fixed. 07-02-19 +The format with printf uses the new = flag to center the output. 07-02-19 A bug in which ksh93 did not allow multibyte characters in identifier names has been fixed. 07-02-19 A bug introduced in ksh93 that causes global compound variable definitions inside functions to exit with "no parent" has been fixed. 07-02-19 A bug in which using compound commands in process redirection arguments would give syntax errors <(...) and >(...) has been fixed. 07-01-29 A bug which caused the shell to core dump which can occur when a built-in exits without closing files that it opens has been fixed. 07-01-26 A bug in which ~(E) in patterns containing \ that are not inside () has been fixed. 06-12-29 --- Release ksh93s --- 06-12-29 A bug in which the value of IFS could be changed after a command substitution has been fixed. 06-12-22 +/dev/(tcp|udp|sctp)/HOST/SEVRICE now handles IPv6 addresses on systems that provide getaddrinfo(3). 06-12-19 +A -v option was added to read. With this option the value of the first variable name argument will become the default value when read from a terminal device. 06-11-20 A bug in which "${foo[@]:1}}" expands a null argument (instead of no argument), when foo[0] is not empty has been fixed. 06-11-16 The discipline functions have been modified to allow each subscript to act independently. Currently the discipline function will not be called when called from a discipline function of the same variable. 06-11-14 A bug which could cause a core dump if a file descriptor for an internal file was closed from with a subshell has been fixed. 06-10-30 +The redirections <# pattern, and <## pattern have been added. Both seek forward to the beginning of the next line that contains the pattern. The <## form copies the skipped portion to standard output. 06-10-26 +On systems that support stream control transport, the virtual file name /dev/sctp/host/port can now be used to establish connections. 06-10-26 +The printf modifier # when used with d produces units in thousands with a single letter suffix added. The modifier # when used with the i specification provides units of 1024 with a two letter suffix. 06-10-24 The value of $! is now set to the process id of a job put into the background with the bg command as required by POSIX. 06-10-23 A bug in which the value of $! was affected by a background job started from a subshell has been fixed. 06-10-23 A bug in ${var:offset:len} in multibyte locales has been fixed. 06-10-15 +The remaining math functions from C99 were added for any system that supports them. 06-10-13 The klockwork.com software detected a few coding errors that have been fixed. 06-10-12 A bug when skipping over `...` with ${x:=`...`} when x is set has been fixed. 06-10-11 A bug in process floating constants produced by the %a format of printf has been fixed. 06-10-06 A bug in which IFS was not being restored correctly in some cases after a subshell has been fixed. 06-10-06 A bug in which pipefail was not detecting some failures in pipelines with 3 or more states has been fixed. 06-10-03 A bug in the processing of >(...) with builtins which could cause the builtin to hang has been fixed. 06-10-03 A bug in the for loop optimizer which causes >(...) process substitution to be ignored has been fixed. 06-09-17 +The -a option was added to typeset for indexed arrays. This is only needed when using the ([subscript]=value ...) form. 06-09-06 +The showme option was added. Each simple command not beginning with a redirection and not occurring with in the while, until, if, select condition can be preceded by a semi-colon which will be ignored when showme is off. When showme is on, any command preceded by a colon will be traced but not executed. 06-08-16 +As a new feature, a leading ~(N) on a pattern has no effect except when used for file expansion. In this case if not matches are found, the pattern is replaced by nothing rather than itself. 06-08-11 A bug in the expansion of ${.sh.match[i]:${#.shmatch[i]}} has been fixed. 06-08-10 +The read builtin options -n and -N have been modified to treat the size as characters rather than bytes unless storing into a binary (typeset -B) variable. 06-07-27 +When the here document operator << is followed directly by a # rather than a -, the first line of the here-document determines how much whitespace is removed for each line. 06-07-26 A bug in the C-shell history (enabled with set -H) in which the history event !$ was not processed has been fixed. 06-07-21 A bug on some systems in which assigning PATH on a command line would not take effect has been fixed. 06-07-20 Add ksh93 and rksh93 as allowable names for ksh binaries. 06-07-20 Removed the SHOPT_OO compilation option which was only partially implemented. 06-07-20 The ability to use egrep, grep, and fgrep expressions within shell patterns has been documented. 06-07-17 A bug with arithmetic command expressions for locales in which the comma is a thousands separator has been fixed. 06-07-13 +The default HISTSIZE was increased from 128 to 512. 06-07-13 A multibyte problem with locales that use shift codes has been fixed. 06-06-23 A number of bug fixes for command, file, and variable completion have been mode. 06-06-20 +Floating point division by zero now yields the constant Inf or -Inf and floating functions with invalid arguments yield NaN. 06-06-20 +The floating point constants Inf and NaN can be used in arithmetic expressions. 06-06-20 +The functions isinf(), isnan(), tanhl() have been added for arithmetic expressions. 06-06-13 Internal change to use ordering for variables instead of hashing to speed up prefix matching. 06-06-13 A window between fork/exec in which a signal could get lost and cause a program to hang has been eliminated 06-06-13 A bug in edit completion with quoted strings has been fixed. 06-06-07 The restricted options can now be enabled by set as well as on the command line. Once set, it can not be disabled. 06-06-04 Modified built-in binding so that for systems for which /bin and /usr/bin are the same, a builtin bound to /bin will get selected when either /bin or /usr/bin is scanned. 06-06-04 +Added literal-next character processing for emacs/gmacs mode. This change is not compatible with earlier versions of ksh93 and ksh88 when the stty lnext is control-v. The sequence escape-control-v will display the shell version. 06-05-31 +Modified emacs and vi mode so that entering a TAB after a partial TAB completion, generates a listing of possible completions. After the second TAB, a number followed by a TAB will perform the completion with the corresponding item. 06-05-19 +Modified arithmetic so that conversions to strings default to the maximum number of precision digits. 06-05-16 Bug fixes for multibyte locales. 06-05-10 The =~ operator was added to [[...]] and [[ string ~= ERE ]] is equivalent to [[ string == ~(E)ERE ]]. 06-04-25 A bug in the vi edit mode which could cause the shell to core dump when switching from emacs mode. 06-04-17 A bug in which using LANG or LC_ in assignment lists with builtins did not restore the localed correctly has been fixed. 06-04-04 A bug in which discipline functions could not be added to variables whose names started with .sh has been fixed. 06-03-28 +The -s option to typeset was added to modify -i to indicate short integers. 06-03-28 A bug in which variables assignment lists before functions defined with function name were not passed on the functions invoked by this function has been fixed. 06-03-28 A bug in which name references defined within a function defined with function name could not be used with compound variables has been fixed. 06-03-27 A bug in which read <&p (print >&p) would cause the coprocess input (output) pipe to close before reading from (after writing to) it has been fixed. 06-02-28 A bug in which stopping a job created with the hist builtin command would create a job that could not be restarted has been fixed. 06-01-24 --- Release ksh93r --- 06-01-24 A bug in which running commands with standard output closed would not work as expected has been fixed. 06-01-23 A bug in which print -u could fail when file descriptor was open for writing has been fixed. 06-01-19 The ?: arithmetic operator fixed to work when the operation after the colon was an assignment. 05-12-24 A bug which could lead to a core dump when elements of a compound variable were array elements, i.e. foo=(bar=(1 2)), has been fixed. 05-12-13 An arithmetic bug in which x+=y+=z was not working has been fixed. 05-12-13 An arithmetic bug in which x||y was returning x when x was non-zero rather than 1 has been fixed. 05-12-07 +The aliases for integer and float have been changed to use attributes -li and -lE to handle long long and long double types. 05-12-07 +The histexpand (-H) option has been added which allows C-shell style history expansions using the history character !. 05-12-07 +The multiline option was added which changes that way the edit modes handle lines longer than the window width. Instead of horizontal scrolling, multiple lines on the screen are used. 05-12-05 The whence builtin now returns an absolute pathname when the command is found in the current directory. 05-11-29 A bug which caused ksh -c '[[ ! ((' to core dump rather than report a syntax error has been fixed. 05-11-29 A bug when reading fixed length records into typeset -b variables which caused a zero byte to terminate the value has been fixed. 05-11-22 +The ability to seek to an offset within a file has been added with the new I/O redirection operators, <# and >#. Currently, these redirection operators must be followed by ((expr)) but in a future release, it should be able to used to seek forward to the specified shell pattern. In addition $(n<#) expands to the current byte offset for file descriptor n. 05-11-22 +The .sh.match array variable is now set after each [[ ... ]] pattern match. Previously it was only set for substring matches. 05-10-17 A bug in which the library path variable could be prefixed with a directory when a .path file was not encountered in the directory of the executable has been fixed. 05-09-15 A for/while loop optimizer bug in which $OPTIND was not correctly expanded has been fixed. 05-09-05 A bug in which a history command that invoked a history command could go into an infinite loop has been fixed. 05-08-31 +In the case that IFS contains to adjacent new-lines so that new-line is not treated as a space delimiter, only a single new-line is deleted at the end of a command substitution. 05-08-19 +When a tilde substitution expands to the / directory and is followed by a /, it is replaced by the empty string. 05-08-16 A bug in which n<&m did not synchronize m has been fixed. 05-08-16 A bug in which process substitution ( <() and >() ) was not working within for and while loops has been fixed. 05-07-24 A bug in which the pattern ~(E)(foo|bar) was treated as a syntax error has been fixed. 05-07-24 A bug in completion with =, where n was the one of the previous selection choices has been fixed. 05-07-21 A bug with multibyte input when no edit mode was specified which caused the input line to shift left/right has been fixed. 05-06-24 A race condition which could cause the exit status to get lost on some fast systems has been fixed. 05-06-21 A bug in which nested patterns of the form {m,n}(pat) would cause syntax errors has been fixed. 05-06-21 A bug in the macro expander has been fixed which could cause a syntax error for an expansion of the form ${x-$(...)} when x is set and the command substitution contained certain strings. 05-06-08 +On systems for which echo does not do System V style \ expansions, the -e option was added to enable these expansion. 05-06-08 A bug in which ${var op pattern} to not work when inside an arithmetic expression has been fixed. 05-05-23 +An extension to shell patterns that allows matching of nested groups while skipping over quoted strings has been added. 05-05-18 A bug in which the line number for errors was not correct for functions loaded from FPATH has been fixed. 05-04-18 A bug in which the exit status $? is not set when a trap triggered by the [[...]] command is executed has been fixed. 05-04-08 +Redirection operators can be directly preceded with {varname} with no intervening space, where varname is a variable name which allows the shell to select a file descriptor > 10 and store it into varname. 05-04-08 +SHOPT_CMDLIB_BLTIN=1 now includes generated table. 05-04-07 +[[ -o ?option ]] is true if "option" is a supported option. 05-04-05 A bug in handling file completion with spaces in the names has been fixed. 05-03-25 +The SIGWINCH signal is caught by default to keeps the LINES and COLUMNS variables in sync with the actual window size. 05-03-25 +Building ksh with SHOPT_REMOTE=1 causes ksh to set --rc if stdin is a socket (presumably part of a remote shell invocation.) 05-03-25 +Building ksh with SHOPT_SYSRC=1 causes interactive ksh to source /etc/ksh.kshrc (if it exists) before sourcing the $ENV file. 05-03-25 +{first..last[..incr][%fmt]} sequences added to brace expansions when braceexpand is enabled. 05-03-03 A bug where a SIGCHLD interrupt could cause a fifo open to fail has been fixed. 05-02-25 A bug in which a builtin command run in the background could keep a file descriptor open which could cause a foreground process to hang has been fixed. 05-02-24 A bug where builtin library commands (e.g., date and TZ) failed to detect environment variable changes has been fixed. 05-02-22 +The read builtin and word splitting are now consistent with respect to IFS -- both treat IFS as field delimiters. 05-02-22 +The read builtin no longer strips off trailing delimiters that are not space characters when there are fewer variables than fields. 05-02-17 A builtin bug on systems where dlsym(libcmd) returns link-time bindings has been fixed. 05-02-12 A bug in which the lib_init() function for .paths BUILTIN_LIB libraries was not called has been fixed. 05-02-06 A bug on some systems in which moving the write end of a co-process to a numbered file descriptor could cause it to close has been fixed. 05-02-06 A bug in the vi-edit mode in which the character under the cursor was not deleted in some cases with the d% directive has been fixed. 05-02-06 A bug where external builtin stdout/stderr redirection corrupted stdout has been fixed. 05-02-04 A bug where times formatting assumed CLK_TCK==60 has been fixed. 05-01-11 --- Release ksh93q --- 05-01-11 A bug in the integral divide by zero check has been fixed. 05-01-11 +The -l option has been added to read /etc/profile and $HOME/.profile, if they exist, before the first command. 05-01-11 An argument parsing bug that caused `kill -s x -- n' to fail has been fixed. 05-01-11 +The .paths file, introduced in ksh93m, which can appear in any directory in PATH, now allows a line of the form 'BUILTIN_LIB=.' When a command is searched for this directory, and the full path matches the path of the built-in version of the command (listed by the 'builtin' command) then the built-in version of the command is used. When ksh is built with SHOPT_CMDLIB_DIR=1 then all libcmd functions become builtins with the '/opt/ast/bin/' directory prefix. 05-01-10 A bug in which a nameref to a compound name caused a core dump has been fixed. 05-01-09 A bug in which some SIGCHLD interrupts (from child processes exiting) caused a fatal print/echo error diagnostic has been fixed. 04-12-24 A bug in which some SIGCHLD interrupts (from child processes exiting) corrupted the internal process/job list, sometimes causing the shell to hang, has been fixed. 04-12-01 A bug in which typeset -Fn truncated less than n digits for large numbers has been fixed. 04-11-25 A bug in which standard error could be closed after a redirection to /dev/stderr has been fixed. 04-11-17 A bug in which an expansion of the form ${array[@]:3} could expand to ${array[0]} when ${array[3]} was not set has been fixed. 04-10-22 +The -E or -orc command line option reads ${ENV-$HOME/.kshrc} file. 04-10-22 +`-o foo' equivalent to `+o nofoo', `-o nobar' equivalent to `+o bar'. `--foo' equivalent to `-o foo', `--nofoo' equivalent to `+o foo' 04-10-05 +The .paths file, introduced in ksh93m, which can appear in any directory in PATH, now allows a line of the form 'BUILTIN_LIB=libname'. When a command is searched for this directory, the shared library named by libname will first be searched for a built-in version of the command. 04-09-03 <<< here documents now handle quotes in the word token correctly. 04-08-08 +The maximum size for read -n and and read -N was increased from 4095 to 32M. 04-08-04 +printf %q was modified so that if an no operand was supplied, no no output would be generated rather than a quoted empty string. 04-08-01 +The -n and -N options of the read builtin has been modified when reading variables with the binary attribute so that the data is stored directly rather than through assignment. 04-08-01 +The shcomp command has been modified to process alias commands under some conditions. 04-07-31 +The .sh.match variable added in ksh93l, now works like other indexed arrays. 04-07-08 A loop optimizer bug which occurs when typeset is used in a for or while loop inside a function has been fixed. 04-06-24 +The number of subexpressions in a pattern was increased to 64 from the current number of 20. 04-06-17 +The -t option to read was modified to allow seconds to be specified as any arithmetic expression rather than just an integral number of seconds, for example even -t 'sin(.5)' is now valid. 04-06-16 Two small memory leak problems were fixed. 04-06-15 A bug in ${var/pattern/"string"} which occurred when string contained pattern matching characters has been fixed. 04-05-08 printf $'%d\n' produced an erroneous error message and has been fixed. 04-05-24 A bug in which an associative array without any elements could cause a core dump when a script with an associative array with the same name was declared in a script invoked by name has been fixed. 04-05-11 A bug in which an exec statement could close the script that is being processed in a script that is run by name causing a failure has been fixed. 04-04-28 +If the first character of assignment to an integer variable was 0, the variable had been treated as unsigned. This behavior was undocumented and has been removed. 04-04-05 A bug in which the positioning of standard input could be incorrect after reading from standard input from a subshell has been fixed. 04-03-30 A bug in the for loop optimizer which in rare cases could cause memory corruption has been fixed. 04-03-29 +The preset alias source='command .' has been added. 04-03-29 A bug introduced in ksh93p on some systems in which invoked by name with #! on the first line would not get the signals handling initialized correctly has been fixed. 04-03-29 A bug introduced in ksh93p in which a HUP signal received by a shell that is a session group leader was not passed down to its children has been fixed. 04-02-28 --- Release ksh93p --- 04-02-28 +The ability to apply an append discipline to any variable has been added. 04-02-14 A bug in which the exportall option (set -a) would cause incorrect results for arrays has been fixed. 04-02-02 A bug in which an exported array would pass more than the first element to a script invoked by name has been fixed. 04-02-02 A bug on some systems in which name=value pairs preceding a script invoked by name was not getting passed to the script has been fixed. 04-01-20 A bug in which an unset discipline function could cause a core dump on some systems has been fixed. 04-01-12 A bug in which a continue or break called outside a loop from inside a function defined with name() syntax could affect the invoking function has been fixed. 04-01-08 If a command name begins with ~, only filename completion will be attempted rather than pathname completion using the builtin editors. 04-01-08 A bug in the vi edit mode in which the wrong repeat count on multiple word replacements with the . directive has been fixed. 04-01-06 Backspace characters are now handled correctly in prompt strings. 04-01-06 +The getopts builtin has been modified to accept numerical arguments of size long long on systems that support this. 04-01-06 A bug in which unsetting all elements of an associative array would cause it to be treated as an indexed array has been fixed. 03-12-15 A bug in which a quoted string ending with an unescaped $ would delete the ending $ in certain cases has been fixed. 03-12-05 A bug in which the shell could hang when set -x tracing a command when an invalid multibyte character is encountered has been fixed. 03-12-05 On some systems, if the KEYBD trap is set, then commands that use the meta key were not processed until return was hit. This has been fixed. 03-12-05 A problem which occurred when the login shell was not a group leader that could cause it to fail has been fixed. 03-12-05 A problem in which a shell could core dump after receiving a signal that should cause it to terminate while it was in the process of acquiring more space has been fixed. 03-12-05 +If ENV is not specified, the shell will default to $HOME/.kshrc for interactive shells. 03-11-21 A bug introduced in ksh93o in which the DEBUG trap could get disabled after it triggered has been fixed. 03-11-04 A bug in which using arithmetic prefix operators ++ or -- on a non-lvalue could cause a core dump has been fixed. 03-11-04 A bug in which leading zeros were stripped from variable expansions within arithmetic computation to avoid being treated as octal constants when they should not have, has been fixed. 03-10-08 A bug introduced in ksh93o in which a large here document inside a function definition could get corrupted has been fixed. 03-09-22 A bug in which the .get discipline function was not being called when a string variable was implicitly referenced from within a numerical expression has been fixed. 03-09-22 A bug in which a script without a leading #! could get executed by /bin/sh rather than the current shell on some systems has been fixed. 03-09-12 +To improve conformance with ksh88, leading zeros will be ignored when getting the numerical value of a string variable so that they will not be treated as octal constants. 03-09-03 +The builtin kill command now processes obsolete invocations such as kill -1 -pid. 03-09-02 The restriction on modifying FPATH in a restricted shell (sh -r) has been documented. 03-09-02 +The restricted shell (sh -r) has been modified to disallow executing command -p. 03-08-07 A bug in which the KEYBD trap was not being invoked when characters with the 8th bit set has been fixed. 03-08-02 A parser bug introduced in ksh93o which caused the character after () in a Posix function definition to be skipped when reading from standard input has been fixed. 03-08-01 A bug in which "${foo#pattern}(x)" treated (x) as if it were part of the pattern has been fixed. 03-08-01 +The command -x option has been modified so that any trailing arguments that do expand to a single word will be included on each invocation, so that commands like command -x mv * dir work as expected. 03-07-20 --- Release ksh93o+ --- 03-07-20 A bug in which could cause memory corruption when a posix function invoked another one has been fixed. 03-07-15 A bug in which a file descriptor>2 could be closed before executing a script has been fixed. 03-07-15 A parsing error for <() and >() process substitutions inside command substitution has been fixed. 03-07-15 A parsing error for patterns of the form {...}(...) when used inside ${...} has been fixed. 03-07-15 An error in which expanding an indexed array inside a compound variable could cause a core dump has been fixed. 03-07-15 A bug in which on rare occasions a job completion interrupt could cause to core dump has been fixed. 03-06-26 A bug in which process substitution embedded within command substitution would generate a syntax error has been fixed. 03-96-23 A bug in which ${@:offset:len} could core dump when there were no arguments has been fixed. 03-96-23 A bug in which ${X[@]:offset:len} could core dump when X was unset has been fixed. 03-06-22 +The -x option was added to the command builtin. If this option is on, and the number of arguments would exceed ARG_MAX, the command will be invoked multiple times with a subset of the arguments. For example, with alias grep='command -x grep, any number of arguments can be specified. 03-06-14 A bug in which could cause a core dump on some systems with vi and emacs editors with the MULTIBYTE option has been fixed. 03-06-06 A bug in which the shell could core dump when a script was run from its directory, and the script name a symlink to a file beginning with .., has been fixed. 03-06-05 A bug in which the shell could core dump when a child process that it is unaware of terminates while it is calling malloc() has been fixed. 03-06-02 +An option named globstar (set -G) has been added. When enabled, during pathname expansion, any component that consists only of ** is matches all files and any number of directory levels. 03-05-30 A bug in which the PATH search could give incorrect results when run from directory foo and PATH contained .:foo:xxx has been fixed. 03-05-29 +Some changes were made to the code that displays the prompt in edit mode to better handle escape sequences in the prompt. 03-05-27 I added = to the list of characters that mark the beginning of a word for edit completion so that filenames in assignments can be completed. 03-05-20 A bug in which read -N could hang on some systems when reading from a terminal or a pipe has been fixed. 03-05-19 A bug in which the output of uname from a command substitution would go to the standard output of the invoking command when uname was invoked with a non-standard option has been fixed. 03-05-19 A job control bug which would cause the shell to exit because it hadn't take back the terminal has been fixed. The bug could occur when running a function that contained a pipeline whose last element was a function. 03-05-19 A job control timing bug introduced in ksh93o on some systems which could cause a pipeline to hang if the first component completed quickly has been fixed. 03-05-13 +The read builtin has been modified so that the builtin editors will not overwrite output from a previous incomplete line. 03-05-13 A bug in which the name of an identifier could have the string .sh. prefixed to it after expanding a variable whose name begins with .sh. has been fixed. 03-05-13 A bug in the expansion of $var for compound variables in which some elements would not be output when the name was a prefix of another name in the compound variable has been fixed. 03-05-08 The last item in the ksh93o release on 03-01-02 has been altered slightly to preserve the leading 0's when the preceding character is a digit. Thus, with typeset -LZ3 x=10, $(( 1$x)) will be 1010 whereas $(( $x) will be 10. 03-04-25 A bug in which if x is a name reference, then nameref y=x.foo did not follow x has been fixed. 03-03-18 --- Release ksh93o --- 03-03-18 +A -N unary operator was added to test and [[...]] which returns true if the file exists and the file has been modified since it was last read. 03-03-18 +The TIMEFORMAT variable was added to control the format for the time compound command. The formatting description is described in the man page. 03-03-06 +A -N n option was added to read which causes exactly n bytes to be read unlike -n n which causes at most n bytes to be read. 03-03-03 +Three new shell variables were added. The variable .sh.file stores the full pathname of the file that the current command was found in. The variable .sh.fun names the current function that is running. The variable .sh.subshell contains the depth of the current subshell or command substitution. 03-03-03 +When the DEBUG trap is executed, the current command line after expansions is placed in the variable .sh.command. The trap is also now triggered before each iteration of a for, select, and case command and before each assignment and redirection. 03-02-28 +Function definitions are no longer stored in the history file so that set -o nolog no longer has any meaning. 03-02-28 +All function definitions can be displayed with typeset -f not just those stored in the history file. In addition, typeset +f displays the function name followed by a comment containing the line number and the path name for the file that defined this function. 03-02-28 A bug in which the value of $LINENO was not correct when executing command contained inside mult-line command substitutions has been fixed. 03-02-19 +Since some existing ksh88 scripts use the undocumented and unintended ability to insert a : in front of the % and # parameter expansion operators, ksh93 was modified to accept :% as equivalent to % and :# as equivalent to # with ${name op word}. 03-02-14 A bug which could cause a core dump when reading from standard error when standard error was a pty has been fixed. 03-02-14 +The shell arithmetic was modified to use long double on systems that provide this data type. 03-02-09 A bug in which a function located in the first directory in FPATH would not be found when the last component of PATH was . and the current directory was one of the directories in PATH has been fixed. 03-02-07 +The trap and kill builtin commands now accept a leading SIG prefix on the signal names as documented. 03-02-05 A bug in the expansion of ${var/$pattern}, when pattern contained \[ has been fixed. 03-02-05 A bug in which .sh.match[n], n>0, was not being set for substring matches with % and %% has been fixed. 03-01-15 A bug in which getopts did not work for numerical arguments specified as n#var in the getopts string has been fixed. 03-01-09 A bug in which using ${.sh.match} multiple times could lead to a memory exception has been fixed. 03-01-06 A bug in the expansion of ${var/pattern/$string} in the case that $string contains \digit has been fixed. 03-01-02 +A -P option was added for systems such as Solaris 8 that support profile shell. 03-01-02 For backward compatibility with ksh88, arithmetic expansion with ((...)) and let has been modified so that if x is a zero-filled variable, $x will not be treated as an octal constant. 02-12-05 --- Release ksh93n+ --- 02-11-30 A bug that can show up in evaluating arithmetic statements that are in an autoloaded function when the function is autoload from another function has been fixed. 02-11-30 An optimization bug in which an expansion of the form ${!name.@}, which occurred inside a for or a while loop, when name is a name reference, has been fixed. 02-11-18 A bug in which modifying array variables in a subshell could leave side effects in the parent shell environment has been fixed. 02-11-18 A memory leak when unsetting an associative array has been fixed. 02-11-14 +The code to display compound objects was rewritten to make it easier for runtime extensions to reuse this code. 02-11-14 +A change was made to allow runtime builtins to be notified when a signal is received so that cleanup can be performed. 02-10-31 +User applications can now trap the ALRM signal. Previously, the ALRM signal was used internally and could not be used by applications. 02-10-31 A bug in which signals received while reading from a coprocess for which traps were set was not handled correctly has been fixed. 02-10-31 A bug in which a file opened with exec inside a subshell could be closed before the subshell completed has been fixed. 02-10-21 A bug in which setting PATH or FPATH inside a function might not take effect has been fixed. 02-10-21 A bug which could cause a core dump when a local SECONDS variable is defined in a function has been fixed. 02-10-15 A bug in which the associate array name operator ${!array[@]} could return the same name multiple times has been fixed. 02-10-15 A bug in which the zero'th element of an associative array was not getting set when an assignment was made without a subscript specified has been fixed. 02-09-30 --- Release ksh93n --- 02-09-30 +The maximum indexed array size was increased to 16Megs. 02-09-30 A bug which could cause a core dump when changing attributes of associative array has been fixed. 02-09-30 A bug in which exporting an array variable would not export the 0-th element has been fixed. 02-09-30 A bug in which an array assignment of the form a=($a ...) would unset 'a' before the right hand side was evaluated has been fixed. 02-09-27 A bug in which the error message for ${var?message} when var was null or unset did not contain the variable name var has been fixed. 02-09-27 A bug in which closing file descriptors 0 through 2 could cause a subsequent here document to fail has been fixed. 02-09-14 A bug in whence which occurs when the specified name contained a / has been fixed. 02-09-14 A bug in the parser for strings of the form name$((expr))=value has been fixed. 02-09-14 A for loop optimization bug in which the number of elements in an array was treated as an invariant has been fixed. 02-09-09 A bug in which redirection or closing of a file descriptor between 3 and 9 could cause a subsequent here document to fail has been fixed. 02-09-09 A bug in which a background job was not removed from the job list when a subshell completed has been fixed, for example (prog&). 02-09-03 A bug in which an assignment of the form name=(integer x=3) could be interpreted as an array assignment rather than a compound variable assignment has been fixed. 02-08-19 A command completion bug which occurred on file systems that are case insensitive has been fixed. 02-08-19 A bug which could lead to an exception on some systems (for example FREEBSD) which occurred when setting PATH has been fixed. 02-08-11 A bug in arithmetic rounding in which a value input as a decimal string would output as a rounded version of the string has been fixed. 02-08-11 A bug in which the last character could be deleted from shell traces and from whence when called from a multibyte locale has been fixed. 02-08-01 A bug which could cause a core dump to occur when a shell script is executed while a coprocess is running that has closed the output pipe has been fixed. 02-08-01 A bug in which command completion in multibyte mode could corrupt memory for long command lines has been fixed. 02-06-17 --- Release ksh93n- --- 02-06-17 A bug in which user defined macros could cause a core dump in with MULTIBYTE mode has been fixed. 02-06-17 A bug in which printf format specifiers of the form %2$s were causing a core dump has been fixed. 02-06-17 A bug in which setting stty to noecho mode did not prevent the echoing of characters by ksh when emacs or viraw mode was enabled has been fixed. 02-06-17 A bug in which background job completion could cause the sleep builtin to terminate prematurely has been fixed. 02-06-17 A bug in which the shell could core dump if getopts was called when the OPTIND variable contained a negative value has been fixed. 02-06-10 +The edit mode prompt has been modified to handle escape sequences. 02-06-10 A bug which occurred for interactive shells in which the builtin cat command was used in command substitution on a file whose size was larger than PIPE_BUF has been fixed. 02-06-10 A bug in which the trap on ERR was not being processed when set inside a function has been fixed. 02-06-07 A bug in which function definitions could cause the history count to be decremented by one (and even become negative) has been fixed. 02-06-05 A bug in read in which share mode could be enabled has been fixed. 02-05-28 A bug which could occur when the last command of a script was a case statement and the action selected ended in ;& instead of ;; has been fixed. 02-05-23 A bug with unary + introduced in ksh93k has been fixed. 02-05-07 A bug in substitutions of the form ${var/pattern/string} in which a backslash was inserted in the replacement string when it contained a special pattern character has been fixed. 02-05-01 A bug in the emacs edit mode which occurred in versions compiled for multibyte character sets which occurred when a repeated search was requested after a long line had been returned for the previous search has been fixed. 02-04-02 +vi and emacs edit modes were modified so that tab completion is disabled when invoked from the read built-in. 02-03-26 --- Release ksh93m+ --- 02-03-26 A bug in which \ was not handled correctly when used in file expansion has been fixed. 02-02-18 A bug in which lines beginning with a # were deleted from here documents when the here-document delimiter was followed by a comment has been fixed. 02-12-06 An optimization bug in which ${!x[@]) was treated as invariant in a for loop has been fixed. 02-02-06 A bug in which the ERR trap is not cleared for a script invoked by name from within a function has been fixed. 02-01-08 A bug in which a shell script executed from within a subshell could cause this script to have an invalid pointer leading to a memory fault has been fixed. 02-01-07 +Added here documents of the form <<< word (as per zsh) which is equivalent to << delim\nword\ndelim. 02-01-07 A bug in which the first word of a compound assignment, x=(word ...), was treated as a reserved word has been fixed. 02-01-07 A bug in the handling of \ when noglob was enabled and a substitution of the form ${word op pattern} occurred in the same word has been fixed. 02-01-07 +A compilation option, CMDLIB_BLTIN in the file OPTION, has been added. When this options is set, all commands implemented in libcmd become shell builtin commands by default. 02-01-07 A bug in which builtin foo, where foo is already a builtin would result in the builtin foo getting removed has been fixed. 02-01-07 A bug which the shell executed a command found in the current directory when PATH have no valid directories has been fixed. 01-11-28 The value of $? was not being set when called with exit. 01-11-28 If the last command was of the form (...) and a trap on EXIT or ERR was set, and the command inside () modified the trap, then the original trap wasn't executed. 01-11-26 +The value for 0 is now preceded by the base number when the base was not 10. 01-11-26 +The default has compilation mode has been changes so that viraw mode will always be on. 01-10-31 --- Release ksh93m --- 01-10-31 A for loop optimizer bug for subshells contained withing for loops has been fixed. 01-10-16 typeset without arguments no longer outputs variable names that do not have any attributes that are set. 01-10-16 A bug introduced in ksh93l in which assignments specified with the exec built-in were not being expanded properly has been fixed. 01-10-11 An optimization bug in which ${!x) was treated as invariant in a for loop has been fixed. 01-10-11 Unsigned integer variables in bases other than 10 are printed now expand in that base with the base prefix. 01-10-10 A number of typos in the self generating man pages for shell built-ins have been fixed. 01-10-04 The self generated man pages for hist and fc were not working correctly and have been fixed. 01-10-03 Yet another optimizer bug in which shell patterns were treated as invariants has been fixed. 01-09-27 Two bugs relating to multibyte history searches and to find have been fixed. 01-09-27 A bug introduced in ksh93k in which the PATH searching was not restored after running a command with an assignment list has been fixed. 01-09-26 A bug in which a zero filled field was treated as octal when converted to integer has been fixed. 01-09-26 Yet another bug in the optimization of for loops related to recursive functions with break or continue statements has been fixed. 01-09-25 +The exponentiation operator ** was added to the shell arithmetic evaluation. It has higher precedence than * and is left associative. 01-09-25 The code was modified to use the ast multibyte macros and functions for handing multibyte locales. 01-09-25 +The expansion ${parameter:offset:length} now handles negative offsets which cause offsets to be measured from the end. 01-09-25 Some spelling errors in the documentation were corrected. 01-09-24 +The /dev/tcp/host/port and /dev/udp/host/port now allow the ports to be specified by service name. 01-09-24 +The change staring with ksh93g in which the the appropriate library path variable is prepended with a corresponding library directory has been modified. With the new method, only the library path defined in the file named .paths in the directory where the executable is found will be modified. See the man page for more details. 01-09-23 +The .fpath file (see ksh93h) is no longer looked for in each directory on the path to locate function directories. The file named .paths is used instead. 01-09-23 A bug in which IFS was not being restored after being changed in a subshell has been fixed. 01-09-16 +With the vi and emacs edit modes, after a list of command or functions is generated with = or M-= respectively, any element from the list can be pasted on the command line by preceding the = or M-= with a numeric parameter specifying the position on the list. 01-09-16 A bug in ksh93l caused command completion not to find aliases and functions. Command listing from the edit mode was presented in reverse order. This has been fixed. 01-09-13 Another bug in the optimization of for loops related to subshells when traps were set has been fixed. 01-09-07 A change in ksh93l caused brace expansion to stop working and this has been fixed. 01-09-04 A bug introduced in ksh93k in which an arithmetic statement within a function that used name references did not follow the reference has been fixed. 01-09-04 A bug introduced in ksh93l in which export -p did not prefix each export with the word export has been fixed. 01-08-29 A bug in multibyte input which occurred when a partial multibyte character was received has been fixed. 01-08-29 A bug introduced in ksh93l which could cause a core dump when an assignment list containing PATH is specified inside command substitution has been fixed. 01-08-09 Another bug in the optimization of for loops in ksh93l caused errors in recursive functions using local variables that contained for loops has been fixed. 01-07-27 A bug in which IFS would be unset after a command substitution inside a here document has been fixed. 01-07-26 To conform to the POSIX standard, if you invoked ksh name, and name does not contain a /, it will first try to run one in the current directory whether it is executable or not before doing a path search for an executable script. Earlier versions first checked for an executable script using the PATH variable. 01-07-23 A bug in which unset -f invoked in a subshell could unset a function defined in the parent has been fixed. 01-07-16 A bug in the optimization of for loops in ksh93l caused name references to be treated as invariants has been fixed. 01-07-09 A bug in which a discipline function applied to a local variable could cause a shell exception has been fixed. Discipline functions can only be specified for global variables. 01-06-18 --- Release ksh93l --- 01-06-18 A bug in assigning integers larger than can be represented as long integers to floating point variables has been fixed. 01-06-18 A bug in the handling of unsigned integers (typeset -ui) has been fixed. 01-06-04 The evaluation of the PS1 prompt no longer effects the value of the $? variable. 01-06-01 A small memory leak from subshells has been fixed. 01-05-22 A bug in which attributes for variables that did not have values would be lost after a subshell has been fixed. 01-05-22 +The %R format has been added to convert a shell pattern into an extended regular expression. 01-05-22 +The escape sequences \e, \cX, \C[.collating-element.], and \x{hex} have been added to ASCII-C strings and to printf format strings. 01-05-20 +Patterns of the form {n}(pattern) and {m,n}(pattern) are now recognized. The first form matches exactly n of pattern whereas, the second form matches from m to n instances of pattern. 01-05-20 +The shell allows *-(pattern), +-(pattern), ?-(pattern), {m,n}-(pattern}, and @-(pattern) to cause the minimal match of pattern to be selected whenever possible rather than the maximal (greedy) match. 01-05-20 +The character class [:word:] has been added to patterns. The word class is the union of [:alnum:] and the character _. 01-05-20 +Inside (...) pattern groups, the \ character is now treated specially even when in an enclosing character class. The sequences, \w, \d, \s are equivalent to the character classes word, digit, and space respectively. The sequences \W, \D, and \S are their complement sets. 01-05-20 +The shell now recognizes pattern groups of the form ~(options:pattern) where options or :pattern can be omitted. Options use the letters + and - to enable and disable options respectively. The option letters g (greedy), i (ignore case) are used to cause maximal matching and to cause case insensitive matching respectively. If :pattern is also specified, these options are only in effect while this pattern is being processed. Otherwise, these options remain in effect until the end of the pattern group that they are contained in or until another ~(...) is encountered. These pattern groups are not counted with respect to group numbering. 01-05-14 When edit completion, expansion, or listing occurs in the middle of a quoted string, the leading quote is ignored when performing the completion, expansion, or listing. 01-05-14 A small memory leak from subshells has been fixed. 01-05-10 A bug in which open files were not restored after a subshell that had used exec to replace a file has been fixed. 01-05-10 +Redirection to a null file name now generates an error message. 01-05-09 The shell now rejects some invalid parameter substitutions that were previously processed in undefined ways. 01-05-09 A bug in which the output of select was not flushed before the read when input did not come from the terminal has been fixed. 01-05-08 A bug in which job ids would not be freed for interactive shells when subshells ran built-ins in the background has been fixed. 01-05-08 +The FPATH variable now requires an explicit . to cause the current directory to be treated as a function directory. 01-05-08 A bug in read -n when echo mode was disabled has been fixed. 01-05-07 A bug in which function definitions could be listed as part of the history has been fixed. 01-04-30 +This release uses a new and often much faster pattern matcher than earlier releases. 01-04-30 +An optimizer now eliminates invariant parameter expansions from for while and until loops. 01-04-30 +The variable .sh.match is set after each pattern match (# % or /) in a variable substitution. The variable .sh.match is an indexed array with element 0 being the complete match. The array is only valid until the next subsequent pattern match or until the value of the variable changes which ever comes first. 01-04-30 +A self generating man page has been added to shcomp. Also, shcomp now stops compiling when it finds an exit or exec command and copies the remainder so that it can be used for standard input. 01-04-30 +The shcomp command was modified so that it can work in an EBCIDIC environment and that binary scripts are portable across environments. 01-04-30 A bug in the handling of a trailing : in PATH has been fixed. 01-04-30 A bug in which the builtin version of a command would get invoked even though the full pathname for the command was specified has been fixed. 01-04-30 A bug in which read would loose the last character when reading the last line of a file that did not contain a new-line character has been fixed. 01-04-23 A bug on some systems in which in vi mode the end of file character and end of line character could be swapped has been fixed. 01-04-23 A bug on some systems in which invoking a shell script that did not have execute permission could set the exit value to 127 rather than 126 has been fixed. 01-04-20 A bug in which read -n from a pipe would block if fewer than n characters was received has been fixed. 01-04-09 A bug in which invalid patterns, for example, ) by itself, was not treated as a string has been fixed so that if i=')', then [[ $i == $i ]] is true. 01-04-09 +The shell arithmetic now interprets C character constants. 01-04-09 A bug in which a non-zero return from a function defined with the function reserved word did not trigger the ERR trap or exit with set -e has been fixed. 01-04-02 A bug on some systems, in which characters above 127 were not displayed correctly in vi or emacs edit mode has been fixed. 01-04-02 A bug on some systems, introduced in the 'k' point release, in which the erase character in viraw mode was moving the cursor to the left without erasing the character has been fixed. 01-04-02 On some systems the wcwith() function was returning a wrong value for characters and caused characters to be displayed incorrectly from the shell edit modes. A work around for this problem has been added. 01-03-26 A bug in which valid scripts could produce syntax errors when run with locales that considered characters such as "'" to be space characters has been fixed. 01-03-20 A bug in which an syntax error in an arithmetic expression entered interactively could cause the shell to go into an infinite loop outputting the error message has been fixed. 01-03-10 +ksh93 accepts -l as a synonym for -L in test on systems for which /bin/test -l tests for symbolic links. 01-03-10 A bug in parsing scripts in which { and } are used in place of in and esac in case statements embedded in compound commands has been fixed. Use of { and } for in and esac is obsolete. 01-03-06 A bug in which an argument of the form foo=bar was not being passed correctly to a traced function whose name was foo has been fixed. 01-03-02 Using $(trap -p name) did not print the name of the current trap setting for trap name. 01-02-26 Exported floating point variables gave incorrect results when passing them to ksh88. This has been fixed. 01-02-25 A race condition in which a coprocess which completed too quickly would not allow subsequent coprocesses to start has been fixed. 01-02-25 The 'g' format specifier is now handled by printf. It had inadvertently been omitted. 01-02-20 The + was not being displayed during an execution trace with the += assignment operator. 01-02-19 The error message which occurs when the interpreter name defined on the #! line does not exist is more informative. 01-02-19 A bug in which $0 would not be set correctly when a script with #! was invoked by full pathname from the directory of the script has been fixed. 01-02-19 A shell script did not always pick up tty mode changes made by external commands such as stty which could effect the behavior of read. 01-02-19 The -u, -g, and -k unary tests did not give the correct results when used with negation and this has been fixed. 01-02-05 --- Release ksh93k+ --- 01-02-05 The sequence \ inside $'...' was not incrementing the line count and this has been fixed. 01-02-05 +Modified expansion of "${@-}" so that if no arguments are set it results in null string rather than nothing. 01-02-02 memory leak problem with local variables in functions fixed. 01-01-25 +allow arithmetic expressions with float%int and treat them as ((int)float)%int rather than as an error. 01-01-19 read -n1 was not working and has been fixed. 01-01-17 +ksh now handles the case in which a here document in command substitution $() is terminated by the trailing ). Previously, a new-line was needed at the end of the delimiter word. 01-01-02 A bug in which a KEYBD trap would cause a multi-line token to be processed incorrectly has been fixed. 00-12-10 +Arithmetic integer constants can now have L and U suffices. 00-12-10 A bug in the processing of arithmetic expressions with compound variables when the -n option is on has been fixed. 00-12-08 A bug in M-f and M-b from emacs mode has been fixed. This bug only occurs when ksh93 is compiled without MULTIBYTE enabled. 00-11-29 A bug in which jobs -p would yield 0 for background jobs run in a script has been fixed. 00-11-21 A bug in integer arrays in which the number of elements is incorrect when the ++ operator is applied to a non-existing element has been fixed. For example, integer x; ((x[3]++)). 00-11-20 A timing bug in which the shell could reset the terminal group to the wrong value in the case that the a new process changes the terminal group during startup has been fixed. 00-10-27 --- Release ksh93k --- 00-10-27 Using tab for completion now works only when applied after a non-blank character at the end of the current line. In other case a tab is inserted. 00-10-27 A bug in the emacs edit mode for ^X^E has been fixed. The ^X^E sequence is supposed to invoke the full editor on the current command. 00-10-18 A bug in which expansions of the form ${var//pattern/string} did not work correctly when pattern was '/' or "/" has been fixed. 00-10-18 +The output format for indexed arrays in compound variables has been modified so that it can be used as input. 00-10-18 Assignments with name references (typeset -n) will now implicitly unreference an existing name reference. 00-10-17 A bug the += append operator when a single array element is appended to a variable that is not an array has been fixed. 00-10-16 A bug in which the SIGCONT signal was being sent to each process will kill -0 or kill -n 0 has been fixed. 00-10-12 +The arithmetic evaluation portion has been rewritten to perform a number of optimizations. 00-10-10 A bug in which name prefix matching ${!name.*} was not checking name to see if it was a name reference has been fixed. 00-09-26 A bug in the multibyte version in which the width of for non-printing characters was not correct has been fixed. 00-09-12 +Made changes to get multibyte editing work on UWIN for windows 00-09-12 A bug in which multibyte characters would be displayed incorrectly has been fixed. 00-08-08 Removed build dependency on iswprint() and iswalph(). 00-07-20 In some cases the read builtin would read more than a single line from a pipe on standard input and therefore leave the seek position in the wrong location. 00-07-05 +If the directory / is on the path, a / will not be inserted between the directory and the file name during path searching to avoid searching // for systems that treat this specially. 00-06-26 A bug in which on rare occasions wait could return before all jobs have completed has been fixed. 00-06-21 A bug in which backspace did not work correctly during the R replace directive in vi-mode has been fixed. 00-06-12 +Added variable name completion/expansion/listing to the set of completions. Variable name completions begin with $ or "$ followed by a letter. 00-05-09 --- Release ksh93j --- 00-05-09 Modified command substitution to avoid using /tmp files when run on read-only file systems. 00-04-17 +Modified printf to handle '%..Xc' and '%..Xs' options where X is not an alpha character. Previous versions core dumped with this. 00-04-10 +Changes to multibyte editing code were made to use standard ISO C functions rather than methods devised before the standard. 00-04-09 Add %H options to printf to output strings with <"'&\t> properly converted for use in HTML and XML documents. 00-04-07 +Modified getopts builtin to handle \f...\f in usage string by invoking specified function. 00-04-04 Added self generating man pages for bg, fc, fg, disown, jobs, hist, let, ., and ulimit. 00-03-30 +The append operator += has been added and can be used for all assignments, strings, arrays, and compound variables. 00-03-30 +Code was modified in several places to support automatic generation of C locale dictionaries. 00-03-28 A bug in which the set and trap commands invoked with --name type arguments would terminate the invoking script has been fixed. 00-03-27 A bug in which the library path variable was not updated correctly on some systems as described in the 'g' point release has been fixed. 00-03-07 printf now returns a non-zero exit status when one of its arguments cannot be converted to the given type. 00-03-05 The return value and error message for a command that was found on the path but was not executable was set incorrectly. 00-03-05 A prototype for ioctl() was removed from the vi edit mode. 00-01-28 --- Release ksh93i --- 00-01-28 +Most of the built-in commands and ksh itself are now self documenting. Running command --man will produce screen output. Running command --html produces the man page in html format. 00-01-28 +The getopts builtin can process command description strings to produce man pages. 00-01-28 A bug in which a script could terminate when getopts encountered an error when invoked inside a function has been fixed. 00-01-28 When a symbolic link was specified as the name of the script to invoke by name, the value of $0 was set to the real file name rather than the link name in some cases and this has been fixed. 00-01-28 A bug in which the precision given as an argument to printf was not working has been fixed. 99-03-31 --- Release ksh93h --- 99-03-31 +The PATH search algorithm has been modified to look for a file named .fpath in each bin directory and if found, to search for functions in this directory if it cannot find the command in that directory. 99-03-31 +When performing pathname expansion, the shell checks to see whether each directory it reads is case sensitive or not, and performs the matching accordingly. 99-03-31 +The %T format for printing formatted date/time. 99-03-31 +The emacs and vi modes now handle arrow keys when they use standard ANSI escape sequences. 99-03-31 +The TAB key can be used for completion in emacs and viraw mode. 99-03-31 A bug in setting .sh.editchar during the KEYBD trap for the MULTIBYTE option was fixed in release ksh93h. 99-03-31 A bug in shcomp for compilation of unary operators with [[...]] has been fixed. 99-03-31 A bug in which the value of $? was changed when executing a keyboard trap has been fixed. 99-03-31 The handling of SIGCHLD has been changed so that the trap is not triggered while executing trap commands to avoid recursive trap calls. 99-03-31 A bug in which a local variable in a function declared readonly would generated an error when the function went out of scope has been fixed. 99-03-31 A bug in which \ entered from the keyboard with the KEYBD trap enabled has been fixed. 99-03-31 The error message for a misplaced ((, for example print ((3), was often garbled and has been fixed. 99-03-31 A bug in the KEYBD trap in which escape sequences of the form [#~ were not being handled as a unit has been fixed. 99-03-31 A bug in which ksh would consider expressions like [[ (a) ]] as syntax errors has been fixed. 99-03-31 A function defined as foo() without a function body was not reported as a syntax error. 99-03-31 A bug in which ksh could run out of file descriptors when a stream was repeatedly opened with exec and read from has been fixed. 98-04-30 --- Release ksh93g --- 98-04-30 +The pipefail option has been added. With pipefail enabled, a pipeline will not complete until all commands are complete, and the return value will be that of the last command to fail, or zero if all complete successfully. 98-04-30 +The name-value pair library uses the cdt library rather than the hash library. This change should be transparent to applications. 98-04-30 +On the U/WIN version for Window 95 and Windows NT, when a directory beginning with a letter followed by a colon is given to cd, it is assumed to be an absolute directory 98-04-30 +When an executable is found on a given path, the appropriate library path variable is prepended with a corresponding library directory. 98-04-30 A bug in which a name reference could be created to itself and later cause the shell to get into an infinite loop has been fixed. 98-04-30 A bug in shcomp relating to compound variables was fixed. 98-04-30 A bug introduced in ksh93e in which leading 0's in -Z fields caused the value to be treated as octal for arithmetic evaluation has been fixed. 98-04-30 A bug when a name reference with a shorter name than the variable it references was the subject of a compound assignment has been fixed. 98-04-30 A bug which in which assignment to array variables in a subshell could effect the parent shell has been fixed. 98-04-30 read name?prompt was putting a 0 byte at the end of the prompt on standard error. 98-04-30 A bug in [[ string1 > string2 ]] when ksh was run with -x has been fixed. 98-04-30 A bug in which the escape character was not processed correctly inside {...} when brace expansion is enabled has been fixed, for example {\$foo}. 98-04-30 A bug in line continuation in here-documents has been fixed. 98-04-30 The default base when not specified with typeset -i is 10 in accordance with the documentation. Previously, the value was determined by the first assignment. 98-04-30 A parsing bug in which a # preceded alphanumeric characters inside a command substitution caused a syntax error to be reported has been fixed. 98-04-30 A bug in which a decimal constant represented as 10#ddd where ddd was more than five digits generated a syntax error has been fixed. 98-04-30 A bug in here document expansion in which ${...} expansions were split across buffer boundaries has been fixed. 98-04-30 +The sh_fun() function now takes third argument which is an argument list for the invoked discipline function or built-in. 98-04-30 +A callback function can be installed which will give notification of file duplications and file closes. 98-04-30 When ksh is compiled on systems that do not use fork() current option settings where not propagated to sub-shells. 97-06-30 --- Release ksh93f --- 97-06-30 +Hostnames in addition to host addresses can be given in /dev/tcp/host/port virtual file names. 97-06-30 File name completion and expansion now quotes special characters in file names from both emacs and vi edit modes. 97-06-30 An empty for list behave like a for list with null expansions. It produces a warning message with sh -n. 97-06-30 +The code has been modified to work with EBCDIC as well as ASCII. 97-06-30 A bug which would cause the secondary prompt to be displayed when a user entered a literal carriage return has been fixed. 97-06-30 A bug which caused ksh read -s name to core dump was fixed. 97-06-30 A bug with the expansion of \} and \] inside double quoted strings that also contained variable expansions has been fixed 97-06-30 Changes in the ksh93e point release caused autoload functions invoked from within command substitution to fail. This has been fixed. 97-06-30 A bug in the processing of here-documents that could prevent variable substitution to occur after $(...) command substitution for long here documents has been fixed. 97-06-30 A bug caused by a race condition that could cause SIGTERM to be ignored by a child process has been fixed. 97-06-30 A bug which prevented the startup of a coprocess immediately after killing a running coprocess has been fixed. 97-06-30 ulimit foobar, where foobar is not an arithmetic expression, now gives an error message as it did with ksh88 instead of setting the file size limit to 0. 97-06-30 A bug which could cause an interactive shell to terminate when the last process of a pipeline was a POSIX function was fixed. 97-06-30 A bug which could cause command substitution of a shell script to core dump has been fixed. 97-06-30 A security hole was fixed in suid_exec. 97-06-30 Arithmetic functions such as pow() that take more than one argument, did not work if arguments other than the first contained parenthesized sub-expression. 97-06-30 The error message from a script containing an incomplete arithmetic expression has been corrected. 97-06-30 A bug which caused a core dump on some machines when the value of a name reference contained a positional parameter and the name reference was not defined inside a function has been fixed. 97-06-30 Arithmetic expressions now correctly handle hexadecimal constants. 97-06-30 A bug in which integer variables could be expanded with a leading 10# when declared with typeset -i multiple times has been corrected. 97-06-30 A bug in which IFS wasn't correctly restored when set within command substitution has been fixed. 97-06-30 The _ character is now considered as part of a word with the M-f and M-b emacs directives as it was in ksh88. 97-06-30 A bug in brace pattern expansions that caused expressions such as {foo\,bar,bam} to expand incorrectly have been fixed. 96-07-31 --- Release ksh93e --- 96-07-31 +The math functions, atan2, hypot, fmod, and pow were added. 96-07-31 +When a shared library is loaded, if the function lib_init() is defined in the library, it is invoked the first time that the library is loaded with builtin -f library. 96-07-31 The k-shell information abstraction database option, KIA, has been revamped. 96-07-31 Empty command substitutions of the form $() now work. whence -v foo now gives the correct result after calling builtin -d foo. 96-07-31 A bug in right to left arithmetic assignment for which the arithmetic expression (( y = x = 1.5 )) did not yield 1 for y when x was declared typeset -i was fixed. 96-07-31 printf has been fixed to handle format containing \0 and/or \0145 correctly. In addition, characters following %b in the format string are no longer displayed when the operand contains \c. 96-07-31 A bug in printf that could cause the %E format to produce unnormalized results has been fixed. 96-07-31 A bug which causes some arithmetic expressions to be incorrectly evaluated as integer expressions rather that floating point has been fixed. 96-07-31 Functions defined inside a subshell no longer remain defined when the subshell completes. 96-07-31 The error message from sh -c ';echo foo' has been corrected. 96-07-31 The format for umask -S has been changed to agree with the specification in the POSIX standard. 96-07-31 A bug that caused side effects in subscript evaluation when tracing was enabled for subscripts using ++ or -- has been fixed. 96-07-31 To conform to the Posix standard getopts has been changed so that the option char is set to ? when it returns with a non-zero exit status. 96-07-31 The handling of \} inside ${name...} has been fixed so that the \ quotes the }. 96-07-31 A bug that caused the read builtin to resume execution after processing a trap has been fixed. 96-07-31 [[ -s file ]] has been fixed so that if file is open by ksh, it is flushed first. 96-07-31 In some cases attributes and sizes for non exported variables weren't being reset before running a script. 96-07-31 The value of TMOUT was affected by changes make to it in a subshell. 96-07-31 The jobs command did not reflect changes make by sending the CONT signal to a command. 96-07-31 The error message for ksh -o unknown was incorrect. 96-07-31 Functions invoked as name=value name, did not use values from the calling scope when evaluating value. 96-07-31 A bug in which the shell would reexecute previously executed code when a shell script or coprocess was run in the background has been fixed. 96-07-31 A bug in which an empty here-document would leave a file descriptor open has been fixed. 96-07-31 A bug in which $(set -A array ...) would leave a side effect has been fixed. 96-07-31 A discipline function for a global variable defined within a function defined with the function keyword, incorrectly created a local variable of the same name and applied the discipline to it. 95-08-28 --- Release ksh93d --- 95-08-28 The \ character was not handled correctly in replacement patterns with ${x/pattern/replace}. 95-08-28 A bug with read in which the line did not end with a new-line has been fixed. 95-08-28 A bug in file name generation which sometimes appended a . for filenames that ended in / has been fixed. 95-08-28 +If a process is waited for after a status has been returned by a previous wait, wait now returns 127. 95-08-28 A bug with hist (fc) -e which prevented a command to re-executed after it had been edited has been fixed. 95-08-28 A bug which prevented quoting from removing the meaning of unary test operators has been fixed. 95-08-28 A bug with typeahead and KEYBOARD traps with the MULTIBYTE option set has been fixed. 95-08-28 +Builtin functions can take a third argument which is a void*. 95-08-28 The nv_scan() function can restrict the scope of a walk to the top scope. 95-04-31 --- Release ksh93c --- 95-04-31 The expansion of "$@" was incorrect when $1 was the null string. 95-04-31 A bug which could incorrectly report a syntax error in a backquoted expression when a $ was preceded by \\ has been fixed. 95-04-31 A bug which prevented the shell from exiting after reporting an error when failing to open a script has been fixed. 95-04-31 A bug that could lead to memory corruption when a large here document that required parameter or command substitution was expanded has been fixed. 95-04-31 A bug that could cause a core dump on some systems after ksh detected an error when reading a function has been fixed. 95-04-31 A bug which could cause a coprocess to hang when reading from a process that has terminated has been fixed. 95-04-31 A bug which caused a script to terminate when set -e was on and the first command of and && or || list failed has been fixed. 95-04-31 A bug with here documents inside $(...) when the delimiter word is an identifier has been fixed. 95-04-31 A bug which caused $0 to display the wrong value when a script was invoked as an argument to the . command and the eval command has been fixed. 95-04-31 A bug that could cause the built-in sleep to hang has been fixed. 95-04-31 A bug introduces in 12/28/93b which caused the backslash to be removed when it was followed by digit inside double quotes in some instances has been fixed. 95-04-31 A bug which could cause a core dump if ksh was invoked with standard input closed has been fixed. 95-04-31 A bug which could cause a core dump if typeset -A was specified for an existing variable has been fixed. 95-04-31 Variables that were unset but had attributes such as readonly and export were not listed with readonly, export and typeset. 95-04-31 Several problems with signals have been fixed. 95-04-31 A bug which prevented ulimit -t from working has been fixed. Also, a bug in which failed ulimits could cause a core dump has also been fixed. 95-04-31 A bug in expansion of the form ${name/#pattern/string} and ${name/%pattern/string} has been fixed. 95-04-31 A bug which caused read -r on a line that contained only blanks to get a non-null value has been fixed. 95-04-31 A bug introduced in the 'a' point release in which ${x='\\'} expanded to \ when x was unset has been fixed. 95-04-31 A bug which prevented a trap on EXIT from being executed when the last command in a script was a function invocation has been fixed. 95-04-31 A bug which caused an interactive shell ignore input when standard error was redirected to a file with exec, and then restored with exec 2>&1 has been fixed. 95-04-31 An interactive shell turns on monitor mode even when standard error has been redirected to a file. 95-04-31 A bug which could cause standard input to be incorrectly positioned for the last command of a script has been fixed. 95-04-31 A bug in the edit modes which allowed walking back in the history file for more than HISTSIZE commands has been fixed. 95-04-31 A bug which could cause a core dump if variable TMPDIR was changed between two command substitutions has been fixed. 95-04-31. A bug which prevented a trap on EXIT from being cleared has been fixed. 95-04-31 A bug fixed for the v directive in vi MULTIBYTE has been fixed. 95-04-31 Code to for IFS handling of multibyte characters has been added. 95-04-31 The displaying of multibyte strings in export, readonly, typeset, and execution traces has been fixed. 95-04-31 Variables inside functions are now statically scoped. The previous behavior was never documented. 95-04-31 Variables inside functions are now statically scoped. The previous behavior was never documented. 95-04-31 A few changes have been made to the name-value library that affect built-ins that use disciplines. The changes allow disciplines to be shared by variables and should make it possible to add new disciplines without recompilation. 95-04-31 +The name-value library interface has undergone significant change for this revision. See the new nval.3 man page. 94-12-31 --- Release ksh93b --- 94-12-31 +Variables inside functions are now statically scoped. The previous behavior was never documented. 94-12-31 +If IFS contains two consecutive identical characters belonging to the [:space:] class, then this character is treated as a non-space delimiter so that each instance will delimit a field. For example, IFS=$'\t\t' will cause two consecutive tabs to delimit a null field. 94-12-31 +The getopts command has a -a name option that specifies a name that will be used for usage messages. 94-12-31 A bug which caused unset RANDOM to dump core has been fixed. 94-12-31 A bug which prevented return for terminating a profile or ENV file has been fixed. 94-12-31 A bug which prevented standard input from being directed to /dev/null for background jobs when monitor mode was turned off has been fixed. 94-12-31 Statements of the form typeset -options var[expr]=value did not perform substitutions on expr as expected. 94-12-31 A bug which prevented the shell from sending a HUP signal to some background jobs that were not disowned has been fixed. 94-12-31 A bug which allowed a script to trap signals that are ignored at the time that the shell was invoked by exec has been fixed. 94-12-31 A bug which could cause a core dump when a discipline function was unset within a discipline was fixed. 94-12-31 The typeset builtin now accepts a first argument of + or - for compatibility with ksh88. 94-12-31 For compatibility with ksh88, the results of expansions of command arguments will treat the extended character match characters ()|& as ordinary characters. 94-12-31 A bug which caused read to fail on a file that was open for read/write with <> when the first operation was print or printf has been fixed. 94-12-31 When a job is suspended, it is put on the top of the job list as required by the POSIX standard. 94-12-31 The value of OPTARG when an option that required an argument but didn't have one was incorrect in the case the the option string began with a :. 94-12-31 A bug which caused the terminal to get into a bad state with some KEYBD traps in vi-mode has been fixed. 94-12-31 A bug which caused an invalid trap to cause a script to terminate, rather than just return an error, has been fixed. 94-12-31 Backreferencing sub-expressions in patterns and replacement strings now works. 94-12-31 A bug in chmod which caused the -R option to fail has been fixed. 94-12-31 +More signal names have been added for Solaris 94-06-30 --- Release ksh93a --- 94-06-30 An expansion bug which causes portions of a word after a $((...)) expansion that contains a nested $var expansion to be lost has been fixed. 94-06-30 A bug that caused a core dump when a script that did not have PWD set and did a cd inside command substitution has been fixed. 94-06-30 A bug which caused a core dump on some machines when the LANG variable was assigned to has been fixed. 94-06-30 A bug which incorrectly handled set disciplines that performed arithmetic evaluation when the discipline was called from the arithmetic evaluator has been fixed. 94-06-30 A bug caused by an EXIT trap inside a function that was executed in a subshell was fixed. 94-06-30 If foo is a function, and not a program, then command foo now reports that foo isn't found rather than invoking foo. 94-06-30 The previous version incorrectly listed -A as an invocation option. The -A option is only for set. 94-06-30 A bug was fixed which caused ksh to loop when execution trace was enabled and the PS4 prompt required command substitution. 94-06-30 A bug which could cause the job control switch character to be disabled when a script that enabled monitor mode terminated was fixed. 94-06-30 A bug in the macro expansion global replacement operator //, when the pattern began with a [ or +( has been fixed. 94-06-30 A bug which prevented ~ expansion from occurring when it was terminated with a colon inside an assignment has been fixed. 94-06-30 A bug in the dot command which prevented autoload functions from working has been fixed. 94-06-30 A bug which caused a variable to be unset if the its value were expanded inside a set discipline has been fixed. 94-06-30 Whence -a now longer reports that a defined function is undefined. 94-06-30 A bug on some systems in which $0 would be incorrect in scripts invoked by name has been fixed. 94-06-30 Here documents with an empty body now work. 94-06-30 A bug which disabled argument passing and resetting of options for a script invoked by name inside a function has been fixed. 94-06-30 A bug in which an EXIT trap set the caller of a function would be executed if a command called inside a function was not found has been fixed. 94-06-30 A bug which allowed a script to trap signals that are ignored at the time that the shell was invoked has been fixed. 94-06-30 A bug which caused 2<&1- when applied to a shell built-in to leave standard input closed has been fixed. 94-06-30 A bug which caused the shell to incorrectly parse $() command substitutions with nested case statements has been fixed. :::::::: pax :::::::: 13-08-11 strcopy() => stpcpy() 13-06-24 pax.h,pax.c,file.c: change chmod members to modekeep and restoremode 12-11-08 file.c: fix lchmod() logic for systems that implement only ENOSYS 12-10-17 copy.c: fix SEEK_HOLE loop that set last file byte to 0 12-09-28 pax.c,options.c: document t => tar: 12-05-25 file.c: #include for tmdate() prototype 12-05-14 pax.c: use Format_t.match to eliminate explicit format references 12-05-14 pax.c: add xz format -- requires local system standalone xz command 12-05-07 tar.sh: fix file/option quoting, --show 12-05-04 tar.sh: snarf update from Brian Russell 12-04-20 pax.c: verify that --maxout > --blocksize (else it recurses on newio()!) 12-04-17 pax.c,copy.c: fix multiple prompt for --write --yes 12-04-17 misc.c: --yes accepts { 'y' 'Y' '1' }, { 'q' 'Q' '-' } => remaining no 11-06-21 pax.c,copy.c,file.c: add --filter option mtime= 11-03-17 copy.c: fix bug that didn't list special files for --verbose 11-02-11 pax-tnef.c: handle "" member names -- really? 11-02-02 pax-pds.c: ident now requires at least one dir entry 10-10-10 file.c: don't prune state.update dirs based on time -- doh 10-10-04 pax.c,misc.c: fix --meter off-by-one bugs for long paths 10-10-04 pax.c: add #updated files to --update --verbose summary 10-10-04 pax.c: --meter implies --verbose summary 10-09-01 pax.c: RE errors => exit(2) 10-08-27 add -U, --different to update files with different 10-08-22 format.c: archive update requires (ap->io->mode & O_RDWR) 10-08-11 use conformance("standard",0) test 10-08-09 fix extended header size key precedence/performance 10-08-09 use { SEEK_DATA SEEK_HOLE } for -rw if available 10-08-08 disable SOKTYPE 10-06-21 align { --append --update } with posix 10-06-14 ug+s only for -p [eo] 10-06-14 atime in archive by default for formats that support it 10-06-14 add state.resetacctime to separate -t from state.acctime 10-06-12 fix --exact to list matched directory hierarchies 10-06-01 sync with ast api 20100601 10-01-22 pax.c: fix -rw to 1 char dir name that dropped '/' separator 09-09-09 ax-tar.c: handle gnu tar octal overflow extensions for all octal fields 08-12-31 pax.c,pax-vczip.c: add vczip compression format 08-05-08 pax.tst: handle systems with privileged chmod +t / mkfifo 08-05-01 pax-tar.c: handle sfsprintf() '\0' 07-12-11 delta2patch.sh: drop pax -v, add pax --nosummary 07-12-06 delta2patch.sh: add 07-09-21 format.c: add sumprint() default scale arg 07-05-01 pax-tar.c,options.c: fix pax extended header for >=2**32 size 07-03-14 pax-tnef.c: swap op == 3 for all arch! 06-10-31 delta.c,format.c: fix ar=>ar delta bug that skipped data twice 06-10-11 add sfstropen()/sfstruse() error checks 06-09-27 pax.tst: fix uid etc. tests to use --listformat -- duh 06-09-12 delta.c: delta for any X_IPERM st_mode changes 06-06-07 pax: add -U --delta.update to update only delta members 05-12-14 pax: fix --filter to work for --read and expand command %(...) 05-06-07 format.c: fix inter volume fill logic 05-05-28 pax: improve "junk data after volume" checks 05-05-22 pax: fix --append for the formats that can handle it 05-05-18 pax-flash.c: add solaris flash embedded archive format read 05-03-19 options.c: -l == --link (not --local) per posix 05-02-08 misc.c: fix interaction between delta and --meter 05-02-07 delta.c,pax.h: don't output delta when src==tar -- duh 04-12-25 bio.c: fix (*putheader)() return value logic, especially for ENOSPACE 04-12-08 listformat now handles high resolution time 04-12-01 tv.h,tv.c,features/tv move to libast 04-09-25 bio.c: fix ap->io->count for skipped data -- wow pax-rpm.c: fix header padding logic 04-09-01 bio.c: fix bread() seek logic 04-08-11 pax.c,options.h,options.c: add -C,--chmod=mode to control header modes 04-08-05 bio.c: fix bread() pointer arith 64 bit assumption (pax#15) 04-08-01 delta.c: fix checksum 32-bit logic (pax#11) (testpax#01) 04-07-19 delta.c,format.c,pax-tar.c: { O_RDONLY O_WRONLY O_RDWR } are values 04-03-17 pax-tar.c: add tar_putepilogue to *all* tar variants format.h: let pax-tar.c determine tar variant order bio.c: fix a few printf format long long mismatches: %ld => %I*d format.c: map ident buffer CC_ASCII => CC_NATIVE 04-02-29 format.c: drop ap->format=0 for possible deltaverify() format.c: handle CC_ASCII=>CC_NATIVE getprologue() header translation options.h,options.c: add --forceconvert to force --from 04-02-25 pax.c: regcomp REG_SHELL => REG_LEFT|REG_RIGHT 04-02-24 pax.c: add --action copy.c: fix file list peek premature '\n' => '\0' bug pax.tst: add --action,--checksum,--filter,--install tests 04-02-21 file.c: fix VPATH state.pwd corruption 04-02-14 add -F --fsync to call fsync(2) for each copied file 04-01-27 bio.c: fix bget() buffer size alignment/mismatch overflow 04-01-24 pax-*.c: use paxlib.h interfaces 04-01-03 pax-cab.c: move to paxlib/cab as standalone plugin pax-calib.c: move to paxlib/calib as standalone plugin 04-01-01 add --passphrase=passphrase, -E 03-12-24 pax-zip.c: move to paxlib/zip as standalone plugin 03-12-18 paxlib.h: add paxpart(), link with -lcodex for paxlib plugins 03-12-05 pax-zip.c: fix EXT header logic 03-12-01 rename OPT_delta_size to OPT_uncompressed: !=0 => compressed list compression % in delta op field 03-11-25 paxlib.h: add external format dll interface 03-11-20 pax-calib.c: add file suffix heuristics 03-11-19 pax-calib.c: convert ibm -INC [edit comment] to COPY [REPLACING] pax-calib.c: handle line size > 80 03-11-11 pax-pds.c: add mvs pds listing 03-11-06 regression tests finally pass after Format_t method switch 03-10-31 Format_t converted to true method 03-10-20 initial readonly ca-librarian support 03-10-01 add pax delta format -- groundwork for vcdiff deltas 03-09-23 pax.tst: change test file names for same ascii/ebcdic sort pax.c: extended header values with length need no quoting 03-09-11 default output format now ustar -- should eventually be pax format rename: tar=>oldtar, ustar=>ustar|tar add --testdate=date regression test hook add --uid=id --gid=id ascii vs. ebcdic cleanup 03-09-10 private static cleanup 03-09-09 xopen sync and { pax ustar } format fixes, interface 03-06-21 format.c: add ccode conversion check to putheader() 03-05-28 file.c: fix -vrw directory double list update to new interface 03-03-05 pax.c: tgz => ustar:gzip, tbz => ustar:bzip 03-02-28 pax.c: handle a few common -x aliases 03-01-14 misc.c: fix meter sign overflow for sizeof(off_t)==sizeof(int) 02-12-13 format.c: fix TNEF bug that did bget(n) for n>buffersize 02-10-23 misc.c: fix meter buffer overflow 02-10-20 pax: drop experimental OMF; use ardirlist() to list ar types pax: add -t for x/open 02-10-18 pax: add tar/ustar swap and inter-volume junk block checks 02-09-09 format.c: handle all 11 octal digits in cpio format size 02-09-05 file.c: fix chmod() loop at exists=0011 on case ignorant filesystems 02-08-19 pax: cmd line patterns applied before -i or -s path edits pax: add posix -c for --invert 02-08-06 pax: change --meter to use * instead of non-portable inverse video 02-07-17 pax: handle gnu tar largefile size extension 02-06-26 pax: fix regsubexec() edited symlink text buffer clobber 02-05-24 pax: update to use regsubcomp(),regsubexec() 02-05-07 pax: use ,-lardir for library archives 02-04-23 pax: add dos omf library read 01-12-07 pax: fix --meter to retain paths containing " -- " 01-12-06 pax: fix --meter to stop at 100% (don't tell coach) 01-10-20 pax: describe the 4 operation modes in separate paragraphs 01-10-18 pax: fix --meter for paths containing \f\n\r\v 01-09-06 pax: add ms tnef (transport neutral encapsulation format) archive read 01-08-11 pax: fix tar_checksum() w.r.t. CC_NATIVE!=CC_ASCII 01-06-28 pax: fix --from --to bio logic that sometimes double converted 01-04-24 pax: --from & --to now associated with archive instead of global state 01-04-17 pax: --from conversion only done if no control chars in first 256 01-04-01 pax: fix --intermediate to create missing dirs first 01-02-27 pax: add lchmod() and lchown() for symlink() restoration 01-02-08 pax.tst: add -L and -P to symlink edit test 01-02-07 format.c: fix malloc off-by-one for vdb format read 01-02-02 file.c: fix duplicate -s map in addlink() 00-12-20 bio.c: include for systems that miss _IOW() etc. 00-10-31 format.c: handle rpm 4.0 and newer 00-09-20 copy.c: always allocate state.tmp.lst! 00-08-31 change paths in delta archive: -rf i -z - -s e -wf o -z - [almost] 00-08-11 copy.c: drop memalign() call for _std_malloc==1 in libast copy.c: save filter path from sfgetr() reset 00-06-01 pax: fix mime format size by dropping last \r\n 00-05-26 pax: astconf("CONFORMANCE",0,0)=="standard" inhibits some extensions pax: check USTAR file and link name lengths 00-04-01 pax.tst: export TZ=EST5EDT; new tests should be UCT 00-03-11 pax: add encapsulated mime format read pax: fix vdb block count 00-02-14 pax: fix hard link read that didn't apply -s edit pax: logical|physical filter options 00-01-04 pax: fix rpm embedded archive hard seek pax: --filter implies --nodescend pax: add --meter pax: handle ms PORTAR '\' => '/' path separator 99-11-19 pax: try `ratz -c' if `gunzip' not found 99-11-11 add --checksum, --install, --local, --preserve=s 99-11-04 fix zip for archives with EXTLOC headers don't generate //* file names 99-10-31 pax: add tgz == tar:gzip, --filter=- 99-08-11 bio: fix end of medium handling 99-06-01 restore -T == --test 99-05-28 pax: add rpm read 99-05-21 pax: fix -rw umask(0) bug 99-05-17 pax: fix chmod() delay for ug+s,+t 99-05-11 nocom: long options 99-05-09 pax: sfopen(sfstdin,0,"rt") for input file list 99-05-01 pax: state.xdev => FTW_MOUNT!! 99-04-01 pax: fix Integral_t for sizeof(long)==8 pax: fix ]] in optget usage 99-03-17 pax: better st_mode preservation 99-03-01 pax: fix dirprefix() prune to work in all cases pax: add savepath() to handle >PATH_MAX paths 99-02-06 pax: update to new optget() 99-01-11 pax: add bzip2 compression support 98-10-01 pax: fix -rw hard link bug pax: fix -o preserve=* option.level inconsistencies 98-08-11 cpio.sh: fix with getopts pax: increase -rw default buffer size pax: use REG_DELIMITED to parse -s 98-04-01 fix tar delta bug that set st_size=0 before consuming delta head/tail pax - '?' lists help info for flag fix -rw bugs introduced by recent delta fixes testpax: add regression tests fileout: add EIO memalign fallback to track sgi bug 98-03-19 fix tar delta epilogue check fix delta pass checks fix off_t vs. file size mismatches 98-03-17 umask(0) only if -o preserve=* in effect add File_t.ro to mark readonly files/paths 98-02-14 add -o intermediate to copy output to intermediate before commit 98-01-23 use %I#d scanf format to get off_t right 98-01-11 -K == -o keepgoing -x format on read accepts that format only (useful with -o keepgoing) 97-12-07 add 4 NULs to work around gunzip bug that peeks beyond EOF 97-11-11 use PROC_FD_PARENT to let procopen() close parent fd 97-10-31 cab list works; anyone have LZX or QUANTUM decompress code? 97-09-22 fix vdb format write 97-08-11 fix omitted missdir() call 97-07-17 -r attempts chmod u+w along with missdir and remove -rl preserves existing links if possible beginnings of cab file read 97-05-09 fix putepilogue() with off_t boundary 96-12-25 zip archive header magic fix use MTIOCGETBLKINFO to determine default tape blocksize -o eom=!command uses $(command read|write part [file]) for next file -s ',.*,-,' cats to stdout -x pax support for >2GB file size 96-11-28 off64_t tweaks drop -r -w -x order dependency undo ccmaps() in bunread() add explicit O_RDONLY checks (!= 0 on some systems) 96-10-11 change to from mem[ae]to[ae]() 96-08-11 add -o to={ascii|ebcdic} -o from={ascii|ebcdic} from mvs 96-02-29 enable -rw setfile() -- why was it disabled in the first place? fix stdin file list peek bug that dropped leading files 96-02-09 handle zip archives on input 96-01-18 AT&T Research now switch to 95-11-24 don't check for compressed format if already uncompressing 95-11-18 ignore empty file list lines 95-10-31 fix and compensate for cpio header hard link size bug 95-10-11 drop "blocking ignored in pass mode" message aschk symlink data need not have trailing '\0' 95-09-01 fix nocom \ handling 95-08-11 builtin nocom for -o filter=nocomment more delta tracing vd02 delta algorithm 95-07-17 fix -w output to stdout initialization bug fix stdin file list peek bug that dropped trailing files 95-05-09 don't check member count unless its really a trailer sfkeyprintf lookup string arg is now the format conversion character initialize output archive for -rw to stdout archive misc.c had putc() and fgets()! unused var cleanup add return to listprintf() fix delta pass missing dir fd bug fix dirprefix for / add bax.sh as an *example* 95-04-01 with proto va_start() must come before any arg references fix delta bug that failed to mark emitted or skipped members allow -z for patch deltas be sure to set ap->format before binit() fix ordering bug that botched most deltas! use file.name (after -s maps) rather than file.path in delta hash fix bget() bug that skipped checksum 95-03-19 first round with POSIX 1003.2 1995 handle file holes on input delta header contains member index and trailer size delta trailer contains member checksum delta epilogue contains member count 95-03-01 internal redesign using Archive_t handles instead of global state -o ordered (-O) allows single pass through base 95-02-14 make -u work with VPATH -x composes gzip,compress,delta,delta88,ignore,patch with real formats -x gzip:tar, -x gzip,tar, -x 'gzip tar' accepted -x delta is equivalent to -z - -o delta deleted fix OPT_owner null dereference fix archive pass bug that didn't update DELTA_create members 95-01-19 detect compress and gzip on input add -f -z grouping with -r -w to support -r -f -z -w -f -z fix a few compress/delta ineraction bugs add -t s[#]k[#] to skip all [#] and/or keep all [#] tape volumes use new ALIGN_ identifiers 95-01-11 add s option to -s to stop on success add delta 94 (vdelta) add long option names deprecate most flag options DELTA_TEMP <64K avoids temp file add -o delta=patch for patch archives 94-12-25 add lib/pax/*.fmt args files for unknown formats fix mknod() calls to use the right file type! 94-11-11 fix ar out of phase warning 94-08-11 add -Rh'header' and -Rt'trailer' for vdb write -e now works for -rw 93-08-11 add vdb `virtual database' r/w format 93-06-11 fix bug that didn't output non-regular files -w now uses FTW_POST to preserve dir modes 93-04-01 handle PORTAR long member name table 92-04-01 copy all 0 length files out regardless of read permission 91-08-11 add check for garbage after end tar implementation bug 90-10-01 add mips ar format out of date check 90-08-11 header/trailer alignment now table driven 90-07-20 fix binary output bug that set header size and time to 1 90-06-01 fix misc delta compression bugs 90-05-01 fix DELTA_create bug that did not check COMPRESS 90-03-28 bump regular output block size to 8k 90-02-11 delta changes held off by #if new_delta_format until new libdelta base archive checksums incompatible with previous versions 90-02-06 fix newio() bug that looped when write() returned 0 90-01-25 add proposed posix 1003.1b archive/interchange format tune buffering change -R option for general record support generalize delta id file name -- incompatible with old format prepare for new libdelta and subsequent incompatibilities 89-12-01 add self-delta support, delete -A option (one algorithm with versions) 89-11-18 fix dir mode restoration bug 89-11-11 fix delta update with older file 89-10-31 add portarch and randarch readonly object formats 89-10-11 allow -f with -rwz 89-10-01 add -Bmaxblocks and -C to match latest tar/cpio extensions 89-08-22 align read() buffers to IOALIGN 89-07-27 add EFBIG & EDQUOT checks to newio() 89-07-04 fix cpio binary header mtime and size swab bug fix -rw bug that makes it work now! redo file post processing restoration 89-05-11 handle GNU-tar USTAR format botch missing intermediate directories inherit mode of nearest ancestor fix names on stdin bug that only did -P incorporate lar changes from David Muir expand -R arg syntax handle ansi/ibm D,F,S,U,V formats on output 89-03-28 fix bget() buffer boundary error for reads < buffersize 89-03-01 ignore DELTA_PASS file set*() calls 89-02-22 fix bread bug for 0 count and bget memcpy overlap 89-01-18 fix copyout() rfd<0 delta bug that generated multiple entries 89-01-11 fix dirsize!=0 bug; change ftwalk XDEV implementation 88-12-11 fix symlink->nowhere bug 88-11-22 add vmsbackup readonly format; fix lseek validity checks 88-11-17 add -T040 to simulate tape device blocking on input 88-11-11 add s5r4 asc and aschk formats 88-11-07 hard links and deltas don't cross volumes 88-11-01 add -n to read exact file list 88-10-20 add bread(0,...) to skip, bget() and bput() io optimizations 88-10-11 fix delta ops to use pattern args 88-10-04 fix argc bug that botched -rw with file args 88-10-01 for delta update, verify that untouched files match base archive 88-09-30 fix allocate() bug: malloc() -> calloc() 88-08-23 use libx/memsum() for checksum calculations 88-08-20 add `![command]' to end of medium replies 88-08-18 table of contents output to stdout 88-08-08 update for libx/ftwalk() and libx/strls() 88-07-28 streamline ftwalk() interface 88-07-21 finish up -a and -u tar compatibility 88-07-17 add cpio.sh and tar.sh interface scripts 88-07-15 convert to pax :::::::: html :::::::: 12-08-15 mm2foswiki: add 12-08-15 mm2bb,mm2twiki: add (but ignore some) mm2html options for compatibility 12-08-15 mm2bb,mm2html,mm2twiki: eliminate ksh -n warnings 12-02-29 mm2html: fix so stack bug that popped one too many 12-01-11 mm2html: fix \*(Rf to use ... 12-01-01 htmlrefs: add