The NetBSD Project

CVS log for src/bin/sh/expand.c

[BACK] Up to [cvs.NetBSD.org] / src / bin / sh

Request diff between arbitrary revisions


Keyword substitution: kv
Default branch: MAIN


Revision 1.146: download - view: text, markup, annotated - select for diffs
Mon Oct 21 15:57:45 2024 UTC (6 weeks, 3 days ago) by kre
Branches: MAIN
CVS tags: HEAD
Diff to: previous 1.145: preferred, colored
Changes since revision 1.145: +24 -4 lines
Fix processing of unknown variable expansion types.

Our shell is (was) one of the last not to do this correctly.

Expansions are supposed to happen only when the command in which
they occur is being executed, not while it is being parsed.
If the expansion only happens them, errors should only be
detected then.

Make it work like that (I saw after I fixed this that FreeBSD
had done it, long ago, almost the same way - it is kind of an
obvious thing to do).

This will allow code like

	if test it is shell X
	then
		commands using shell X specific expansion ops
	else if it is shell Y
	then
		commands using shell Y specific expansion ops
	else ...
	fi

Previously expansion errors were detected while parsing, so
if we're not shell X, and don't implement something that it
does (some extension to the standard) that would have generated
a parser syntax error, and the script could not be executed
(despite the line with the error never being executed).

Note that this change does not handle all such possible
extensions, just this one.   Others are much harder.

One side effect of this change is that sh will now continue
reading a variable expansion until it locates the terminating
'}' (in ${var} forms) regardless of how broken it obviously
is (to our shell) whereas previously it would have bailed out
as soon as an oddity was spotted.

Revision 1.145: download - view: text, markup, annotated - select for diffs
Thu Oct 3 20:14:01 2024 UTC (2 months ago) by rillig
Branches: MAIN
Diff to: previous 1.144: preferred, colored
Changes since revision 1.144: +3 -3 lines
bin: fix lint warning "effectively discards 'const'"

For example: src/bin/ed/io.c(339): warning: call to 'strchr' effectively
discards 'const' from argument [346]

No binary change.

Revision 1.132.2.3: download - view: text, markup, annotated - select for diffs
Sun Jan 14 13:16:51 2024 UTC (10 months, 3 weeks ago) by martin
Branches: netbsd-9
CVS tags: netbsd-9-4-RELEASE
Diff to: previous 1.132.2.2: preferred, colored; branchpoint 1.132: preferred, colored; next MAIN 1.133: preferred, colored
Changes since revision 1.132.2.2: +4 -4 lines
Pull up following revision(s) (requested by kre in ticket #1787):

	bin/sh/eval.c: revision 1.191
	bin/sh/expand.c: revision 1.144

PR bin/57773

Fix a bug reported by Jarle Fredrik Greipsland in PR bin/57773,
where a substring expansion where the substring to be removed from
a variable expansion is itself a var expansion where the value
contains one (or more) of sh's CTLxxx chars - the pattern had
CTLESC inserted, the string to be matched against did not.  Fail.

We fix that by always inserting CTLESC in var assign expansions.
See the PR for all the gory details.

Thanks for the PR.

PR bin/57773

Fix another bug reported by Jarle Fredrik Greipsland and added
to PR bin/57773, which relates to calculating the length of a
positional parameter which contains CTL chars -- yes, this one
really is that specific, though it would also affect the special
param $0 if it were to contain CTL chars, and its length was
requested - that is fixed with the same change.  And note: $0
is not affected because it looks like a positional param (it
isn't, ${00} would be, but is always unset, ${0} isn't) all
special parame would be affected the same way, but the only one
that can ever contain a CTL char is $0 I believe.  ($@ and $*
were affected, but just because they're expanding the positional
params ... ${#@} and ${#*} are both technically unspecified
expansions - and different shells produce different results.

See the PR for the details of this one (and the previous).

Thanks for the PR.

Revision 1.141.2.1: download - view: text, markup, annotated - select for diffs
Sun Jan 14 13:15:05 2024 UTC (10 months, 3 weeks ago) by martin
Branches: netbsd-10
CVS tags: netbsd-10-0-RELEASE, netbsd-10-0-RC6, netbsd-10-0-RC5, netbsd-10-0-RC4, netbsd-10-0-RC3
Diff to: previous 1.141: preferred, colored; next MAIN 1.142: preferred, colored
Changes since revision 1.141: +4 -4 lines
Pull up following revision(s) (requested by kre in ticket #535):

	bin/sh/eval.c: revision 1.191
	bin/sh/expand.c: revision 1.144

PR bin/57773

Fix a bug reported by Jarle Fredrik Greipsland in PR bin/57773,
where a substring expansion where the substring to be removed from
a variable expansion is itself a var expansion where the value
contains one (or more) of sh's CTLxxx chars - the pattern had
CTLESC inserted, the string to be matched against did not.  Fail.

We fix that by always inserting CTLESC in var assign expansions.
See the PR for all the gory details.

Thanks for the PR.

PR bin/57773

Fix another bug reported by Jarle Fredrik Greipsland and added
to PR bin/57773, which relates to calculating the length of a
positional parameter which contains CTL chars -- yes, this one
really is that specific, though it would also affect the special
param $0 if it were to contain CTL chars, and its length was
requested - that is fixed with the same change.  And note: $0
is not affected because it looks like a positional param (it
isn't, ${00} would be, but is always unset, ${0} isn't) all
special parame would be affected the same way, but the only one
that can ever contain a CTL char is $0 I believe.  ($@ and $*
were affected, but just because they're expanding the positional
params ... ${#@} and ${#*} are both technically unspecified
expansions - and different shells produce different results.

See the PR for the details of this one (and the previous).

Thanks for the PR.

Revision 1.144: download - view: text, markup, annotated - select for diffs
Fri Dec 29 15:49:23 2023 UTC (11 months, 1 week ago) by kre
Branches: MAIN
CVS tags: perseant-exfatfs-base-20240630, perseant-exfatfs-base, perseant-exfatfs
Diff to: previous 1.143: preferred, colored
Changes since revision 1.143: +4 -4 lines
PR bin/57773

Fix another bug reported by Jarle Fredrik Greipsland and added
to PR bin/57773, which relates to calculating the length of a
positional parameter which contains CTL chars -- yes, this one
really is that specific, though it would also affect the special
param $0 if it were to contain CTL chars, and its length was
requested - that is fixed with the same change.  And note: $0
is not affected because it looks like a positional param (it
isn't, ${00} would be, but is always unset, ${0} isn't) all
special parame would be affected the same way, but the only one
that can ever contain a CTL char is $0 I believe.  ($@ and $*
were affected, but just because they're expanding the positional
params ... ${#@} and ${#*} are both technically unspecified
expansions - and different shells produce different results.

See the PR for the details of this one (and the previous).

Thanks for the PR.

XXX pullup to everything.

Revision 1.143: download - view: text, markup, annotated - select for diffs
Mon Dec 25 02:28:47 2023 UTC (11 months, 1 week ago) by kre
Branches: MAIN
Diff to: previous 1.142: preferred, colored
Changes since revision 1.142: +4 -3 lines

Correct a bizarre piece of source formatting that crept in by
accident several years ago (change a space into newline tab).

NFC

Revision 1.142: download - view: text, markup, annotated - select for diffs
Mon Mar 6 05:54:34 2023 UTC (21 months ago) by kre
Branches: MAIN
Diff to: previous 1.141: preferred, colored
Changes since revision 1.141: +24 -4 lines
Adjust tilde expansion as will be documented in the forthcoming
version of the POSIX standard (Issue 8).   I believe we were already
compliant with what is to be required, but POSIX is now encouraging
(and will likely require in a later version) that if a tilde expansion
produces a string which ends in a '/' and the '~' that was expanded
is immediately followed by a '/' in the input word, that one of those
two slashes be omitted.   The worst (current) example of this is
when HOME=/ and we expand ~/foo - previously producing //foo which is
(in POSIX) a path with implementation defined semantics, and so not
what we should be generating by accident.   Change that, so now if
the ~ prefix expansion ends in a '/' and there is a '/' following
immediately after, the resulting word contains only one of those
chars (in the example just given, we will now produce /foo instead).

POSIX is also making it clear that the expansion that results from
the tilde expansion is treated as quoted (not subject to pathname
expansion, or field splitting, or any var/arith/command substitutions)
and that if HOME="" the expansion of ~ must generate "" (not nothing).
Our implementation did all of that already (though older versions
used to treat an empty expansion of HOME the same as if HOME was
unset - that was fixed some time ago).

The actual modification made here is probably smaller than this log entry,
and without added comments, certainly is!

Revision 1.141: download - view: text, markup, annotated - select for diffs
Mon Nov 22 05:17:43 2021 UTC (3 years ago) by kre
Branches: MAIN
CVS tags: netbsd-10-base, netbsd-10-0-RC2, netbsd-10-0-RC1
Branch point for: netbsd-10
Diff to: previous 1.140: preferred, colored
Changes since revision 1.140: +7 -7 lines

PR bin/53550

Here we go again...   One more time to redo how here docs are
processed (it has been a few years since the last time!)

This is actually a relatively minor change, mostly to timimg
(to just when things happen).   Now here docs are expanded at the
same time the "filename" word in a redirect is expanded, rather than
later when the heredoc was being sent to its process.  This actually
makes things more consistent - but does break one of the ATF tests
which was testing that we were (effectively) internally inconsistent
in this area.

Not all shells agree on the context in which redirection expansions
should happen, some make any side effects visible to the parent shell
(the majority do) others do the redirection expansions in a subshell
so any side effcts are lost.   We used to have a foot in each camp,
with the majority for everything but here docs, and the minority for
here docs.   Now we're all the way with LBJ ... (or something like that).

Revision 1.140: download - view: text, markup, annotated - select for diffs
Wed Nov 10 15:26:34 2021 UTC (3 years ago) by kre
Branches: MAIN
Diff to: previous 1.139: preferred, colored
Changes since revision 1.139: +8 -5 lines

DEBUG mode changes only.   NFC (NC) for any normally compiled shell.

Mostly adding DEBUG mode tracing (when appropriate verbose tracing
is enabled generally) whenever a shell (including sushell) process
exits, so shells that the tracing should indicate why ehslls that
vanish did that.

Note for future investigators: if the relevant tracing is enabled,
and a (sub-)shell still simply seems to have vanished without trace,
the likely cause is that it was killed by a signal - and of those,
the most common that occurs is SIGPIPE.

Revision 1.139: download - view: text, markup, annotated - select for diffs
Fri Sep 10 22:11:03 2021 UTC (3 years, 2 months ago) by rillig
Branches: MAIN
Diff to: previous 1.138: preferred, colored
Changes since revision 1.138: +3 -3 lines
bin: remove unnecessary lint comment CONSTCOND

Since 2021-01-31, lint no longer warns about 'do ... while (0)'.

No functional change.

Revision 1.138: download - view: text, markup, annotated - select for diffs
Sat Aug 1 17:56:56 2020 UTC (4 years, 4 months ago) by kre
Branches: MAIN
CVS tags: cjep_sun2x-base1, cjep_sun2x-base, cjep_sun2x, cjep_staticlib_x-base1, cjep_staticlib_x-base, cjep_staticlib_x
Diff to: previous 1.137: preferred, colored
Changes since revision 1.137: +3 -3 lines

Remove a redundant set of parentheses that were added (along with a
extra && or || or something ... forgotten now) as part a failed attempt
to fix an earlier bug (later fixed a better way) - when the extra
test (never committed) was removed, the now-redundant parentheses got
forgotten...

NFC.

Revision 1.132.2.2: download - view: text, markup, annotated - select for diffs
Sun Jun 7 12:50:17 2020 UTC (4 years, 6 months ago) by martin
Branches: netbsd-9
CVS tags: netbsd-9-3-RELEASE, netbsd-9-2-RELEASE, netbsd-9-1-RELEASE
Diff to: previous 1.132.2.1: preferred, colored; branchpoint 1.132: preferred, colored
Changes since revision 1.132.2.1: +14 -9 lines
Pull up following revision(s) (requested by kre in ticket #940):

	bin/sh/expand.h: revision 1.25
	bin/sh/expand.c: revision 1.134
	bin/sh/expand.c: revision 1.135
	bin/sh/expand.c: revision 1.136
	bin/sh/expand.c: revision 1.137

Remove a (completely harmless) duplicate assignment introduced in a
code merge from FreeBSD in 2017.   NFC.

Pointed out by Roland Illig.

prevent sign extension from making expression always false.
remove masking and cast (requested by kre@)

When expanding a here-doc (NXHERE - the type with an unquoted end delim)
the output will not be further processed (at all) so there is no need
to escape magic chars in the output, and doing so leaves stray CTLESC
chars in the here doc text.  Not good.   So don't do that...

To save a strlen() of the result, to determine the size of the here doc,
make rmescapes() return the length of the resulting string (this isn't
needed for other uses, so didn't happen previously).

Reported on current-users@ (2020-02-06) by Jun Ebihara

XXX pullup -9

Revision 1.123.2.5: download - view: text, markup, annotated - select for diffs
Tue Apr 21 19:37:34 2020 UTC (4 years, 7 months ago) by martin
Branches: phil-wifi
Diff to: previous 1.123.2.4: preferred, colored; branchpoint 1.123: preferred, colored; next MAIN 1.124: preferred, colored
Changes since revision 1.123.2.4: +2 -2 lines
Ooops, restore accidently removed files from merge mishap

Revision 1.123.2.4
Tue Apr 21 18:41:06 2020 UTC (4 years, 7 months ago) by martin
Branches: phil-wifi
FILE REMOVED
Changes since revision 1.123.2.3: +2 -2 lines
Sync with HEAD

Revision 1.123.2.3: download - view: text, markup, annotated - select for diffs
Mon Apr 13 07:45:06 2020 UTC (4 years, 7 months ago) by martin
Branches: phil-wifi
Diff to: previous 1.123.2.2: preferred, colored; branchpoint 1.123: preferred, colored
Changes since revision 1.123.2.2: +30 -11 lines
Mostly merge changes from HEAD upto 20200411

Revision 1.123.2.2: download - view: text, markup, annotated - select for diffs
Wed Apr 8 14:03:04 2020 UTC (4 years, 7 months ago) by martin
Branches: phil-wifi
Diff to: previous 1.123.2.1: preferred, colored; branchpoint 1.123: preferred, colored
Changes since revision 1.123.2.1: +12 -6 lines
Merge changes from current as of 20200406

Revision 1.137: download - view: text, markup, annotated - select for diffs
Thu Feb 13 05:19:05 2020 UTC (4 years, 9 months ago) by kre
Branches: MAIN
CVS tags: phil-wifi-20200421, phil-wifi-20200411, phil-wifi-20200406, is-mlppp-base, is-mlppp
Diff to: previous 1.136: preferred, colored
Changes since revision 1.136: +12 -6 lines
When expanding a here-doc (NXHERE - the type with an unquoted end delim)
the output will not be further processed (at all) so there is no need
to escape magic chars in the output, and doing so leaves stray CTLESC
chars in the here doc text.  Not good.   So don't do that...

To save a strlen() of the result, to determine the size of the here doc,
make rmescapes() return the length of the resulting string (this isn't
needed for other uses, so didn't happen previously).

Reported on current-users@ (2020-02-06) by Jun Ebihara

XXX pullup -9

Revision 1.132.2.1: download - view: text, markup, annotated - select for diffs
Sun Nov 24 08:24:06 2019 UTC (5 years ago) by martin
Branches: netbsd-9
CVS tags: netbsd-9-0-RELEASE, netbsd-9-0-RC2, netbsd-9-0-RC1
Diff to: previous 1.132: preferred, colored
Changes since revision 1.132: +30 -10 lines
Pull up following revision(s) (requested by kre in ticket #467):

	bin/sh/expand.c: revision 1.133

Open code the validity test & copy of the character class name in
a bracket expression in a pattern (ie: [[:THISNAME:]]).   Previously
the code used strspn() to look for invalid chars in the name, and
then memcpy(), now we do the test and copy a character at a time.

This might, or might not, be faster, but it now correctly handles
\ quoted characters in the name (' and " quoting were already
dealt with, \ was too in an earlier version, but when the \ handling
changes were made, this piece of code broke).

Not exactly a vital bug fix (who writes [[:\alpha:]] or similar?)
but it should work correctly regardless of how obscure the usage is.

Problem noted by Harald van Dijk

XXX pullup -9

Revision 1.136: download - view: text, markup, annotated - select for diffs
Mon Oct 14 13:34:14 2019 UTC (5 years, 1 month ago) by christos
Branches: MAIN
CVS tags: phil-wifi-20191119
Diff to: previous 1.135: preferred, colored
Changes since revision 1.135: +3 -4 lines
remove masking and cast (requested by kre@)

Revision 1.135: download - view: text, markup, annotated - select for diffs
Sun Oct 13 20:55:04 2019 UTC (5 years, 1 month ago) by christos
Branches: MAIN
Diff to: previous 1.134: preferred, colored
Changes since revision 1.134: +5 -4 lines
prevent sign extension from making expression always false.

Revision 1.134: download - view: text, markup, annotated - select for diffs
Tue Oct 8 03:53:57 2019 UTC (5 years, 2 months ago) by kre
Branches: MAIN
Diff to: previous 1.133: preferred, colored
Changes since revision 1.133: +2 -3 lines
Remove a (completely harmless) duplicate assignment introduced in a
code merge from FreeBSD in 2017.   NFC.

Pointed out by Roland Illig.

Revision 1.133: download - view: text, markup, annotated - select for diffs
Tue Oct 8 03:52:44 2019 UTC (5 years, 2 months ago) by kre
Branches: MAIN
Diff to: previous 1.132: preferred, colored
Changes since revision 1.132: +30 -10 lines
Open code the validity test & copy of the character class name in
a bracket expression in a pattern (ie: [[:THISNAME:]]).   Previously
the code used strspn() to look for invalid chars in the name, and
then memcpy(), now we do the test and copy a character at a time.
This might, or might not, be faster, but it now correctly handles
\ quoted characters in the name (' and " quoting were already
dealt with, \ was too in an earlier version, but when the \ handling
changes were made, this piece of code broke).

Not exactly a vital bug fix (who writes [[:\alpha:]] or similar?)
but it should work correctly regardless of how obscure the usage is.

Problem noted by Harald van Dijk

XXX pullup -9

Revision 1.123.2.1: download - view: text, markup, annotated - select for diffs
Mon Jun 10 21:41:03 2019 UTC (5 years, 5 months ago) by christos
Branches: phil-wifi
Diff to: previous 1.123: preferred, colored
Changes since revision 1.123: +272 -81 lines
Sync with HEAD

Revision 1.132: download - view: text, markup, annotated - select for diffs
Wed Apr 10 08:13:11 2019 UTC (5 years, 7 months ago) by kre
Branches: MAIN
CVS tags: phil-wifi-20190609, netbsd-9-base
Branch point for: netbsd-9
Diff to: previous 1.131: preferred, colored
Changes since revision 1.131: +38 -5 lines
PR bin/54112

Fix handling of "$@" (that is, double quoted dollar at), when it
appears in a string which will be subject to field splitting.

Eg:
	${0+"$@" }

More common usages, like the simple "$@" or ${0+"$@"} end up
being entirely quoted, so no field splitting happens, and the
problem was avoided.

See the PR for more details.

This ends up making a bunch of old hack code (and some that was
relatively new) vanish - for now it is just #if 0'd or commented out.
Cleanups of that stuff will happen later.

That some of the worst $@ hacks are now gone does not mean that processing
of "$@" does not retain a very special place in every hackers heart.
RIP extreme ugliness - long live the merely ordinary ugly.

Added a new bin/sh ATF test case to verify that all this remains fixed.

Revision 1.131: download - view: text, markup, annotated - select for diffs
Wed Feb 27 04:10:56 2019 UTC (5 years, 9 months ago) by kre
Branches: MAIN
Diff to: previous 1.130: preferred, colored
Changes since revision 1.130: +21 -18 lines
Finish the fixes from Feb 4 for handling of random data that
matches the internal CTL* chars.

The earlier fixes handled CTL* char values in var expansions,
but not in various other places they can occur (positional
parameters, $@ $* -- even potentially $0 and ~ expansions,
as well as byte strings generated from a \u in a $'' string).

These should all be correctly handled now.   There is a new
ISCTL() macro to make the test, rather than using the old
BASESYNTAX[c]==CCTL form (which us still a viable alternative)
as the new way allows compiler optimisations, and less mem
references, so it should be smaller and faster.

Also, be sure in all cases to remove any CTLESC (or other)
CTL* chars from all strings before they are made available
for any external use (there was one case missed - which didn't
matter when we weren't bothering to escape the CTL* chars at
all.)

XXX pullup-8 (will need to be via a patch) along with the Feb 4 fixes.

Revision 1.130: download - view: text, markup, annotated - select for diffs
Mon Feb 4 09:56:26 2019 UTC (5 years, 10 months ago) by kre
Branches: MAIN
Diff to: previous 1.129: preferred, colored
Changes since revision 1.129: +37 -7 lines
Fix an old bug (very old) that was made worse in 1.128 (the "${1+$@}"
fixes) where a variable containing a CTL char (the only possibility used
to be CTLESC (0x81)) would lose that character if the variable was expanded
when "set -f" (noglob) was in effect.

1.128 made this worse by adding more 0x8z values (a couple more) which would
see the same behaviour, and one of those was noticed by Martijn Dekker.

The reasoning was that when noglob is on, when a var is expanded, there are
no magic chars, so (apparently) no need to escape anything.  Hence nothing
was escaped .. including any CTL chars that happened to be present.  When
we later rmescapes() the CTL chars that we expect might occur are summarily
removed - even if they weren't really CTL chars, but just data masquerading.

We must *always* escape any CTL char clones that are in the var value,
no matter what other conditions apply, and what we expect to happen next.

While here, fix rmescapes() (and its $(()) clone, rmescapes_nl()) to
be more robust, less likely to forget to delete anything (which was
not the issue here, just the reverse) and in a DEBUG shell, have the
shell abort() if it encounters something in rmescapes() it is not
anticipating, so the code can be made to handle it, or if it should
not happen, we can find out why it did.

XXX pullup -8 (but will need to be via patch, code is quite different).

Revision 1.121.2.4: download - view: text, markup, annotated - select for diffs
Wed Dec 26 14:01:03 2018 UTC (5 years, 11 months ago) by pgoyette
Branches: pgoyette-compat
CVS tags: pgoyette-compat-merge-20190127
Diff to: previous 1.121.2.3: preferred, colored; branchpoint 1.121: preferred, colored; next MAIN 1.122: preferred, colored
Changes since revision 1.121.2.3: +63 -25 lines
Sync with HEAD, resolve a few conflicts

Revision 1.129: download - view: text, markup, annotated - select for diffs
Mon Dec 3 06:41:30 2018 UTC (6 years ago) by kre
Branches: MAIN
CVS tags: pgoyette-compat-20190127, pgoyette-compat-20190118, pgoyette-compat-1226
Diff to: previous 1.128: preferred, colored
Changes since revision 1.128: +63 -25 lines
Yet another foray into the mysterious world of $@ -- this time
to fix the (unusual) idiom "${1+$@}"  (the quotes are part of it).
This seems to have broken about 5 or 6 years ago (somewhere
between -6 and -7), I believe.

Note this is not the same as "$@" and also not the same as ${1+"$@"}
(much more common idioms) which both worked.

Also attempt to deal with "" more correctly, especially when it
appears adjacent to "$@" (or one of the similar constructs.)

This stuff is still all as ugly and hackish (and fragile) as is
possible to imagine, but in an effort to allow some of the weirdness
to eventually go away, the parser output has been made more
regular and all quoted (parts of) words always now start with
CTLQUOTEMARK and end with CTLQUOTEEND regardless of where the
quotes appear.

This allows us to tell the difference between """$@" and "$@"
which was impossible before - yet they are required to generate
different output when there are no args (when "$@" simply vanishes).

Needless to say that change had ramifications all over the place.
To simplify any similar change in the future, there are some new
macros that can generally be used to detect the "noise" data when
processing words, rather than open coding that every time (which
meant that there would *always* be one which missed getting
updated...)

Several other bugs (of my making, and older ones) are also fixed.

The aim is that (aside from anything that is detecting the cases
that were broken before - which were all unlikely uses of sh
syntax) these changes should have no external visible impact.

Sure...

Revision 1.121.2.3: download - view: text, markup, annotated - select for diffs
Mon Nov 26 01:49:54 2018 UTC (6 years ago) by pgoyette
Branches: pgoyette-compat
Diff to: previous 1.121.2.2: preferred, colored; branchpoint 1.121: preferred, colored
Changes since revision 1.121.2.2: +20 -24 lines
Sync with HEAD, resolve a couple of conflicts

Revision 1.128: download - view: text, markup, annotated - select for diffs
Sun Nov 18 17:23:37 2018 UTC (6 years ago) by kre
Branches: MAIN
CVS tags: pgoyette-compat-1126
Diff to: previous 1.127: preferred, colored
Changes since revision 1.127: +20 -24 lines
Rationalise (slightly) the way that expansions are processed
to hide meta-characters in the result when the expansion was
in (double) quotes, and so should not be further processed.

Most of this has been OK for a long while, but \ needs hiding
as well, which complicates things, as \ cannot simply be hidden
in the syntax tables as one of the group of random special characters.

This was fixed earlier for simple variable expansions, but
every variety has its own code path ($var uses different code
than $n which is different than $(...), which is different
again from ~ expansions, and also from what $'...' produces).

This could be fixed by moving them all to a common code path,
but that's harder than it seems.  The form in which the data
is made available differs, so one common routine would need
a whole bunch of different "get the next char or indicate end"
methods - probably via passing in an accessor function.
That's all a lot of churn, and would probably slow the shell.

Instead, just make macros for doing the standard tests, and
use those instead of open coding (differently) each time.
This way some of the code paths don't end up forgetting to
handle '\' (which is different than all the others).

This removes one optimisation ... when no escaping is needed
(like just $var (unquoted) where magic chars (think '*') in
the value are intended to remain magic), the code avoided doing
two tests for each char ("do we need escapes" and "is this char
one that needs escaping") by choosing two different syntax
tables (choice made outside the loop) - one of which never
returns the magic "needs escaping" result, and the other does
when appropriate, and then just avoiding the "do we need escapes"
test for each character processed.   Then when '\' was fixed,
there needed to be another test for it, as it cannot (for other
reasons) be the same as all the others for which "this char
need escaping" is true.   So that added a 2nd test for each char...
Not all the code paths were updated.   Hence the bugs...

nb: this is all rarely seen in the wild, so it is no big
surprised that no-one ever noticed.

Now the "use two different syntax tables" is gone (the two
returned the same for '\' which is why '\' needed special
processing) - and in order to avoid two tests for each
char (plus the \ test) we duplicate the loops, one of which
tests each char to see if it needs an escape, the 2nd just
copies them.   This should be faster in the "no escapes"
code path (though that is not the point) and perhaps also
in the "escapes needed" path (no indirect reference to
the syntax table - though that would probably be in a
register) but makes the code slightly bigger.  For /bin/sh
the text segment (on amd64) has grown by 48 bytes.  But
it still uses the same number of 512 byte pages (and hence
also any bigger page size).  The resulting file size
(/bin/sh) is identical before and after.  So is /rescue/sh
(or /rescue/anything-else).

Revision 1.110.2.5: download - view: text, markup, annotated - select for diffs
Mon Sep 10 15:45:11 2018 UTC (6 years, 2 months ago) by martin
Branches: netbsd-8
CVS tags: netbsd-8-3-RELEASE, netbsd-8-2-RELEASE, netbsd-8-1-RELEASE, netbsd-8-1-RC1
Diff to: previous 1.110.2.4: preferred, colored; branchpoint 1.110: preferred, colored; next MAIN 1.111: preferred, colored
Changes since revision 1.110.2.4: +92 -17 lines
Pull up following revision(s) via patch (requested by kre in ticket #1015):

	bin/sh/expand.c: revision 1.124
	bin/sh/expand.c: revision 1.127
	bin/sh/parser.c: revision 1.148
	bin/sh/parser.c: revision 1.149
	bin/sh/syntax.c: revision 1.6
	bin/sh/syntax.h: revision 1.9 (partial)

First pass at fixing some of the more arcane pattern matching
possibilities that we do not currently handle all that well.

This mostly means (for now) making sure that quoted pattern
magic characters (as well as quoted sh syntax magic chars)
are properly marked, so they remain known as being quoted,
and do not turn into pattern magic.   Also, make sure that an
unquoted \ in a pattern always quotes whatever comes next
(which, unlike in regular expressions, includes inside []
matches),

 -

Part 2 of pattern matching (glob etc) fixes.
Attempt to correctly deal with \ (both when it is a literal,
in appropriate cases, and when it appears as CTLESC when it was
detected as a quoting character during parsing).

In a pattern, in sh, no quoted character can ever be anything other
than a literal character.   This is quite different than regular
expressions, and even different than other uses of glob matching,
where shell quoting is not an issue.

In something like
	ls ?\*.c
the ? is a meta-character, the * is a literal (it was quoted).  This
is nothing new, sh has handled that properly for ever.

But the same happens with
	VAR='?\*.c'
and
	ls $VAR
which has not always been handled correctly.   Of course, in
	ls "$VAR"
nothing in VAR is a meta-character (the entire expansion is quoted)
so even the '\' must match literally (or more accurately, no matching
happens - VAR simply contains an "unusual" filename).  But if it had
been
	ls *"$VAR"
then we would be looking for filenames that end with the literal 5
characters that make up $VAR.

The same kinds of things are requires of matching patterns in case
statements, and sub-strings with the % and # operators in variable
expansions.

While here, the final remnant of the ancient !! pattern matching
hack has been removed (the code that actually implemented it was
long gone, but one small piece remained, not doing any real harm,
but potentially wasting time - if someone gave a pattern which would
once have invoked that hack.)

Revision 1.121.2.2: download - view: text, markup, annotated - select for diffs
Sat Jul 28 04:32:56 2018 UTC (6 years, 4 months ago) by pgoyette
Branches: pgoyette-compat
Diff to: previous 1.121.2.1: preferred, colored; branchpoint 1.121: preferred, colored
Changes since revision 1.121.2.1: +127 -36 lines
Sync with HEAD

Revision 1.127: download - view: text, markup, annotated - select for diffs
Sun Jul 22 23:07:48 2018 UTC (6 years, 4 months ago) by kre
Branches: MAIN
CVS tags: pgoyette-compat-1020, pgoyette-compat-0930, pgoyette-compat-0906, pgoyette-compat-0728
Diff to: previous 1.126: preferred, colored
Changes since revision 1.126: +68 -9 lines
Part 2 of pattern matching (glob etc) fixes.

Attempt to correctly deal with \ (both when it is a literal,
in appropriate cases, and when it appears as CTLESC when it was
detected as a quoting character during parsing).

In a pattern, in sh, no quoted character can ever be anything other
than a literal character.   This is quite different than regular
expressions, and even different than other uses of glob matching,
where shell quoting is not an issue.

In something like

	ls ?\*.c

the ? is a meta-character, the * is a literal (it was quoted).  This
is nothing new, sh has handled that properly for ever.

But the same happens with
	VAR='?\*.c'
and
	ls $VAR

which has not always been handled correctly.   Of course, in

	ls "$VAR"

nothing in VAR is a meta-character (the entire expansion is quoted)
so even the '\' must match literally (or more accurately, no matching
happens - VAR simply contains an "unusual" filename).  But if it had
been

	ls *"$VAR"

then we would be looking for filenames that end with the literal 5
characters that make up $VAR.

The same kinds of things are requires of matching patterns in case
statements, and sub-strings with the % and # operators in variable
expansions.

While here, the final remnant of the ancient !! pattern matching
hack has been removed (the code that actually implemented it was
long gone, but one small piece remained, not doing any real harm,
but potentially wasting time - if someone gave a pattern which would
once have invoked that hack.)

Revision 1.126: download - view: text, markup, annotated - select for diffs
Sun Jul 22 21:16:58 2018 UTC (6 years, 4 months ago) by kre
Branches: MAIN
Diff to: previous 1.125: preferred, colored
Changes since revision 1.125: +16 -16 lines

NFC: Whitespace cleanups

Revision 1.125: download - view: text, markup, annotated - select for diffs
Sun Jul 22 20:38:06 2018 UTC (6 years, 4 months ago) by kre
Branches: MAIN
Diff to: previous 1.124: preferred, colored
Changes since revision 1.124: +23 -7 lines
DEBUG mode only change (ie: no effect to any normal shell).

Add tracing of pattern matching (aid in debugging various issues.)

Revision 1.124: download - view: text, markup, annotated - select for diffs
Fri Jul 20 22:47:26 2018 UTC (6 years, 4 months ago) by kre
Branches: MAIN
Diff to: previous 1.123: preferred, colored
Changes since revision 1.123: +26 -10 lines

First pass at fixing some of the more arcane pattern matching
possibilities that we do not currently handle all that well.

This mostly means (for now) making sure that quoted pattern
magic characters (as well as quoted sh syntax magic chars)
are properly marked, so they remain known as being quoted,
and do not turn into pattern magic.   Also, make sure that an
unquoted \ in a pattern always quotes whatever comes next
(which, unlike in regular expressions, includes inside []
matches),

Revision 1.110.2.4: download - view: text, markup, annotated - select for diffs
Fri Jul 13 14:32:01 2018 UTC (6 years, 4 months ago) by martin
Branches: netbsd-8
CVS tags: netbsd-8-0-RELEASE
Diff to: previous 1.110.2.3: preferred, colored; branchpoint 1.110: preferred, colored
Changes since revision 1.110.2.3: +5 -3 lines
Pull up following revision(s) (requested by kre in ticket #907):

	bin/sh/expand.c: revision 1.122

When matching a char class ([[:name:]]) in a pattern (for filename
expansion, case patterrns, etc) do not force '[' to be a member of
every class.

Before this fix, try:

	case [ in [[:alpha:]]) echo Huh\?;; esac

XXX pullup-8    (Perhaps -7 as well, though that shell version has
much more relevant bugs than this one.)  This bug is not in -6 as
that has no charclass support.

Revision 1.121.2.1: download - view: text, markup, annotated - select for diffs
Mon Jun 25 07:25:04 2018 UTC (6 years, 5 months ago) by pgoyette
Branches: pgoyette-compat
Diff to: previous 1.121: preferred, colored
Changes since revision 1.121: +16 -7 lines
Sync with HEAD

Revision 1.123: download - view: text, markup, annotated - select for diffs
Fri Jun 22 18:19:41 2018 UTC (6 years, 5 months ago) by kre
Branches: MAIN
CVS tags: phil-wifi-base, pgoyette-compat-0625
Branch point for: phil-wifi
Diff to: previous 1.122: preferred, colored
Changes since revision 1.122: +13 -6 lines

When processing character classes ([:xxx:] inside []), treat a class name
that is longer than we can handle the same way we treat an unknown
class name (as a valid char class which contains nothing, so never
matches).   Previously a "too long" class name invalidated the
class, so [:very-long-name:] would match any of  '[' ':' 'v'  ...
(note: "very-long-name" is not long enough to trigger this, but you
get the idea!)

However, the name itself has a restricted syntax ([[:***:]] is not a
character class, it is a match for one of a '[' ':' or '*', followed by
a ']') which we did not implement - check the syntax of the name before
treating it as a character class (but we do add '_' to alphanumerics
as legal class name characters).

Revision 1.122: download - view: text, markup, annotated - select for diffs
Fri Jun 22 17:22:34 2018 UTC (6 years, 5 months ago) by kre
Branches: MAIN
Diff to: previous 1.121: preferred, colored
Changes since revision 1.121: +5 -3 lines

When matching a char class ([[:name:]]) in a pattern (for filename
expansion, case patterrns, etc) do not force '[' to be a member of
every class.

Before this fix, try:
	case [ in [[:alpha:]]) echo Huh\?;; esac

XXX pullup-8    (Perhaps -7 as well, though that shell version has
much more relevant bugs than this one.)  This bug is not in -6 as
that has no charclass support.

Revision 1.110.2.3: download - view: text, markup, annotated - select for diffs
Wed Oct 25 06:51:36 2017 UTC (7 years, 1 month ago) by snj
Branches: netbsd-8
CVS tags: netbsd-8-0-RC2, netbsd-8-0-RC1, matt-nb8-mediatek-base, matt-nb8-mediatek
Diff to: previous 1.110.2.2: preferred, colored; branchpoint 1.110: preferred, colored
Changes since revision 1.110.2.2: +6 -5 lines
Pull up following revision(s) (requested by kre in ticket #310):
	bin/sh/expand.c: revision 1.121
	bin/sh/sh.1: revision 1.167 via patch
Three fixes and a change to ~ expansions
1. A serious bug introduced 3 1/2 months ago (approx) (rev 1.116) which
   broke all but the simple cases of ~ expansions is fixed (amazingly,
   given the magnitude of this problem, no-one noticed!)
2. An ancient bug (probably from when ~ expansion was first addedin 1994, and
   certainly is in NetBSD-6 vintage shells) where ${UnSeT:-~} (and similar)
   does not expand the ~ is fixed (note that ${UnSeT:-~/} does expand,
   this should give a clue to the cause of the problem.
3. A fix/change to make the effects of ~ expansions on ${UnSeT:=whatever}
   identical to those in UnSeT=whatever   In particular, with HOME=/foo
   ${UnSeT:=~:~} now assigns, and expands to, /foo:/foo rather than ~:~
   just as VAR=~:~ assigns /foo:/foo to VAR.   Note this is even after the
   previous fix (ie: appending a '/' would not change the results here.)
   It is hard to call this one a bug fix for certain (though I believe it is)
   as many other shells also produce different results for the ${V:=...}
   expansions than  they do for V=... (though not all the same as we did).
   POSIX is not clear about this, expanding ~ after : in VAR=whatever
   assignments is clear, whether ${U:=whatever} assignments should be
   treated the same way is not stated, one way or the other.
4. Change to make ':' terminate the user name in a ~ expansion in all cases,
   not only in assignments.   This makes sense, as ':' is one character that
   cannot occur in user names, no matter how otherwise weird they become.
   bash (incl in posix mode) ksh93 and bosh all act this way, whereas most
   other shells (and POSIX) do not.   Because this is clearly an extension
   to POSIX, do this one only when not in posix mode (not set -o posix).

Revision 1.121: download - view: text, markup, annotated - select for diffs
Fri Oct 6 21:09:45 2017 UTC (7 years, 2 months ago) by kre
Branches: MAIN
CVS tags: pgoyette-compat-base, pgoyette-compat-0521, pgoyette-compat-0502, pgoyette-compat-0422, pgoyette-compat-0415, pgoyette-compat-0407, pgoyette-compat-0330, pgoyette-compat-0322, pgoyette-compat-0315
Branch point for: pgoyette-compat
Diff to: previous 1.120: preferred, colored
Changes since revision 1.120: +6 -5 lines
Three fixes and a change to ~ expansions

1. A serious bug introduced 3 1/2 months ago (approx) (rev 1.116) which
   broke all but the simple cases of ~ expansions is fixed (amazingly,
   given the magnitude of this problem, no-one noticed!)

2. An ancient bug (probably from when ~ expansion was first addedin 1994, and
   certainly is in NetBSD-6 vintage shells) where ${UnSeT:-~} (and similar)
   does not expand the ~ is fixed (note that ${UnSeT:-~/} does expand,
   this should give a clue to the cause of the problem.

3. A fix/change to make the effects of ~ expansions on ${UnSeT:=whatever}
   identical to those in UnSeT=whatever   In particular, with HOME=/foo
   ${UnSeT:=~:~} now assigns, and expands to, /foo:/foo rather than ~:~
   just as VAR=~:~ assigns /foo:/foo to VAR.   Note this is even after the
   previous fix (ie: appending a '/' would not change the results here.)

   It is hard to call this one a bug fix for certain (though I believe it is)
   as many other shells also produce different results for the ${V:=...}
   expansions than  they do for V=... (though not all the same as we did).

   POSIX is not clear about this, expanding ~ after : in VAR=whatever
   assignments is clear, whether ${U:=whatever} assignments should be
   treated the same way is not stated, one way or the other.

4. Change to make ':' terminate the user name in a ~ expansion in all cases,
   not only in assignments.   This makes sense, as ':' is one character that
   cannot occur in user names, no matter how otherwise weird they become.
   bash (incl in posix mode) ksh93 and bosh all act this way, whereas most
   other shells (and POSIX) do not.   Because this is clearly an extension
   to POSIX, do this one only when not in posix mode (not set -o posix).

Revision 1.120: download - view: text, markup, annotated - select for diffs
Mon Aug 21 13:20:49 2017 UTC (7 years, 3 months ago) by kre
Branches: MAIN
Diff to: previous 1.119: preferred, colored
Changes since revision 1.119: +15 -2 lines
Add support for $'...' quoting (based upon C "..." strings, with \ expansions.)

Implementation largely obtained from FreeBSD, with adaptations to meet the
needs and style of this sh, some updates to agree with the current POSIX spec,
and a few other minor changes.

The POSIX spec for this ( http://austingroupbugs.net/view.php?id=249 )
[see note 2809 for the current proposed text] is yet to be approved,
so might change.  It currently leaves several aspects as unspecified,
this implementation handles those as:

Where more than 2 hex digits follow \x this implementation processes the
first two as hex, the following characters are processed as if the \x
sequence was not present.  The value obtained from a \nnn octal sequence
is truncated to the low 8 bits (if a bigger value is written, eg: \456.)
Invalid escape sequences are errors.  Invalid \u (or \U) code points are
errors if known to be invalid, otherwise can generate a '?' character.
Where any escape sequence generates nul ('\0') that char, and the rest of
the $'...' string is discarded, but anything remaining in the word is
processed, ie: aaa$'bbb\0ccc'ddd produces the same as aaa'bbb'ddd.

Differences from FreeBSD:
  FreeBSD allows only exactly 4 or 8 hex digits for \u and \U (as does C,
  but the current sh proposal differs.) reeBSD also continues consuming
  as many hex digits as exist after \x (permitted by the spec, but insane),
  and reject \u0000 as invalid).  Some of this is possibly because that
  their implementation is based upon an earlier proposal, perhaps note 590 -
  though that has been updated several times.

Differences from the current POSIX proposal:
  We currently always generate UTF-8 for the \u & \U escapes.   We should
  generate the equivalent character from the current locale's character set
  (and UTF8 only if that is what the current locale uses.)
  If anyone would like to correct that, go ahead.

  We (and FreeBSD) generate (X & 0x1F) for \cX escapes where we should generate
  the appropriate control character (SOH for \cA for example) with whatever
  value that has in the current character set.   Apart from EBCDIC, which
  we do not support, I've never seen a case where they differ, so ...

Revision 1.110.2.2: download - view: text, markup, annotated - select for diffs
Sun Jul 23 14:58:14 2017 UTC (7 years, 4 months ago) by snj
Branches: netbsd-8
Diff to: previous 1.110.2.1: preferred, colored; branchpoint 1.110: preferred, colored
Changes since revision 1.110.2.1: +279 -133 lines
Pull up following revision(s) (requested by kre in ticket #103):
	bin/kill/kill.c: 1.28
	bin/sh/Makefile: 1.111-1.113
	bin/sh/arith_token.c: 1.5
	bin/sh/arith_tokens.h: 1.2
	bin/sh/arithmetic.c: 1.3
	bin/sh/arithmetic.h: 1.2
	bin/sh/bltin/bltin.h: 1.15
	bin/sh/cd.c: 1.49-1.50
	bin/sh/error.c: 1.40
	bin/sh/eval.c: 1.142-1.151
	bin/sh/exec.c: 1.49-1.51
	bin/sh/exec.h: 1.26
	bin/sh/expand.c: 1.113-1.119
	bin/sh/expand.h: 1.23
	bin/sh/histedit.c: 1.49-1.52
	bin/sh/input.c: 1.57-1.60
	bin/sh/input.h: 1.19-1.20
	bin/sh/jobs.c: 1.86-1.87
	bin/sh/main.c: 1.71-1.72
	bin/sh/memalloc.c: 1.30
	bin/sh/memalloc.h: 1.17
	bin/sh/mknodenames.sh: 1.4
	bin/sh/mkoptions.sh: 1.3-1.4
	bin/sh/myhistedit.h: 1.12-1.13
	bin/sh/nodetypes: 1.16-1.18
	bin/sh/option.list: 1.3-1.5
	bin/sh/parser.c: 1.133-1.141
	bin/sh/parser.h: 1.22-1.23
	bin/sh/redir.c: 1.58
	bin/sh/redir.h: 1.24
	bin/sh/sh.1: 1.149-1.159
	bin/sh/shell.h: 1.24
	bin/sh/show.c: 1.43-1.47
	bin/sh/show.h: 1.11
	bin/sh/syntax.c: 1.4
	bin/sh/syntax.h: 1.8
	bin/sh/trap.c: 1.41
	bin/sh/var.c: 1.56-1.65
	bin/sh/var.h: 1.29-1.35
An initial attempt at implementing LINENO to meet the specs.
Aside from one problem (not too hard to fix if it was ever needed) this version
does about as well as most other shell implementations when expanding
$((LINENO)) and better for ${LINENO} as it retains the "LINENO hack" for the
latter, and that is very accurate.
Unfortunately that means that ${LINENO} and $((LINENO)) do not always produce
the same value when used on the same line (a defect that other shells do not
share - aside from the FreeBSD sh as it is today, where only the LINENO hack
exists and so (like for us before this commit) $((LINENO)) is always either
0, or at least whatever value was last set, perhaps by
	LINENO=${LINENO}
which does actually work ... for that one line...)
This could be corrected by simply removing the LINENO hack (look for the string
LINENO in parser.c) in which case ${LINENO} and $((LINENO)) would give the
same (not perfectly accurate) values, as do most other shells.
POSIX requires that LINENO be set before each command, and this implementation
does that fairly literally - except that we only bother before the commands
which actually expand words (for, case and simple commands).   Unfortunately
this forgot that expansions also occur in redirects, and the other compound
commands can also have redirects, so if a redirect on one of the other compound
commands wants to use the value of $((LINENO)) as a part of a generated file
name, then it will get an incorrect value.  This is the "one problem" above.
(Because the LINENO hack is still enabled, using ${LINENO} works.)
This could be fixed, but as this version of the LINENO implementation is just
for reference purposes (it will be superseded within minutes by a better one)
I won't bother.  However should anyone else decide that this is a better choice
(it is probably a smaller implementation, in terms of code & data space then
the replacement, but also I would expect, slower, and definitely less accurate)
this defect is something to bear in mind, and fix.
This version retains the *BSD historical practice that line numbers in functions
(all functions) count from 1 from the start of the function, and elsewhere,
start from 1 from where the shell started reading the input file/stream in
question.  In an "eval" expression the line number starts at the line of the
"eval" (and then increases if the input is a multi-line string).
Note: this version is not documented (beyond as much as LINENO was before)
hence this slightly longer than usual commit message.
A better LINENO implementation.   This version deletes (well, #if 0's out)
the LINENO hack, and uses the LINENO var for both ${LINENO} and $((LINENO)).
(Code to invert the LINENO hack when required, like when de-compiling the
execution tree to provide the "jobs" command strings, is still included,
that can be deleted when the LINENO hack is completely removed - look for
refs to VSLINENO throughout the code.  The var funclinno in parser.c can
also be removed, it is used only for the LINENO hack.)
This version produces accurate results: $((LINENO)) was made as accurate
as the LINENO hack made ${LINENO} which is very good.  That's why the
LINENO hack is not yet completely removed, so it can be easily re-enabled.
If you can tell the difference when it is in use, or not in use, then
something has broken (or I managed to miss a case somewhere.)
The way that LINENO works is documented in its own (new) section in the
man page, so nothing more about that, or the new options, etc, here.
This version introduces the possibility of having a "reference" function
associated with a variable, which gets called whenever the value of the
variable is required (that's what implements LINENO).  There is just
one function pointer however, so any particular variable gets at most
one of the set function (as used for PATH, etc) or the reference function.
The VFUNCREF bit in the var flags indicates which func the variable in
question uses (if any - the func ptr, as before, can be NULL).
I would not call the results of this perfect yet, but it is close.
Unbreak (at least) i386 build .... I have no idea why this built for me on
amd64 (problem was missing prototype for snprintf witout <stdio.h>)
While here, add some (DEBUG mode only) tracing that proved useful in
solving another problem.
Set the line number before expanding args, not after.   As the line_number
would have usually been set earlier, this change is mostly an effective
no-op, but it is better this way (just in case) - not observed to have
caused any problems.
Undo some over agressive fixes for a (pre-commit) bug that did not
need these changes to be fixed - and these cause problems in another
absurd use case.   Either of these issues is unlikely to be seen by
anyone who isn't an idiot masochist...
PR bin/52280
removescapes_nl in expari() even when not quoted,
CRTNONL's appear regardless of quoting (unlike CTLESC).
New sentence, new line. Whitespace.
Improve the (new) LINENO section, markup changes (with thanks to wiz@ for
assistace) and some better wording in a few placed.
I am an idiot...  revert the previous unintended commit.
Remove some left over baggage from the LINENO v1 implementation that
didn't get removed with v2, and should have.   This would have had
(I think, without having tested it) one very minor effect on the way
LINENO worked in the v2 implementation, but my guess is it would have
taken a long time before anyone noticed...
Correct spelling in comments of DEBUG only code...
(Perhaps) temporary fix to pkgtools (cwrappers) build (configure).
Expanding  `` containing \ \n sequences looks to have been giving
problems.   I don't think this is the correct fix, but it will do
no worse harm than (perhaps) incorrectly calculating LINENO in this
kind of (rare) circumstance.   I'll look and see if there should be
a better fix later.
s/volatile/const/ -- wonderful how opposites attract like this.
NFC (normal use) - DEBUG only change, when showing empty arg list don't
omit terminating \n.
Free stack memory in a couple of obscure cases where it wasn't
being done (one in probably dead code that is never compiled, the other
in a very rare error case.)   Since it is stack memory it wasn't lost
in any case, just held longer than needed.
Many internal memory management type fixes.
PR bin/52302   (core dump with interactive shell, here doc and error
on same line) is fixed.   (An old bug.)
echo "$( echo x; for a in $( seq 1000 ); do printf '%s\n'; done; echo y )"
consistently prints 1002 lines (x, 1000 empty ones, then y) as it should
(And you don't want to know what it did before, or why.) (Another old one.)
(Recently added) Problems with ~ expansion fixed (mem management related).
Proper fix for the cwrappers configure problem (which includes the quick
fix that was done earlier, but extends upon that to be correct). (This was
another newly added problem.)
And the really devious (and rare) old bug - if STACKSTRNUL() needs to
allocate a new buffer in which to store the \0, calculate the size of
the string space remaining correctly, unlike when SPUTC() grows the
buffer, there is no actual data being stored in the STACKSTRNUL()
case - the string space remaining was calculated as one byte too few.
That would be harmless, unless the next buffer also filled, in which
case it was assumed that it was really full, not one byte less, meaning
one junk char (a nul, or anything) was being copied into the next (even
bigger buffer) corrupting the data.
Consistent use of stalloc() to allocate a new block of (stack) memory,
and grabstackstr() to claim a block of (stack) memory that had already
been occupied but not claimed as in use.  Since grabstackstr is implemented
as just a call to stalloc() this is a no-op change in practice, but makes
it much easier to comprehend what is really happening.  Previous code
sometimes used stalloc() when the use case was really for grabstackstr().
Change grabstackstr() to actually use the arg passed to it, instead of
(not much better than) guessing how much space to claim,
More care when using unstalloc()/ungrabstackstr() to return space, and in
particular when the stack must be returned to its previous state, rather than
just returning no-longer needed space, neither of those work.  They also don't
work properly if there have been (really, even might have been) any stack mem
allocations since the last stalloc()/grabstackstr().   (If we know there
cannot have been then the alloc/release sequence is kind of pointless.)
To work correctly in general we must use setstackmark()/popstackmark() so
do that when needed.  Have those also save/restore the top of stack string
space remaining.
	[Aside: for those reading this, the "stack" mentioned is not
	in any way related to the thing used for maintaining the C
	function call state, ie: the "stack segment" of the program,
	but the shell's internal memory management strategy.]
More comments to better explain what is happening in some cases.
Also cleaned up some hopelessly broken DEBUG mode data that were
recently added (no effect on anyone but the poor semi-human attempting
to make sense of it...).
User visible changes:
Proper counting of line numbers when a here document is delimited
by a multi-line end-delimiter, as in
	cat << 'REALLY
	END'
	here doc line 1
	here doc line 2
	REALLY
	END
(which is an obscure case, but nothing says should not work.)  The \n
in the end-delimiter of the here doc (the last one) was not incrementing
the line number, which from that point on in the script would be 1 too
low (or more, for end-delimiters with more than one \n in them.)
With tilde expansion:
	unset HOME; echo ~
changed to return getpwuid(getuid())->pw_home instead of failing (returning ~)
POSIX says this is unspecified, which makes it difficult for a script to
compensate for being run without HOME set (as in env -i sh script), so
while not able to be used portably, this seems like a useful extension
(and is implemented the same way by some other shells).
Further, with
	HOME=; printf %s ~
we now write nothing (which is required by POSIX - which requires ~ to
expand to the value of $HOME if it is set) previously if $HOME (in this
case) or a user's directory in the passwd file (for ~user) were a null
STRING, We failed the ~ expansion and left behind '~' or '~user'.
Changed the long name for the -L option from lineno_fn_relative
to local_lineno as the latter seemed to be marginally more popular,
and perhaps more importantly, is the same length as the peviously
existing quietprofile option, which means the man page indentation
for the list of options can return to (about) what it was before...
(That is, less indented, which means more data/line, which means less
lines of man page - a good thing!)
Cosmetic changes to variable flags - make their values more suited
to my delicate sensibilities...  (NFC).
Arrange not to barf (ever) if some turkey makes _ readonly.  Do this
by adding a VNOERROR flag that causes errors in var setting to be
ignored (intended use is only for internal shell var setting, like of "_").
(nb: invalid var name errors ignore this flag, but those should never
occur on a var set by the shell itself.)
From FreeBSD: don't simply discard memory if a variable is not set for
any reason (including because it is readonly) if the var's value had
been malloc'd.  Free it instead...
NFC - DEBUG changes, update this to new TRACE method.
KNF - white space and comment formatting.
NFC - DEBUG mode only change - convert this to the new TRACE() format.
NFC - DEBUG mode only change - complete a change made earlier (marking
the line number when included in the trace line tag to show whether it
comes from the parser, or the elsewhere as they tend to be quite different).
Initially only one case was changed, while I pondered whether I liked it
or not.  Now it is all done...   Also when there is a line tag at all,
always include the root/sub-shell indicator character, not only when the
pid is included.
NFC: DEBUG related comment change - catch up with reality.
NFC: DEBUG mode only change.  Fix botched cleanup of one TRACE().
"b" more forgiving when sorting options to allow reasonable (and intended)
flexibility in option.list format.   Changes nothing for current option.list.
Now that excessive use of STACKSTRNUL has served its purpose (well, accidental
purpose) in exposing the bug in its implementation, go back to not using
it when not needed for DEBUG TRACE purposes.   This change should have no
practical effect on either a DEBUG shell (where the STACKSTRNUL() calls
remain) or a non DEBUG shell where they are not needed.
Correct the initial line number used for processing -c arg strings.
(It was inheriting the value from end of profile file processing) - I didn't
notice before as I usually test with empty or no profile files to avoid
complications.   Trivial change which should have very limited impact.
Fix from FreeBSD (applied there in July 2008...)
Don't dump core with input like sh -c 'x=; echo >&$x' - that is where
the word after a >& or <& redirect expands to nothing at all.
Another fix from FreeBSD (this one from April 2009).
When processing a string (as in eval, trap, or sh -c) don't allow
trailing \n's to destroy the exit status of the last command executed.
That is:
	sh -c 'false
	'
	echo $?
should produce 1, not 0.
It is amazing what nonsense appears to work sometimes... (all my nonsense too!)
Two bugs here, one benign because of the way the script is used.
The other hidden by NetBSD's sort being stable, and the data not really
requiring sorting at all...
So as it happens these fixes change nothing, but they are needed anyway.
(The contents of the generated file are only used in DEBUG shells, so
this is really even less important than it seems.)
Another ancient (highly improbable) bug bites the dust.   This one
caused by incorrect macro usage (ie: using the wrong one) which has
been in the sources since version 1.1 (ie: forever).
Like the previous (STACKSTRNUL) bug, the probability of this one
actually occurring has been infinitesimal but the LINENO code increases
that to infinitesimal and a smidgen... (or a few, depending upon usage).
Still, apparently that was enough, Kamil Rytarowski discovered that the
zsh configure script (damn competition!) managed to trigger this problem.
source .editrc after we initialize so that commands persist!
Make arg parsing in kill POSIX compatible with POSIX (XBD 2.12) by
parsing the way getopt(3) would, if only it could handle the (required)
-signumber and -signame options.  This adds two "features" to kill,
-ssigname and -lstatus now work (ie: one word with all of the '-', the
option letter, and its value) and "--" also now works (kill -- -pid1 pid2
will not attempt to send the pid1 signal to pid2, but rather SIGTERM
to the pid1 process group and pid2).  It is still the case that (apart
from --) at most 1 option is permitted (-l, -s, -signame, or -signumber.)
Note that we now have an ambiguity, -sname might mean "-s name" or
send the signal "sname" - if one of those turns out to be valid, that
will be accepted, otherwise the error message will indicate that "sname"
is not a valid signal name, not that "name" is not.   Keeping the "-s"
and signal name as separate words avoids this issue.
Also caution: should someone be weird enough to define a new signal
name (as in the part after SIG) which is almost the same name as an
existing name that starts with 'S' by adding an extra 'S' prepended
(eg: adding a SIGSSYS) then the ambiguity problem becomes much worse.
In that case "kill -ssys" will be resolved in favour of the "-s"
flag being used (the more modern syntax) and would send a SIGSYS, rather
that a SIGSSYS.    So don't do that.
While here, switch to using signalname(3) (bye bye NSIG, et. al.), add
some constipation, and show a little pride in formatting the signal names
for "kill -l" (and in the usage when appropriate -- same routine.)   Respect
COLUMNS (POSIX XBD 8.3) as primary specification of the width (terminal width,
not number of columns to print) for kill -l, a very small value for COLUMNS
will cause kill -l output to list signals one per line, a very large
value will cause them all to be listed on one line.) (eg: "COLUMNS=1 kill -l")
TODO: the signal printing for "trap -l" and that for "kill -l"
should be switched to use a common routine (for the sh builtin versions.)
All changes of relevance here are to bin/kill - the (minor) changes to bin/sh
are only to properly expose the builtin version of getenv(3) so the builtin
version of kill can use it (ie: make its prototype available.)
Properly support EDITRC - use it as (naming) the file when setting
up libedit, and re-do the config whenever EDITRC is set.
Get rid of workarounds for ancient groff html backend.
Simplify macro usage.
Make one example more like a real world possibility (it still isn't, but
is closer) - though the actual content is irrelevant to the point being made.
Add literal prompt support this allows one to do:
CA="$(printf '\1')"
PS1="${CA}$(tput bold)${CA}\$${CA}$(tput sgr0)${CA} "
Now libedit supports embedded mode switch sequence, improve sh
support for them (adds PSlit variable to set the magic character).
NFC: DEBUG only change - provide an externally visible (to the DEBUG sh
internals) interface to one of the internal (private to trace code) functions
Include redirections in trace output from "set -x"
Implement PS1, PS2 and PS4 expansions (variable expansions, arithmetic
expansions, and if enabled by the promptcmds option, command substitutions.)
Implement a bunch of new shell environment variables. many mostly useful
in prompts when expanded at prompt time, but all available for general use.
Many of the new ones are not available in SMALL shells (they work as normal
if assigned, but the shell does not set or use them - and there is no magic
in a SMALL shell (usually for install media.))
Omnibus manual update for prompt expansions and new variables.  Throw in
some random cleanups as a bonus.
Correct a markup typo (why did I not see this before the prev commit??)
Sort options (our default is 0..9AaBbZz).
Fix markup problems and a typo.
Make $- list flags in the same order they appear in sh(1)
Do a better job of detecting the error in pkgsrc/devel/libbson-1.6.3's
configure script, ie: $(( which is intended to be a sub-shell in a
command substitution, but is an arith subst instead, it needs to be
written $( ( to do as intended.   Instead of just blindly carrying on to
find the missing )) somewhere, anywhere, give up as soon as we have seen
an unbalanced ')' that isn't immediately followed by another ')' which
in a valid arith subst it always would be.
While here, there has been a comment in the code for quite a while noting a
difference in the standard between the text descr & grammar when it comes to
the syntax of case statements.   Add more comments to explain why parsing it
as we do is in fact definitely the correct way (ie: the grammar wins arguments
like this...).
DEBUG and white space changes only.   Convert TRACE() calls for DEBUg mode
to the new style.   NFC (when not debugging sh).
Mostly DEBUG and white space changes.   Convert DEEBUG TRACE() calls to
the new format.   Also #if 0 a function definition that is used nowhere.
While here, change the function of pushfile() slightly - it now sets
the buf pointer in the top (new) input descriptor to NULL, instead of
simply leaving it - code that needs a buffer always (before and after)
must malloc() one and assign it after the call.  But code which does not
(which will be reading from a string or similar) now does not have to
explicitly set it to NULL (cleaner interface.)   NFC intended (or observed.)
DEBUG changes: convert DEBUG TRACE() calls to new format.
ALso, cause exec failures to always cause the shell to exit with
status 126 or 127, whatever the cause.  127 is intended for lookup
failures (and is used that way), 126 is used for anything else that
goes wrong (as in several other shells.)  We no longer use 2 (more easily
confused with an exit status of the command exec'd) for shell exec failures.
DEBUG only changes.  Convert the TRACE() calls in the remaining files
that still used it to the new format.   NFC.
Fix a reference after free (and consequent nonsense diagnostic for
attempts to set readonly variables) I added in 1.60 by incompletely
copying the FreeBSD fix for the lost memory issue.

Revision 1.119: download - view: text, markup, annotated - select for diffs
Fri Jun 30 23:02:56 2017 UTC (7 years, 5 months ago) by kre
Branches: MAIN
CVS tags: perseant-stdc-iso10646-base, perseant-stdc-iso10646
Diff to: previous 1.118: preferred, colored
Changes since revision 1.118: +5 -3 lines

Implement PS1, PS2 and PS4 expansions (variable expansions, arithmetic
expansions, and if enabled by the promptcmds option, command substitutions.)

Revision 1.118: download - view: text, markup, annotated - select for diffs
Mon Jun 19 02:46:50 2017 UTC (7 years, 5 months ago) by kre
Branches: MAIN
Diff to: previous 1.117: preferred, colored
Changes since revision 1.117: +14 -8 lines

Now that excessive use of STACKSTRNUL has served its purpose (well, accidental
purpose) in exposing the bug in its implementation, go back to not using
it when not needed for DEBUG TRACE purposes.   This change should have no
practical effect on either a DEBUG shell (where the STACKSTRNUL() calls
remain) or a non DEBUG shell where they are not needed.

Revision 1.117: download - view: text, markup, annotated - select for diffs
Sun Jun 18 07:50:46 2017 UTC (7 years, 5 months ago) by kre
Branches: MAIN
Diff to: previous 1.116: preferred, colored
Changes since revision 1.116: +4 -4 lines

NFC: DEBUG mode only change.  Fix botched cleanup of one TRACE().

Revision 1.116: download - view: text, markup, annotated - select for diffs
Sat Jun 17 07:22:12 2017 UTC (7 years, 5 months ago) by kre
Branches: MAIN
Diff to: previous 1.115: preferred, colored
Changes since revision 1.115: +177 -114 lines
Many internal memory management type fixes.

PR bin/52302   (core dump with interactive shell, here doc and error
on same line) is fixed.   (An old bug.)

echo "$( echo x; for a in $( seq 1000 ); do printf '%s\n'; done; echo y )"
consistently prints 1002 lines (x, 1000 empty ones, then y) as it should
(And you don't want to know what it did before, or why.) (Another old one.)

(Recently added) Problems with ~ expansion fixed (mem management related).

Proper fix for the cwrappers configure problem (which includes the quick
fix that was done earlier, but extends upon that to be correct). (This was
another newly added problem.)

And the really devious (and rare) old bug - if STACKSTRNUL() needs to
allocate a new buffer in which to store the \0, calculate the size of
the string space remaining correctly, unlike when SPUTC() grows the
buffer, there is no actual data being stored in the STACKSTRNUL()
case - the string space remaining was calculated as one byte too few.
That would be harmless, unless the next buffer also filled, in which
case it was assumed that it was really full, not one byte less, meaning
one junk char (a nul, or anything) was being copied into the next (even
bigger buffer) corrupting the data.

Consistent use of stalloc() to allocate a new block of (stack) memory,
and grabstackstr() to claim a block of (stack) memory that had already
been occupied but not claimed as in use.  Since grabstackstr is implemented
as just a call to stalloc() this is a no-op change in practice, but makes
it much easier to comprehend what is really happening.  Previous code
sometimes used stalloc() when the use case was really for grabstackstr().
Change grabstackstr() to actually use the arg passed to it, instead of
(not much better than) guessing how much space to claim,

More care when using unstalloc()/ungrabstackstr() to return space, and in
particular when the stack must be returned to its previous state, rather than
just returning no-longer needed space, neither of those work.  They also don't
work properly if there have been (really, even might have been) any stack mem
allocations since the last stalloc()/grabstackstr().   (If we know there
cannot have been then the alloc/release sequence is kind of pointless.)
To work correctly in general we must use setstackmark()/popstackmark() so
do that when needed.  Have those also save/restore the top of stack string
space remaining.

	[Aside: for those reading this, the "stack" mentioned is not
	in any way related to the thing used for maintaining the C
	function call state, ie: the "stack segment" of the program,
	but the shell's internal memory management strategy.]

More comments to better explain what is happening in some cases.
Also cleaned up some hopelessly broken DEBUG mode data that were
recently added (no effect on anyone but the poor semi-human attempting
to make sense of it...).

User visible changes:

Proper counting of line numbers when a here document is delimited
by a multi-line end-delimiter, as in

	cat << 'REALLY
	END'
	here doc line 1
	here doc line 2
	REALLY
	END

(which is an obscure case, but nothing says should not work.)  The \n
in the end-delimiter of the here doc (the last one) was not incrementing
the line number, which from that point on in the script would be 1 too
low (or more, for end-delimiters with more than one \n in them.)

With tilde expansion:
	unset HOME; echo ~
changed to return getpwuid(getuid())->pw_home instead of failing (returning ~)

POSIX says this is unspecified, which makes it difficult for a script to
compensate for being run without HOME set (as in env -i sh script), so
while not able to be used portably, this seems like a useful extension
(and is implemented the same way by some other shells).

Further, with
	HOME=; printf %s ~
we now write nothing (which is required by POSIX - which requires ~ to
expand to the value of $HOME if it is set) previously if $HOME (in this
case) or a user's directory in the passwd file (for ~user) were a null
STRING, We failed the ~ expansion and left behind '~' or '~user'.

Revision 1.115: download - view: text, markup, annotated - select for diffs
Wed Jun 7 09:31:30 2017 UTC (7 years, 6 months ago) by kre
Branches: MAIN
Diff to: previous 1.114: preferred, colored
Changes since revision 1.114: +7 -10 lines
PR bin/52280

removescapes_nl in expari() even when not quoted,
CRTNONL's appear regardless of quoting (unlike CTLESC).

Revision 1.114: download - view: text, markup, annotated - select for diffs
Wed Jun 7 08:07:50 2017 UTC (7 years, 6 months ago) by kre
Branches: MAIN
Diff to: previous 1.113: preferred, colored
Changes since revision 1.113: +3 -3 lines

Set the line number before expanding args, not after.   As the line_number
would have usually been set earlier, this change is mostly an effective
no-op, but it is better this way (just in case) - not observed to have
caused any problems.

Revision 1.113: download - view: text, markup, annotated - select for diffs
Wed Jun 7 05:08:32 2017 UTC (7 years, 6 months ago) by kre
Branches: MAIN
Diff to: previous 1.112: preferred, colored
Changes since revision 1.112: +97 -19 lines
A better LINENO implementation.   This version deletes (well, #if 0's out)
the LINENO hack, and uses the LINENO var for both ${LINENO} and $((LINENO)).
(Code to invert the LINENO hack when required, like when de-compiling the
execution tree to provide the "jobs" command strings, is still included,
that can be deleted when the LINENO hack is completely removed - look for
refs to VSLINENO throughout the code.  The var funclinno in parser.c can
also be removed, it is used only for the LINENO hack.)

This version produces accurate results: $((LINENO)) was made as accurate
as the LINENO hack made ${LINENO} which is very good.  That's why the
LINENO hack is not yet completely removed, so it can be easily re-enabled.
If you can tell the difference when it is in use, or not in use, then
something has broken (or I managed to miss a case somewhere.)

The way that LINENO works is documented in its own (new) section in the
man page, so nothing more about that, or the new options, etc, here.

This version introduces the possibility of having a "reference" function
associated with a variable, which gets called whenever the value of the
variable is required (that's what implements LINENO).  There is just
one function pointer however, so any particular variable gets at most
one of the set function (as used for PATH, etc) or the reference function.
The VFUNCREF bit in the var flags indicates which func the variable in
question uses (if any - the func ptr, as before, can be NULL).

I would not call the results of this perfect yet, but it is close.

Revision 1.110.2.1: download - view: text, markup, annotated - select for diffs
Mon Jun 5 08:15:16 2017 UTC (7 years, 6 months ago) by snj
Branches: netbsd-8
Diff to: previous 1.110: preferred, colored
Changes since revision 1.110: +21 -7 lines
Pull up following revision(s) (requested by kre in ticket #7):
	bin/sh/expand.c: revisions 1.111, 1.112
PR bin/52272 - fix an off-by one that broke ~ expansions.
--
Another arithmetic expansion recordregion() fix, this time
calculate the lenght (used to calculate the end) based upon the
correct starting point.
Thanks to John Klos for finding and reporting this one.

Revision 1.112: download - view: text, markup, annotated - select for diffs
Mon Jun 5 02:15:55 2017 UTC (7 years, 6 months ago) by kre
Branches: MAIN
Diff to: previous 1.111: preferred, colored
Changes since revision 1.111: +20 -5 lines

Another arithmetic expansion recordregion() fix, this time
calculate the lenght (used to calculate the end) based upon the
correct starting point.

Thanks to John Klos for finding and reporting this one.

Revision 1.111: download - view: text, markup, annotated - select for diffs
Sun Jun 4 23:40:31 2017 UTC (7 years, 6 months ago) by kre
Branches: MAIN
Diff to: previous 1.110: preferred, colored
Changes since revision 1.110: +3 -4 lines
PR bin/52272 - fix an off-by one that broke ~ expansions.

Revision 1.110: download - view: text, markup, annotated - select for diffs
Sat Jun 3 21:52:05 2017 UTC (7 years, 6 months ago) by kre
Branches: MAIN
CVS tags: netbsd-8-base
Branch point for: netbsd-8
Diff to: previous 1.109: preferred, colored
Changes since revision 1.109: +27 -5 lines

DEBUG mode only change.  Convert old trace style to new, and add some more.
NFC for any non-DEBUG shell.

Revision 1.109: download - view: text, markup, annotated - select for diffs
Sat Jun 3 20:55:53 2017 UTC (7 years, 6 months ago) by kre
Branches: MAIN
Diff to: previous 1.108: preferred, colored
Changes since revision 1.108: +5 -5 lines

NFC: Code style only.   Rather than being perverse and adding the
negative of a negative number, just add a positive number instead...
(the previous version came about purely as an accident of the way the
relevant piece of code was added and debugged.... that's my story anyway!)

Revision 1.108: download - view: text, markup, annotated - select for diffs
Sat Jun 3 18:37:37 2017 UTC (7 years, 6 months ago) by kre
Branches: MAIN
Diff to: previous 1.107: preferred, colored
Changes since revision 1.107: +3 -3 lines

The correct usage of recordregion() is (begin, end) not (begin, length).

Fixing this fixes a regression introduced earlier today (UTC) where
arithmetic expressions would be split correctly when the arithmetic
started at the beginning of a word:
	echo $(( expression ))
where "begin" is 0, and so (begin, length) is the same as (begin, begin+length)
(aka: (begin,end) - and yes, "end" means 1 after last to consider).
but did not work correctly when the usage was
	echo XXX$( expression ))
(begin !+ 0) and would only split (some part of) the result of the expression.

This regression was also foung by the new t_fsplit:split_arith
test case added earlier to the ATF tests for sh.

Revision 1.107: download - view: text, markup, annotated - select for diffs
Sat Jun 3 10:31:16 2017 UTC (7 years, 6 months ago) by kre
Branches: MAIN
Diff to: previous 1.106: preferred, colored
Changes since revision 1.106: +240 -134 lines
Fixes to shell expand (that is, $ stuff) from FreeBSD (implemented
differently...)

In particular	${01} is now $1 not $0  (for ${0any-digits})

		${4294967297} is most probably now ""
			(unless you have a very large number of params)
		it is no longer an alias for $1  (4294967297 & 0xFFFFFFFF) == 1

		$(( expr $(( more )) stuff )) is no longer the same as
		$(( expr (( more )) stuff )) which was sometimes OK, as in:
			$(( 3 + $(( 2 - 1 )) * 3 ))
		but not always as in:
			$(( 1$((1 + 1))1 ))
		which should be 121, but was an arith syntax error as
			1((1 + 1))1
		is meaningless.

Probably some more.   This also sprinkles a little const, splits a big
func that had 2 (kind of unrelated) purposes into two simpler ones,
and avoids some (semi-dubious) modifications (and restores) in the input
string to insert \0's when they were needed.

Revision 1.106: download - view: text, markup, annotated - select for diffs
Sun May 28 00:38:01 2017 UTC (7 years, 6 months ago) by kre
Branches: MAIN
Diff to: previous 1.105: preferred, colored
Changes since revision 1.105: +5 -5 lines
Arrange for set -o and $- output to be sorted, rather than more
or less random (and becoming worse as more options are added.)
Since the data is known at compile time, sort at compile time,
rather than at run time.

Revision 1.104.2.1: download - view: text, markup, annotated - select for diffs
Tue May 2 03:19:14 2017 UTC (7 years, 7 months ago) by pgoyette
Branches: prg-localcount2
Diff to: previous 1.104: preferred, colored; next MAIN 1.105: preferred, colored
Changes since revision 1.104: +70 -45 lines
Sync with HEAD - tag prg-localcount2-base1

Revision 1.105: download - view: text, markup, annotated - select for diffs
Wed Apr 26 17:43:33 2017 UTC (7 years, 7 months ago) by christos
Branches: MAIN
CVS tags: prg-localcount2-base3, prg-localcount2-base2, prg-localcount2-base1
Diff to: previous 1.104: preferred, colored
Changes since revision 1.104: +70 -45 lines
Convert the pattern matcher from recursive to backtracking (from FreeBSD).

Revision 1.101.2.2: download - view: text, markup, annotated - select for diffs
Wed Apr 26 02:52:13 2017 UTC (7 years, 7 months ago) by pgoyette
Branches: pgoyette-localcount
Diff to: previous 1.101.2.1: preferred, colored; branchpoint 1.101: preferred, colored; next MAIN 1.102: preferred, colored
Changes since revision 1.101.2.1: +29 -6 lines
Sync with HEAD

Revision 1.101.4.1: download - view: text, markup, annotated - select for diffs
Fri Apr 21 16:50:42 2017 UTC (7 years, 7 months ago) by bouyer
Branches: bouyer-socketcan
Diff to: previous 1.101: preferred, colored; next MAIN 1.102: preferred, colored
Changes since revision 1.101: +32 -7 lines
Sync with HEAD

Revision 1.91.4.1: download - view: text, markup, annotated - select for diffs
Wed Apr 19 17:09:38 2017 UTC (7 years, 7 months ago) by snj
Branches: netbsd-7
CVS tags: netbsd-7-2-RELEASE
Diff to: previous 1.91: preferred, colored; next MAIN 1.92: preferred, colored
Changes since revision 1.91: +5 -3 lines
Pull up following revision(s) (requested by kre in ticket #1388):
	bin/sh/expand.c: revision 1.102
Fix for the "${unset-var#$(cmd1)}$(cmd2)" runs the wrong command bug.
... From FreeBSD

Revision 1.104: download - view: text, markup, annotated - select for diffs
Mon Mar 20 11:48:01 2017 UTC (7 years, 8 months ago) by kre
Branches: MAIN
CVS tags: prg-localcount2-base, pgoyette-localcount-20170426, bouyer-socketcan-base1
Branch point for: prg-localcount2
Diff to: previous 1.103: preferred, colored
Changes since revision 1.103: +8 -3 lines

PR bin/52090 - fix expansion of unquoted $*

Revision 1.103: download - view: text, markup, annotated - select for diffs
Mon Mar 20 11:26:07 2017 UTC (7 years, 8 months ago) by kre
Branches: MAIN
Diff to: previous 1.102: preferred, colored
Changes since revision 1.102: +23 -5 lines


Finish support for all required $(( )) (shell arithmetic) operators,
closing PR bin/50958

That meant adding the assignment operators ('=', and all of the +=, *= ...)
Currently, ++, --, and ',' are not implemented (none of those are required
by posix) but support for them (most likely ',' first) might be added later.

To do this, I removed the yacc/lex arithmetic parser completely, and
replaced it with a hand written recursive descent parser, that I obtained
from FreeBSD, who earlier had obtained it from dash (Herbert Xu).

While doing the import, I cleaned up the sources (changed some file names
to avoid requiring a clean build, or signifigant surgery to the obj
directories if "build.sh -u" was to be used - "build.sh -u" should work
fine as it is now) removed some dashisms, applied some KNF, ...

Revision 1.101.2.1: download - view: text, markup, annotated - select for diffs
Mon Mar 20 06:51:32 2017 UTC (7 years, 8 months ago) by pgoyette
Branches: pgoyette-localcount
Diff to: previous 1.101: preferred, colored
Changes since revision 1.101: +5 -3 lines
Sync with HEAD

Revision 1.102: download - view: text, markup, annotated - select for diffs
Sun Mar 12 04:19:29 2017 UTC (7 years, 8 months ago) by kre
Branches: MAIN
CVS tags: pgoyette-localcount-20170320
Diff to: previous 1.101: preferred, colored
Changes since revision 1.101: +5 -3 lines

Fix for the "${unset-var#$(cmd1)}$(cmd2)" runs the wrong command bug.
... From FreeBSD

Revision 1.101: download - view: text, markup, annotated - select for diffs
Thu Mar 31 16:16:35 2016 UTC (8 years, 8 months ago) by christos
Branches: MAIN
CVS tags: pgoyette-localcount-base, pgoyette-localcount-20170107, pgoyette-localcount-20161104, pgoyette-localcount-20160806, pgoyette-localcount-20160726, localcount-20160914, bouyer-socketcan-base
Branch point for: pgoyette-localcount, bouyer-socketcan
Diff to: previous 1.100: preferred, colored
Changes since revision 1.100: +3 -3 lines
Implement the NETBSD_SHELL readonly unexportable unimportable
variable (with its current value set at 20160401) as discussed on
current-users and tech-userlevel. This also includes the necessary
support to implement it properly (particularly the unexportable
part) and adds options to the export command to support unexportable
variables. Also implement the "posix" option (no single letter
equivalent) which gets its default value from whether or not
POSIXLY_CORRECT is set in the environment when the shell starts
(but can be changed just like any other option using -o and +o on
the command line, or the set builtin command.) While there, fix
all uses of options so it is possible to have options that have a
short (one char) name, and no long name, just as it has been possible
to have options with a long name and no short name, though there
are currently none (with no long name).  For now, the only use of
the posix option is to control whether ${ENV} is read at startup
by a non-interactive shell, so changing it with set is not usful
- that might change in the future. (from kre@)

Revision 1.100: download - view: text, markup, annotated - select for diffs
Thu Mar 31 13:27:44 2016 UTC (8 years, 8 months ago) by christos
Branches: MAIN
Diff to: previous 1.99: preferred, colored
Changes since revision 1.99: +2 -7 lines
After discussions with Jilles Tjoelker (FreeBSD shell) and following
a suggestion from him, the way the fix to PR bin/50993 was implemented
has changed a little.   There are three steps involved in processing
a here document, reading it, parsing it, and then evaluating it
before applying it to the correct file descriptor for the command
to use.  The third of those is not related to this problem, and
has not changed.  The bug was caused by combining the first two
steps into one (and not doing it correctly - which would be hard
that way.)  The fix is to split the first two stages into separate
events.   The original fix moved the 2nd stage (parsing) to just
immediately before the 3rd stage (evaluation.)  Jilles pointed out
some unwanted side effects from doing it that way, and suggested
moving the 2nd stage to immediately after the first.  This commit
makes that change.  The effect is to revert the changes to expand.c
and parser.h (which are no longer needed) and simplify slightly
the change to parser.c. (from kre@)

Revision 1.99: download - view: text, markup, annotated - select for diffs
Sun Mar 27 14:39:33 2016 UTC (8 years, 8 months ago) by christos
Branches: MAIN
Diff to: previous 1.98: preferred, colored
Changes since revision 1.98: +8 -2 lines
PR bin/50993 - this is a significant rewrite of the way that here
documents are processed.  Now, when first detected, they are
simply read (the only change made to the text is to join lines
ended with a \ to the subsequent line, otherwise end marker detection
does not work correctly (for here docs with an unquoted endmarker
only of course.)  This patch also moves the "internal subroutine"
for looking for the end marker out of readtoken1() (which had to
happen as readtoken1 is no longer reading the here doc when it is
needed) - that uses code mostly taken from FreeBSD's sh (thanks!)
and along the way results in some restrictions on what the end
marker can be being removed.   We still do not allow all we should.
(from kre@)

Revision 1.98: download - view: text, markup, annotated - select for diffs
Sun Mar 27 14:34:46 2016 UTC (8 years, 8 months ago) by christos
Branches: MAIN
Diff to: previous 1.97: preferred, colored
Changes since revision 1.97: +5 -9 lines
General KNF and source code cleanups, avoid scattering the
magic string " \t\n" all over the place, slightly improved
syntax error messages, restructured some of the code for
clarity, don't allow IFS to be imported through the environment,
and remove the (never) conditionally compiled ATTY option.
Apart from one or two syntax error messages, and ignoring IFS
if present in the environment, this is intended to have no
user visible changes. (from kre@)

Revision 1.97: download - view: text, markup, annotated - select for diffs
Wed Mar 16 15:44:35 2016 UTC (8 years, 8 months ago) by christos
Branches: MAIN
Diff to: previous 1.96: preferred, colored
Changes since revision 1.96: +4 -4 lines
PR/19832, PR/35423: Fix handling 0x81 and 0x82 characters in expansions
($VAR etc) that are used to generate filenames for redirections. (from kre)

Revision 1.96: download - view: text, markup, annotated - select for diffs
Tue Mar 8 14:09:07 2016 UTC (8 years, 9 months ago) by christos
Branches: MAIN
Diff to: previous 1.95: preferred, colored
Changes since revision 1.95: +7 -5 lines
PR bin/50834o: fix expansions of (unquoted) ${unset_var-} and ""$@ (from kre)

Revision 1.95: download - view: text, markup, annotated - select for diffs
Sat Feb 27 16:28:50 2016 UTC (8 years, 9 months ago) by christos
Branches: MAIN
Diff to: previous 1.94: preferred, colored
Changes since revision 1.94: +7 -7 lines
remove useless casts

Revision 1.94: download - view: text, markup, annotated - select for diffs
Mon Feb 22 20:02:00 2016 UTC (8 years, 9 months ago) by christos
Branches: MAIN
Diff to: previous 1.93: preferred, colored
Changes since revision 1.93: +3 -3 lines
PR bin/43469 - correctly handle quoting of the pattern part of ${var%pat}
type expansions. (from kre)

Revision 1.93: download - view: text, markup, annotated - select for diffs
Thu Aug 27 07:46:47 2015 UTC (9 years, 3 months ago) by christos
Branches: MAIN
Diff to: previous 1.92: preferred, colored
Changes since revision 1.92: +14 -14 lines
PR/50179: Timo Buhrmester: sh(1) variable expansion bug

Revision 1.92: download - view: text, markup, annotated - select for diffs
Sat Jun 6 15:22:58 2015 UTC (9 years, 6 months ago) by joerg
Branches: MAIN
Diff to: previous 1.91: preferred, colored
Changes since revision 1.91: +4 -3 lines
Use an explicit body for a "until not EINTR" loop.

Revision 1.87.2.2: download - view: text, markup, annotated - select for diffs
Tue Aug 19 23:45:11 2014 UTC (10 years, 3 months ago) by tls
Branches: tls-maxphys
Diff to: previous 1.87.2.1: preferred, colored; branchpoint 1.87: preferred, colored; next MAIN 1.88: preferred, colored
Changes since revision 1.87.2.1: +48 -5 lines
Rebase to HEAD as of a few days ago.

Revision 1.86.2.3: download - view: text, markup, annotated - select for diffs
Thu May 22 11:26:23 2014 UTC (10 years, 6 months ago) by yamt
Branches: yamt-pagecache
Diff to: previous 1.86.2.2: preferred, colored; branchpoint 1.86: preferred, colored; next MAIN 1.87: preferred, colored
Changes since revision 1.86.2.2: +48 -5 lines
sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs.  ("Protocol error: too many arguments")

Revision 1.91: download - view: text, markup, annotated - select for diffs
Mon Jan 20 14:05:51 2014 UTC (10 years, 10 months ago) by roy
Branches: MAIN
CVS tags: yamt-pagecache-base9, tls-maxphys-base, tls-earlyentropy-base, tls-earlyentropy, riastradh-xf86-video-intel-2-7-1-pre-2-21-15, riastradh-drm2-base3, netbsd-7-nhusb-base-20170116, netbsd-7-nhusb-base, netbsd-7-nhusb, netbsd-7-base, netbsd-7-1-RELEASE, netbsd-7-1-RC2, netbsd-7-1-RC1, netbsd-7-1-2-RELEASE, netbsd-7-1-1-RELEASE, netbsd-7-1, netbsd-7-0-RELEASE, netbsd-7-0-RC3, netbsd-7-0-RC2, netbsd-7-0-RC1, netbsd-7-0-2-RELEASE, netbsd-7-0-1-RELEASE, netbsd-7-0
Branch point for: netbsd-7
Diff to: previous 1.90: preferred, colored
Changes since revision 1.90: +40 -3 lines
Add wctype(3) support to Shell Patterns.
Obtained from FreeBSD.

Revision 1.90: download - view: text, markup, annotated - select for diffs
Sun Oct 6 21:05:50 2013 UTC (11 years, 2 months ago) by ast
Branches: MAIN
Diff to: previous 1.89: preferred, colored
Changes since revision 1.89: +3 -3 lines
Fix PR bin/48202 [non-critical/low]:
  sh +nounset and `for X; do` iteration fails if parameter set empty
by applying and testing FreeBSD's patch of Oct 24 2009 for this; see
  http://svnweb.freebsd.org/base/head/bin/sh/expand.c?r1=198453&r2=198454
Also created an ATF test in tests/bin/sh/t_expand.sh for this error and
corrected a space->tabs problem there as well.

Revision 1.89: download - view: text, markup, annotated - select for diffs
Wed Oct 2 19:52:58 2013 UTC (11 years, 2 months ago) by christos
Branches: MAIN
Diff to: previous 1.88: preferred, colored
Changes since revision 1.88: +9 -3 lines
add crude $LINENO support for FreeBSD

Revision 1.79.2.2: download - view: text, markup, annotated - select for diffs
Sun Jun 9 11:13:11 2013 UTC (11 years, 6 months ago) by msaitoh
Branches: netbsd-5
Diff to: previous 1.79.2.1: preferred, colored; branchpoint 1.79: preferred, colored; next MAIN 1.80: preferred, colored
Changes since revision 1.79.2.1: +18 -5 lines
Pull up following revision(s) (requested by gdt in ticket #1851):
	bin/sh/expand.c: revision 1.88
	bin/sh/expand.h: revision 1.19
Fix the expansion of "$(foo-$bar}" so that IFS isn't applied when
expanding $bar.
Noted by Greg Troxel on tech-userlevel running some 'git' tests.
Should fix PR bin/47361

Revision 1.87.2.1: download - view: text, markup, annotated - select for diffs
Mon Feb 25 00:23:53 2013 UTC (11 years, 9 months ago) by tls
Branches: tls-maxphys
Diff to: previous 1.87: preferred, colored
Changes since revision 1.87: +18 -5 lines
resync with head

Revision 1.86.4.1: download - view: text, markup, annotated - select for diffs
Sat Feb 2 15:43:27 2013 UTC (11 years, 10 months ago) by sborrill
Branches: netbsd-6
CVS tags: netbsd-6-1-RELEASE, netbsd-6-1-RC4, netbsd-6-1-RC3, netbsd-6-1-RC2, netbsd-6-1-RC1, netbsd-6-1-5-RELEASE, netbsd-6-1-4-RELEASE, netbsd-6-1-3-RELEASE, netbsd-6-1-2-RELEASE, netbsd-6-1-1-RELEASE, netbsd-6-1
Diff to: previous 1.86: preferred, colored; next MAIN 1.87: preferred, colored
Changes since revision 1.86: +18 -5 lines
Pull up the following revisions(s) (requested by dsl in ticket #773):
	bin/sh/expand.c:	revision 1.88
	bin/sh/expand.h:	revision 1.19

Fix the expansion of "$(foo-$bar}" so that IFS isn't applied when
expanding $bar. Should fix PR bin/47361

Revision 1.86.2.2: download - view: text, markup, annotated - select for diffs
Wed Jan 23 00:04:05 2013 UTC (11 years, 10 months ago) by yamt
Branches: yamt-pagecache
CVS tags: yamt-pagecache-tag8
Diff to: previous 1.86.2.1: preferred, colored; branchpoint 1.86: preferred, colored
Changes since revision 1.86.2.1: +18 -5 lines
sync with head

Revision 1.88: download - view: text, markup, annotated - select for diffs
Sat Dec 22 20:15:22 2012 UTC (11 years, 11 months ago) by dsl
Branches: MAIN
CVS tags: yamt-pagecache-base8, riastradh-drm2-base2, riastradh-drm2-base1, riastradh-drm2-base, riastradh-drm2, khorben-n900, agc-symver-base, agc-symver
Diff to: previous 1.87: preferred, colored
Changes since revision 1.87: +18 -5 lines
Fix the expansion of "$(foo-$bar}" so that IFS isn't applied when
expanding $bar.
Noted by Greg Troxel on tech-userlevel running some 'git' tests.
Should fix PR bin/47361

Revision 1.86.2.1: download - view: text, markup, annotated - select for diffs
Tue Apr 17 00:01:38 2012 UTC (12 years, 7 months ago) by yamt
Branches: yamt-pagecache
Diff to: previous 1.86: preferred, colored
Changes since revision 1.86: +3 -2 lines
sync with head

Revision 1.87: download - view: text, markup, annotated - select for diffs
Wed Mar 28 20:11:25 2012 UTC (12 years, 8 months ago) by christos
Branches: MAIN
CVS tags: yamt-pagecache-base7, yamt-pagecache-base6, yamt-pagecache-base5, yamt-pagecache-base4
Branch point for: tls-maxphys
Diff to: previous 1.86: preferred, colored
Changes since revision 1.86: +3 -2 lines
include <limits.h> for CHAR_MIN/CHAR_MAX

Revision 1.79.2.1: download - view: text, markup, annotated - select for diffs
Wed Nov 2 19:31:19 2011 UTC (13 years, 1 month ago) by riz
Branches: netbsd-5
CVS tags: netbsd-5-2-RELEASE, netbsd-5-2-RC1, netbsd-5-2-3-RELEASE, netbsd-5-2-2-RELEASE, netbsd-5-2-1-RELEASE, netbsd-5-2
Diff to: previous 1.79: preferred, colored
Changes since revision 1.79: +16 -10 lines
Pull up following revision(s) (requested by christos in ticket #1665):
	bin/sh/expand.c: revision 1.85
PR/45269: Andreas Gustafsson: Instead of falling off the edge when eating
trailing newlines
if the block has moved, arrange so that trailing newlines are never placed in
the string
in the first place, by accumulating them and adding them only after we've
encountered a
non-newline character. This allows also for more efficient appending since we
know how much
we need beforehand. From FreeBSD.

Revision 1.86: download - view: text, markup, annotated - select for diffs
Wed Aug 31 16:24:54 2011 UTC (13 years, 3 months ago) by plunky
Branches: MAIN
CVS tags: yamt-pagecache-base3, yamt-pagecache-base2, yamt-pagecache-base, netbsd-6-base, netbsd-6-0-RELEASE, netbsd-6-0-RC2, netbsd-6-0-RC1, netbsd-6-0-6-RELEASE, netbsd-6-0-5-RELEASE, netbsd-6-0-4-RELEASE, netbsd-6-0-3-RELEASE, netbsd-6-0-2-RELEASE, netbsd-6-0-1-RELEASE, netbsd-6-0, matt-nb6-plus-nbase, matt-nb6-plus-base, matt-nb6-plus
Branch point for: yamt-pagecache, netbsd-6
Diff to: previous 1.85: preferred, colored
Changes since revision 1.85: +4 -4 lines
NULL does not need a cast

Revision 1.85: download - view: text, markup, annotated - select for diffs
Tue Aug 23 10:04:39 2011 UTC (13 years, 3 months ago) by christos
Branches: MAIN
Diff to: previous 1.84: preferred, colored
Changes since revision 1.84: +16 -10 lines
PR/45269: Andreas Gustafsson: Instead of falling off the edge when eating trailing newlines
if the block has moved, arrange so that trailing newlines are never placed in the string
in the first place, by accumulating them and adding them only after we've encountered a
non-newline character. This allows also for more efficient appending since we know how much
we need beforehand. From FreeBSD.

Revision 1.83.4.1: download - view: text, markup, annotated - select for diffs
Thu Jun 23 14:17:48 2011 UTC (13 years, 5 months ago) by cherry
Branches: cherry-xenmp
Diff to: previous 1.83: preferred, colored; next MAIN 1.84: preferred, colored
Changes since revision 1.83: +3 -2 lines
Catchup with rmind-uvmplock merge.

Revision 1.84: download - view: text, markup, annotated - select for diffs
Sat Jun 18 21:18:46 2011 UTC (13 years, 5 months ago) by christos
Branches: MAIN
Diff to: previous 1.83: preferred, colored
Changes since revision 1.83: +3 -2 lines
PR/45069: Henning Petersen: Use prototypes from builtins.h .

Revision 1.83: download - view: text, markup, annotated - select for diffs
Fri Nov 27 10:50:04 2009 UTC (15 years ago) by tsutsui
Branches: MAIN
CVS tags: matt-premerge-20091211, matt-mips64-premerge-20101231, cherry-xenmp-base, bouyer-quota2-nbase, bouyer-quota2-base, bouyer-quota2
Branch point for: cherry-xenmp
Diff to: previous 1.82: preferred, colored
Changes since revision 1.82: +3 -3 lines
Use %zu in printf format for size_t value.

Revision 1.82: download - view: text, markup, annotated - select for diffs
Sun Jan 18 00:30:54 2009 UTC (15 years, 10 months ago) by lukem
Branches: MAIN
CVS tags: jym-xensuspend-nbase, jym-xensuspend-base, jym-xensuspend
Diff to: previous 1.81: preferred, colored
Changes since revision 1.81: +3 -3 lines
fix -Wsign-compare issues

Revision 1.81: download - view: text, markup, annotated - select for diffs
Sun Dec 21 17:15:09 2008 UTC (15 years, 11 months ago) by christos
Branches: MAIN
Diff to: previous 1.80: preferred, colored
Changes since revision 1.80: +15 -4 lines
use EXP_CASE only when trimming and unquoted.

Revision 1.80: download - view: text, markup, annotated - select for diffs
Sat Dec 20 20:36:44 2008 UTC (15 years, 11 months ago) by christos
Branches: MAIN
Diff to: previous 1.79: preferred, colored
Changes since revision 1.79: +3 -3 lines
PR/36954: Roland Illig: don't eat backlash escapes in variable patterns.
Makes ${line%%\**} work.

Revision 1.79: download - view: text, markup, annotated - select for diffs
Thu Oct 16 17:58:29 2008 UTC (16 years, 1 month ago) by dholland
Branches: MAIN
CVS tags: netbsd-5-base, netbsd-5-1-RELEASE, netbsd-5-1-RC4, netbsd-5-1-RC3, netbsd-5-1-RC2, netbsd-5-1-RC1, netbsd-5-1-5-RELEASE, netbsd-5-1-4-RELEASE, netbsd-5-1-3-RELEASE, netbsd-5-1-2-RELEASE, netbsd-5-1-1-RELEASE, netbsd-5-1, netbsd-5-0-RELEASE, netbsd-5-0-RC4, netbsd-5-0-RC3, netbsd-5-0-RC2, netbsd-5-0-RC1, netbsd-5-0-2-RELEASE, netbsd-5-0-1-RELEASE, netbsd-5-0, matt-nb5-pq3-base, matt-nb5-pq3, matt-nb5-mips64-u2-k2-k4-k7-k8-k9, matt-nb5-mips64-u1-k1-k5, matt-nb5-mips64-premerge-20101231, matt-nb5-mips64-premerge-20091211, matt-nb5-mips64-k15, matt-nb5-mips64, matt-nb4-mips64-k7-u2a-k9b, matt-mips64-base2
Branch point for: netbsd-5
Diff to: previous 1.78: preferred, colored
Changes since revision 1.78: +8 -6 lines
The field width passed for a %.*s printf format is supposed to be int, not
ptrdiff_t; on 64-bit platforms the latter will be too wide.
Adjust accordingly.

Revision 1.77.2.1: download - view: text, markup, annotated - select for diffs
Mon Apr 16 19:33:51 2007 UTC (17 years, 7 months ago) by bouyer
Branches: netbsd-4
CVS tags: wrstuden-fixsa-newbase, wrstuden-fixsa-base-1, wrstuden-fixsa-base, wrstuden-fixsa, netbsd-4-0-RELEASE, netbsd-4-0-RC5, netbsd-4-0-RC4, netbsd-4-0-RC3, netbsd-4-0-RC2, netbsd-4-0-RC1, netbsd-4-0-1-RELEASE, netbsd-4-0
Diff to: previous 1.77: preferred, colored; next MAIN 1.78: preferred, colored
Changes since revision 1.77: +10 -10 lines
Pull up following revision(s) (requested by apb in ticket #570):
	bin/sh/expand.c: revision 1.78
	bin/sh/arith.y: revision 1.18
	bin/sh/expand.h: revision 1.17
	regress/bin/sh/expand.sh: revision 1.4
	bin/sh/sh.1: revision 1.86
	bin/sh/arith_lex.l: revision 1.14
Make /bin/sh use intmax_t (instead of int) for arithmetic in $((...)).

Revision 1.78: download - view: text, markup, annotated - select for diffs
Sun Mar 25 06:29:26 2007 UTC (17 years, 8 months ago) by apb
Branches: MAIN
CVS tags: yamt-pf42-baseX, yamt-pf42-base4, yamt-pf42-base3, yamt-pf42-base2, yamt-pf42-base, yamt-pf42, wrstuden-revivesa-base-3, wrstuden-revivesa-base-2, wrstuden-revivesa-base-1, wrstuden-revivesa-base, wrstuden-revivesa, mjf-devfs2-base, mjf-devfs2, matt-mips64-base, matt-mips64, matt-armv6-prevmlocking, matt-armv6-nbase, matt-armv6-base, matt-armv6, keiichi-mipv6-base, keiichi-mipv6, hpcarm-cleanup-nbase, hpcarm-cleanup-base, hpcarm-cleanup, cube-autoconf-base, cube-autoconf
Diff to: previous 1.77: preferred, colored
Changes since revision 1.77: +10 -10 lines
Make /bin/sh use intmax_t (instead of int) for arithmetic in $((...)).

Revision 1.77: download - view: text, markup, annotated - select for diffs
Fri Nov 24 22:54:47 2006 UTC (18 years ago) by wiz
Branches: MAIN
CVS tags: netbsd-4-base
Branch point for: netbsd-4
Diff to: previous 1.76: preferred, colored
Changes since revision 1.76: +3 -3 lines
s/apparant/apparent/, from Zafer.

Revision 1.68.2.5: download - view: text, markup, annotated - select for diffs
Sat Sep 2 20:39:51 2006 UTC (18 years, 3 months ago) by ghen
Branches: netbsd-3
CVS tags: netbsd-3-1-RELEASE, netbsd-3-1-RC4, netbsd-3-1-RC3, netbsd-3-1-RC2, netbsd-3-1-1-RELEASE, netbsd-3-1
Diff to: previous 1.68.2.4: preferred, colored; branchpoint 1.68: preferred, colored; next MAIN 1.69: preferred, colored
Changes since revision 1.68.2.4: +2 -3 lines
Pull up following revision(s) (requested by dsl in ticket #1488):
	bin/sh/expand.c: revision 1.76
Set the 'not a parameter' flag when we skip initial whitespace.
Otherwise:
    ./sh -c 'x=" "; for a in $x; do echo a${a}a; done'
is processed as a single empty parameter (instead of no parameters).
Should fix the breakage I introdiced in rev 1.75 and PR/34256 and PR/34254

Revision 1.68.2.4: download - view: text, markup, annotated - select for diffs
Sat Sep 2 20:38:46 2006 UTC (18 years, 3 months ago) by ghen
Branches: netbsd-3
Diff to: previous 1.68.2.3: preferred, colored; branchpoint 1.68: preferred, colored
Changes since revision 1.68.2.3: +11 -10 lines
Pull up following revision(s) (requested by dsl in ticket #1487):
	bin/sh/expand.c: revision 1.75
Rework the code changes from revisions 1.69, 1.70 and 1.74 so that the code
behaves correctly.
As far as I can tell, "x$@y" now expands correctly, as does IFS=:; set -$IFS.
Fixes PR/33472 (again) and PR/33956

Revision 1.74.2.2: download - view: text, markup, annotated - select for diffs
Fri Sep 1 14:59:13 2006 UTC (18 years, 3 months ago) by tron
Branches: abandoned-netbsd-4
Diff to: previous 1.74.2.1: preferred, colored; branchpoint 1.74: preferred, colored; next MAIN 1.75: preferred, colored
Changes since revision 1.74.2.1: +3 -3 lines
Pull up following revision(s) (requested by dsl in ticket #84):
	bin/sh/expand.c: revision 1.76
Set the 'not a parameter' flag when we skip initial whitespace.
Otherwise:
    ./sh -c 'x=" "; for a in $x; do echo a${a}a; done'
is processed as a single empty parameter (instead of no parameters).
Should fix the breakage I introdiced in rev 1.75 and PR/34256 and PR/34254

Revision 1.74.2.1: download - view: text, markup, annotated - select for diffs
Fri Sep 1 14:57:54 2006 UTC (18 years, 3 months ago) by tron
Branches: abandoned-netbsd-4
Diff to: previous 1.74: preferred, colored
Changes since revision 1.74: +12 -12 lines
Pull up following revision(s) (requested by dsl in ticket #83):
	bin/sh/expand.c: revision 1.75
Rework the code changes from revisions 1.69, 1.70 and 1.74 so that the code
behaves correctly.
As far as I can tell, "x$@y" now expands correctly, as does IFS=:; set -$IFS.
Fixes PR/33472 (again) and PR/33956

Revision 1.76: download - view: text, markup, annotated - select for diffs
Tue Aug 22 18:11:42 2006 UTC (18 years, 3 months ago) by dsl
Branches: MAIN
Diff to: previous 1.75: preferred, colored
Changes since revision 1.75: +3 -3 lines
Set the 'not a parameter' flag when we skip initial whitespace.
Otherwise:
    ./sh -c 'x=" "; for a in $x; do echo a${a}a; done'
is processed as a single empty parameter (instead of no parameters).
Should fix the breakage I introdiced in rev 1.75 and PR/34256 and PR/34254

Revision 1.75: download - view: text, markup, annotated - select for diffs
Mon Aug 21 21:30:14 2006 UTC (18 years, 3 months ago) by dsl
Branches: MAIN
Diff to: previous 1.74: preferred, colored
Changes since revision 1.74: +12 -12 lines
Rework the code changes from revisions 1.69, 1.70 and 1.74 so that the code
behaves correctly.
As far as I can tell, "x$@y" now expands correctly, as does IFS=:; set -$IFS.
Fixes PR/33472 (again) and PR/33956

Revision 1.68.2.3: download - view: text, markup, annotated - select for diffs
Mon Jun 12 12:22:54 2006 UTC (18 years, 5 months ago) by tron
Branches: netbsd-3
CVS tags: netbsd-3-1-RC1
Diff to: previous 1.68.2.2: preferred, colored; branchpoint 1.68: preferred, colored
Changes since revision 1.68.2.2: +5 -5 lines
Pull up following revision(s) (requested by dsl in ticket #1336):
	bin/sh/expand.c: revision 1.74
When expanding "$@" add a \0 byte after the last argument (as well as all
the earlier ones) so that a separator is added before it when it is empty.
This wasn't needed before a recent change that chenged the behaviour of
trailing whitespace IFS characters.
Fixed PR/33472

Revision 1.68.2.2.2.1: download - view: text, markup, annotated - select for diffs
Mon Jun 12 12:19:27 2006 UTC (18 years, 5 months ago) by tron
Branches: netbsd-3-0
CVS tags: netbsd-3-0-3-RELEASE, netbsd-3-0-2-RELEASE, netbsd-3-0-1-RELEASE
Diff to: previous 1.68.2.2: preferred, colored; next MAIN 1.68.2.3: preferred, colored
Changes since revision 1.68.2.2: +5 -5 lines
Pull up following revision(s) (requested by dsl in ticket #1336):
	bin/sh/expand.c: revision 1.74
When expanding "$@" add a \0 byte after the last argument (as well as all
the earlier ones) so that a separator is added before it when it is empty.
This wasn't needed before a recent change that chenged the behaviour of
trailing whitespace IFS characters.
Fixed PR/33472

Revision 1.74: download - view: text, markup, annotated - select for diffs
Sat May 20 13:57:27 2006 UTC (18 years, 6 months ago) by dsl
Branches: MAIN
CVS tags: abandoned-netbsd-4-base
Branch point for: abandoned-netbsd-4
Diff to: previous 1.73: preferred, colored
Changes since revision 1.73: +5 -5 lines
When expanding "$@" add a \0 byte after the last argument (as well as all
the earlier ones) so that a separator is added before it when it is empty.
This wasn't needed before a recent change that chenged the behaviour of
trailing whitespace IFS characters.
Fixed PR/33472

Revision 1.73: download - view: text, markup, annotated - select for diffs
Sat Mar 18 05:25:56 2006 UTC (18 years, 8 months ago) by christos
Branches: MAIN
Diff to: previous 1.72: preferred, colored
Changes since revision 1.72: +2 -4 lines
Coverity CID 620: Remove dead code.

Revision 1.72: download - view: text, markup, annotated - select for diffs
Tue Dec 13 17:44:18 2005 UTC (18 years, 11 months ago) by dsl
Branches: MAIN
Diff to: previous 1.71: preferred, colored
Changes since revision 1.71: +3 -3 lines
TOG require that 'set +o' output the options in a form suitable for
restoring them - make it so.

Revision 1.60.2.1: download - view: text, markup, annotated - select for diffs
Fri Oct 28 22:52:23 2005 UTC (19 years, 1 month ago) by riz
Branches: netbsd-2-0
CVS tags: netbsd-2-0-3-RELEASE
Diff to: previous 1.60: preferred, colored; next MAIN 1.61: preferred, colored
Changes since revision 1.60: +4 -3 lines
Pull up following revision(s) (requested by martin in ticket #1418):
	bin/sh/expand.c: revision 1.68
expbackq() was incorrectly backing up a temporary buffer when removing \n
from the end of output of commands inside $(...) substitutions.
If the program output is n*128+1 bytes long (ending in a \n) then the code
checks buf[-1] for another \n - looking an uninitialised stack.
On a big-endian system an integer of value 10 will satisfy this (unlikely
on little endian) and can happen depending on the last code path to use
a lot of stack!
This caused the problem with newvers.sh on sparc64 after ', 2005' was
added to the date list.
Fixed PR/28852

Revision 1.71: download - view: text, markup, annotated - select for diffs
Wed Jun 1 15:41:19 2005 UTC (19 years, 6 months ago) by lukem
Branches: MAIN
Diff to: previous 1.70: preferred, colored
Changes since revision 1.70: +3 -3 lines
appease gcc -Wuninitialized

Revision 1.60.4.1: download - view: text, markup, annotated - select for diffs
Wed May 11 23:16:09 2005 UTC (19 years, 7 months ago) by riz
Branches: netbsd-2
CVS tags: netbsd-2-1-RELEASE, netbsd-2-1-RC6, netbsd-2-1-RC5, netbsd-2-1-RC4, netbsd-2-1-RC3, netbsd-2-1-RC2, netbsd-2-1-RC1, netbsd-2-1
Diff to: previous 1.60: preferred, colored; next MAIN 1.61: preferred, colored
Changes since revision 1.60: +4 -3 lines
Pull up revision 1.68 (requested by martin in ticket #1418):
expbackq() was incorrectly backing up a temporary buffer when removing \n
from the end of output of commands inside $(...) substitutions.
If the program output is n*128+1 bytes long (ending in a \n) then the code
checks buf[-1] for another \n - looking an uninitialised stack.
On a big-endian system an integer of value 10 will satisfy this (unlikely
on little endian) and can happen depending on the last code path to use
a lot of stack!
This caused the problem with newvers.sh on sparc64 after ', 2005' was
added to the date list.
Fixed PR/28852

Revision 1.68.2.2: download - view: text, markup, annotated - select for diffs
Thu Apr 7 11:37:39 2005 UTC (19 years, 8 months ago) by tron
Branches: netbsd-3
CVS tags: netbsd-3-0-RELEASE, netbsd-3-0-RC6, netbsd-3-0-RC5, netbsd-3-0-RC4, netbsd-3-0-RC3, netbsd-3-0-RC2, netbsd-3-0-RC1
Branch point for: netbsd-3-0
Diff to: previous 1.68.2.1: preferred, colored; branchpoint 1.68: preferred, colored
Changes since revision 1.68.2.1: +14 -11 lines
Pull up revision 1.70 (requested by dsl in ticket #119):
Check quoting before merging ifs regions.
sh -c 'set -- a; x="b c"; set -- "$@"$x'
now correctly gives $1=ab, $2=c

Revision 1.68.2.1: download - view: text, markup, annotated - select for diffs
Thu Apr 7 11:36:28 2005 UTC (19 years, 8 months ago) by tron
Branches: netbsd-3
Diff to: previous 1.68: preferred, colored
Changes since revision 1.68: +5 -4 lines
Pull up revision 1.69 (requested by dsl in ticket #118):
Don't merge ifs regions with different quoting requirements

Revision 1.70: download - view: text, markup, annotated - select for diffs
Sat Mar 19 16:38:27 2005 UTC (19 years, 8 months ago) by dsl
Branches: MAIN
Diff to: previous 1.69: preferred, colored
Changes since revision 1.69: +14 -11 lines
Check quoting before merging ifs regions.
sh -c 'set -- a; x="b c"; set -- "$@"$x'
now correctly gives $1=ab, $2=c

Revision 1.69: download - view: text, markup, annotated - select for diffs
Sat Mar 19 15:02:58 2005 UTC (19 years, 8 months ago) by dsl
Branches: MAIN
Diff to: previous 1.68: preferred, colored
Changes since revision 1.68: +5 -4 lines
Don't merge ifs regions with different quoting requirements

Revision 1.68: download - view: text, markup, annotated - select for diffs
Mon Feb 14 20:46:26 2005 UTC (19 years, 9 months ago) by dsl
Branches: MAIN
CVS tags: netbsd-3-base
Branch point for: netbsd-3
Diff to: previous 1.67: preferred, colored
Changes since revision 1.67: +4 -3 lines
expbackq() was incorrectly backing up a temporary buffer when removing \n
from the end of output of commands inside $(...) substitutions.
If the program output is n*128+1 bytes long (ending in a \n) then the code
checks buf[-1] for another \n - looking an uninitialised stack.
On a big-endian system an integer of value 10 will satisfy this (unlikely
on little endian) and can happen depending on the last code path to use
a lot of stack!
This caused the problem with newvers.sh on sparc64 after ', 2005' was
added to the date list.
Fixed PR/28852

Revision 1.67: download - view: text, markup, annotated - select for diffs
Tue Jul 13 15:05:59 2004 UTC (20 years, 4 months ago) by seb
Branches: MAIN
Diff to: previous 1.66: preferred, colored
Changes since revision 1.66: +25 -2 lines
Add new builtin `wordexp' to support wordexp(3).

From FreeBSD.
Provided in PR lib/26123.
Approved by kleink@.

Revision 1.66: download - view: text, markup, annotated - select for diffs
Sat Jun 26 22:09:49 2004 UTC (20 years, 5 months ago) by dsl
Branches: MAIN
Diff to: previous 1.65: preferred, colored
Changes since revision 1.65: +26 -7 lines
Correctly apply IFS to unquoted text in ${x-text}.
Fixes PR/26058 and the 'for i in ${x-a b c}; do ...' and ${x-'a b' c}.
I can't find a PR for the latter problem.
Regression test goind in shortly.

Revision 1.65: download - view: text, markup, annotated - select for diffs
Sat Jun 26 20:48:44 2004 UTC (20 years, 5 months ago) by dsl
Branches: MAIN
Diff to: previous 1.64: preferred, colored
Changes since revision 1.64: +2 -5 lines
Remove a broken optimistion that crept in earlier today.

Revision 1.64: download - view: text, markup, annotated - select for diffs
Sat Jun 26 14:21:29 2004 UTC (20 years, 5 months ago) by dsl
Branches: MAIN
Diff to: previous 1.63: preferred, colored
Changes since revision 1.63: +2 -3 lines
Kill a diagnostic I accidentally left in.

Revision 1.63: download - view: text, markup, annotated - select for diffs
Sat Jun 26 14:09:58 2004 UTC (20 years, 5 months ago) by dsl
Branches: MAIN
Diff to: previous 1.62: preferred, colored
Changes since revision 1.62: +116 -99 lines
No functional changes (intended).
Rename some variables, add some comments, and restructure a little.
In preparation for fixing "set ${x-a b c}" and friends.

Revision 1.62: download - view: text, markup, annotated - select for diffs
Wed Jun 9 12:17:36 2004 UTC (20 years, 6 months ago) by christos
Branches: MAIN
Diff to: previous 1.61: preferred, colored
Changes since revision 1.61: +5 -3 lines
Undo previous fix, breaks:
#!/bin/sh
echo ${1+"$@"}
./sh.new foo.sh a b c
a b c b c
I'll revisit this when I have some more time.

Revision 1.61: download - view: text, markup, annotated - select for diffs
Tue Jun 8 03:29:51 2004 UTC (20 years, 6 months ago) by christos
Branches: MAIN
Diff to: previous 1.60: preferred, colored
Changes since revision 1.60: +3 -5 lines
"for i in ${x-a b c}; do echo $i; done" should print "a\nb\nc\n" not "a b c\n"
like other shells do. mark the expansion for ifs splitting. XXX: linux has a
very complicated fix for this. I wonder why.

Revision 1.60: download - view: text, markup, annotated - select for diffs
Sun Dec 21 08:32:39 2003 UTC (20 years, 11 months ago) by jdolecek
Branches: MAIN
CVS tags: netbsd-2-base, netbsd-2-0-base, netbsd-2-0-RELEASE, netbsd-2-0-RC5, netbsd-2-0-RC4, netbsd-2-0-RC3, netbsd-2-0-RC2, netbsd-2-0-RC1, netbsd-2-0-2-RELEASE, netbsd-2-0-1-RELEASE
Branch point for: netbsd-2-0, netbsd-2
Diff to: previous 1.59: preferred, colored
Changes since revision 1.59: +3 -5 lines
minor optimization in evalvar()
change sent in bin/23813 by VaX#n8

Revision 1.59: download - view: text, markup, annotated - select for diffs
Mon Sep 22 12:17:24 2003 UTC (21 years, 2 months ago) by dsl
Branches: MAIN
Diff to: previous 1.58: preferred, colored
Changes since revision 1.58: +7 -8 lines
Fix 'set "*" b; case "* b" in "$@") ...' and 'set "*"; case 1 in "${#1}") ...'
Which got broken by the previous fix.

Revision 1.58: download - view: text, markup, annotated - select for diffs
Wed Sep 17 16:01:19 2003 UTC (21 years, 2 months ago) by christos
Branches: MAIN
Diff to: previous 1.57: preferred, colored
Changes since revision 1.57: +5 -4 lines
PR/22640: Paul Jarc: sh mishandles positional parameters in case. Fixed
from FreeBSD PR 56147.

Revision 1.57: download - view: text, markup, annotated - select for diffs
Thu Aug 7 09:05:32 2003 UTC (21 years, 4 months ago) by agc
Branches: MAIN
Diff to: previous 1.56: preferred, colored
Changes since revision 1.56: +3 -7 lines
Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22249, verified by myself.

Revision 1.56: download - view: text, markup, annotated - select for diffs
Sun Nov 24 22:35:39 2002 UTC (22 years ago) by christos
Branches: MAIN
CVS tags: fvdl_fs64_base
Diff to: previous 1.55: preferred, colored
Changes since revision 1.55: +56 -109 lines
Fixes from David Laight:
- ansification
- format of output of jobs command (etc)
- job identiers %+, %- etc
- $? and $(...)
- correct quoting of output of set, export -p and readonly -p
- differentiation between nornal and 'posix special' builtins
- correct behaviour (posix) for errors on builtins and special builtins
- builtin printf and kill
- set -o debug (if compiled with DEBUG)
- cd src obj (as ksh - too useful to do without)
- unset -e name, remove non-readonly variable from export list.
  (so I could unset -e PS1 before running the test shell...)

Revision 1.55: download - view: text, markup, annotated - select for diffs
Sat Sep 28 01:25:01 2002 UTC (22 years, 2 months ago) by christos
Branches: MAIN
Diff to: previous 1.54: preferred, colored
Changes since revision 1.54: +3 -4 lines
Revert previous change. No need to save rootshell. It is only affecting
the non-vfork case. Having said that, it would be nice if pipelines of
simple commands were vforked too. Right now they are not.
Explain that setpgid() might fail because we are doing it both in the
parent and the child case, because we don't know which one will come
first.
Suspending a pipeline prints %1 Suspended n times where n is the number
of processes, but that was there before. It is easy to fix, but I'll
leave the code alone for now.

Revision 1.54: download - view: text, markup, annotated - select for diffs
Fri Sep 27 22:56:24 2002 UTC (22 years, 2 months ago) by christos
Branches: MAIN
Diff to: previous 1.53: preferred, colored
Changes since revision 1.53: +4 -3 lines
Deal with rootshell not being maintained correctly in the vfork() case.
Propagate isroot, throughout the eval process and maintain it properly.
Fixes sleep 10 | cat^C not exiting because sleep and cat ended up in
their own process groups, because wasroot was always true in the children.

Revision 1.53: download - view: text, markup, annotated - select for diffs
Wed May 15 14:59:21 2002 UTC (22 years, 6 months ago) by christos
Branches: MAIN
CVS tags: netbsd-1-6-base, netbsd-1-6-RELEASE, netbsd-1-6-RC3, netbsd-1-6-RC2, netbsd-1-6-RC1, netbsd-1-6-PATCH002-RELEASE, netbsd-1-6-PATCH002-RC4, netbsd-1-6-PATCH002-RC3, netbsd-1-6-PATCH002-RC2, netbsd-1-6-PATCH002-RC1, netbsd-1-6-PATCH002, netbsd-1-6-PATCH001-RELEASE, netbsd-1-6-PATCH001-RC3, netbsd-1-6-PATCH001-RC2, netbsd-1-6-PATCH001-RC1, netbsd-1-6-PATCH001, netbsd-1-6
Diff to: previous 1.52: preferred, colored
Changes since revision 1.52: +13 -2 lines
Implement unset variable error messages from Ben Harris.

Revision 1.45.2.2: download - view: text, markup, annotated - select for diffs
Mon Jan 14 14:44:58 2002 UTC (22 years, 10 months ago) by he
Branches: netbsd-1-4
Diff to: previous 1.45.2.1: preferred, colored; branchpoint 1.45: preferred, colored; next MAIN 1.46: preferred, colored
Changes since revision 1.45.2.1: +7 -4 lines
Pull up revision 1.52 (requested by itojun):
  Do not truncate expr > 10 digits.  Fixes PR#13943.

Revision 1.49.4.1: download - view: text, markup, annotated - select for diffs
Mon Oct 8 19:50:50 2001 UTC (23 years, 2 months ago) by he
Branches: netbsd-1-5
CVS tags: netbsd-1-5-PATCH003
Diff to: previous 1.49: preferred, colored; next MAIN 1.50: preferred, colored
Changes since revision 1.49: +7 -4 lines
Pull up revision 1.52 (requested by itojun):
  Do not truncate expr > 10 digits.  Fixes PR#13943.

Revision 1.52: download - view: text, markup, annotated - select for diffs
Wed Sep 19 06:38:19 2001 UTC (23 years, 2 months ago) by itojun
Branches: MAIN
CVS tags: ELRICshvfork-base, ELRICshvfork
Diff to: previous 1.51: preferred, colored
Changes since revision 1.51: +7 -4 lines
make sure we do not truncate arith expresssion > 10 digits.
freebsd bin/sh/expand.c revision 1.15.  NetBSD PR 13943.

Revision 1.51: download - view: text, markup, annotated - select for diffs
Fri Mar 30 17:45:00 2001 UTC (23 years, 8 months ago) by mycroft
Branches: MAIN
Diff to: previous 1.50: preferred, colored
Changes since revision 1.50: +3 -3 lines
Globbing should match broken symlinks.  stat()->lstat() to fix this.

Revision 1.50: download - view: text, markup, annotated - select for diffs
Sun Feb 4 19:52:06 2001 UTC (23 years, 10 months ago) by christos
Branches: MAIN
Diff to: previous 1.49: preferred, colored
Changes since revision 1.49: +4 -3 lines
remove redundant declarations and nexted externs.

Revision 1.49: download - view: text, markup, annotated - select for diffs
Mon Mar 13 22:47:19 2000 UTC (24 years, 8 months ago) by soren
Branches: MAIN
CVS tags: netbsd-1-5-base, netbsd-1-5-RELEASE, netbsd-1-5-PATCH002, netbsd-1-5-PATCH001, netbsd-1-5-BETA2, netbsd-1-5-BETA, netbsd-1-5-ALPHA2, minoura-xpg4dl-base, minoura-xpg4dl
Branch point for: netbsd-1-5
Diff to: previous 1.48: preferred, colored
Changes since revision 1.48: +3 -3 lines
Fix doubled 'the' in comment.

Revision 1.48: download - view: text, markup, annotated - select for diffs
Fri Jul 9 03:05:50 1999 UTC (25 years, 5 months ago) by christos
Branches: MAIN
CVS tags: wrstuden-devbsize-base, wrstuden-devbsize-19991221, wrstuden-devbsize, comdex-fall-1999-base, comdex-fall-1999
Diff to: previous 1.47: preferred, colored
Changes since revision 1.47: +10 -10 lines
compile with WARNS = 2

Revision 1.47: download - view: text, markup, annotated - select for diffs
Fri Apr 30 17:54:17 1999 UTC (25 years, 7 months ago) by he
Branches: MAIN
Diff to: previous 1.46: preferred, colored
Changes since revision 1.46: +6 -6 lines
Fix for bin/7502, from Tor Egge / FreeBSD.  Their commit message:
> During variable expansion, the internal representation of the expression
> might be relocated.  Handle this case.

Revision 1.45.2.1: download - view: text, markup, annotated - select for diffs
Wed Apr 7 17:24:02 1999 UTC (25 years, 8 months ago) by he
Branches: netbsd-1-4
CVS tags: netbsd-1-4-RELEASE, netbsd-1-4-PATCH003, netbsd-1-4-PATCH002, netbsd-1-4-PATCH001
Diff to: previous 1.45: preferred, colored
Changes since revision 1.45: +3 -3 lines
Pull up 1.45-1.46.  Corrects what's obviously a typo.

Revision 1.46: download - view: text, markup, annotated - select for diffs
Tue Apr 6 21:05:27 1999 UTC (25 years, 8 months ago) by he
Branches: MAIN
Diff to: previous 1.45: preferred, colored
Changes since revision 1.45: +3 -3 lines
Correct a rather obvious typo (once Tor Egge pointed it out to me)
in the last change.

Revision 1.45: download - view: text, markup, annotated - select for diffs
Fri Mar 26 15:49:34 1999 UTC (25 years, 8 months ago) by christos
Branches: MAIN
CVS tags: netbsd-1-4-base
Branch point for: netbsd-1-4
Diff to: previous 1.44: preferred, colored
Changes since revision 1.44: +58 -16 lines
PR/7231: Havard Eidnes: Shell quoting/trimming problem

Revision 1.44: download - view: text, markup, annotated - select for diffs
Sat Feb 6 17:23:09 1999 UTC (25 years, 10 months ago) by christos
Branches: MAIN
Diff to: previous 1.43: preferred, colored
Changes since revision 1.43: +3 -3 lines
Fix off-by-one error in the starting point to search for an arithmetic
expression.

Revision 1.43: download - view: text, markup, annotated - select for diffs
Fri Feb 5 07:52:52 1999 UTC (25 years, 10 months ago) by christos
Branches: MAIN
Diff to: previous 1.42: preferred, colored
Changes since revision 1.42: +2 -3 lines
PR/5577: Craig M. Chase: sh does not build with PARALLEL set.
- Added YHEADER in Makefile, removed arith.h and adjusted the sources.

Revision 1.42: download - view: text, markup, annotated - select for diffs
Mon Jan 25 14:20:56 1999 UTC (25 years, 10 months ago) by mycroft
Branches: MAIN
Diff to: previous 1.41: preferred, colored
Changes since revision 1.41: +173 -56 lines
Patches from Tor Egge (via Havard Eidnes) to fix various bugs in field
splitting and combining.
(Note: Some of this are not strictly bugs, but differences between traditional
Bourne shell and POSIX.)

Revision 1.41: download - view: text, markup, annotated - select for diffs
Tue Jul 28 11:41:54 1998 UTC (26 years, 4 months ago) by mycroft
Branches: MAIN
Diff to: previous 1.40: preferred, colored
Changes since revision 1.40: +3 -3 lines
Be more retentive about use of NOTREACHED and noreturn.

Revision 1.40: download - view: text, markup, annotated - select for diffs
Sun Jul 26 19:44:12 1998 UTC (26 years, 4 months ago) by mycroft
Branches: MAIN
Diff to: previous 1.39: preferred, colored
Changes since revision 1.39: +3 -3 lines
const poisoning.

Revision 1.31.2.1: download - view: text, markup, annotated - select for diffs
Fri May 8 06:01:03 1998 UTC (26 years, 7 months ago) by mycroft
Branches: netbsd-1-3
CVS tags: netbsd-1-3-PATCH003-CANDIDATE2, netbsd-1-3-PATCH003-CANDIDATE1, netbsd-1-3-PATCH003-CANDIDATE0, netbsd-1-3-PATCH003, netbsd-1-3-PATCH002
Diff to: previous 1.31: preferred, colored; next MAIN 1.32: preferred, colored
Changes since revision 1.31: +62 -57 lines
Sync with trunk, per request of christos.

Revision 1.39: download - view: text, markup, annotated - select for diffs
Sun Mar 29 04:41:44 1998 UTC (26 years, 8 months ago) by mrg
Branches: MAIN
Diff to: previous 1.38: preferred, colored
Changes since revision 1.38: +6 -6 lines
- change "extern" variables into int's
- remove extern'd variables not actually referenced
- don't use char as an array index

Revision 1.38: download - view: text, markup, annotated - select for diffs
Mon Mar 23 18:21:02 1998 UTC (26 years, 8 months ago) by christos
Branches: MAIN
Diff to: previous 1.37: preferred, colored
Changes since revision 1.37: +18 -22 lines
Fix the VSTRIMRIGHT* bugs... The problem was not the string length computation,
but lack of '\0' termination. Factor this segment out as common code too, while
I am there.

Revision 1.37: download - view: text, markup, annotated - select for diffs
Tue Mar 10 19:11:07 1998 UTC (26 years, 9 months ago) by christos
Branches: MAIN
Diff to: previous 1.36: preferred, colored
Changes since revision 1.36: +3 -4 lines
off by one error in ${%%}

Revision 1.36: download - view: text, markup, annotated - select for diffs
Tue Feb 17 00:16:16 1998 UTC (26 years, 9 months ago) by christos
Branches: MAIN
Diff to: previous 1.35: preferred, colored
Changes since revision 1.35: +7 -9 lines
Previous fix broke $var quoting. Try again differently :-)

Revision 1.35: download - view: text, markup, annotated - select for diffs
Thu Feb 5 08:32:00 1998 UTC (26 years, 10 months ago) by christos
Branches: MAIN
Diff to: previous 1.34: preferred, colored
Changes since revision 1.34: +23 -20 lines
Fix bug introduced by EXP_RECORD, where in case there was a variable expansion
involved in the `for' list, the list was recorded twice, leading to incorrect
argument expansion.
Introduce ifsfree() function that free's the IFS region list, GC'ing duplicated
code.

Revision 1.34: download - view: text, markup, annotated - select for diffs
Sat Jan 31 12:45:07 1998 UTC (26 years, 10 months ago) by christos
Branches: MAIN
Diff to: previous 1.33: preferred, colored
Changes since revision 1.33: +6 -3 lines
PR/4851: Benjamin Lorenz: In the "for <var> in <args>" construct <args>
was not marked as a region to be handled by ifsbreakup. Add EXP_RECORD
to indicate that the argument string needs to be recorded.

Revision 1.33: download - view: text, markup, annotated - select for diffs
Mon Dec 1 14:43:20 1997 UTC (27 years ago) by christos
Branches: MAIN
Diff to: previous 1.32: preferred, colored
Changes since revision 1.32: +19 -22 lines
Unfortunately (as I expected) the previous change broke:

    sleep
    cmd='set `type "sleep"`; eval echo \$$#'
    which=`eval $cmd`
    echo $which

because the region did not get recorded at all, and it was interpreted as
a single word. I modified the code to keep track when the result of a
backquote expansion has been recorded to avoid recording it twice. I still
feel that this is not the right fix... More to come.

Revision 1.32: download - view: text, markup, annotated - select for diffs
Sun Nov 30 20:57:33 1997 UTC (27 years ago) by christos
Branches: MAIN
Diff to: previous 1.31: preferred, colored
Changes since revision 1.31: +12 -3 lines
PR/4547: Joern Clausen: Incorrect argument expansion in backquote variable
assignment. E.g.
	echo ${foo:=`echo 1 2 3 4`}
prints:
	1 2 3 1 2 3 4
because when the arquments are not quoted, the backquote result
gets recorded twice.  The fix right now is to comment out the
record_region() call in expbackq().  I hope that it does not break
anything else.

Revision 1.31: download - view: text, markup, annotated - select for diffs
Mon Jul 7 20:41:10 1997 UTC (27 years, 5 months ago) by phil
Branches: MAIN
CVS tags: netbsd-1-3-base, netbsd-1-3-RELEASE, netbsd-1-3-PATCH001, netbsd-1-3-BETA
Branch point for: netbsd-1-3
Diff to: previous 1.30: preferred, colored
Changes since revision 1.30: +5 -3 lines
Make code agree with man page in processing expansion of "$*".
Fix from PR 2647.

Revision 1.30: download - view: text, markup, annotated - select for diffs
Fri Jul 4 21:02:00 1997 UTC (27 years, 5 months ago) by christos
Branches: MAIN
Diff to: previous 1.29: preferred, colored
Changes since revision 1.29: +3 -2 lines
Fix compiler warnings.

Revision 1.29: download - view: text, markup, annotated - select for diffs
Tue Mar 18 18:54:40 1997 UTC (27 years, 8 months ago) by christos
Branches: MAIN
Diff to: previous 1.28: preferred, colored
Changes since revision 1.28: +4 -6 lines
PR/3352: From Hiroyuki Ito: ${#1} was not being expanded properly if there
was a need to allocated another stack block.

Revision 1.20.4.3: download - view: text, markup, annotated - select for diffs
Tue Mar 4 15:18:12 1997 UTC (27 years, 9 months ago) by mycroft
Branches: netbsd-1-2
CVS tags: netbsd-1-2-PATCH001
Diff to: previous 1.20.4.2: preferred, colored; branchpoint 1.20: preferred, colored; next MAIN 1.21: preferred, colored
Changes since revision 1.20.4.2: +15 -10 lines
Pull up latest sh(1).  Fixes yet more bugs.

Revision 1.28: download - view: text, markup, annotated - select for diffs
Mon Mar 3 19:26:18 1997 UTC (27 years, 9 months ago) by christos
Branches: MAIN
Diff to: previous 1.27: preferred, colored
Changes since revision 1.27: +15 -10 lines
varisset fixes:
	- treat $0 specially since it is not in shellparams
	- check the number of parameters instead of walking
	  the parameters array to avoid checking against the
	  null terminated element.

Revision 1.20.4.2: download - view: text, markup, annotated - select for diffs
Sun Mar 2 21:14:01 1997 UTC (27 years, 9 months ago) by mycroft
Branches: netbsd-1-2
Diff to: previous 1.20.4.1: preferred, colored; branchpoint 1.20: preferred, colored
Changes since revision 1.20.4.1: +3 -3 lines
Pull up off-by-one fix.

Revision 1.27: download - view: text, markup, annotated - select for diffs
Sat Mar 1 19:33:29 1997 UTC (27 years, 9 months ago) by christos
Branches: MAIN
Diff to: previous 1.26: preferred, colored
Changes since revision 1.26: +3 -3 lines
PR/3269: Off by one in varisset(), caused variable substitution not to
count the last positional parameter as set.

Revision 1.20.4.1: download - view: text, markup, annotated - select for diffs
Sun Jan 26 04:57:19 1997 UTC (27 years, 10 months ago) by rat
Branches: netbsd-1-2
Diff to: previous 1.20: preferred, colored
Changes since revision 1.20: +78 -47 lines
Update /bin/sh from trunk per request of Christos Zoulas.  Fixes
many bugs.

Revision 1.26: download - view: text, markup, annotated - select for diffs
Fri Jan 24 17:26:28 1997 UTC (27 years, 10 months ago) by christos
Branches: MAIN
Diff to: previous 1.25: preferred, colored
Changes since revision 1.25: +40 -14 lines
- varisset(): In positional arguments, take into account VSNUL so that:
  set -- ""; echo ${1:-wwww} works.
- when expanding arithmetic, discard previous ifs recorded regions, since we
  are doing our own scanning. x=ab; echo $((${#x}+1)) now works.
- in ${var#word} fix two bugs:
   * if there was an exact match, there was an off-by-one bug in the
     comparison of the words. x=abcd; echo ${x#abcd}
   * if there was no match, the stack region was not adjusted and the rest
     of the word was getting written in the wrong place. x=123; echo ${x#abc}X

Revision 1.25: download - view: text, markup, annotated - select for diffs
Sat Jan 11 02:04:32 1997 UTC (27 years, 11 months ago) by tls
Branches: MAIN
Diff to: previous 1.24: preferred, colored
Changes since revision 1.24: +10 -10 lines
kill 'register'

Revision 1.24: download - view: text, markup, annotated - select for diffs
Sat Nov 2 18:07:08 1996 UTC (28 years, 1 month ago) by christos
Branches: MAIN
Diff to: previous 1.23: preferred, colored
Changes since revision 1.23: +3 -4 lines
A correction to the previous patch from Todd Miller.

Revision 1.23: download - view: text, markup, annotated - select for diffs
Sat Nov 2 17:47:41 1996 UTC (28 years, 1 month ago) by christos
Branches: MAIN
Diff to: previous 1.22: preferred, colored
Changes since revision 1.22: +4 -3 lines
echo ${1:-empty} did not do the substitution; from Todd Miller (OpenBSD)

Revision 1.22: download - view: text, markup, annotated - select for diffs
Wed Oct 16 14:38:58 1996 UTC (28 years, 1 month ago) by christos
Branches: MAIN
Diff to: previous 1.21: preferred, colored
Changes since revision 1.21: +34 -31 lines
PR/2808: Fix parsing of $n where n > 9 (from FreeBSD)

Revision 1.21: download - view: text, markup, annotated - select for diffs
Mon Sep 2 21:25:52 1996 UTC (28 years, 3 months ago) by christos
Branches: MAIN
Diff to: previous 1.20: preferred, colored
Changes since revision 1.20: +5 -3 lines
Don't infinite loop with:
	unset var
	echo ${var:=}

Revision 1.20: download - view: text, markup, annotated - select for diffs
Mon Feb 12 15:11:41 1996 UTC (28 years, 10 months ago) by christos
Branches: MAIN
CVS tags: netbsd-1-2-base, netbsd-1-2-RELEASE, netbsd-1-2-BETA
Branch point for: netbsd-1-2
Diff to: previous 1.19: preferred, colored
Changes since revision 1.19: +20 -11 lines
Fix PR/2070: Ksh style variable modifiers were broken in /bin/sh, from
enami tsugutomo

Revision 1.19: download - view: text, markup, annotated - select for diffs
Mon May 15 02:47:41 1995 UTC (29 years, 7 months ago) by christos
Branches: MAIN
CVS tags: netbsd-1-1-base, netbsd-1-1-RELEASE, netbsd-1-1-PATCH001, netbsd-1-1
Diff to: previous 1.18: preferred, colored
Changes since revision 1.18: +3 -3 lines
Fixed new bug the previous fix introduced:

    false
    foo=bar
    echo $?

would print 1
Also fixed the long standing bug:

    false
    echo `echo $?`

would print 0
The exitstatus needs rethinking and rewriting. The trial and error method
is not very efficient

Revision 1.18: download - view: text, markup, annotated - select for diffs
Thu May 11 21:29:06 1995 UTC (29 years, 7 months ago) by christos
Branches: MAIN
Diff to: previous 1.17: preferred, colored
Changes since revision 1.17: +35 -50 lines
Merge in my changes from vangogh, and fix the x=`false`; echo $? == 0
bug.

Revision 1.17: download - view: text, markup, annotated - select for diffs
Tue Mar 21 09:09:04 1995 UTC (29 years, 8 months ago) by cgd
Branches: MAIN
Diff to: previous 1.16: preferred, colored
Changes since revision 1.16: +7 -2 lines
convert to new RCS id conventions.

Revision 1.16: download - view: text, markup, annotated - select for diffs
Tue Feb 28 23:27:24 1995 UTC (29 years, 9 months ago) by christos
Branches: MAIN
Diff to: previous 1.15: preferred, colored
Changes since revision 1.15: +2 -2 lines
Oops... typo in the IFS previous fix.

Revision 1.15: download - view: text, markup, annotated - select for diffs
Tue Feb 28 23:09:43 1995 UTC (29 years, 9 months ago) by christos
Branches: MAIN
Diff to: previous 1.14: preferred, colored
Changes since revision 1.14: +4 -2 lines
Changed so that backquote expansion eats all trailing newlines, not just
the last one.
Reported by guido@gvr.win.tue.nl (Guido van Rooij).
Repeat By:

	echo "`cat file-with-many-newlines`"

Revision 1.14: download - view: text, markup, annotated - select for diffs
Tue Feb 28 22:46:12 1995 UTC (29 years, 9 months ago) by christos
Branches: MAIN
Diff to: previous 1.13: preferred, colored
Changes since revision 1.13: +7 -5 lines
Changed IFS string-splitting so that it breaks spaces even when IFS does not
begin with a space, but contains one. Fixes PR bin/809.

        #!/bin/sh
        list="a  b c "
        echo "With ordinary IFS"
        for i in $list;do
            echo $i
        done
        IFS=":${IFS}"
        echo "With changed IFS"
        for i in $list;do
            echo $i
        done

Note that before the fix ":${IFS}" behaved differently than "${IFS}:".

Revision 1.13: download - view: text, markup, annotated - select for diffs
Mon Jan 23 06:33:03 1995 UTC (29 years, 10 months ago) by christos
Branches: MAIN
Diff to: previous 1.12: preferred, colored
Changes since revision 1.12: +207 -41 lines
I added the documented in the manual but not implemented variable expansions:

    ${#WORD}
    ${WORD%PAT}
    ${WORD%%PAT}
    ${WORD#PAT}
    ${WORD##PAT}

Revision 1.12: download - view: text, markup, annotated - select for diffs
Sun Dec 4 07:12:11 1994 UTC (30 years ago) by cgd
Branches: MAIN
Diff to: previous 1.11: preferred, colored
Changes since revision 1.11: +26 -11 lines
from James Jegers <jimj@miller.cs.uwm.edu>: quiet -Wall, and squelch
some of the worst style errors.

Revision 1.10.2.1: download - view: text, markup, annotated - select for diffs
Mon Aug 29 02:21:27 1994 UTC (30 years, 3 months ago) by mycroft
Branches: netbsd-1-0
CVS tags: netbsd-1-0-RELEASE, netbsd-1-0-PATCH1, netbsd-1-0-PATCH06, netbsd-1-0-PATCH05, netbsd-1-0-PATCH04, netbsd-1-0-PATCH03, netbsd-1-0-PATCH02, netbsd-1-0-PATCH0
Diff to: previous 1.10: preferred, colored; next MAIN 1.11: preferred, colored
Changes since revision 1.10: +3 -1 lines
update from trunk

Revision 1.11: download - view: text, markup, annotated - select for diffs
Mon Aug 29 01:54:39 1994 UTC (30 years, 3 months ago) by mycroft
Branches: MAIN
Diff to: previous 1.10: preferred, colored
Changes since revision 1.10: +3 -1 lines
Fix problem with character classes matching a terminating NUL, from Henry
Spencer.

Revision 1.10: download - view: text, markup, annotated - select for diffs
Sat Jun 11 16:11:54 1994 UTC (30 years, 6 months ago) by mycroft
Branches: MAIN
CVS tags: netbsd-1-0-base
Branch point for: netbsd-1-0
Diff to: previous 1.9: preferred, colored
Changes since revision 1.9: +2 -1 lines
Add RCS ids.

Revision 1.9: download - view: text, markup, annotated - select for diffs
Thu May 12 17:03:38 1994 UTC (30 years, 7 months ago) by jtc
Branches: MAIN
Diff to: previous 1.8: preferred, colored
Changes since revision 1.8: +1 -0 lines
Include appropriate header files to bring function prototypes into scope.

Revision 1.8: download - view: text, markup, annotated - select for diffs
Wed May 11 17:09:57 1994 UTC (30 years, 7 months ago) by jtc
Branches: MAIN
Diff to: previous 1.7: preferred, colored
Changes since revision 1.7: +199 -152 lines
sync with 4.4lite

Revision 1.1.1.2 (vendor branch): download - view: text, markup, annotated - select for diffs
Wed May 11 17:01:59 1994 UTC (30 years, 7 months ago) by jtc
Branches: WFJ-920714, CSRG
CVS tags: lite-1
Diff to: previous 1.1.1.1: preferred, colored
Changes since revision 1.1.1.1: +202 -146 lines
44lite code

Revision 1.7: download - view: text, markup, annotated - select for diffs
Fri Oct 22 13:32:22 1993 UTC (31 years, 1 month ago) by mycroft
Branches: MAIN
Diff to: previous 1.6: preferred, colored
Changes since revision 1.6: +4 -2 lines
Last patch was wrong; just save argbackq around the argstr() call.

Revision 1.6: download - view: text, markup, annotated - select for diffs
Fri Oct 22 13:20:02 1993 UTC (31 years, 1 month ago) by mycroft
Branches: MAIN
Diff to: previous 1.5: preferred, colored
Changes since revision 1.5: +2 -2 lines
evalvar():  If subtype is VSASSIGN (or VSQUESTION), argstr() already rolled
forward the backquote queue.  If VSQUESTION it doesn't matter because we
already exited with an error.

Revision 1.5: download - view: text, markup, annotated - select for diffs
Sun Aug 1 18:58:16 1993 UTC (31 years, 4 months ago) by mycroft
Branches: MAIN
Diff to: previous 1.4: preferred, colored
Changes since revision 1.4: +2 -2 lines
Add RCS identifiers.

Revision 1.4: download - view: text, markup, annotated - select for diffs
Sun May 2 01:28:40 1993 UTC (31 years, 7 months ago) by sef
Branches: MAIN
CVS tags: netbsd-0-9-base, netbsd-0-9-RELEASE, netbsd-0-9-BETA, netbsd-0-9-ALPHA2, netbsd-0-9-ALPHA, netbsd-0-9
Diff to: previous 1.3: preferred, colored
Changes since revision 1.3: +11 -5 lines
Jim "wilson@moria.cygnus.com" Wilson's patches to make C News (and other
things) work.

Revision 1.3: download - view: text, markup, annotated - select for diffs
Tue Mar 23 00:28:00 1993 UTC (31 years, 8 months ago) by cgd
Branches: MAIN
CVS tags: netbsd-alpha-1, netbsd-0-8
Diff to: previous 1.2: preferred, colored
Changes since revision 1.2: +1 -1 lines
changed "Id" to "Header" for rcsids

Revision 1.2: download - view: text, markup, annotated - select for diffs
Mon Mar 22 08:04:00 1993 UTC (31 years, 8 months ago) by cgd
Branches: MAIN
Diff to: previous 1.1: preferred, colored
Changes since revision 1.1: +1 -0 lines
added rcs ids to all files

Revision 1.1.1.1 (vendor branch): download - view: text, markup, annotated - select for diffs
Sun Mar 21 09:45:37 1993 UTC (31 years, 8 months ago) by cgd
Branches: WFJ-920714, CSRG
CVS tags: patchkit-0-2-2, WFJ-386bsd-01
Diff to: previous 1.1: preferred, colored
Changes since revision 1.1: +0 -0 lines
initial import of 386bsd-0.1 sources

Revision 1.1: download - view: text, markup, annotated - select for diffs
Sun Mar 21 09:45:37 1993 UTC (31 years, 8 months ago) by cgd
Branches: MAIN
Initial revision

Diff request

This form allows you to request diffs between any two revisions of a file. You may select a symbolic revision name using the selection box or you may type in a numeric name using the type-in text box.

Log view options

CVSweb <webmaster@jp.NetBSD.org>