--- /dev/null
+---------------------------------------------------
+2010-03-12 16:27:30 +0000 Tony Finch <dot@dotat.at>
+
+Release unifdef-2.3
+
+ web/index.html | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-12 16:23:35 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: upload to github before chiark
+
+ Makefile | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-12 16:21:27 +0000 Tony Finch <dot@dotat.at>
+
+Tweak the home page.
+
+Add the .htaccess file which keeps old URLs working.
+
+ web/.htaccess | 11 +++++++++++
+ web/index.html | 11 ++++++-----
+ 2 files changed, 17 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2010-03-12 15:43:19 +0000 Tony Finch <dot@dotat.at>
+
+Make the home page and gitweb titles consistent.
+
+ Makefile | 2 +-
+ web/index.html | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2010-03-12 15:29:12 +0000 Tony Finch <dot@dotat.at>
+
+Rename get-version.sh to reversion.sh for fun.
+
+ Makefile | 4 ++--
+ get-version.sh | 34 ----------------------------------
+ reversion.sh | 34 ++++++++++++++++++++++++++++++++++
+ 3 files changed, 36 insertions(+), 36 deletions(-)
+
+---------------------------------------------------
+2010-03-12 15:23:40 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: do not try to build unifdef.txt by default.
+
+DISTFILES shouldn't be in non-release targets.
+
+ Makefile | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-12 12:23:26 +0000 Tony Finch <dot@dotat.at>
+
+Merge commit 'book/master'
+
+---------------------------------------------------
+2010-03-12 12:22:51 +0000 Tony Finch <dot@dotat.at>
+
+Add -V and -S flags to synopses
+
+ unifdef.1 | 2 +-
+ unifdef.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-03-12 11:13:52 +0000 Tony Finch <dot@dotat.at>
+
+Merge commit 'book/master'
+
+---------------------------------------------------
+2010-03-12 11:07:35 +0000 Tony Finch <dot@dotat.at>
+
+web/index.html: link to github
+
+ web/index.html | 5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-03-12 11:07:35 +0000 Tony Finch <dot@dotat.at>
+
+web/index.html: link to github
+
+ web/index.html | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-12 11:03:03 +0000 Tony Finch <dot@dotat.at>
+
+README: add information about obtaining unifdef using git.
+
+ README | 9 ++++++---
+ 1 files changed, 6 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2010-03-12 11:01:15 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: tweak upload target
+
+Remove unsafe `git prune`. Push a copy to github.
+
+ Makefile | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-12 11:00:26 +0000 Tony Finch <dot@dotat.at>
+
+web/index.html: Fix git clone URL.
+
+ web/index.html | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-12 10:15:18 +0000 Tony Finch <dot@dotat.at>
+
+Release unifdef-2.2
+
+ web/index.html | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-12 10:08:04 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: print debugging output to stderr
+
+ unifdefall.sh | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2010-03-12 10:04:14 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: correct exit status if the clean-up rm fails
+
+Reported-by: Bob Proulx <bob@proulx.com>
+
+ unifdefall.sh | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-12 09:52:46 +0000 Tony Finch <dot@dotat.at>
+
+get-version.sh: fix build in clean git working tree
+
+`git show` exited non-zero which aborted the build.
+
+ get-version.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-03-12 09:34:18 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: fix version.h -> unifdef.c -> unifdef dependencies.
+
+ Makefile | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2010-03-12 09:28:02 +0000 Tony Finch <dot@dotat.at>
+
+get-version.sh fixes
+
+Test for the existence of version.sh (not version.h> before sourcing it.
+Cat the version files after re-writing them.
+Use printf(1) to create version.h for portability.
+
+ get-version.sh | 8 +++++---
+ 1 files changed, 5 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2010-03-11 21:41:45 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: safer "realclean" target
+
+ Makefile | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-11 21:17:58 +0000 Tony Finch <dot@dotat.at>
+
+Release unifdef-2.1
+
+ web/index.html | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-11 21:12:03 +0000 Tony Finch <dot@dotat.at>
+
+Add a -V option to print the embedded version details.
+
+ unifdef.1 | 5 ++++-
+ unifdef.c | 19 ++++++++++++++++++-
+ 2 files changed, 22 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-03-11 21:01:23 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: remove release.sh from DISTFILES
+
+ Makefile | 1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-11 20:59:11 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: prune .git before uploading
+
+ Makefile | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2010-03-11 20:56:29 +0000 Tony Finch <dot@dotat.at>
+
+index.html: mention the git glone command
+
+ web/index.html | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-11 20:52:26 +0000 Tony Finch <dot@dotat.at>
+
+Re-do the website handling and add an upload target.
+
+ Makefile | 15 ++++++++++---
+ index.html.in | 62 --------------------------------------------------------
+ web/index.html | 49 ++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 60 insertions(+), 66 deletions(-)
+
+---------------------------------------------------
+2010-03-11 20:28:13 +0000 Tony Finch <dot@dotat.at>
+
+Tell git to ignore release files.
+
+ .gitignore | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2010-03-11 20:27:04 +0000 Tony Finch <dot@dotat.at>
+
+Move release script into Makefile.
+
+ Makefile | 45 ++++++++++++++++++++++++++++++++++++---------
+ release.sh | 37 -------------------------------------
+ 2 files changed, 36 insertions(+), 46 deletions(-)
+
+---------------------------------------------------
+2010-03-11 20:08:03 +0000 Tony Finch <dot@dotat.at>
+
+Tell git to ignore output files.
+
+ .gitignore | 5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2010-03-11 20:04:35 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: do not clean inside .git directory.
+
+ Makefile | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-11 18:57:37 +0000 Tony Finch <dot@dotat.at>
+
+Embed version information from git into the unifdef binary.
+
+ Makefile | 9 ++++++---
+ get-version.sh | 32 ++++++++++++++++++++++++++++++++
+ unifdef.c | 9 +++++----
+ 3 files changed, 43 insertions(+), 7 deletions(-)
+
+---------------------------------------------------
+2010-03-11 18:57:15 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: clean trailing whitespace.
+
+ Makefile | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-11 18:56:58 +0000 Tony Finch <dot@dotat.at>
+
+INSTALL: Note the CFLAGS and LDFLAGS make variables.
+
+ INSTALL | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-11 18:56:34 +0000 Tony Finch <dot@dotat.at>
+
+Remove sccs, cvs, and svn revision tags.
+
+ INSTALL | 2 +-
+ Makefile | 2 +-
+ README | 3 +--
+ index.html.in | 1 -
+ release.sh | 2 --
+ runtests.sh | 2 --
+ unifdef.1 | 4 ----
+ unifdef.c | 5 ++---
+ unifdefall.sh | 2 --
+ 9 files changed, 5 insertions(+), 18 deletions(-)
+
+---------------------------------------------------
+2010-03-10 17:42:54 +0000 Tony Finch <dot@dotat.at>
+
+Improved debugging support.
+
+Add line numbers to unifdef's debugging output. Flush the output stream
+on each line when debugging to ensure stdout and stderr are properly
+interleaved. Add a debugging mode to unifdefall.sh which outputs its
+intermediate working files.
+
+ unifdef.c | 12 ++++++++----
+ unifdefall.sh | 20 +++++++++++++++-----
+ 2 files changed, 23 insertions(+), 9 deletions(-)
+
+---------------------------------------------------
+2010-03-07 18:11:07 +0000 Tony Finch <dot@dotat.at>
+
+Forced commit to note change to test suite.
+
+ runtests.sh | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-07 17:56:06 +0000 Tony Finch <dot@dotat.at>
+
+Adjust tests for change in license header.
+
+The extra line at the beginning of if1.c caused the line numbers
+in 'diff' output to change. Rather than playing catch-up, simplify
+the relevant tests to keep working if if1.c changes in other ways
+in the future.
+
+Submitted by: Jonathan Nieder <jrnieder@gmail.com>
+
+ tests/outdir.expout | 30 ++++++++++++++++--------------
+ tests/outdir.sh | 2 +-
+ tests/outfile.expout | 30 ++++++++++++++++--------------
+ tests/outfile.sh | 2 +-
+ tests/overdir.expout | 30 ++++++++++++++++--------------
+ tests/overdir.sh | 2 +-
+ tests/overwrite.expout | 30 ++++++++++++++++--------------
+ tests/overwrite.sh | 2 +-
+ 8 files changed, 68 insertions(+), 60 deletions(-)
+
+---------------------------------------------------
+2010-03-06 14:40:15 +0000 Tony Finch <dot@dotat.at>
+
+Add the COPYING file to the release.
+
+ release.sh | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-03-06 14:38:50 +0000 Tony Finch <dot@dotat.at>
+
+Fix HTML markup snafu.
+
+ index.html.in | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-03-06 14:37:14 +0000 Tony Finch <dot@dotat.at>
+
+Put the tests under the two-clause BSD copyright licence for consistency.
+
+ tests/crlf-a.expout | 2 +-
+ tests/crlf-b.expout | 2 +-
+ tests/crlf-c.expout | 2 +-
+ tests/crlf-d.expout | 2 +-
+ tests/crlf.c | 2 +-
+ tests/if1-a.expout | 3 ++-
+ tests/if1-k.c | 3 ++-
+ tests/if1-k.expout | 3 ++-
+ tests/if1-kDU.c | 3 ++-
+ tests/if1-kDU.expout | 3 ++-
+ tests/if1.c | 3 ++-
+ tests/if1.expout | 3 ++-
+ tests/if1a.expout | 3 ++-
+ tests/if2-a.expout | 3 ++-
+ tests/if2-k.c | 3 ++-
+ tests/if2-k.expout | 3 ++-
+ tests/if2-kDU.c | 3 ++-
+ tests/if2-kDU.expout | 3 ++-
+ tests/if2.c | 3 ++-
+ tests/if2.expout | 3 ++-
+ tests/if3-a.expout | 3 ++-
+ tests/if3-k.c | 3 ++-
+ tests/if3-k.expout | 3 ++-
+ tests/if3-kDU.c | 3 ++-
+ tests/if3-kDU.expout | 3 ++-
+ tests/if3.c | 3 ++-
+ tests/if3.expout | 3 ++-
+ tests/if4-a.expout | 3 ++-
+ tests/if4-k.c | 3 ++-
+ tests/if4-k.expout | 3 ++-
+ tests/if4-kDU.c | 3 ++-
+ tests/if4-kDU.expout | 3 ++-
+ tests/if4.c | 3 ++-
+ tests/if4.expout | 3 ++-
+ tests/if5-a.expout | 3 ++-
+ tests/if5-k.c | 3 ++-
+ tests/if5-k.expout | 3 ++-
+ tests/if5-kDU.c | 3 ++-
+ tests/if5-kDU.expout | 3 ++-
+ tests/if5.c | 3 ++-
+ tests/if5.expout | 3 ++-
+ tests/none.c | 3 ++-
+ tests/none.expout | 3 ++-
+ tests/small1.c | 3 ++-
+ tests/small1.expout | 3 ++-
+ tests/small2.c | 3 ++-
+ tests/small2.expout | 3 ++-
+ tests/spaces1.c | 3 ++-
+ tests/spaces1.expout | 3 ++-
+ tests/spaces2.c | 3 ++-
+ tests/spaces2.expout | 3 ++-
+ tests/spaces3.c | 3 ++-
+ tests/spaces3.expout | 3 ++-
+ tests/spaces4.c | 3 ++-
+ tests/spaces4.expout | 3 ++-
+ 55 files changed, 105 insertions(+), 55 deletions(-)
+
+---------------------------------------------------
+2010-03-06 14:30:26 +0000 Tony Finch <dot@dotat.at>
+
+Add a COPYING file to consolidate licence terms in one place.
+
+Remove the public domain declaration from runtests.sh so it is under the
+same licence as the other files.
+
+Improve the wording about the licensing of contributions.
+
+ COPYING | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ README | 8 +++---
+ index.html.in | 9 +++---
+ runtests.sh | 6 +---
+ 4 files changed, 93 insertions(+), 13 deletions(-)
+
+---------------------------------------------------
+2010-03-05 13:05:38 +0000 Tony Finch <dot@dotat.at>
+
+Adjust man page document title for backwards compatibility.
+
+Reported by: Bob Proulx <bob@proulx.com>
+
+ unifdef.1 | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2010-02-23 12:27:11 +0000 Tony Finch <dot@dotat.at>
+
+Actually, don't drop the 1. from the version number.
+
+Keeping it gives us more flexibility to change the numbering scheme
+while ensuring it continues to go up.
+
+ release.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-02-22 18:58:50 +0000 Tony Finch <dot@dotat.at>
+
+Drop 1. from the version number
+
+ release.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-02-22 18:58:30 +0000 Tony Finch <dot@dotat.at>
+
+Improve output of -S mode (list symbols with depths)
+
+Symbols tested in the same #if are listed on the same line.
+
+ unifdef.c | 17 +++++++++++++----
+ 1 files changed, 13 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2010-02-21 16:55:04 +0000 Tony Finch <dot@dotat.at>
+
+We don't need to compile unifdef when preparing the release.
+
+ release.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-02-21 16:53:20 +0000 Tony Finch <dot@dotat.at>
+
+Fix the release build to ensure that junk files are not included.
+
+We were failing to properly clean the tests directory.
+
+Reported-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ Makefile | 14 +++++++-------
+ release.sh | 7 +++++--
+ 2 files changed, 12 insertions(+), 9 deletions(-)
+
+---------------------------------------------------
+2010-02-19 20:43:13 +0000 Tony Finch <dot@dotat.at>
+
+Use -mdoc macro package when invoking nroff.
+
+ Makefile | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-02-19 20:25:50 +0000 Tony Finch <dot@dotat.at>
+
+Add a -S option for listing the nesting depth of symbols.
+
+Suggested by http://stackoverflow.com/questions/2012496
+
+ unifdef.1 | 23 +++++++++++++++--------
+ unifdef.c | 19 ++++++++++++-------
+ 2 files changed, 27 insertions(+), 15 deletions(-)
+
+---------------------------------------------------
+2010-02-19 20:08:37 +0000 Tony Finch <dot@dotat.at>
+
+A small tidy-up in process()
+
+ unifdef.c | 8 +++-----
+ 1 files changed, 3 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2010-02-19 19:46:41 +0000 Tony Finch <dot@dotat.at>
+
+Expand ACCESSPERMS rather than conditionally #defining it.
+
+ unifdef.c | 8 ++------
+ 1 files changed, 2 insertions(+), 6 deletions(-)
+
+---------------------------------------------------
+2010-02-19 18:35:26 +0000 Tony Finch <dot@dotat.at>
+
+Define ACCESSPERMS on systems (like Cygwin) that lack it.
+
+Suggested by Mark Rushakoff.
+
+ unifdef.c | 6 +++++-
+ 1 files changed, 5 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-02-19 17:30:50 +0000 Tony Finch <dot@dotat.at>
+
+Link to freshmeat.net for release announcements.
+
+ README | 5 ++++-
+ index.html.in | 9 ++++++---
+ 2 files changed, 10 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2010-02-19 17:15:44 +0000 Tony Finch <dot@dotat.at>
+
+Improve portability to systems with native CRLF newlines.
+
+ unifdef.c | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2010-02-19 17:11:39 +0000 Tony Finch <dot@dotat.at>
+
+Remove FreeBSD from manual page rubric, and update its date.
+
+ unifdef.1 | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2010-02-19 16:44:02 +0000 Tony Finch <dot@dotat.at>
+
+List INSTALL file on homepage
+
+ index.html.in | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-02-19 16:37:05 +0000 Tony Finch <dot@dotat.at>
+
+Fix a long-standing cpp compatibility bug.
+
+The -DFOO argument (without an explicit value) should define FOO to 1
+not to the empty string.
+
+ tests/crlf-a.sh | 2 +-
+ tests/crlf-b.sh | 2 +-
+ tests/crlf-c.sh | 2 +-
+ tests/crlf-d.sh | 2 +-
+ tests/if6a.sh | 2 +-
+ tests/if6b.sh | 2 +-
+ tests/if6c.sh | 2 +-
+ tests/if6d.sh | 2 +-
+ unifdef.1 | 14 ++++++++------
+ unifdef.c | 4 ++--
+ 10 files changed, 18 insertions(+), 16 deletions(-)
+
+---------------------------------------------------
+2010-02-19 16:31:08 +0000 Tony Finch <dot@dotat.at>
+
+Add support for CRLF newlines.
+
+As a side-effect, remove the dependency on strlcpy().
+
+Based on a suggestion from Mark Rushakoff.
+
+ INSTALL | 5 +--
+ tests/crlf-a.expout | 10 +++++++++
+ tests/crlf-a.exprc | 1 +
+ tests/crlf-a.sh | 1 +
+ tests/crlf-b.expout | 14 +++++++++++++
+ tests/crlf-b.exprc | 1 +
+ tests/crlf-b.sh | 1 +
+ tests/crlf-c.expout | 16 +++++++++++++++
+ tests/crlf-c.exprc | 1 +
+ tests/crlf-c.sh | 1 +
+ tests/crlf-d.expout | 18 +++++++++++++++++
+ tests/crlf-d.exprc | 1 +
+ tests/crlf-d.sh | 1 +
+ tests/crlf.c | 20 ++++++++++++++++++
+ unifdef.c | 54 ++++++++++++++++++++++++++++++++++----------------
+ 15 files changed, 125 insertions(+), 20 deletions(-)
+
+---------------------------------------------------
+2010-02-19 16:29:59 +0000 Tony Finch <dot@dotat.at>
+
+Fix tests to not rely on an uncommitted change.
+
+ tests/if6a.sh | 2 +-
+ tests/if6b.sh | 2 +-
+ tests/if6c.sh | 2 +-
+ tests/if6d.sh | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2010-02-19 16:03:44 +0000 Tony Finch <dot@dotat.at>
+
+More tests of keyword edits
+
+ tests/if6.c | 11 +++++++++++
+ tests/if6a.expout | 1 +
+ tests/if6a.exprc | 1 +
+ tests/if6a.sh | 1 +
+ tests/if6b.expout | 5 +++++
+ tests/if6b.exprc | 1 +
+ tests/if6b.sh | 1 +
+ tests/if6c.expout | 7 +++++++
+ tests/if6c.exprc | 1 +
+ tests/if6c.sh | 1 +
+ tests/if6d.expout | 9 +++++++++
+ tests/if6d.exprc | 1 +
+ tests/if6d.sh | 1 +
+ 13 files changed, 41 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2010-02-19 15:50:26 +0000 Tony Finch <dot@dotat.at>
+
+Test #elif -> #if edit
+
+ tests/if1a.expout | 23 +++++++++++++++++++++++
+ tests/if1a.exprc | 1 +
+ tests/if1a.sh | 1 +
+ 3 files changed, 25 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2010-01-20 00:48:26 +0000 Tony Finch <dot@dotat.at>
+
+unifdef.c: better diagnostics on write failure
+
+ unifdef.c | 5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-01-19 20:33:00 +0000 Tony Finch <dot@dotat.at>
+
+unifdef.c: fix portability to 64 bit platforms.
+
+printf("%.*s",i,s) expects an int not a ptrdiff_t
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-01-19 18:22:53 +0000 Tony Finch <dot@dotat.at>
+
+Fix English usage in wishlist comment
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2010-01-19 18:03:02 +0000 Tony Finch <dot@dotat.at>
+
+unifdef.c: re-arrange the introductory comment, #include lines, and
+
+embedded copyright strings so that the FreeBSD version of the code
+is tidier.
+
+ unifdef.c | 18 ++++++++----------
+ 1 files changed, 8 insertions(+), 10 deletions(-)
+
+---------------------------------------------------
+2010-01-19 17:33:53 +0000 Tony Finch <dot@dotat.at>
+
+Update manual date and copyright.
+
+ unifdef.1 | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2010-01-19 16:23:35 +0000 Tony Finch <dot@dotat.at>
+
+Add -o outfile option, which can be used to specify an output file. The
+
+file can even be the same as the input file. Idea from IRIX unifdef(1).
+This version also fixes a bug in the NetBSD unifdef which refuses to
+write to a -o outfile which does not exist.
+
+Obtained from: Brian Ginsbach <ginsbach@NetBSD.org> via NetBSD
+
+ tests/outdir.expout | 14 ++++++
+ tests/outdir.exprc | 1 +
+ tests/outdir.sh | 4 ++
+ tests/outfile.expout | 14 ++++++
+ tests/outfile.exprc | 1 +
+ tests/outfile.sh | 3 +
+ tests/overdir.expout | 14 ++++++
+ tests/overdir.exprc | 1 +
+ tests/overdir.sh | 5 ++
+ tests/overwrite.expout | 14 ++++++
+ tests/overwrite.exprc | 1 +
+ tests/overwrite.sh | 4 ++
+ unifdef.1 | 17 +++++++-
+ unifdef.c | 106 ++++++++++++++++++++++++++++++++++++++++++-----
+ 14 files changed, 185 insertions(+), 14 deletions(-)
+
+---------------------------------------------------
+2010-01-19 16:09:50 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: tidy copyright notice to match unifdef.c
+
+ unifdefall.sh | 7 +++----
+ 1 files changed, 3 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2010-01-19 13:37:00 +0000 Tony Finch <dot@dotat.at>
+
+release.sh: Add INSTALL to list of tarball contents.
+
+ release.sh | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2010-01-19 13:36:22 +0000 Tony Finch <dot@dotat.at>
+
+Add Jonathan Nieder to unifdefall's copyright declaration.
+
+ unifdefall.sh | 6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2010-01-15 18:37:39 +0000 Tony Finch <dot@dotat.at>
+
+Clean up the Makefile.
+
+ Makefile | 27 ++++++++++++++-------------
+ 1 files changed, 14 insertions(+), 13 deletions(-)
+
+---------------------------------------------------
+2010-01-15 18:33:05 +0000 Tony Finch <dot@dotat.at>
+
+Automatic install support.
+
+Add an install target to the Makefile. Using separate ${prefix} and
+${DESTDIR} variables opens the door to hardcoding the path to unifdef
+in unifdefall if we ever need to.
+
+Move the installation instructions from the README to a new INSTALL
+file to make it easier for packagers to omit irrelevant compilation
+instructions from the binary package's documentation.
+
+Submitted-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ INSTALL | 18 ++++++++++++++++++
+ Makefile | 20 +++++++++++++++++++-
+ README | 13 ++-----------
+ 3 files changed, 39 insertions(+), 12 deletions(-)
+
+---------------------------------------------------
+2010-01-15 17:43:17 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: do not remove Changelog on clean
+
+Regenerating the Changelog requires access to the unifdef CVS
+repository.
+
+Submitted-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ Makefile | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2010-01-15 17:41:21 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: look for unifdef in $(dirname $0)
+
+For debugging and for the test suite it is convenient is
+unifdefall can be run in place without relying on unifdef being
+installed elsewhere. So change unifdefall to look for unifdef in
+the containing directory.
+
+For compatibility, if unifdef is not present in the directory
+containing unifdefall, fall back to searching the $PATH for it.
+Some one might have installed unifdef and unifdefall to
+different directories.
+
+With this change, 'make test' no longer fails in if1-a.sh when
+unifdef is not present on the $PATH. Also, the test suite will
+be a little better at catching new regressions if an old version
+of unifdef is installed, since the unifdefall tests will no
+longer be testing the installed unifdef.
+
+Submitted-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ unifdefall.sh | 16 ++++++++++++----
+ 1 files changed, 12 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2009-12-02 15:21:22 +0000 Tony Finch <dot@dotat.at>
+
+Fix ident string -- gcc optimised it away.
+
+ unifdef.c | 9 ++++-----
+ 1 files changed, 4 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2009-11-27 17:30:39 +0000 Tony Finch <dot@dotat.at>
+
+Include full CVS log in the Changelog.
+
+ Makefile | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-27 17:24:25 +0000 Tony Finch <dot@dotat.at>
+
+release.sh: remove tests/CVS from tarball, and upload files faster.
+
+ release.sh | 5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-27 17:21:26 +0000 Tony Finch <dot@dotat.at>
+
+fix invalid array access when nesting limit exceeded
+
+If the number of nested #if blocks exceeds 64, nest() increments
+the nesting depth and then reports an error. The message includes
+the line number for the start of the current #if block, which is
+read from past the end of the relevant array.
+
+Avoid the out-of-bounds read by reporting the error and exiting
+before the nesting depth has a chance to increase.
+
+Submitted-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ unifdef.c | 8 +++++---
+ 1 files changed, 5 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2009-11-27 17:14:32 +0000 Tony Finch <dot@dotat.at>
+
+runtests.sh: portability: . does not search current directory
+
+POSIX.1-2008 dot searches only the $PATH and not the current
+directory for pathnames with no / in them. Accordingly, since
+version 4.0-alpha, bash does not search the current directory
+when in posix (sh) mode. The fix is to specify ./ explicitly.
+
+Submitted-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ runtests.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-27 15:40:10 +0000 Tony Finch <dot@dotat.at>
+
+Include a link to the web page in a comment in unifdef.c
+
+This is mainly for the benefit of the Linux kernel's stand-alone version.
+
+ unifdef.c | 6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-27 14:35:51 +0000 Tony Finch <dot@dotat.at>
+
+Consistent ordering of ${got} and ${exp} in the test script
+
+ runtests.sh | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2009-11-27 14:34:09 +0000 Tony Finch <dot@dotat.at>
+
+Include the tests in the web page
+
+ index.html.in | 4 +++-
+ release.sh | 4 ++--
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2009-11-27 14:32:49 +0000 Tony Finch <dot@dotat.at>
+
+Improve phrasing on web page
+
+ index.html.in | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-27 14:30:02 +0000 Tony Finch <dot@dotat.at>
+
+Run the tests in the correct directory
+
+ Makefile | 4 ++--
+ runtests.sh | 3 ++-
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2009-11-27 14:21:36 +0000 Tony Finch <dot@dotat.at>
+
+Add some unifdefall test cases.
+
+ tests/if1-a.exprc | 1 +
+ tests/if1-a.sh | 1 +
+ tests/if2-a.exprc | 1 +
+ tests/if2-a.sh | 1 +
+ tests/if3-a.exprc | 1 +
+ tests/if3-a.sh | 1 +
+ tests/if4-a.exprc | 1 +
+ tests/if4-a.sh | 1 +
+ tests/if5-a.exprc | 1 +
+ tests/if5-a.sh | 1 +
+ 10 files changed, 10 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2009-11-27 14:20:59 +0000 Tony Finch <dot@dotat.at>
+
+Ensure we clean up after a successful test.
+
+ runtests.sh | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2009-11-27 14:08:08 +0000 Tony Finch <dot@dotat.at>
+
+Simplify the test suite so that runtests.sh is not specific to unifdef.
+
+ Makefile | 5 +--
+ runtests.sh | 65 ++++++++++++++++++---------------------------------
+ tests/args1.sh | 1 +
+ tests/args2.sh | 1 +
+ tests/blank0d.args | 1 -
+ tests/blank0d.sh | 1 +
+ tests/blank0u.args | 1 -
+ tests/blank0u.sh | 1 +
+ tests/blank1d.args | 1 -
+ tests/blank1d.sh | 1 +
+ tests/blank1u.args | 1 -
+ tests/blank1u.sh | 1 +
+ tests/blank2d.args | 1 -
+ tests/blank2d.sh | 1 +
+ tests/blank2u.args | 1 -
+ tests/blank2u.sh | 1 +
+ tests/blank3d.args | 1 -
+ tests/blank3d.sh | 1 +
+ tests/blank3u.args | 1 -
+ tests/blank3u.sh | 1 +
+ tests/blank4d.args | 1 -
+ tests/blank4d.sh | 1 +
+ tests/blank4u.args | 1 -
+ tests/blank4u.sh | 1 +
+ tests/empty.sh | 1 +
+ tests/if1-k.args | 1 -
+ tests/if1-k.sh | 1 +
+ tests/if1-kDU.args | 1 -
+ tests/if1-kDU.sh | 1 +
+ tests/if1.sh | 1 +
+ tests/if2-k.args | 1 -
+ tests/if2-k.sh | 1 +
+ tests/if2-kDU.args | 1 -
+ tests/if2-kDU.sh | 1 +
+ tests/if2.sh | 1 +
+ tests/if3-k.args | 1 -
+ tests/if3-k.sh | 1 +
+ tests/if3-kDU.args | 1 -
+ tests/if3-kDU.sh | 1 +
+ tests/if3.sh | 1 +
+ tests/if4-k.args | 1 -
+ tests/if4-k.sh | 1 +
+ tests/if4-kDU.args | 1 -
+ tests/if4-kDU.sh | 1 +
+ tests/if4.sh | 1 +
+ tests/if5-k.args | 1 -
+ tests/if5-k.sh | 1 +
+ tests/if5-kDU.args | 1 -
+ tests/if5-kDU.sh | 1 +
+ tests/if5.sh | 1 +
+ tests/none.sh | 1 +
+ tests/small1.sh | 1 +
+ tests/small2.sh | 1 +
+ tests/spaces1.sh | 1 +
+ tests/spaces2.sh | 1 +
+ tests/spaces3.sh | 1 +
+ tests/spaces4.sh | 1 +
+ 57 files changed, 60 insertions(+), 65 deletions(-)
+
+---------------------------------------------------
+2009-11-27 13:36:39 +0000 Tony Finch <dot@dotat.at>
+
+Test suite tweaks.
+
+Move the runtests script into the main source directory.
+Remove the redundant .c. from the expected output filenames.
+Run the tests in a separate working directory.
+Include the tests in the release.
+
+ Makefile | 8 ++++--
+ release.sh | 7 +++--
+ runtests.sh | 17 +++++++-------
+ tests/args1.c.expout | 1 -
+ tests/args1.c.exprc | 1 -
+ tests/args2.c.expout | 3 --
+ tests/args2.c.exprc | 1 -
+ tests/blank0d.c.expout | 23 --------------------
+ tests/blank0d.c.exprc | 1 -
+ tests/blank0u.c.expout | 22 -------------------
+ tests/blank0u.c.exprc | 1 -
+ tests/blank1d.c.expout | 23 --------------------
+ tests/blank1d.c.exprc | 1 -
+ tests/blank1u.c.expout | 21 ------------------
+ tests/blank1u.c.exprc | 1 -
+ tests/blank2d.c.expout | 23 --------------------
+ tests/blank2d.c.exprc | 1 -
+ tests/blank2u.c.expout | 20 -----------------
+ tests/blank2u.c.exprc | 1 -
+ tests/blank3d.c.expout | 23 --------------------
+ tests/blank3d.c.exprc | 1 -
+ tests/blank3u.c.expout | 19 ----------------
+ tests/blank3u.c.exprc | 1 -
+ tests/blank4d.c.expout | 23 --------------------
+ tests/blank4d.c.exprc | 1 -
+ tests/blank4u.c.expout | 18 ---------------
+ tests/blank4u.c.exprc | 1 -
+ tests/empty.c.exprc | 1 -
+ tests/if1-a.c.expout | 15 -------------
+ tests/if1-k.c.expout | 29 -------------------------
+ tests/if1-k.c.exprc | 1 -
+ tests/if1-kDU.c.expout | 19 ----------------
+ tests/if1-kDU.c.exprc | 1 -
+ tests/if1.c.expout | 15 -------------
+ tests/if1.c.exprc | 1 -
+ tests/if2-a.c.expout | 12 ----------
+ tests/if2-k.c.expout | 20 -----------------
+ tests/if2-k.c.exprc | 1 -
+ tests/if2-kDU.c.expout | 16 --------------
+ tests/if2-kDU.c.exprc | 1 -
+ tests/if2.c.expout | 12 ----------
+ tests/if2.c.exprc | 1 -
+ tests/if3-a.c.expout | 12 ----------
+ tests/if3-k.c.expout | 20 -----------------
+ tests/if3-k.c.exprc | 1 -
+ tests/if3-kDU.c.expout | 16 --------------
+ tests/if3-kDU.c.exprc | 1 -
+ tests/if3.c.expout | 12 ----------
+ tests/if3.c.exprc | 1 -
+ tests/if4-a.c.expout | 21 ------------------
+ tests/if4-k.c.expout | 41 -----------------------------------
+ tests/if4-k.c.exprc | 1 -
+ tests/if4-kDU.c.expout | 25 ---------------------
+ tests/if4-kDU.c.exprc | 1 -
+ tests/if4.c.expout | 21 ------------------
+ tests/if4.c.exprc | 1 -
+ tests/if5-a.c.expout | 27 -----------------------
+ tests/if5-k.c.expout | 55 ------------------------------------------------
+ tests/if5-k.c.exprc | 1 -
+ tests/if5-kDU.c.expout | 31 ---------------------------
+ tests/if5-kDU.c.exprc | 1 -
+ tests/if5.c.expout | 27 -----------------------
+ tests/if5.c.exprc | 1 -
+ tests/none.c.expout | 4 ---
+ tests/none.c.exprc | 1 -
+ tests/runtests | 51 --------------------------------------------
+ tests/small1.c.expout | 12 ----------
+ tests/small1.c.exprc | 1 -
+ tests/small2.c.expout | 12 ----------
+ tests/small2.c.exprc | 1 -
+ tests/spaces1.c.expout | 12 ----------
+ tests/spaces1.c.exprc | 1 -
+ tests/spaces2.c.expout | 12 ----------
+ tests/spaces2.c.exprc | 1 -
+ tests/spaces3.c.expout | 12 ----------
+ tests/spaces3.c.exprc | 1 -
+ tests/spaces4.c.expout | 12 ----------
+ tests/spaces4.c.exprc | 1 -
+ 78 files changed, 18 insertions(+), 841 deletions(-)
+
+---------------------------------------------------
+2009-11-27 13:08:58 +0000 Tony Finch <dot@dotat.at>
+
+Additional tests from Bob Proulx <bob@proulx.com>
+
+Add his copyright notice to all the old tests.
+
+ runtests.sh | 6 ++++-
+ tests/if1-a.c.expout | 15 +++++++++++
+ tests/if1-a.expout | 15 +++++++++++
+ tests/if1-k.args | 1 +
+ tests/if1-k.c | 37 ++++++++++++++++++++++++++++
+ tests/if1-k.c.expout | 29 ++++++++++++++++++++++
+ tests/if1-k.c.exprc | 1 +
+ tests/if1-k.expout | 29 ++++++++++++++++++++++
+ tests/if1-k.exprc | 1 +
+ tests/if1-kDU.args | 1 +
+ tests/if1-kDU.c | 37 ++++++++++++++++++++++++++++
+ tests/if1-kDU.c.expout | 19 ++++++++++++++
+ tests/if1-kDU.c.exprc | 1 +
+ tests/if1-kDU.expout | 19 ++++++++++++++
+ tests/if1-kDU.exprc | 1 +
+ tests/if1.c | 3 ++
+ tests/if1.c.expout | 3 ++
+ tests/if1.expout | 3 ++
+ tests/if2-a.c.expout | 12 +++++++++
+ tests/if2-a.expout | 12 +++++++++
+ tests/if2-k.args | 1 +
+ tests/if2-k.c | 28 +++++++++++++++++++++
+ tests/if2-k.c.expout | 20 +++++++++++++++
+ tests/if2-k.c.exprc | 1 +
+ tests/if2-k.expout | 20 +++++++++++++++
+ tests/if2-k.exprc | 1 +
+ tests/if2-kDU.args | 1 +
+ tests/if2-kDU.c | 28 +++++++++++++++++++++
+ tests/if2-kDU.c.expout | 16 ++++++++++++
+ tests/if2-kDU.c.exprc | 1 +
+ tests/if2-kDU.expout | 16 ++++++++++++
+ tests/if2-kDU.exprc | 1 +
+ tests/if2.c | 3 ++
+ tests/if2.c.expout | 3 ++
+ tests/if2.expout | 3 ++
+ tests/if3-a.c.expout | 12 +++++++++
+ tests/if3-a.expout | 12 +++++++++
+ tests/if3-k.args | 1 +
+ tests/if3-k.c | 28 +++++++++++++++++++++
+ tests/if3-k.c.expout | 20 +++++++++++++++
+ tests/if3-k.c.exprc | 1 +
+ tests/if3-k.expout | 20 +++++++++++++++
+ tests/if3-k.exprc | 1 +
+ tests/if3-kDU.args | 1 +
+ tests/if3-kDU.c | 28 +++++++++++++++++++++
+ tests/if3-kDU.c.expout | 16 ++++++++++++
+ tests/if3-kDU.c.exprc | 1 +
+ tests/if3-kDU.expout | 16 ++++++++++++
+ tests/if3-kDU.exprc | 1 +
+ tests/if3.c | 3 ++
+ tests/if3.c.expout | 3 ++
+ tests/if3.expout | 3 ++
+ tests/if4-a.c.expout | 21 ++++++++++++++++
+ tests/if4-a.expout | 21 ++++++++++++++++
+ tests/if4-k.args | 1 +
+ tests/if4-k.c | 49 +++++++++++++++++++++++++++++++++++++
+ tests/if4-k.c.expout | 41 +++++++++++++++++++++++++++++++
+ tests/if4-k.c.exprc | 1 +
+ tests/if4-k.expout | 41 +++++++++++++++++++++++++++++++
+ tests/if4-k.exprc | 1 +
+ tests/if4-kDU.args | 1 +
+ tests/if4-kDU.c | 49 +++++++++++++++++++++++++++++++++++++
+ tests/if4-kDU.c.expout | 25 +++++++++++++++++++
+ tests/if4-kDU.c.exprc | 1 +
+ tests/if4-kDU.expout | 25 +++++++++++++++++++
+ tests/if4-kDU.exprc | 1 +
+ tests/if4.c | 3 ++
+ tests/if4.c.expout | 3 ++
+ tests/if4.expout | 3 ++
+ tests/if5-a.c.expout | 27 ++++++++++++++++++++
+ tests/if5-a.expout | 27 ++++++++++++++++++++
+ tests/if5-k.args | 1 +
+ tests/if5-k.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++
+ tests/if5-k.c.expout | 55 +++++++++++++++++++++++++++++++++++++++++
+ tests/if5-k.c.exprc | 1 +
+ tests/if5-k.expout | 55 +++++++++++++++++++++++++++++++++++++++++
+ tests/if5-k.exprc | 1 +
+ tests/if5-kDU.args | 1 +
+ tests/if5-kDU.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++
+ tests/if5-kDU.c.expout | 31 +++++++++++++++++++++++
+ tests/if5-kDU.c.exprc | 1 +
+ tests/if5-kDU.expout | 31 +++++++++++++++++++++++
+ tests/if5-kDU.exprc | 1 +
+ tests/if5.c | 3 ++
+ tests/if5.c.expout | 3 ++
+ tests/if5.expout | 3 ++
+ tests/none.c | 3 ++
+ tests/none.c.expout | 3 ++
+ tests/none.expout | 3 ++
+ tests/runtests | 6 ++++-
+ tests/small1.c | 3 ++
+ tests/small1.c.expout | 3 ++
+ tests/small1.expout | 3 ++
+ tests/small2.c | 3 ++
+ tests/small2.c.expout | 3 ++
+ tests/small2.expout | 3 ++
+ tests/spaces1.c | 3 ++
+ tests/spaces1.c.expout | 3 ++
+ tests/spaces1.expout | 3 ++
+ tests/spaces2.c | 3 ++
+ tests/spaces2.c.expout | 3 ++
+ tests/spaces2.expout | 3 ++
+ tests/spaces3.c | 3 ++
+ tests/spaces3.c.expout | 3 ++
+ tests/spaces3.expout | 3 ++
+ tests/spaces4.c | 3 ++
+ tests/spaces4.c.expout | 3 ++
+ tests/spaces4.expout | 3 ++
+ 108 files changed, 1276 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-27 12:48:13 +0000 Tony Finch <dot@dotat.at>
+
+List significant contributions in the README
+
+ README | 28 +++++++++++++++++++++-------
+ 1 files changed, 21 insertions(+), 7 deletions(-)
+
+---------------------------------------------------
+2009-11-27 12:36:54 +0000 Tony Finch <dot@dotat.at>
+
+Improve the blurb on the web page, based on the Debian package's
+
+description by Jonathan Nieder <jrnieder@gmail.com>.
+
+ index.html.in | 16 ++++++++++++----
+ 1 files changed, 12 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2009-11-26 14:12:30 +0000 Tony Finch <dot@dotat.at>
+
+Fix web page markup
+
+ index.html.in | 14 ++++++++------
+ 1 files changed, 8 insertions(+), 6 deletions(-)
+
+---------------------------------------------------
+2009-11-26 14:01:26 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: clean index.html generated by release.sh
+
+ Makefile | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-26 13:56:22 +0000 Tony Finch <dot@dotat.at>
+
+Do not edit index.html in place
+
+ index.html.in | 4 ++--
+ release.sh | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2009-11-26 13:54:10 +0000 Tony Finch <dot@dotat.at>
+
+Try again to prevent CVS keyword expansion in the wrong part of release.sh
+
+ release.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-26 13:52:09 +0000 Tony Finch <dot@dotat.at>
+
+Do not expand CVS keywords in the wrong part of release.sh
+
+ release.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-26 13:50:10 +0000 Tony Finch <dot@dotat.at>
+
+Improved release process.
+
+Calculate the version number from the sum of the CVS idents.
+Adjust the version number in the web page.
+
+ release.sh | 12 +++++++-----
+ 1 files changed, 7 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2009-11-26 13:48:45 +0000 Tony Finch <dot@dotat.at>
+
+Add a web page. Use the same title in the README and index.html.
+
+ README | 4 ++--
+ index.html.in | 46 ++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 48 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-26 12:54:39 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: optimise the loop that builds the unifdef command.
+
+The old code used a shell loop to convert each controlling macro
+definition into a command-line argument, reading the macro definitions
+file each time. The new code converts the list of controlling macros
+into a sed script which can run through the list of macro definitions
+in one go.
+
+Add some explanatory comments, since the code is quite meta.
+
+Submitted-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ unifdefall.sh | 24 ++++++++++++++++--------
+ 1 files changed, 16 insertions(+), 8 deletions(-)
+
+---------------------------------------------------
+2009-11-26 02:22:24 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: Use {} instead of () for redirecting a group of commands.
+
+Submitted-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ unifdefall.sh | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2009-11-26 02:14:47 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: remove debugging remnants.
+
+ unifdefall.sh | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2009-11-25 19:54:34 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: update copyright dates.
+
+ unifdefall.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-25 19:33:51 +0000 Tony Finch <dot@dotat.at>
+
+Makefile: really clean more.
+
+ Makefile | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-25 19:32:40 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: portability: do not try to use EREs with sed
+
+BSD sed uses -E and GNU sed uses -r to specify that extended
+regular expressions should be used instead of BREs.
+
+Some of the sed scripts have been simplified by relying on 'cpp -dM'
+to produce lines of the form '#define MACRO value', with a single
+space as delimiting whitespace.
+
+While we're modifying the sed scripts, also change the shell
+quoting script to correctly capture more characters when they
+appear in the right-hand sides of macro definitions (e.g., $).
+
+Submitted-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ unifdefall.sh | 17 ++++++++---------
+ 1 files changed, 8 insertions(+), 9 deletions(-)
+
+---------------------------------------------------
+2009-11-25 19:24:59 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: fix mktemp invocation
+
+Actually remove the -t that should have gone in rev. 1.14
+
+ unifdefall.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-25 19:23:12 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: simplify redirections to the temporary script
+
+ unifdefall.sh | 19 ++++++++++---------
+ 1 files changed, 10 insertions(+), 9 deletions(-)
+
+---------------------------------------------------
+2009-11-25 18:05:11 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: force the "C" locale to avoid braindamage
+
+Reported-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ unifdefall.sh | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2009-11-25 18:02:41 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: clean up temporary files on failure
+
+Submitted-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ unifdefall.sh | 5 ++---
+ 1 files changed, 2 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2009-11-25 18:00:54 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: allow spaces in $TMPDIR
+
+Submitted-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ unifdefall.sh | 28 ++++++++++++++--------------
+ 1 files changed, 14 insertions(+), 14 deletions(-)
+
+---------------------------------------------------
+2009-11-25 17:56:10 +0000 Tony Finch <dot@dotat.at>
+
+unifdefall: portability: avoid mktemp -t
+
+GNU mktemp interprets the argument after -t as the entire template
+and errors out if it contains no XXXX substring. BSD systems, on
+the other hand, treat the argument as a prefix for the mktemp
+template and use it verbatim, resulting in long, ugly filenames
+like foo.XXXXX.e30GuhHVzU if the string contains embedded Xs.
+
+So avoid -t and use TMPDIR explicitly.
+
+Submitted-by: Jonathan Nieder <jrnieder@gmail.com>
+
+ unifdefall.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-25 17:54:13 +0000 Tony Finch <dot@dotat.at>
+
+Use $() instead of `` in unifdefall.
+
+ unifdefall.sh | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2009-11-25 00:11:02 +0000 Tony Finch <dot@dotat.at>
+
+Improve the behaviour of the -B option.
+
+Submitted-by: Anders H Kaseorg <andersk@mit.edu>
+
+ tests/blank1d.c.expout | 1 +
+ tests/blank1d.expout | 1 +
+ tests/blank2d.c.expout | 2 ++
+ tests/blank2d.expout | 2 ++
+ tests/blank3d.c.expout | 3 +++
+ tests/blank3d.expout | 3 +++
+ tests/blank4d.c.expout | 4 ++++
+ tests/blank4d.expout | 4 ++++
+ unifdef.1 | 4 ++--
+ unifdef.c | 17 +++++++++++------
+ 10 files changed, 33 insertions(+), 8 deletions(-)
+
+---------------------------------------------------
+2009-11-25 00:03:44 +0000 Tony Finch <dot@dotat.at>
+
+Add some test cases for blank line squashing.
+
+ tests/blank0d.args | 1 +
+ tests/blank0d.c | 25 +++++++++++++++++++++++++
+ tests/blank0d.c.expout | 23 +++++++++++++++++++++++
+ tests/blank0d.c.exprc | 1 +
+ tests/blank0d.expout | 23 +++++++++++++++++++++++
+ tests/blank0d.exprc | 1 +
+ tests/blank0u.args | 1 +
+ tests/blank0u.c | 25 +++++++++++++++++++++++++
+ tests/blank0u.c.expout | 22 ++++++++++++++++++++++
+ tests/blank0u.c.exprc | 1 +
+ tests/blank0u.expout | 22 ++++++++++++++++++++++
+ tests/blank0u.exprc | 1 +
+ tests/blank1d.args | 1 +
+ tests/blank1d.c | 25 +++++++++++++++++++++++++
+ tests/blank1d.c.expout | 22 ++++++++++++++++++++++
+ tests/blank1d.c.exprc | 1 +
+ tests/blank1d.expout | 22 ++++++++++++++++++++++
+ tests/blank1d.exprc | 1 +
+ tests/blank1u.args | 1 +
+ tests/blank1u.c | 25 +++++++++++++++++++++++++
+ tests/blank1u.c.expout | 21 +++++++++++++++++++++
+ tests/blank1u.c.exprc | 1 +
+ tests/blank1u.expout | 21 +++++++++++++++++++++
+ tests/blank1u.exprc | 1 +
+ tests/blank2d.args | 1 +
+ tests/blank2d.c | 25 +++++++++++++++++++++++++
+ tests/blank2d.c.expout | 21 +++++++++++++++++++++
+ tests/blank2d.c.exprc | 1 +
+ tests/blank2d.expout | 21 +++++++++++++++++++++
+ tests/blank2d.exprc | 1 +
+ tests/blank2u.args | 1 +
+ tests/blank2u.c | 25 +++++++++++++++++++++++++
+ tests/blank2u.c.expout | 20 ++++++++++++++++++++
+ tests/blank2u.c.exprc | 1 +
+ tests/blank2u.expout | 20 ++++++++++++++++++++
+ tests/blank2u.exprc | 1 +
+ tests/blank3d.args | 1 +
+ tests/blank3d.c | 25 +++++++++++++++++++++++++
+ tests/blank3d.c.expout | 20 ++++++++++++++++++++
+ tests/blank3d.c.exprc | 1 +
+ tests/blank3d.expout | 20 ++++++++++++++++++++
+ tests/blank3d.exprc | 1 +
+ tests/blank3u.args | 1 +
+ tests/blank3u.c | 25 +++++++++++++++++++++++++
+ tests/blank3u.c.expout | 19 +++++++++++++++++++
+ tests/blank3u.c.exprc | 1 +
+ tests/blank3u.expout | 19 +++++++++++++++++++
+ tests/blank3u.exprc | 1 +
+ tests/blank4d.args | 1 +
+ tests/blank4d.c | 25 +++++++++++++++++++++++++
+ tests/blank4d.c.expout | 19 +++++++++++++++++++
+ tests/blank4d.c.exprc | 1 +
+ tests/blank4d.expout | 19 +++++++++++++++++++
+ tests/blank4d.exprc | 1 +
+ tests/blank4u.args | 1 +
+ tests/blank4u.c | 25 +++++++++++++++++++++++++
+ tests/blank4u.c.expout | 18 ++++++++++++++++++
+ tests/blank4u.c.exprc | 1 +
+ tests/blank4u.expout | 18 ++++++++++++++++++
+ tests/blank4u.exprc | 1 +
+ 60 files changed, 690 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2009-11-24 23:46:36 +0000 Tony Finch <dot@dotat.at>
+
+Further test script clean-ups.
+
+ runtests.sh | 27 ++++++++++++---------------
+ tests/runtests | 27 ++++++++++++---------------
+ 2 files changed, 24 insertions(+), 30 deletions(-)
+
+---------------------------------------------------
+2009-11-24 22:40:01 +0000 Tony Finch <dot@dotat.at>
+
+Add a couple of tests for macro argument handling
+
+ tests/args1.c | 3 +++
+ tests/args1.c.expout | 1 +
+ tests/args1.c.exprc | 1 +
+ tests/args1.expout | 1 +
+ tests/args1.exprc | 1 +
+ tests/args2.c | 3 +++
+ tests/args2.c.expout | 3 +++
+ tests/args2.c.exprc | 1 +
+ tests/args2.expout | 3 +++
+ tests/args2.exprc | 1 +
+ 10 files changed, 18 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2009-11-24 22:39:36 +0000 Tony Finch <dot@dotat.at>
+
+Automatically run newly-added tests.
+
+ runtests.sh | 7 +++----
+ tests/runtests | 7 +++----
+ 2 files changed, 6 insertions(+), 8 deletions(-)
+
+---------------------------------------------------
+2009-11-24 22:32:35 +0000 Tony Finch <dot@dotat.at>
+
+Fix detection of missing test output files.
+
+ runtests.sh | 3 +--
+ tests/runtests | 3 +--
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2009-11-24 22:25:55 +0000 Tony Finch <dot@dotat.at>
+
+Move tests/Makefile into the main Makefile.
+
+ Makefile | 6 +++++-
+ tests/Makefile | 5 -----
+ 2 files changed, 5 insertions(+), 6 deletions(-)
+
+---------------------------------------------------
+2009-11-24 22:20:26 +0000 Tony Finch <dot@dotat.at>
+
+Support non-standard test command arguments.
+
+ runtests.sh | 7 ++++++-
+ tests/runtests | 7 ++++++-
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-24 22:13:15 +0000 Tony Finch <dot@dotat.at>
+
+Remove redundancy from the test scripts.
+
+ runtests.sh | 47 ++++++++++++++++++++++++++++++++++++++
+ tests/Makefile | 11 +-------
+ tests/empty.c.exprc | 1 +
+ tests/empty.exprc | 1 +
+ tests/if1.c.exprc | 1 +
+ tests/if1.exprc | 1 +
+ tests/if2.c.exprc | 1 +
+ tests/if2.exprc | 1 +
+ tests/if3.c.exprc | 1 +
+ tests/if3.exprc | 1 +
+ tests/if4.c.exprc | 1 +
+ tests/if4.exprc | 1 +
+ tests/if5.c.exprc | 1 +
+ tests/if5.exprc | 1 +
+ tests/none.c.exprc | 1 +
+ tests/none.exprc | 1 +
+ tests/runtests | 47 ++++++++++++++++++++++++++++++++++++++
+ tests/simple1 | 58 -----------------------------------------------
+ tests/simple2 | 60 -------------------------------------------------
+ tests/small1.c.exprc | 1 +
+ tests/small1.exprc | 1 +
+ tests/small2.c.exprc | 1 +
+ tests/small2.exprc | 1 +
+ tests/spaces1.c.exprc | 1 +
+ tests/spaces1.exprc | 1 +
+ tests/spaces2.c.exprc | 1 +
+ tests/spaces2.exprc | 1 +
+ tests/spaces3.c.exprc | 1 +
+ tests/spaces3.exprc | 1 +
+ tests/spaces4.c.exprc | 1 +
+ tests/spaces4.exprc | 1 +
+ 31 files changed, 122 insertions(+), 127 deletions(-)
+
+---------------------------------------------------
+2009-11-24 21:32:53 +0000 Tony Finch <dot@dotat.at>
+
+Make the simple3 test script redundant.
+
+ tests/Makefile | 2 +-
+ tests/simple2 | 6 +++-
+ tests/simple3 | 58 --------------------------------------------------------
+ 3 files changed, 5 insertions(+), 61 deletions(-)
+
+---------------------------------------------------
+2009-11-24 21:27:29 +0000 Tony Finch <dot@dotat.at>
+
+Reduce repetition of the test command in the scripts.
+
+ tests/simple1 | 14 ++++++++------
+ tests/simple2 | 14 ++++++++------
+ tests/simple3 | 14 ++++++++------
+ 3 files changed, 24 insertions(+), 18 deletions(-)
+
+---------------------------------------------------
+2009-11-24 21:23:30 +0000 Tony Finch <dot@dotat.at>
+
+Fix relative path from tests to unifdef executable.
+
+ tests/simple1 | 2 +-
+ tests/simple2 | 2 +-
+ tests/simple3 | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2009-11-24 21:21:47 +0000 Tony Finch <dot@dotat.at>
+
+Import Bob Proulx's test suite from the Debian package.
+
+ tests/Makefile | 12 ++++++++++
+ tests/if1.c | 22 ++++++++++++++++++
+ tests/if1.c.expout | 12 ++++++++++
+ tests/if1.expout | 12 ++++++++++
+ tests/if2.c | 13 +++++++++++
+ tests/if2.c.expout | 9 +++++++
+ tests/if2.expout | 9 +++++++
+ tests/if3.c | 13 +++++++++++
+ tests/if3.c.expout | 9 +++++++
+ tests/if3.expout | 9 +++++++
+ tests/if4.c | 34 +++++++++++++++++++++++++++++
+ tests/if4.c.expout | 18 +++++++++++++++
+ tests/if4.expout | 18 +++++++++++++++
+ tests/if5.c | 48 +++++++++++++++++++++++++++++++++++++++++
+ tests/if5.c.expout | 24 ++++++++++++++++++++
+ tests/if5.expout | 24 ++++++++++++++++++++
+ tests/none.c | 1 +
+ tests/none.c.expout | 1 +
+ tests/none.expout | 1 +
+ tests/simple1 | 56 ++++++++++++++++++++++++++++++++++++++++++++++++
+ tests/simple2 | 56 ++++++++++++++++++++++++++++++++++++++++++++++++
+ tests/simple3 | 56 ++++++++++++++++++++++++++++++++++++++++++++++++
+ tests/small1.c | 13 +++++++++++
+ tests/small1.c.expout | 9 +++++++
+ tests/small1.expout | 9 +++++++
+ tests/small2.c | 13 +++++++++++
+ tests/small2.c.expout | 9 +++++++
+ tests/small2.expout | 9 +++++++
+ tests/spaces1.c | 13 +++++++++++
+ tests/spaces1.c.expout | 9 +++++++
+ tests/spaces1.expout | 9 +++++++
+ tests/spaces2.c | 13 +++++++++++
+ tests/spaces2.c.expout | 9 +++++++
+ tests/spaces2.expout | 9 +++++++
+ tests/spaces3.c | 13 +++++++++++
+ tests/spaces3.c.expout | 9 +++++++
+ tests/spaces3.expout | 9 +++++++
+ tests/spaces4.c | 13 +++++++++++
+ tests/spaces4.c.expout | 9 +++++++
+ tests/spaces4.expout | 9 +++++++
+ 40 files changed, 643 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2009-11-24 17:50:35 +0000 Tony Finch <dot@dotat.at>
+
+Less stilted English in the man page.
+
+ unifdef.1 | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-24 17:49:13 +0000 Tony Finch <dot@dotat.at>
+
+Handle macros with arguments.
+
+Submitted-by: Anders H Kaseorg <andersk@mit.edu>
+
+ unifdef.1 | 13 ++++++++++++-
+ unifdef.c | 32 ++++++++++++++++++++++++++++++--
+ 2 files changed, 42 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2009-11-24 16:51:38 +0000 Tony Finch <dot@dotat.at>
+
+Use isalnum() instead of isalpha() + isdigit().
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-24 12:14:37 +0000 Tony Finch <dot@dotat.at>
+
+Run the release script verbosely.
+
+ release.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-24 12:12:31 +0000 Tony Finch <dot@dotat.at>
+
+Add a non-portability note to the README.
+
+ README | 8 +++++++-
+ 1 files changed, 7 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2009-11-24 11:58:41 +0000 Tony Finch <dot@dotat.at>
+
+Rename getline() to parseline() to avoid clashing with a glibc function.
+
+ unifdef.c | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2009-11-23 19:15:42 +0000 Tony Finch <dot@dotat.at>
+
+Add a realclean target
+
+ Makefile | 5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2009-11-23 19:14:02 +0000 Tony Finch <dot@dotat.at>
+
+Add a README file
+
+ Makefile | 4 ++--
+ README | 21 +++++++++++++++++++++
+ release.sh | 3 ++-
+ 3 files changed, 25 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2009-11-23 19:07:17 +0000 Tony Finch <dot@dotat.at>
+
+Further improvements to the release scripts.
+
+Make the generated filenames more standard.
+
+ Makefile | 16 ++++++++--------
+ release.sh | 16 +++++++++++-----
+ 2 files changed, 19 insertions(+), 13 deletions(-)
+
+---------------------------------------------------
+2009-11-23 18:54:52 +0000 Tony Finch <dot@dotat.at>
+
+Include the Release script in the release.
+
+ release.sh | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2009-11-23 18:53:35 +0000 Tony Finch <dot@dotat.at>
+
+Revamp Makefile and add a separate Release script.
+
+ Makefile | 20 +++++++-------------
+ release.sh | 22 ++++++++++++++++++++++
+ 2 files changed, 29 insertions(+), 13 deletions(-)
+
+---------------------------------------------------
+2009-11-23 18:37:17 +0000 Tony Finch <dot@dotat.at>
+
+Document -d flag and update copyright notices.
+
+ unifdef.1 | 11 +++++++----
+ unifdef.c | 6 +++---
+ 2 files changed, 10 insertions(+), 7 deletions(-)
+
+---------------------------------------------------
+2009-11-23 18:24:55 +0000 Tony Finch <dot@dotat.at>
+
+Fix regression in ! operator.
+
+Since revision 1.180, unifdef is ignoring negations in the
+outermost expression of an #if conditional. Fix the regression,
+and add a debug statement to help if any similar problems ever
+need to be tracked down.
+
+Submitted by: Jonathan Nieder <jrnieder@gmail.com>
+
+ unifdef.c | 7 +++++--
+ 1 files changed, 5 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-23 17:59:33 +0000 Tony Finch <dot@dotat.at>
+
+Correct the HISTORY section and add an AUTHORS section.
+
+Obtained from FreeBSD.
+
+ unifdef.1 | 10 ++++++++--
+ 1 files changed, 8 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2009-11-23 17:58:27 +0000 Tony Finch <dot@dotat.at>
+
+Add a "release" target
+
+ Makefile | 12 +++++++++++-
+ 1 files changed, 11 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2008-03-10 16:15:52 +0000 Tony Finch <dot@dotat.at>
+
+update synopsis
+
+ unifdef.1 | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2008-03-10 16:08:47 +0000 Tony Finch <dot@dotat.at>
+
+backwards compatibility option
+
+ unifdef.1 | 12 +++++++++++-
+ unifdef.c | 14 +++++++++-----
+ 2 files changed, 20 insertions(+), 6 deletions(-)
+
+---------------------------------------------------
+2008-03-10 15:56:15 +0000 Tony Finch <dot@dotat.at>
+
+Fix the state transition table.
+
+ unifdef.c | 37 ++++++++++++++++++-------------------
+ 1 files changed, 18 insertions(+), 19 deletions(-)
+
+---------------------------------------------------
+2008-03-10 15:24:29 +0000 Tony Finch <dot@dotat.at>
+
+Lenient evaluation of && and || based on an idea from Ben Hutchings at
+
+Solarflare Communications.
+
+ unifdef.1 | 74 +++++++++++++++++++++++----------
+ unifdef.c | 136 +++++++++++++++++++++++++++++++++++++++---------------------
+ 2 files changed, 139 insertions(+), 71 deletions(-)
+
+---------------------------------------------------
+2008-03-10 13:01:40 +0000 Tony Finch <dot@dotat.at>
+
+Compress blank lines, based on an idea from Ben Hutchings at
+
+Solarflare Communications.
+
+ unifdef.1 | 28 ++++++++++++++++++----------
+ unifdef.c | 37 ++++++++++++++++++++++++++-----------
+ 2 files changed, 44 insertions(+), 21 deletions(-)
+
+---------------------------------------------------
+2008-03-02 22:23:32 +0000 Tony Finch <dot@dotat.at>
+
+Typo in comment spotted by Hasso Tepper at DragonFlyBSD.
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2008-02-29 13:17:37 +0000 Tony Finch <dot@dotat.at>
+
+Ah, I have worked out another way of triggering the abort.
+
+I think this fix covers all the cases.
+
+ unifdef.c | 21 ++++++++++++---------
+ 1 files changed, 12 insertions(+), 9 deletions(-)
+
+---------------------------------------------------
+2008-02-29 12:44:25 +0000 Tony Finch <dot@dotat.at>
+
+Remove a bit of copyright crap.
+
+ unifdef.c | 10 +++-------
+ 1 files changed, 3 insertions(+), 7 deletions(-)
+
+---------------------------------------------------
+2008-02-29 12:30:36 +0000 Tony Finch <dot@dotat.at>
+
+Sync usage with synopsis in man page
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2008-02-29 12:29:34 +0000 Tony Finch <dot@dotat.at>
+
+Ensure man page is ASCII.
+
+ Makefile | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2008-02-29 12:26:04 +0000 Tony Finch <dot@dotat.at>
+
+Fix an abort caused by files that have #endif and no newline on the
+
+last line (reported by Joe Karthauser). Also fix a benign uninitialized
+variable bug.
+
+ unifdef.c | 19 ++++++++++++++-----
+ 1 files changed, 14 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2007-04-30 07:37:17 +0000 Tony Finch <dot@dotat.at>
+
+Fix explanation of copyright history.
+
+ unifdef.c | 20 +++++++++++---------
+ 1 files changed, 11 insertions(+), 9 deletions(-)
+
+---------------------------------------------------
+2005-08-12 10:59:21 +0000 Tony Finch <dot@dotat.at>
+
+Allow #if defined SYM as well as #if defined(SYM)
+
+ unifdef.c | 14 +++++++++-----
+ 1 files changed, 9 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2005-03-08 12:39:01 +0000 Tony Finch <dot@dotat.at>
+
+sync with upstream
+
+ unifdef.1 | 32 ++++++++++++++++----------------
+ 1 files changed, 16 insertions(+), 16 deletions(-)
+
+---------------------------------------------------
+2005-03-08 12:38:48 +0000 Tony Finch <dot@dotat.at>
+
+copyright dates
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2005-03-08 12:07:27 +0000 Tony Finch <dot@dotat.at>
+
+Update the copyright notice to the FreeBSD standard.
+
+Do not recognize comment markers inside string and character literals.
+
+ unifdef.c | 59 ++++++++++++++++++++++++++++++++++++++++++++---------------
+ 1 files changed, 44 insertions(+), 15 deletions(-)
+
+---------------------------------------------------
+2003-08-12 20:51:30 +0000 Tony Finch <dot@dotat.at>
+
+simpler declaration of copyright[]
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2003-08-12 20:33:59 +0000 Tony Finch <dot@dotat.at>
+
+Make the embedded copyright and version information more portable.
+
+Remove NetBSD cvs id because it is no longer relevant. Remove FreeBSD
+cvs id because it isn't relevant upstream. Keep Berkeley runes because
+they go with the original licence.
+
+ unifdef.c | 23 ++++++-----------------
+ 1 files changed, 6 insertions(+), 17 deletions(-)
+
+---------------------------------------------------
+2003-08-12 20:32:39 +0000 Tony Finch <dot@dotat.at>
+
+FreeBSD cvs id isn't relevant in this file in the upstream version.
+
+ unifdefall.sh | 3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-08-12 20:32:12 +0000 Tony Finch <dot@dotat.at>
+
+Current FreeBSD cvs id
+
+ unifdef.1 | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-08-12 20:12:24 +0000 Tony Finch <dot@dotat.at>
+
+optionally add #line directives to the output
+
+ unifdef.1 | 11 +++++++++--
+ unifdef.c | 20 ++++++++++++++------
+ 2 files changed, 23 insertions(+), 8 deletions(-)
+
+---------------------------------------------------
+2003-08-12 19:39:53 +0000 Tony Finch <dot@dotat.at>
+
+Add a little sanity checking to the state transition table code.
+
+ unifdef.c | 16 +++++++++++++---
+ 1 files changed, 13 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2003-08-12 19:35:31 +0000 Tony Finch <dot@dotat.at>
+
+a minor style improvement
+
+ unifdef.c | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2003-08-12 19:23:12 +0000 Tony Finch <dot@dotat.at>
+
+Allow the user to run unifdef without defining any symbols. This is
+
+useful in conjunction with the -k flag.
+Fix a bug in the -s handling code that would have caused out-of-bounds
+array accesses.
+
+ unifdef.c | 15 +++++++--------
+ 1 files changed, 7 insertions(+), 8 deletions(-)
+
+---------------------------------------------------
+2003-08-07 16:01:10 +0000 Tony Finch <dot@dotat.at>
+
+Sync with FreeBSD
+
+ unifdef.1 | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2003-07-31 08:21:00 +0000 Tony Finch <dot@dotat.at>
+
+All rights reserved
+
+ unifdef.1 | 4 ++--
+ unifdef.c | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2003-07-31 08:20:47 +0000 Tony Finch <dot@dotat.at>
+
+add FreeBSD-style copyright & licence
+
+ unifdefall.sh | 27 +++++++++++++++++++++++++--
+ 1 files changed, 25 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-07-31 08:10:39 +0000 Tony Finch <dot@dotat.at>
+
+Sync copyright and licence with the code. I've put my copyright line
+
+below Berkeley's since a lot of the old man page still remains.
+
+ unifdef.1 | 11 ++++-------
+ 1 files changed, 4 insertions(+), 7 deletions(-)
+
+---------------------------------------------------
+2003-07-31 07:59:15 +0000 Tony Finch <dot@dotat.at>
+
+Remove clause three of the licence, as permitted by Berkeley. OpenBSD
+
+have done this globally, but Net- and Free- haven't. I've had two
+questions about this recently, and since I don't distribute Berkeley's
+licence change statement this is a good way to be clear.
+
+ unifdef.c | 8 ++------
+ 1 files changed, 2 insertions(+), 6 deletions(-)
+
+---------------------------------------------------
+2003-07-01 15:32:48 +0000 Tony Finch <dot@dotat.at>
+
+FreeBSD ident string
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-07-01 15:21:25 +0000 Tony Finch <dot@dotat.at>
+
+style tweak
+
+ unifdef.c | 7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2003-07-01 15:13:49 +0000 Tony Finch <dot@dotat.at>
+
+Make the handling of EOF a little more elegant.
+
+ unifdef.c | 36 ++++++++++++++++--------------------
+ 1 files changed, 16 insertions(+), 20 deletions(-)
+
+---------------------------------------------------
+2003-07-01 14:53:50 +0000 Tony Finch <dot@dotat.at>
+
+clean
+
+ Makefile | 9 +++++++--
+ 1 files changed, 7 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-07-01 08:34:43 +0000 Tony Finch <dot@dotat.at>
+
+a comment about line continuations
+
+ unifdef.c | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2003-07-01 08:19:58 +0000 Tony Finch <dot@dotat.at>
+
+Improve the expression evaluator's debugging output.
+
+ unifdef.c | 7 +++++--
+ 1 files changed, 5 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-06-30 14:30:54 +0000 Tony Finch <dot@dotat.at>
+
+More improvements to comments regarding global variables.
+
+ unifdef.c | 12 +++++++-----
+ 1 files changed, 7 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2003-06-30 14:26:48 +0000 Tony Finch <dot@dotat.at>
+
+Make a note in a comment about the relationship between getline() and
+
+skipcomment() w.r.t. the linestate.
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2003-06-30 14:22:40 +0000 Tony Finch <dot@dotat.at>
+
+When in text mode, or when ignoring a symbol, skipcomment needs to
+
+adjust the linestate when it hits a newline.
+
+ unifdef.c | 7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2003-06-30 14:03:56 +0000 Tony Finch <dot@dotat.at>
+
+Sync with FreeBSD.
+
+ unifdef.c | 12 +++++++-----
+ 1 files changed, 7 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2003-01-20 14:43:55 +0000 Tony Finch <dot@dotat.at>
+
+makefile for unifdef
+
+ Makefile | 11 +++++++++++
+ 1 files changed, 11 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2003-01-20 14:37:08 +0000 Tony Finch <dot@dotat.at>
+
+Slightly more correct SYNOPSIS
+
+ unifdef.1 | 14 ++++++--------
+ unifdef.c | 4 ++--
+ 2 files changed, 8 insertions(+), 10 deletions(-)
+
+---------------------------------------------------
+2003-01-20 14:01:47 +0000 Tony Finch <dot@dotat.at>
+
+add a note about probalems caused by division
+
+ unifdef.c | 6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-01-20 13:48:06 +0000 Tony Finch <dot@dotat.at>
+
+typo
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-01-20 12:46:08 +0000 Tony Finch <dot@dotat.at>
+
+Sync $FreeBSD$ after downstream commit
+
+ unifdef.1 | 4 ++--
+ unifdef.c | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2003-01-20 12:05:41 +0000 Tony Finch <dot@dotat.at>
+
+clean up some -o remnants
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2003-01-20 12:03:48 +0000 Tony Finch <dot@dotat.at>
+
+terminological consistency: s/modify/edit/
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-01-20 12:03:10 +0000 Tony Finch <dot@dotat.at>
+
+Compactify the Mfoo functions.
+
+ unifdef.c | 15 ++++++---------
+ 1 files changed, 6 insertions(+), 9 deletions(-)
+
+---------------------------------------------------
+2003-01-20 11:46:53 +0000 Tony Finch <dot@dotat.at>
+
+more idiomatic strlcpy usage
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-01-20 11:45:32 +0000 Tony Finch <dot@dotat.at>
+
+Correct dodgy handling -- line continuations in keywords are always an
+
+error.
+
+ unifdef.c | 22 ++++++++++------------
+ 1 files changed, 10 insertions(+), 12 deletions(-)
+
+---------------------------------------------------
+2003-01-20 11:36:12 +0000 Tony Finch <dot@dotat.at>
+
+Rename -o to -e, i.e. "less errors" instead of "allow obfuscation".
+
+ unifdef.1 | 40 ++++++++++++++++++++--------------------
+ unifdef.c | 12 ++++++------
+ 2 files changed, 26 insertions(+), 26 deletions(-)
+
+---------------------------------------------------
+2003-01-20 11:22:44 +0000 Tony Finch <dot@dotat.at>
+
+remove another spurious space
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-01-20 02:58:11 +0000 Tony Finch <dot@dotat.at>
+
+Improve the handling of multiline preprocessor directives. Don't complain
+
+when they don't affect the output. Add a switch that causes us to fudge
+it instead of complaining when it is possible to do so.
+
+Prompted by an error report from Poul-Henning Kamp <phk@FreeBSD.org>
+
+ unifdef.1 | 24 +++++++++-
+ unifdef.c | 142 +++++++++++++++++++++++++++++++++++++++++++-----------------
+ 2 files changed, 123 insertions(+), 43 deletions(-)
+
+---------------------------------------------------
+2003-01-20 02:53:27 +0000 Tony Finch <dot@dotat.at>
+
+replace accidentally zapped #endif
+
+ unifdef.c | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2003-01-20 02:50:36 +0000 Tony Finch <dot@dotat.at>
+
+Sync $FreeBSD$
+
+ unifdef.c | 5 ++---
+ 1 files changed, 2 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2003-01-20 01:51:11 +0000 Tony Finch <dot@dotat.at>
+
+Deconfuse ingnore[] (which is a per-symbol flag) and ignoring[]
+
+(which is the stack of ignore states).
+
+ unifdef.c | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2003-01-20 01:32:23 +0000 Tony Finch <dot@dotat.at>
+
+Whitespace fixes from OpenBSD.
+
+ unifdef.c | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2003-01-20 00:59:36 +0000 Tony Finch <dot@dotat.at>
+
+Be more explicit about the failure mode.
+
+Reported by: Poul-Henning Kamp <phk@FreeBSD.org>
+
+ unifdef.c | 7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2003-01-20 00:50:06 +0000 Tony Finch <dot@dotat.at>
+
+typo: maintin -> maintain
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-01-20 00:01:49 +0000 Tony Finch <dot@dotat.at>
+
+Purge strcpy() to appease OpenBSD. Consistently use the term "edit"
+
+when talking about changing preprocessor keywords in the output.
+
+Suggested by: Ted Unangst <tedu@stanford.edu>
+
+ unifdef.c | 26 +++++++++++++++++++-------
+ 1 files changed, 19 insertions(+), 7 deletions(-)
+
+---------------------------------------------------
+2003-01-17 19:19:13 +0000 Tony Finch <dot@dotat.at>
+
+mdoc pedantry from FreeBSD
+
+ unifdef.1 | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2003-01-17 19:04:36 +0000 Tony Finch <dot@dotat.at>
+
+Style fix: brackets around the argument to return. From OpenBSD.
+
+ unifdef.c | 68 ++++++++++++++++++++++++++++++------------------------------
+ 1 files changed, 34 insertions(+), 34 deletions(-)
+
+---------------------------------------------------
+2003-01-17 19:03:02 +0000 Tony Finch <dot@dotat.at>
+
+Add a necessary cast to an argument of printf. From OpenBSD.
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2003-01-17 19:01:59 +0000 Tony Finch <dot@dotat.at>
+
+Whitespace fixes from OpenBSD.
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-13 15:26:41 +0000 Tony Finch <dot@dotat.at>
+
+Damnit, it makes sense for flushline() to be near the #if machine,
+
+and the diff is doomed to be vast anyway.
+
+ unifdef.c | 37 ++++++++++++++++++-------------------
+ 1 files changed, 18 insertions(+), 19 deletions(-)
+
+---------------------------------------------------
+2002-12-13 15:20:05 +0000 Tony Finch <dot@dotat.at>
+
+make warns-clean in an evil manner
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-13 13:58:00 +0000 Tony Finch <dot@dotat.at>
+
+factor out an error message
+
+ unifdef.c | 7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-13 11:44:25 +0000 Tony Finch <dot@dotat.at>
+
+remove an XXX that has been addressed
+
+ unifdef.c | 4 +---
+ 1 files changed, 1 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-13 11:42:37 +0000 Tony Finch <dot@dotat.at>
+
+sort getopt cases
+
+ unifdef.c | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2002-12-13 11:40:08 +0000 Tony Finch <dot@dotat.at>
+
+Use ISO/IEC 9899:1999 minimum translation limits
+
+ unifdef.c | 13 ++++++++-----
+ 1 files changed, 8 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2002-12-13 11:33:34 +0000 Tony Finch <dot@dotat.at>
+
+expand on unifdef's understanding of C
+
+ unifdef.1 | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-12-13 11:24:26 +0000 Tony Finch <dot@dotat.at>
+
+note the appearance of ANSI support
+
+ unifdef.1 | 5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-12-13 11:24:08 +0000 Tony Finch <dot@dotat.at>
+
+describe the limitation on preprocessor lines better
+
+ unifdef.1 | 6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-12-13 11:15:20 +0000 Tony Finch <dot@dotat.at>
+
+spot backslash-newline in a preprocessor keyword
+
+ unifdef.c | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-12-13 11:13:02 +0000 Tony Finch <dot@dotat.at>
+
+fix an error message
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-12-13 11:11:11 +0000 Tony Finch <dot@dotat.at>
+
+less obfuscated ifdef/ifndef handling
+
+ unifdef.c | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2002-12-13 11:04:43 +0000 Tony Finch <dot@dotat.at>
+
+comment the state enums
+
+ unifdef.c | 50 +++++++++++++++++++++++++-------------------------
+ 1 files changed, 25 insertions(+), 25 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:53:53 +0000 Tony Finch <dot@dotat.at>
+
+move the forward declaration of struct ops to a better place
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:52:26 +0000 Tony Finch <dot@dotat.at>
+
+move flushline() back where it used to be
+
+ unifdef.c | 38 +++++++++++++++++++-------------------
+ 1 files changed, 19 insertions(+), 19 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:50:15 +0000 Tony Finch <dot@dotat.at>
+
+more commentary on strlcmp()
+
+ unifdef.c | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:46:44 +0000 Tony Finch <dot@dotat.at>
+
+comment all globals
+
+ unifdef.c | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:45:29 +0000 Tony Finch <dot@dotat.at>
+
+terminological consistency for pass states
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:43:04 +0000 Tony Finch <dot@dotat.at>
+
+fix some comments
+
+ unifdef.c | 8 ++++++--
+ 1 files changed, 6 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:42:23 +0000 Tony Finch <dot@dotat.at>
+
+re-order enums to reduce diffs with FreeBSD
+
+ unifdef.c | 50 +++++++++++++++++++++++++-------------------------
+ 1 files changed, 25 insertions(+), 25 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:38:45 +0000 Tony Finch <dot@dotat.at>
+
+remove some c&p garbage
+
+ unifdef.c | 24 +-----------------------
+ 1 files changed, 1 insertions(+), 23 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:36:23 +0000 Tony Finch <dot@dotat.at>
+
+move flushline closer to its usage point
+
+ unifdef.c | 60 +++++++++++++++++++++++++++++++++++++++++-------------------
+ 1 files changed, 41 insertions(+), 19 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:35:17 +0000 Tony Finch <dot@dotat.at>
+
+rename a variable in process() to reduce diffs with FreeBSD
+
+ unifdef.c | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:29:02 +0000 Tony Finch <dot@dotat.at>
+
+move the tables closer to their interpreters
+
+ unifdef.c | 317 +++++++++++++++++++++++++++++++------------------------------
+ 1 files changed, 160 insertions(+), 157 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:15:24 +0000 Tony Finch <dot@dotat.at>
+
+reduce the space used by the state transition functions
+
+ unifdef.c | 146 ++++++++++++++++++++++++-------------------------------------
+ 1 files changed, 57 insertions(+), 89 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:04:56 +0000 Tony Finch <dot@dotat.at>
+
+note another diagnostic
+
+ unifdef.1 | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-12-12 19:04:56 +0000 Tony Finch <dot@dotat.at>
+
+make everything static, and improve the order of declarations
+
+ unifdef.c | 328 ++++++++++++++++++++++++++++++++----------------------------
+ 1 files changed, 175 insertions(+), 153 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:59:51 +0000 Tony Finch <dot@dotat.at>
+
+Improve the state table commentary.
+
+ unifdef.c | 14 +++++++-------
+ 1 files changed, 7 insertions(+), 7 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:41:39 +0000 Tony Finch <dot@dotat.at>
+
+reduce state transition table line lengths below 80
+
+ unifdef.c | 24 ++++++++++++------------
+ 1 files changed, 12 insertions(+), 12 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:30:55 +0000 Tony Finch <dot@dotat.at>
+
+reduce state function line lengths below 80
+
+ unifdef.c | 28 ++++++++++++++++------------
+ 1 files changed, 16 insertions(+), 12 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:24:26 +0000 Tony Finch <dot@dotat.at>
+
+Exit 1 if the output differs from the input.
+
+ unifdef.c | 9 ++++++---
+ 1 files changed, 6 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:21:22 +0000 Tony Finch <dot@dotat.at>
+
+Exit 2 on error.
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:21:04 +0000 Tony Finch <dot@dotat.at>
+
+Bring the DIAGNOSTICS in line with reality.
+
+ unifdef.1 | 12 ++++++++----
+ 1 files changed, 8 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:17:52 +0000 Tony Finch <dot@dotat.at>
+
+restore the complaint about EOF in comments
+
+ unifdef.1 | 5 ++++-
+ unifdef.c | 6 ++++--
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:12:57 +0000 Tony Finch <dot@dotat.at>
+
+skipsym doesn't need a separate test for '\0'
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:11:28 +0000 Tony Finch <dot@dotat.at>
+
+rename constexpr back to keepthis to reduce diffs
+
+ unifdef.c | 14 +++++++-------
+ 1 files changed, 7 insertions(+), 7 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:06:15 +0000 Tony Finch <dot@dotat.at>
+
+stcomline isn't used any more
+
+ unifdef.c | 3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:05:00 +0000 Tony Finch <dot@dotat.at>
+
+Note that NO_COMMMENT is false, as before.
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:03:37 +0000 Tony Finch <dot@dotat.at>
+
+Move the error function back to the end
+
+ unifdef.c | 21 +++++++++++----------
+ 1 files changed, 11 insertions(+), 10 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:02:08 +0000 Tony Finch <dot@dotat.at>
+
+Better error messages outside #if groups
+
+ unifdef.c | 9 ++++++---
+ 1 files changed, 6 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:01:50 +0000 Tony Finch <dot@dotat.at>
+
+Note a new diagnostic for preprocessor lines we can't handle.
+
+ unifdef.1 | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-12-12 17:00:04 +0000 Tony Finch <dot@dotat.at>
+
+Instead of quietly ballsing up the output, bitch if we encounter a
+
+preprocessor line we can't handle.
+
+ unifdef.c | 30 +++++++++++++++++-------------
+ 1 files changed, 17 insertions(+), 13 deletions(-)
+
+---------------------------------------------------
+2002-12-12 16:04:04 +0000 Tony Finch <dot@dotat.at>
+
+Rename checkline() to getline() and move the fgets() inside it.
+
+ unifdef.c | 13 ++++++-------
+ 1 files changed, 6 insertions(+), 7 deletions(-)
+
+---------------------------------------------------
+2002-12-11 20:46:06 +0000 Tony Finch <dot@dotat.at>
+
+Add a missing unignore()
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-12-11 20:42:47 +0000 Tony Finch <dot@dotat.at>
+
+Handle #ifs nested inside a false block correctly.
+
+ unifdef.c | 16 +++++++++-------
+ 1 files changed, 9 insertions(+), 7 deletions(-)
+
+---------------------------------------------------
+2002-12-11 20:15:57 +0000 Tony Finch <dot@dotat.at>
+
+remove nul character comment
+
+ unifdef.c | 4 +---
+ 1 files changed, 1 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-11 20:05:52 +0000 Tony Finch <dot@dotat.at>
+
+Overhaul the #if state machine. It's now table-driven rather than hand-
+
+coded, and it doesn't have the old version's bugs. The debugging messages
+have also been improved.
+
+ unifdef.c | 452 ++++++++++++++++++++++++++++---------------------------------
+ 1 files changed, 205 insertions(+), 247 deletions(-)
+
+---------------------------------------------------
+2002-12-11 20:04:40 +0000 Tony Finch <dot@dotat.at>
+
+some more bugs
+
+ unifdef.1 | 9 ++++++++-
+ 1 files changed, 8 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-12-11 02:28:22 +0000 Tony Finch <dot@dotat.at>
+
+Rename keepthis to constexpr which is easier to think about.
+
+Re-comment and re-arrange some globals.
+
+ unifdef.c | 24 +++++++++++-------------
+ 1 files changed, 11 insertions(+), 13 deletions(-)
+
+---------------------------------------------------
+2002-12-11 02:22:44 +0000 Tony Finch <dot@dotat.at>
+
+Add a note about trigraphs.
+
+ unifdef.1 | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-12-11 02:13:04 +0000 Tony Finch <dot@dotat.at>
+
+Use fgets instead of getline() because the latter gets EOF wrong.
+
+ unifdef.c | 77 +-----------------------------------------------------------
+ 1 files changed, 2 insertions(+), 75 deletions(-)
+
+---------------------------------------------------
+2002-12-11 02:07:02 +0000 Tony Finch <dot@dotat.at>
+
+Overhaul the comment and preprocessor line parsers.
+
+ unifdef.1 | 4 +-
+ unifdef.c | 232 +++++++++++++++++++++++++++++++++++-------------------------
+ 2 files changed, 137 insertions(+), 99 deletions(-)
+
+---------------------------------------------------
+2002-12-11 01:44:04 +0000 Tony Finch <dot@dotat.at>
+
+Add an asymmetric variant of strncmp() called strlcmp().
+
+ unifdef.c | 20 +++++++++++++++++---
+ 1 files changed, 17 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-11 00:00:47 +0000 Tony Finch <dot@dotat.at>
+
+handle end-of-string in skipsym()
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-12-10 23:20:14 +0000 Tony Finch <dot@dotat.at>
+
+A neater way of handling #elif
+
+ unifdef.c | 14 ++++----------
+ 1 files changed, 4 insertions(+), 10 deletions(-)
+
+---------------------------------------------------
+2002-12-10 23:02:11 +0000 Tony Finch <dot@dotat.at>
+
+Fix findsym()'s comment.
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-12-10 23:01:04 +0000 Tony Finch <dot@dotat.at>
+
+Improve findsym().
+
+ unifdef.c | 19 +++++++------------
+ 1 files changed, 7 insertions(+), 12 deletions(-)
+
+---------------------------------------------------
+2002-12-10 21:11:58 +0000 Tony Finch <dot@dotat.at>
+
+Remove quote handling.
+
+ unifdef.c | 70 +++++++-----------------------------------------------------
+ 1 files changed, 9 insertions(+), 61 deletions(-)
+
+---------------------------------------------------
+2002-12-10 21:11:19 +0000 Tony Finch <dot@dotat.at>
+
+Update the spec to relate better to ANSI C. Strings no longer affect
+
+the preprocessor, but line continuations do.
+
+ unifdef.1 | 19 +++++++------------
+ 1 files changed, 7 insertions(+), 12 deletions(-)
+
+---------------------------------------------------
+2002-12-10 17:28:09 +0000 Tony Finch <dot@dotat.at>
+
+Note that string parsing needs to be fixed. Actually it just needs to
+
+be ripped out and replaced with backslash line continuation handling
+since strings can't contain newlines any more.
+
+ unifdef.1 | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-12-10 17:23:54 +0000 Tony Finch <dot@dotat.at>
+
+Sync with FreeBSD
+
+ unifdef.1 | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2002-12-10 17:12:58 +0000 Tony Finch <dot@dotat.at>
+
+Handle inquote more elegantly
+
+ unifdef.c | 14 ++++----------
+ 1 files changed, 4 insertions(+), 10 deletions(-)
+
+---------------------------------------------------
+2002-12-10 17:00:39 +0000 Tony Finch <dot@dotat.at>
+
+Make the symbol table zero-based, and remove an incorrect comment.
+
+ unifdef.c | 29 +++++++++++++++--------------
+ 1 files changed, 15 insertions(+), 14 deletions(-)
+
+---------------------------------------------------
+2002-12-10 16:22:12 +0000 Tony Finch <dot@dotat.at>
+
+Terminological consistency: only use the word "ignore" to mean non-C parsing.
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-12-10 16:10:51 +0000 Tony Finch <dot@dotat.at>
+
+Ensure that cursym is always set by checkline().
+
+ unifdef.c | 5 ++---
+ 1 files changed, 2 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-09-24 19:52:11 +0000 Tony Finch <dot@dotat.at>
+
+update FreeBSD IDs
+
+ unifdef.1 | 4 ++--
+ unifdef.c | 4 ++--
+ unifdefall.sh | 4 ++--
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+---------------------------------------------------
+2002-09-24 19:44:12 +0000 Tony Finch <dot@dotat.at>
+
+improve language
+
+ unifdef.1 | 20 ++++++++++----------
+ 1 files changed, 10 insertions(+), 10 deletions(-)
+
+---------------------------------------------------
+2002-09-24 19:43:57 +0000 Tony Finch <dot@dotat.at>
+
+conform to the spec -- the -k option to unifdef is now needed
+
+ unifdefall.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-09-24 19:16:29 +0000 Tony Finch <dot@dotat.at>
+
+Pass through constant #ifs unless invoked with -k.
+
+ unifdef.1 | 26 +++++++++++++++++++++++---
+ unifdef.c | 24 +++++++++++++++++-------
+ 2 files changed, 40 insertions(+), 10 deletions(-)
+
+---------------------------------------------------
+2002-05-30 11:50:13 +0000 Tony Finch <dot@dotat.at>
+
+add freebsd version string
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-05-30 11:47:26 +0000 Tony Finch <dot@dotat.at>
+
+Sync with FreeBSD's mdoc markup fixes.
+
+ unifdef.1 | 84 ++++++++++++++++++++++++++++--------------------------------
+ 1 files changed, 39 insertions(+), 45 deletions(-)
+
+---------------------------------------------------
+2002-05-21 17:33:41 +0000 Tony Finch <dot@dotat.at>
+
+style(9) whitespace
+
+ unifdef.c | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2002-05-15 19:37:50 +0000 Tony Finch <dot@dotat.at>
+
+consistent spacing in the function declarations
+
+ unifdef.c | 16 ++++++++--------
+ 1 files changed, 8 insertions(+), 8 deletions(-)
+
+---------------------------------------------------
+2002-05-15 19:36:10 +0000 Tony Finch <dot@dotat.at>
+
+cast away qualifiers less evilly
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-05-15 19:34:40 +0000 Tony Finch <dot@dotat.at>
+
+Replace h0h0opt with getopt.
+
+ unifdef.c | 135 +++++++++++++++++++++++++++++++++++--------------------------
+ 1 files changed, 78 insertions(+), 57 deletions(-)
+
+---------------------------------------------------
+2002-05-15 18:55:14 +0000 Tony Finch <dot@dotat.at>
+
+Don't run off the end of command-line options inside findsym().
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-05-15 15:43:14 +0000 Tony Finch <dot@dotat.at>
+
+a typo and a formatting fix from dwmalone
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-05-15 10:31:20 +0000 Tony Finch <dot@dotat.at>
+
+FreeBSD CVS ID correctness
+
+ unifdefall.sh | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-05-14 22:15:03 +0000 Tony Finch <dot@dotat.at>
+
+be more optimistic about the level of expression support
+
+ unifdef.1 | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-05-14 22:13:21 +0000 Tony Finch <dot@dotat.at>
+
+the #ifdef and #if on the .Nd line should be .Li but this doesn't seem
+
+to be possible, so write "preprocessor conditionals" instead.
+
+ unifdef.1 | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-05-14 21:14:30 +0000 Tony Finch <dot@dotat.at>
+
+Correct the ordering and indentation of the CVS IDs according to FreeBSD style.
+
+ unifdef.1 | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-05-14 21:11:50 +0000 Tony Finch <dot@dotat.at>
+
+add a missing comma to the SEE ALSO list
+
+ unifdef.1 | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-05-14 21:11:14 +0000 Tony Finch <dot@dotat.at>
+
+Document unifdefall and the -I option.
+
+ unifdef.1 | 40 +++++++++++++++++++++++++++++++++++++---
+ 1 files changed, 37 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-05-02 12:38:29 +0000 Tony Finch <dot@dotat.at>
+
+Better function names -- doif() -> process() and doif_1() -> doif()
+
+ unifdef.c | 22 +++++++++++-----------
+ 1 files changed, 11 insertions(+), 11 deletions(-)
+
+---------------------------------------------------
+2002-05-02 12:36:22 +0000 Tony Finch <dot@dotat.at>
+
+consistent commenting
+
+ unifdef.c | 69 ++++++++++++++++++++++++++++++++++++++++++------------------
+ 1 files changed, 48 insertions(+), 21 deletions(-)
+
+---------------------------------------------------
+2002-05-02 12:17:31 +0000 Tony Finch <dot@dotat.at>
+
+Consistent spacing in declaration of local variables,
+
+and simplified flushline().
+
+ unifdef.c | 41 ++++++++++++++++++-----------------------
+ 1 files changed, 18 insertions(+), 23 deletions(-)
+
+---------------------------------------------------
+2002-05-02 00:03:41 +0000 Tony Finch <dot@dotat.at>
+
+note #line wish
+
+ unifdef.c | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-04-29 16:41:08 +0000 Tony Finch <dot@dotat.at>
+
+Handle symbols that are defined without a value correctly, again.
+
+ unifdefall.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-29 16:17:39 +0000 Tony Finch <dot@dotat.at>
+
+output of cpp needs to be sorted
+
+ unifdefall.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-29 03:08:10 +0000 Tony Finch <dot@dotat.at>
+
+clean up tmp dir
+
+ unifdefall.sh | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-04-29 03:07:20 +0000 Tony Finch <dot@dotat.at>
+
+tidy up
+
+ unifdefall.sh | 32 ++++++++------------------------
+ 1 files changed, 8 insertions(+), 24 deletions(-)
+
+---------------------------------------------------
+2002-04-29 03:00:58 +0000 Tony Finch <dot@dotat.at>
+
+Don't get confused by symbols that are the prefix of other symbols.
+
+ unifdefall.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-29 02:55:15 +0000 Tony Finch <dot@dotat.at>
+
+mention support for the comparison operators
+
+ unifdef.1 | 8 +++++++-
+ 1 files changed, 7 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-04-29 02:53:58 +0000 Tony Finch <dot@dotat.at>
+
+Overhaul the expression evaluator. The integer value of an expression
+
+is now calculated, rather than just the boolen value, and the evaluation
+of binary operators is now table-driven. These two things combine to
+make it easier to add support for new operators, such as comparisions.
+
+ unifdef.c | 215 +++++++++++++++++++++++++++++++++++--------------------------
+ 1 files changed, 123 insertions(+), 92 deletions(-)
+
+---------------------------------------------------
+2002-04-29 00:20:42 +0000 Tony Finch <dot@dotat.at>
+
+Handle symbols that are defined without a value correctly.
+
+ unifdefall.sh | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-29 00:18:06 +0000 Tony Finch <dot@dotat.at>
+
+-d -> --debug
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-04-29 00:17:11 +0000 Tony Finch <dot@dotat.at>
+
+Fix handling of bracketed expressions -- we didn't pass over the )
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-28 23:42:36 +0000 Tony Finch <dot@dotat.at>
+
+A script for stripping out as many #if's from a file as possible.
+
+ unifdefall.sh | 42 ++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 42 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2002-04-28 22:32:30 +0000 Tony Finch <dot@dotat.at>
+
+Ignore -Ifoo options so that the same options can be used with cpp -dM
+
+ unifdef.c | 14 ++++++++++----
+ 1 files changed, 10 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2002-04-28 22:15:26 +0000 Tony Finch <dot@dotat.at>
+
+allow a - on the command line to mean "input from stdin"
+
+ unifdef.c | 6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-28 22:14:07 +0000 Tony Finch <dot@dotat.at>
+
+say explicitly that at least one -D or -U is needed
+
+ unifdef.c | 6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-27 17:27:14 +0000 Tony Finch <dot@dotat.at>
+
+allow longer lines in the input
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-27 17:26:53 +0000 Tony Finch <dot@dotat.at>
+
+avoid a potential buffer overflow
+
+ unifdef.c | 9 +++++----
+ 1 files changed, 5 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2002-04-27 17:23:47 +0000 Tony Finch <dot@dotat.at>
+
+spell getlin() with an e
+
+ unifdef.c | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2002-04-26 20:44:33 +0000 Tony Finch <dot@dotat.at>
+
+remove redundant function
+
+ unifdef.c | 15 +++------------
+ 1 files changed, 3 insertions(+), 12 deletions(-)
+
+---------------------------------------------------
+2002-04-26 20:32:23 +0000 Tony Finch <dot@dotat.at>
+
+Multiple __RCSID()s is not portable, so use __IDSTRING() instead.
+
+ unifdef.c | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2002-04-26 20:23:09 +0000 Tony Finch <dot@dotat.at>
+
+move a #define to a better place
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-26 20:18:07 +0000 Tony Finch <dot@dotat.at>
+
+add a couple of missing [=val] phrases
+
+ unifdef.1 | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-04-26 20:17:35 +0000 Tony Finch <dot@dotat.at>
+
+use .Li for #if directives
+
+ unifdef.1 | 33 ++++++++++++++++++++++++++-------
+ 1 files changed, 26 insertions(+), 7 deletions(-)
+
+---------------------------------------------------
+2002-04-26 20:09:37 +0000 Tony Finch <dot@dotat.at>
+
+change the #if bug into an expression handling bug
+
+ unifdef.1 | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-26 20:08:45 +0000 Tony Finch <dot@dotat.at>
+
+mention the elif diagnostic
+
+ unifdef.1 | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-26 20:07:49 +0000 Tony Finch <dot@dotat.at>
+
+see also cpp(1)
+
+ unifdef.1 | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-04-26 20:07:29 +0000 Tony Finch <dot@dotat.at>
+
+remove spurious historical note
+
+ unifdef.1 | 7 +++----
+ 1 files changed, 3 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2002-04-26 20:05:12 +0000 Tony Finch <dot@dotat.at>
+
+explain the -s option
+
+ unifdef.1 | 18 +++++++++++++++++-
+ 1 files changed, 17 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-04-26 20:01:06 +0000 Tony Finch <dot@dotat.at>
+
+Improve the explanation of the -D and -U options.
+
+ unifdef.1 | 28 +++++++++++++---------------
+ 1 files changed, 13 insertions(+), 15 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:54:54 +0000 Tony Finch <dot@dotat.at>
+
+better introductory paragraph
+
+ unifdef.1 | 10 ++++++----
+ 1 files changed, 6 insertions(+), 4 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:51:20 +0000 Tony Finch <dot@dotat.at>
+
+remove -compact from the flag list
+
+ unifdef.1 | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:50:54 +0000 Tony Finch <dot@dotat.at>
+
+expand the introduction to explain the new functionality
+
+ unifdef.1 | 27 ++++++++++++++++++++++-----
+ 1 files changed, 22 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:26:10 +0000 Tony Finch <dot@dotat.at>
+
+add a paragraph gap between -l and -t
+
+ unifdef.1 | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:24:47 +0000 Tony Finch <dot@dotat.at>
+
+Add the optional symbol value to the various places -Dsym is mentioned,
+
+and add the -s flag to the synopsis.
+
+ unifdef.1 | 12 ++++++------
+ 1 files changed, 6 insertions(+), 6 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:20:34 +0000 Tony Finch <dot@dotat.at>
+
+update document date and one-line description
+
+ unifdef.1 | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:15:55 +0000 Tony Finch <dot@dotat.at>
+
+add $dotat$
+
+ unifdef.1 | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:15:14 +0000 Tony Finch <dot@dotat.at>
+
+add my name to the copyright section
+
+ unifdef.1 | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:14:35 +0000 Tony Finch <dot@dotat.at>
+
+add unifdef manual page from FreeBSD
+
+ unifdef.1 | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 173 insertions(+), 0 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:12:22 +0000 Tony Finch <dot@dotat.at>
+
+Add a new option for printing a list of the symbols found in #if expressions.
+
+ unifdef.c | 16 +++++++++++++---
+ 1 files changed, 13 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:03:48 +0000 Tony Finch <dot@dotat.at>
+
+option variables in alphabetical order
+
+ unifdef.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-04-26 19:02:45 +0000 Tony Finch <dot@dotat.at>
+
+parse options in alphabetical order
+
+ unifdef.c | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2002-04-26 18:56:55 +0000 Tony Finch <dot@dotat.at>
+
+fix some h0h0 formatting
+
+ unifdef.c | 8 ++------
+ 1 files changed, 2 insertions(+), 6 deletions(-)
+
+---------------------------------------------------
+2002-04-26 18:51:19 +0000 Tony Finch <dot@dotat.at>
+
+Fix the handling of #elif.
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-26 18:13:43 +0000 Tony Finch <dot@dotat.at>
+
+put my name in the copyright section
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-26 17:42:31 +0000 Tony Finch <dot@dotat.at>
+
+Move all the global stuff to the start of the program in the order
+
+types, variables, function declarations, and ensure that all functions
+are declared. The program now compiles cleanly with $FANFCFLAGS.
+
+ unifdef.c | 141 +++++++++++++++++++++++++++++++------------------------------
+ 1 files changed, 72 insertions(+), 69 deletions(-)
+
+---------------------------------------------------
+2002-04-26 17:33:47 +0000 Tony Finch <dot@dotat.at>
+
+use enums where appropriate
+
+ unifdef.c | 64 ++++++++++++++++++++++++++++++++++--------------------------
+ 1 files changed, 36 insertions(+), 28 deletions(-)
+
+---------------------------------------------------
+2002-04-26 17:25:50 +0000 Tony Finch <dot@dotat.at>
+
+blank lines after functions
+
+ unifdef.c | 14 +++++++++++++-
+ 1 files changed, 13 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-04-26 17:23:57 +0000 Tony Finch <dot@dotat.at>
+
+const correctness
+
+ unifdef.c | 110 +++++++++++++++++++++++++++++-------------------------------
+ 1 files changed, 53 insertions(+), 57 deletions(-)
+
+---------------------------------------------------
+2002-04-26 17:05:23 +0000 Tony Finch <dot@dotat.at>
+
+more bool correctness
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-26 17:02:17 +0000 Tony Finch <dot@dotat.at>
+
+Since MAXSYMS is bigger than CHAR_MAX, nsyms has to be an int.
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-26 17:01:38 +0000 Tony Finch <dot@dotat.at>
+
+ANSI function definitions
+
+ unifdef.c | 62 ++++++++++++++++++------------------------------------------
+ 1 files changed, 19 insertions(+), 43 deletions(-)
+
+---------------------------------------------------
+2002-04-26 16:56:34 +0000 Tony Finch <dot@dotat.at>
+
+Replace the homegrown Bool/YES/NO with stdbool.h things, and ensure
+
+that boolean variables are declared consistently.
+
+ unifdef.c | 110 +++++++++++++++++++++++++++++-------------------------------
+ 1 files changed, 53 insertions(+), 57 deletions(-)
+
+---------------------------------------------------
+2002-04-26 16:49:11 +0000 Tony Finch <dot@dotat.at>
+
+Add __FBSDID and conditionalize the __RCSIDs
+
+ unifdef.c | 7 ++++++-
+ 1 files changed, 6 insertions(+), 1 deletions(-)
+
+---------------------------------------------------
+2002-04-26 16:47:53 +0000 Tony Finch <dot@dotat.at>
+
+add some debugging code
+
+ unifdef.c | 35 +++++++++++++++++++++++++++++++++--
+ 1 files changed, 33 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-26 15:47:04 +0000 Tony Finch <dot@dotat.at>
+
+fix the line number reporting in the last change
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-26 15:38:59 +0000 Tony Finch <dot@dotat.at>
+
+Improve error reporting -- include the start line of the current #if.
+
+ unifdef.c | 16 +++++++++++++---
+ 1 files changed, 13 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-04-26 15:34:44 +0000 Tony Finch <dot@dotat.at>
+
+Remove some slight punning between comment types and booleans.
+
+ unifdef.c | 12 +++++++-----
+ 1 files changed, 7 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2002-04-26 15:06:30 +0000 Tony Finch <dot@dotat.at>
+
+Avoid reparsing the line that causes doif() to return to doif_1().
+
+ unifdef.c | 17 ++++++++---------
+ 1 files changed, 8 insertions(+), 9 deletions(-)
+
+---------------------------------------------------
+2002-04-26 13:54:16 +0000 Tony Finch <dot@dotat.at>
+
+put the newline on the #endif that replaces #elif lines
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-26 13:51:41 +0000 Tony Finch <dot@dotat.at>
+
+Finish implementation of #elif and nesting.
+
+This version passes some initial tests.
+
+ unifdef.c | 133 +++++++++++++++++++++++++++++++++++++++++++------------------
+ 1 files changed, 94 insertions(+), 39 deletions(-)
+
+---------------------------------------------------
+2002-04-25 23:46:55 +0000 Tony Finch <dot@dotat.at>
+
+partial implementation of #elif and properly nesting #ifs.
+
+ unifdef.c | 216 +++++++++++++++++++++++++++++++++++++------------------------
+ 1 files changed, 130 insertions(+), 86 deletions(-)
+
+---------------------------------------------------
+2002-04-25 23:27:40 +0000 Tony Finch <dot@dotat.at>
+
+remove redundant stline variable
+
+ unifdef.c | 4 +---
+ 1 files changed, 1 insertions(+), 3 deletions(-)
+
+---------------------------------------------------
+2002-04-25 23:25:31 +0000 Tony Finch <dot@dotat.at>
+
+simplify error line number handling
+
+ unifdef.c | 21 ++++++++++-----------
+ 1 files changed, 10 insertions(+), 11 deletions(-)
+
+---------------------------------------------------
+2002-04-25 23:02:51 +0000 Tony Finch <dot@dotat.at>
+
+simplify error handling
+
+ unifdef.c | 59 +++++++++++++++++++++--------------------------------------
+ 1 files changed, 21 insertions(+), 38 deletions(-)
+
+---------------------------------------------------
+2002-04-25 21:44:51 +0000 Tony Finch <dot@dotat.at>
+
+fix a comment to reflect the previous change
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-25 21:43:07 +0000 Tony Finch <dot@dotat.at>
+
+Change the "unknown symbol" return value from findsym() from -1 to 0.
+
+ unifdef.c | 21 +++++++++------------
+ 1 files changed, 9 insertions(+), 12 deletions(-)
+
+---------------------------------------------------
+2002-04-25 21:19:55 +0000 Tony Finch <dot@dotat.at>
+
+remove an unnecessary variable inside doif()
+
+ unifdef.c | 11 +++++------
+ 1 files changed, 5 insertions(+), 6 deletions(-)
+
+---------------------------------------------------
+2002-04-25 20:24:16 +0000 Tony Finch <dot@dotat.at>
+
+Remove the inif argument to doif() entirely, since inif == (depth != 0).
+
+ unifdef.c | 19 +++++++++----------
+ 1 files changed, 9 insertions(+), 10 deletions(-)
+
+---------------------------------------------------
+2002-04-25 20:20:05 +0000 Tony Finch <dot@dotat.at>
+
+Move the gall to getlin() up to doif() so that it will be able to
+
+examine the same line more than once.
+
+ unifdef.c | 48 +++++++++++++++++++++---------------------------
+ 1 files changed, 21 insertions(+), 27 deletions(-)
+
+---------------------------------------------------
+2002-04-25 19:59:46 +0000 Tony Finch <dot@dotat.at>
+
+Simplify doif()'s inif argument to just a boolean, since the IN_ELSE
+
+value isn't very different from IN_IF, and the idea doesn't work well
+with #elif.
+
+ unifdef.c | 19 +++++++------------
+ 1 files changed, 7 insertions(+), 12 deletions(-)
+
+---------------------------------------------------
+2002-04-25 18:45:54 +0000 Tony Finch <dot@dotat.at>
+
+purge LT_OTHER since it's a synonym for LT_IF
+
+ unifdef.c | 8 +++-----
+ 1 files changed, 3 insertions(+), 5 deletions(-)
+
+---------------------------------------------------
+2002-04-25 18:17:09 +0000 Tony Finch <dot@dotat.at>
+
+Restore the requirement that at least one -D or -U must be present on the
+
+command line, which was broken when #if handling was added.
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-25 18:15:23 +0000 Tony Finch <dot@dotat.at>
+
+use __RCSID for the sccs id and remove redundant #ifndef lint lines
+
+ unifdef.c | 12 ++----------
+ 1 files changed, 2 insertions(+), 10 deletions(-)
+
+---------------------------------------------------
+2002-04-25 18:10:00 +0000 Tony Finch <dot@dotat.at>
+
+Initial version of #if handling.
+
+Symbol 0 is used for tracking the state of #if/#else activity.
+TODO: #elif, nested #if
+
+ unifdef.c | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 files changed, 145 insertions(+), 10 deletions(-)
+
+---------------------------------------------------
+2002-04-25 16:16:26 +0000 Tony Finch <dot@dotat.at>
+
+allow whitespace before #
+
+ unifdef.c | 5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-25 16:12:23 +0000 Tony Finch <dot@dotat.at>
+
+fix location of a {
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-25 16:11:54 +0000 Tony Finch <dot@dotat.at>
+
+add a function that will evaluate if expressions
+
+ unifdef.c | 13 +++++++++++--
+ 1 files changed, 11 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-25 16:05:30 +0000 Tony Finch <dot@dotat.at>
+
+remove spurious fflush()
+
+ unifdef.c | 3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-25 16:04:55 +0000 Tony Finch <dot@dotat.at>
+
+style: #include ordering; variable alignment
+
+ unifdef.c | 22 +++++++++++-----------
+ 1 files changed, 11 insertions(+), 11 deletions(-)
+
+---------------------------------------------------
+2002-04-25 16:03:16 +0000 Tony Finch <dot@dotat.at>
+
+use err()
+
+ unifdef.c | 83 +++++++++++++++++++++++++------------------------------------
+ 1 files changed, 34 insertions(+), 49 deletions(-)
+
+---------------------------------------------------
+2002-04-25 15:51:42 +0000 Tony Finch <dot@dotat.at>
+
+another formatting improvement
+
+ unifdef.c | 17 +++++++----------
+ 1 files changed, 7 insertions(+), 10 deletions(-)
+
+---------------------------------------------------
+2002-04-25 15:37:25 +0000 Tony Finch <dot@dotat.at>
+
+sensible else if formatting
+
+ unifdef.c | 150 +++++++++++++++++++++++++++----------------------------------
+ 1 files changed, 67 insertions(+), 83 deletions(-)
+
+---------------------------------------------------
+2002-04-25 15:31:28 +0000 Tony Finch <dot@dotat.at>
+
+deal with -Dsym=value
+
+ unifdef.c | 30 +++++++++++++++++++++---------
+ 1 files changed, 21 insertions(+), 9 deletions(-)
+
+---------------------------------------------------
+2002-04-25 15:02:48 +0000 Tony Finch <dot@dotat.at>
+
+move #endif comments to a better place
+
+ unifdef.c | 16 ++++++++--------
+ 1 files changed, 8 insertions(+), 8 deletions(-)
+
+---------------------------------------------------
+2002-04-25 14:59:59 +0000 Tony Finch <dot@dotat.at>
+
+allow a reasonable number of symbols
+
+ unifdef.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+---------------------------------------------------
+2002-04-25 14:57:56 +0000 Tony Finch <dot@dotat.at>
+
+remove BSS cruft
+
+ unifdef.c | 39 +++++++++++++++++++--------------------
+ 1 files changed, 19 insertions(+), 20 deletions(-)
+
+---------------------------------------------------
+2002-04-25 14:55:27 +0000 Tony Finch <dot@dotat.at>
+
+remove __P
+
+ unifdef.c | 24 ++++++++++++------------
+ 1 files changed, 12 insertions(+), 12 deletions(-)
+
+---------------------------------------------------
+2002-04-25 14:52:54 +0000 Tony Finch <dot@dotat.at>
+
+revert to the CSRG copyright/sccs rubric and add $dotat$
+
+ unifdef.c | 21 +++++++++++++--------
+ 1 files changed, 13 insertions(+), 8 deletions(-)
+
+---------------------------------------------------
+2002-04-25 14:50:23 +0000 Tony Finch <dot@dotat.at>
+
+import from NetBSD
+
+ unifdef.c | 684 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 684 insertions(+), 0 deletions(-)
+---------------------------------------------------
--- /dev/null
+/*
+ * Copyright (c) 2002 - 2010 Tony Finch <dot@dotat.at>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * unifdef - remove ifdef'ed lines
+ *
+ * This code was derived from software contributed to Berkeley by Dave Yost.
+ * It was rewritten to support ANSI C by Tony Finch. The original version
+ * of unifdef carried the 4-clause BSD copyright licence. None of its code
+ * remains in this version (though some of the names remain) so it now
+ * carries a more liberal licence.
+ *
+ * Wishlist:
+ * provide an option which will append the name of the
+ * appropriate symbol after #else's and #endif's
+ * provide an option which will check symbols after
+ * #else's and #endif's to see that they match their
+ * corresponding #ifdef or #ifndef
+ *
+ * These require better buffer handling, which would also make
+ * it possible to handle all "dodgy" directives correctly.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+const char copyright[] =
+ #include "version.h"
+ "@(#) $Author: Tony Finch (dot@dotat.at) $\n"
+ "@(#) $URL: http://dotat.at/prog/unifdef $\n"
+;
+
+/* types of input lines: */
+typedef enum {
+ LT_TRUEI, /* a true #if with ignore flag */
+ LT_FALSEI, /* a false #if with ignore flag */
+ LT_IF, /* an unknown #if */
+ LT_TRUE, /* a true #if */
+ LT_FALSE, /* a false #if */
+ LT_ELIF, /* an unknown #elif */
+ LT_ELTRUE, /* a true #elif */
+ LT_ELFALSE, /* a false #elif */
+ LT_ELSE, /* #else */
+ LT_ENDIF, /* #endif */
+ LT_DODGY, /* flag: directive is not on one line */
+ LT_DODGY_LAST = LT_DODGY + LT_ENDIF,
+ LT_PLAIN, /* ordinary line */
+ LT_EOF, /* end of file */
+ LT_ERROR, /* unevaluable #if */
+ LT_COUNT
+} Linetype;
+
+static char const * const linetype_name[] = {
+ "TRUEI", "FALSEI", "IF", "TRUE", "FALSE",
+ "ELIF", "ELTRUE", "ELFALSE", "ELSE", "ENDIF",
+ "DODGY TRUEI", "DODGY FALSEI",
+ "DODGY IF", "DODGY TRUE", "DODGY FALSE",
+ "DODGY ELIF", "DODGY ELTRUE", "DODGY ELFALSE",
+ "DODGY ELSE", "DODGY ENDIF",
+ "PLAIN", "EOF", "ERROR"
+};
+
+/* state of #if processing */
+typedef enum {
+ IS_OUTSIDE,
+ IS_FALSE_PREFIX, /* false #if followed by false #elifs */
+ IS_TRUE_PREFIX, /* first non-false #(el)if is true */
+ IS_PASS_MIDDLE, /* first non-false #(el)if is unknown */
+ IS_FALSE_MIDDLE, /* a false #elif after a pass state */
+ IS_TRUE_MIDDLE, /* a true #elif after a pass state */
+ IS_PASS_ELSE, /* an else after a pass state */
+ IS_FALSE_ELSE, /* an else after a true state */
+ IS_TRUE_ELSE, /* an else after only false states */
+ IS_FALSE_TRAILER, /* #elifs after a true are false */
+ IS_COUNT
+} Ifstate;
+
+static char const * const ifstate_name[] = {
+ "OUTSIDE", "FALSE_PREFIX", "TRUE_PREFIX",
+ "PASS_MIDDLE", "FALSE_MIDDLE", "TRUE_MIDDLE",
+ "PASS_ELSE", "FALSE_ELSE", "TRUE_ELSE",
+ "FALSE_TRAILER"
+};
+
+/* state of comment parser */
+typedef enum {
+ NO_COMMENT = false, /* outside a comment */
+ C_COMMENT, /* in a comment like this one */
+ CXX_COMMENT, /* between // and end of line */
+ STARTING_COMMENT, /* just after slash-backslash-newline */
+ FINISHING_COMMENT, /* star-backslash-newline in a C comment */
+ CHAR_LITERAL, /* inside '' */
+ STRING_LITERAL /* inside "" */
+} Comment_state;
+
+static char const * const comment_name[] = {
+ "NO", "C", "CXX", "STARTING", "FINISHING", "CHAR", "STRING"
+};
+
+/* state of preprocessor line parser */
+typedef enum {
+ LS_START, /* only space and comments on this line */
+ LS_HASH, /* only space, comments, and a hash */
+ LS_DIRTY /* this line can't be a preprocessor line */
+} Line_state;
+
+static char const * const linestate_name[] = {
+ "START", "HASH", "DIRTY"
+};
+
+/*
+ * Minimum translation limits from ISO/IEC 9899:1999 5.2.4.1
+ */
+#define MAXDEPTH 64 /* maximum #if nesting */
+#define MAXLINE 4096 /* maximum length of line */
+#define MAXSYMS 4096 /* maximum number of symbols */
+
+/*
+ * Sometimes when editing a keyword the replacement text is longer, so
+ * we leave some space at the end of the tline buffer to accommodate this.
+ */
+#define EDITSLOP 10
+
+/*
+ * For temporary filenames
+ */
+#define TEMPLATE "unifdef.XXXXXX"
+
+/*
+ * Globals.
+ */
+
+static bool compblank; /* -B: compress blank lines */
+static bool lnblank; /* -b: blank deleted lines */
+static bool complement; /* -c: do the complement */
+static bool debugging; /* -d: debugging reports */
+static bool iocccok; /* -e: fewer IOCCC errors */
+static bool strictlogic; /* -K: keep ambiguous #ifs */
+static bool killconsts; /* -k: eval constant #ifs */
+static bool lnnum; /* -n: add #line directives */
+static bool symlist; /* -s: output symbol list */
+static bool symdepth; /* -S: output symbol depth */
+static bool text; /* -t: this is a text file */
+
+static const char *symname[MAXSYMS]; /* symbol name */
+static const char *value[MAXSYMS]; /* -Dsym=value */
+static bool ignore[MAXSYMS]; /* -iDsym or -iUsym */
+static int nsyms; /* number of symbols */
+
+static FILE *input; /* input file pointer */
+static const char *filename; /* input file name */
+static int linenum; /* current line number */
+static FILE *output; /* output file pointer */
+static const char *ofilename; /* output file name */
+static bool overwriting; /* output overwrites input */
+static char tempname[FILENAME_MAX]; /* used when overwriting */
+
+static char tline[MAXLINE+EDITSLOP];/* input buffer plus space */
+static char *keyword; /* used for editing #elif's */
+
+static const char *newline; /* input file format */
+static const char newline_unix[] = "\n";
+static const char newline_crlf[] = "\r\n";
+
+static Comment_state incomment; /* comment parser state */
+static Line_state linestate; /* #if line parser state */
+static Ifstate ifstate[MAXDEPTH]; /* #if processor state */
+static bool ignoring[MAXDEPTH]; /* ignore comments state */
+static int stifline[MAXDEPTH]; /* start of current #if */
+static int depth; /* current #if nesting */
+static int delcount; /* count of deleted lines */
+static unsigned blankcount; /* count of blank lines */
+static unsigned blankmax; /* maximum recent blankcount */
+static bool constexpr; /* constant #if expression */
+static bool zerosyms = true; /* to format symdepth output */
+static bool firstsym; /* ditto */
+
+static int exitstat; /* program exit status */
+
+static void addsym(bool, bool, char *);
+static void closeout(void);
+static void debug(const char *, ...);
+static void done(void);
+static void error(const char *);
+static int findsym(const char *);
+static void flushline(bool);
+static Linetype parseline(void);
+static Linetype ifeval(const char **);
+static void ignoreoff(void);
+static void ignoreon(void);
+static void keywordedit(const char *);
+static void nest(void);
+static void process(void);
+static const char *skipargs(const char *);
+static const char *skipcomment(const char *);
+static const char *skipsym(const char *);
+static void state(Ifstate);
+static int strlcmp(const char *, const char *, size_t);
+static void unnest(void);
+static void usage(void);
+static void version(void);
+
+#define endsym(c) (!isalnum((unsigned char)c) && c != '_')
+
+/*
+ * The main program.
+ */
+int
+main(int argc, char *argv[])
+{
+ int opt;
+
+ while ((opt = getopt(argc, argv, "i:D:U:I:o:bBcdeKklnsStV")) != -1)
+ switch (opt) {
+ case 'i': /* treat stuff controlled by these symbols as text */
+ /*
+ * For strict backwards-compatibility the U or D
+ * should be immediately after the -i but it doesn't
+ * matter much if we relax that requirement.
+ */
+ opt = *optarg++;
+ if (opt == 'D')
+ addsym(true, true, optarg);
+ else if (opt == 'U')
+ addsym(true, false, optarg);
+ else
+ usage();
+ break;
+ case 'D': /* define a symbol */
+ addsym(false, true, optarg);
+ break;
+ case 'U': /* undef a symbol */
+ addsym(false, false, optarg);
+ break;
+ case 'I': /* no-op for compatibility with cpp */
+ break;
+ case 'b': /* blank deleted lines instead of omitting them */
+ case 'l': /* backwards compatibility */
+ lnblank = true;
+ break;
+ case 'B': /* compress blank lines around removed section */
+ compblank = true;
+ break;
+ case 'c': /* treat -D as -U and vice versa */
+ complement = true;
+ break;
+ case 'd':
+ debugging = true;
+ break;
+ case 'e': /* fewer errors from dodgy lines */
+ iocccok = true;
+ break;
+ case 'K': /* keep ambiguous #ifs */
+ strictlogic = true;
+ break;
+ case 'k': /* process constant #ifs */
+ killconsts = true;
+ break;
+ case 'n': /* add #line directive after deleted lines */
+ lnnum = true;
+ break;
+ case 'o': /* output to a file */
+ ofilename = optarg;
+ break;
+ case 's': /* only output list of symbols that control #ifs */
+ symlist = true;
+ break;
+ case 'S': /* list symbols with their nesting depth */
+ symlist = symdepth = true;
+ break;
+ case 't': /* don't parse C comments */
+ text = true;
+ break;
+ case 'V': /* print version */
+ version();
+ default:
+ usage();
+ }
+ argc -= optind;
+ argv += optind;
+ if (compblank && lnblank)
+ errx(2, "-B and -b are mutually exclusive");
+ if (argc > 1) {
+ errx(2, "can only do one file");
+ } else if (argc == 1 && strcmp(*argv, "-") != 0) {
+ filename = *argv;
+ input = fopen(filename, "rb");
+ if (input == NULL)
+ err(2, "can't open %s", filename);
+ } else {
+ filename = "[stdin]";
+ input = stdin;
+ }
+ if (ofilename == NULL) {
+ ofilename = "[stdout]";
+ output = stdout;
+ } else {
+ struct stat ist, ost;
+ memset(&ist, 0, sizeof(ist));
+ memset(&ost, 0, sizeof(ost));
+
+ if (fstat(fileno(input), &ist) != 0)
+ err(2, "can't fstat %s", filename);
+ if (stat(ofilename, &ost) != 0 && errno != ENOENT)
+ warn("can't stat %s", ofilename);
+
+ overwriting = (ist.st_dev == ost.st_dev
+ && ist.st_ino == ost.st_ino);
+ if (overwriting) {
+ const char *dirsep;
+ int ofd;
+
+ dirsep = strrchr(ofilename, '/');
+ if (dirsep != NULL)
+ snprintf(tempname, sizeof(tempname),
+ "%.*s/" TEMPLATE,
+ (int)(dirsep - ofilename), ofilename);
+ else
+ snprintf(tempname, sizeof(tempname),
+ TEMPLATE);
+ ofd = mkstemp(tempname);
+ if (ofd != -1)
+ output = fdopen(ofd, "wb+");
+ if (output == NULL)
+ err(2, "can't create temporary file");
+ fchmod(ofd, ist.st_mode & (S_IRWXU|S_IRWXG|S_IRWXO));
+ } else {
+ output = fopen(ofilename, "wb");
+ if (output == NULL)
+ err(2, "can't open %s", ofilename);
+ }
+ }
+ process();
+ abort(); /* bug */
+}
+
+static void
+version(void)
+{
+ const char *c = copyright;
+ for (;;) {
+ while (*++c != '$')
+ if (*c == '\0')
+ exit(0);
+ while (*++c != '$')
+ putc(*c, stderr);
+ putc('\n', stderr);
+ }
+}
+
+static void
+usage(void)
+{
+ fprintf(stderr, "usage: unifdef [-bBcdeKknsStV] [-Ipath]"
+ " [-Dsym[=val]] [-Usym] [-iDsym[=val]] [-iUsym] ... [file]\n");
+ exit(2);
+}
+
+/*
+ * A state transition function alters the global #if processing state
+ * in a particular way. The table below is indexed by the current
+ * processing state and the type of the current line.
+ *
+ * Nesting is handled by keeping a stack of states; some transition
+ * functions increase or decrease the depth. They also maintain the
+ * ignore state on a stack. In some complicated cases they have to
+ * alter the preprocessor directive, as follows.
+ *
+ * When we have processed a group that starts off with a known-false
+ * #if/#elif sequence (which has therefore been deleted) followed by a
+ * #elif that we don't understand and therefore must keep, we edit the
+ * latter into a #if to keep the nesting correct.
+ *
+ * When we find a true #elif in a group, the following block will
+ * always be kept and the rest of the sequence after the next #elif or
+ * #else will be discarded. We edit the #elif into a #else and the
+ * following directive to #endif since this has the desired behaviour.
+ *
+ * "Dodgy" directives are split across multiple lines, the most common
+ * example being a multi-line comment hanging off the right of the
+ * directive. We can handle them correctly only if there is no change
+ * from printing to dropping (or vice versa) caused by that directive.
+ * If the directive is the first of a group we have a choice between
+ * failing with an error, or passing it through unchanged instead of
+ * evaluating it. The latter is not the default to avoid questions from
+ * users about unifdef unexpectedly leaving behind preprocessor directives.
+ */
+typedef void state_fn(void);
+
+/* report an error */
+static void Eelif (void) { error("Inappropriate #elif"); }
+static void Eelse (void) { error("Inappropriate #else"); }
+static void Eendif(void) { error("Inappropriate #endif"); }
+static void Eeof (void) { error("Premature EOF"); }
+static void Eioccc(void) { error("Obfuscated preprocessor control line"); }
+/* plain line handling */
+static void print (void) { flushline(true); }
+static void drop (void) { flushline(false); }
+/* output lacks group's start line */
+static void Strue (void) { drop(); ignoreoff(); state(IS_TRUE_PREFIX); }
+static void Sfalse(void) { drop(); ignoreoff(); state(IS_FALSE_PREFIX); }
+static void Selse (void) { drop(); state(IS_TRUE_ELSE); }
+/* print/pass this block */
+static void Pelif (void) { print(); ignoreoff(); state(IS_PASS_MIDDLE); }
+static void Pelse (void) { print(); state(IS_PASS_ELSE); }
+static void Pendif(void) { print(); unnest(); }
+/* discard this block */
+static void Dfalse(void) { drop(); ignoreoff(); state(IS_FALSE_TRAILER); }
+static void Delif (void) { drop(); ignoreoff(); state(IS_FALSE_MIDDLE); }
+static void Delse (void) { drop(); state(IS_FALSE_ELSE); }
+static void Dendif(void) { drop(); unnest(); }
+/* first line of group */
+static void Fdrop (void) { nest(); Dfalse(); }
+static void Fpass (void) { nest(); Pelif(); }
+static void Ftrue (void) { nest(); Strue(); }
+static void Ffalse(void) { nest(); Sfalse(); }
+/* variable pedantry for obfuscated lines */
+static void Oiffy (void) { if (!iocccok) Eioccc(); Fpass(); ignoreon(); }
+static void Oif (void) { if (!iocccok) Eioccc(); Fpass(); }
+static void Oelif (void) { if (!iocccok) Eioccc(); Pelif(); }
+/* ignore comments in this block */
+static void Idrop (void) { Fdrop(); ignoreon(); }
+static void Itrue (void) { Ftrue(); ignoreon(); }
+static void Ifalse(void) { Ffalse(); ignoreon(); }
+/* edit this line */
+static void Mpass (void) { strncpy(keyword, "if ", 4); Pelif(); }
+static void Mtrue (void) { keywordedit("else"); state(IS_TRUE_MIDDLE); }
+static void Melif (void) { keywordedit("endif"); state(IS_FALSE_TRAILER); }
+static void Melse (void) { keywordedit("endif"); state(IS_FALSE_ELSE); }
+
+static state_fn * const trans_table[IS_COUNT][LT_COUNT] = {
+/* IS_OUTSIDE */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Eendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eendif,
+ print, done, abort },
+/* IS_FALSE_PREFIX */
+{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Strue, Sfalse,Selse, Dendif,
+ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Eioccc,Eioccc,Eioccc,Eioccc,
+ drop, Eeof, abort },
+/* IS_TRUE_PREFIX */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Dfalse,Dfalse,Dfalse,Delse, Dendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
+ print, Eeof, abort },
+/* IS_PASS_MIDDLE */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Pelif, Mtrue, Delif, Pelse, Pendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Pelif, Oelif, Oelif, Pelse, Pendif,
+ print, Eeof, abort },
+/* IS_FALSE_MIDDLE */
+{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Pelif, Mtrue, Delif, Pelse, Pendif,
+ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
+ drop, Eeof, abort },
+/* IS_TRUE_MIDDLE */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Melif, Melif, Melif, Melse, Pendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Pendif,
+ print, Eeof, abort },
+/* IS_PASS_ELSE */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Pendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Pendif,
+ print, Eeof, abort },
+/* IS_FALSE_ELSE */
+{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Dendif,
+ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Eioccc,
+ drop, Eeof, abort },
+/* IS_TRUE_ELSE */
+{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Dendif,
+ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eioccc,
+ print, Eeof, abort },
+/* IS_FALSE_TRAILER */
+{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Dendif,
+ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Eioccc,
+ drop, Eeof, abort }
+/*TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF
+ TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF (DODGY)
+ PLAIN EOF ERROR */
+};
+
+/*
+ * State machine utility functions
+ */
+static void
+ignoreoff(void)
+{
+ if (depth == 0)
+ abort(); /* bug */
+ ignoring[depth] = ignoring[depth-1];
+}
+static void
+ignoreon(void)
+{
+ ignoring[depth] = true;
+}
+static void
+keywordedit(const char *replacement)
+{
+ snprintf(keyword, tline + sizeof(tline) - keyword,
+ "%s%s", replacement, newline);
+ print();
+}
+static void
+nest(void)
+{
+ if (depth > MAXDEPTH-1)
+ abort(); /* bug */
+ if (depth == MAXDEPTH-1)
+ error("Too many levels of nesting");
+ depth += 1;
+ stifline[depth] = linenum;
+}
+static void
+unnest(void)
+{
+ if (depth == 0)
+ abort(); /* bug */
+ depth -= 1;
+}
+static void
+state(Ifstate is)
+{
+ ifstate[depth] = is;
+}
+
+/*
+ * Write a line to the output or not, according to command line options.
+ */
+static void
+flushline(bool keep)
+{
+ if (symlist)
+ return;
+ if (keep ^ complement) {
+ bool blankline = tline[strspn(tline, " \t\r\n")] == '\0';
+ if (blankline && compblank && blankcount != blankmax) {
+ delcount += 1;
+ blankcount += 1;
+ } else {
+ if (lnnum && delcount > 0)
+ printf("#line %d%s", linenum, newline);
+ fputs(tline, output);
+ delcount = 0;
+ blankmax = blankcount = blankline ? blankcount + 1 : 0;
+ }
+ } else {
+ if (lnblank)
+ fputs(newline, output);
+ exitstat = 1;
+ delcount += 1;
+ blankcount = 0;
+ }
+ if (debugging)
+ fflush(output);
+}
+
+/*
+ * The driver for the state machine.
+ */
+static void
+process(void)
+{
+ /* When compressing blank lines, act as if the file
+ is preceded by a large number of blank lines. */
+ blankmax = blankcount = 1000;
+ for (;;) {
+ Linetype lineval = parseline();
+ trans_table[ifstate[depth]][lineval]();
+ debug("process line %d %s -> %s depth %d",
+ linenum, linetype_name[lineval],
+ ifstate_name[ifstate[depth]], depth);
+ }
+}
+
+/*
+ * Flush the output and handle errors.
+ */
+static void
+closeout(void)
+{
+ if (symdepth && !zerosyms)
+ printf("\n");
+ if (fclose(output) == EOF) {
+ warn("couldn't write to %s", ofilename);
+ if (overwriting) {
+ unlink(tempname);
+ errx(2, "%s unchanged", filename);
+ } else {
+ exit(2);
+ }
+ }
+}
+
+/*
+ * Clean up and exit.
+ */
+static void
+done(void)
+{
+ if (incomment)
+ error("EOF in comment");
+ closeout();
+ if (overwriting && rename(tempname, filename) == -1) {
+ warn("couldn't rename temporary file");
+ unlink(tempname);
+ errx(2, "%s unchanged", filename);
+ }
+ exit(exitstat);
+}
+
+/*
+ * Parse a line and determine its type. We keep the preprocessor line
+ * parser state between calls in the global variable linestate, with
+ * help from skipcomment().
+ */
+static Linetype
+parseline(void)
+{
+ const char *cp;
+ int cursym;
+ int kwlen;
+ Linetype retval;
+ Comment_state wascomment;
+
+ linenum++;
+ if (fgets(tline, MAXLINE, input) == NULL)
+ return (LT_EOF);
+ if (newline == NULL) {
+ if (strrchr(tline, '\n') == strrchr(tline, '\r') + 1)
+ newline = newline_crlf;
+ else
+ newline = newline_unix;
+ }
+ retval = LT_PLAIN;
+ wascomment = incomment;
+ cp = skipcomment(tline);
+ if (linestate == LS_START) {
+ if (*cp == '#') {
+ linestate = LS_HASH;
+ firstsym = true;
+ cp = skipcomment(cp + 1);
+ } else if (*cp != '\0')
+ linestate = LS_DIRTY;
+ }
+ if (!incomment && linestate == LS_HASH) {
+ keyword = tline + (cp - tline);
+ cp = skipsym(cp);
+ kwlen = cp - keyword;
+ /* no way can we deal with a continuation inside a keyword */
+ if (strncmp(cp, "\\\r\n", 3) == 0 ||
+ strncmp(cp, "\\\n", 2) == 0)
+ Eioccc();
+ if (strlcmp("ifdef", keyword, kwlen) == 0 ||
+ strlcmp("ifndef", keyword, kwlen) == 0) {
+ cp = skipcomment(cp);
+ if ((cursym = findsym(cp)) < 0)
+ retval = LT_IF;
+ else {
+ retval = (keyword[2] == 'n')
+ ? LT_FALSE : LT_TRUE;
+ if (value[cursym] == NULL)
+ retval = (retval == LT_TRUE)
+ ? LT_FALSE : LT_TRUE;
+ if (ignore[cursym])
+ retval = (retval == LT_TRUE)
+ ? LT_TRUEI : LT_FALSEI;
+ }
+ cp = skipsym(cp);
+ } else if (strlcmp("if", keyword, kwlen) == 0)
+ retval = ifeval(&cp);
+ else if (strlcmp("elif", keyword, kwlen) == 0)
+ retval = ifeval(&cp) - LT_IF + LT_ELIF;
+ else if (strlcmp("else", keyword, kwlen) == 0)
+ retval = LT_ELSE;
+ else if (strlcmp("endif", keyword, kwlen) == 0)
+ retval = LT_ENDIF;
+ else {
+ linestate = LS_DIRTY;
+ retval = LT_PLAIN;
+ }
+ cp = skipcomment(cp);
+ if (*cp != '\0') {
+ linestate = LS_DIRTY;
+ if (retval == LT_TRUE || retval == LT_FALSE ||
+ retval == LT_TRUEI || retval == LT_FALSEI)
+ retval = LT_IF;
+ if (retval == LT_ELTRUE || retval == LT_ELFALSE)
+ retval = LT_ELIF;
+ }
+ if (retval != LT_PLAIN && (wascomment || incomment)) {
+ retval += LT_DODGY;
+ if (incomment)
+ linestate = LS_DIRTY;
+ }
+ /* skipcomment normally changes the state, except
+ if the last line of the file lacks a newline, or
+ if there is too much whitespace in a directive */
+ if (linestate == LS_HASH) {
+ size_t len = cp - tline;
+ if (fgets(tline + len, MAXLINE - len, input) == NULL) {
+ /* append the missing newline */
+ strcpy(tline + len, newline);
+ cp += strlen(newline);
+ linestate = LS_START;
+ } else {
+ linestate = LS_DIRTY;
+ }
+ }
+ }
+ if (linestate == LS_DIRTY) {
+ while (*cp != '\0')
+ cp = skipcomment(cp + 1);
+ }
+ debug("parser line %d state %s comment %s line", linenum,
+ comment_name[incomment], linestate_name[linestate]);
+ return (retval);
+}
+
+/*
+ * These are the binary operators that are supported by the expression
+ * evaluator.
+ */
+static Linetype op_strict(int *p, int v, Linetype at, Linetype bt) {
+ if(at == LT_IF || bt == LT_IF) return (LT_IF);
+ return (*p = v, v ? LT_TRUE : LT_FALSE);
+}
+static Linetype op_lt(int *p, Linetype at, int a, Linetype bt, int b) {
+ return op_strict(p, a < b, at, bt);
+}
+static Linetype op_gt(int *p, Linetype at, int a, Linetype bt, int b) {
+ return op_strict(p, a > b, at, bt);
+}
+static Linetype op_le(int *p, Linetype at, int a, Linetype bt, int b) {
+ return op_strict(p, a <= b, at, bt);
+}
+static Linetype op_ge(int *p, Linetype at, int a, Linetype bt, int b) {
+ return op_strict(p, a >= b, at, bt);
+}
+static Linetype op_eq(int *p, Linetype at, int a, Linetype bt, int b) {
+ return op_strict(p, a == b, at, bt);
+}
+static Linetype op_ne(int *p, Linetype at, int a, Linetype bt, int b) {
+ return op_strict(p, a != b, at, bt);
+}
+static Linetype op_or(int *p, Linetype at, int a, Linetype bt, int b) {
+ if (!strictlogic && (at == LT_TRUE || bt == LT_TRUE))
+ return (*p = 1, LT_TRUE);
+ return op_strict(p, a || b, at, bt);
+}
+static Linetype op_and(int *p, Linetype at, int a, Linetype bt, int b) {
+ if (!strictlogic && (at == LT_FALSE || bt == LT_FALSE))
+ return (*p = 0, LT_FALSE);
+ return op_strict(p, a && b, at, bt);
+}
+
+/*
+ * An evaluation function takes three arguments, as follows: (1) a pointer to
+ * an element of the precedence table which lists the operators at the current
+ * level of precedence; (2) a pointer to an integer which will receive the
+ * value of the expression; and (3) a pointer to a char* that points to the
+ * expression to be evaluated and that is updated to the end of the expression
+ * when evaluation is complete. The function returns LT_FALSE if the value of
+ * the expression is zero, LT_TRUE if it is non-zero, LT_IF if the expression
+ * depends on an unknown symbol, or LT_ERROR if there is a parse failure.
+ */
+struct ops;
+
+typedef Linetype eval_fn(const struct ops *, int *, const char **);
+
+static eval_fn eval_table, eval_unary;
+
+/*
+ * The precedence table. Expressions involving binary operators are evaluated
+ * in a table-driven way by eval_table. When it evaluates a subexpression it
+ * calls the inner function with its first argument pointing to the next
+ * element of the table. Innermost expressions have special non-table-driven
+ * handling.
+ */
+static const struct ops {
+ eval_fn *inner;
+ struct op {
+ const char *str;
+ Linetype (*fn)(int *, Linetype, int, Linetype, int);
+ } op[5];
+} eval_ops[] = {
+ { eval_table, { { "||", op_or } } },
+ { eval_table, { { "&&", op_and } } },
+ { eval_table, { { "==", op_eq },
+ { "!=", op_ne } } },
+ { eval_unary, { { "<=", op_le },
+ { ">=", op_ge },
+ { "<", op_lt },
+ { ">", op_gt } } }
+};
+
+/*
+ * Function for evaluating the innermost parts of expressions,
+ * viz. !expr (expr) number defined(symbol) symbol
+ * We reset the constexpr flag in the last two cases.
+ */
+static Linetype
+eval_unary(const struct ops *ops, int *valp, const char **cpp)
+{
+ const char *cp;
+ char *ep;
+ int sym;
+ bool defparen;
+ Linetype lt;
+
+ cp = skipcomment(*cpp);
+ if (*cp == '!') {
+ debug("eval%d !", ops - eval_ops);
+ cp++;
+ lt = eval_unary(ops, valp, &cp);
+ if (lt == LT_ERROR)
+ return (LT_ERROR);
+ if (lt != LT_IF) {
+ *valp = !*valp;
+ lt = *valp ? LT_TRUE : LT_FALSE;
+ }
+ } else if (*cp == '(') {
+ cp++;
+ debug("eval%d (", ops - eval_ops);
+ lt = eval_table(eval_ops, valp, &cp);
+ if (lt == LT_ERROR)
+ return (LT_ERROR);
+ cp = skipcomment(cp);
+ if (*cp++ != ')')
+ return (LT_ERROR);
+ } else if (isdigit((unsigned char)*cp)) {
+ debug("eval%d number", ops - eval_ops);
+ *valp = strtol(cp, &ep, 0);
+ if (ep == cp)
+ return (LT_ERROR);
+ lt = *valp ? LT_TRUE : LT_FALSE;
+ cp = skipsym(cp);
+ } else if (strncmp(cp, "defined", 7) == 0 && endsym(cp[7])) {
+ cp = skipcomment(cp+7);
+ debug("eval%d defined", ops - eval_ops);
+ if (*cp == '(') {
+ cp = skipcomment(cp+1);
+ defparen = true;
+ } else {
+ defparen = false;
+ }
+ sym = findsym(cp);
+ if (sym < 0) {
+ lt = LT_IF;
+ } else {
+ *valp = (value[sym] != NULL);
+ lt = *valp ? LT_TRUE : LT_FALSE;
+ }
+ cp = skipsym(cp);
+ cp = skipcomment(cp);
+ if (defparen && *cp++ != ')')
+ return (LT_ERROR);
+ constexpr = false;
+ } else if (!endsym(*cp)) {
+ debug("eval%d symbol", ops - eval_ops);
+ sym = findsym(cp);
+ cp = skipsym(cp);
+ if (sym < 0) {
+ lt = LT_IF;
+ cp = skipargs(cp);
+ } else if (value[sym] == NULL) {
+ *valp = 0;
+ lt = LT_FALSE;
+ } else {
+ *valp = strtol(value[sym], &ep, 0);
+ if (*ep != '\0' || ep == value[sym])
+ return (LT_ERROR);
+ lt = *valp ? LT_TRUE : LT_FALSE;
+ cp = skipargs(cp);
+ }
+ constexpr = false;
+ } else {
+ debug("eval%d bad expr", ops - eval_ops);
+ return (LT_ERROR);
+ }
+
+ *cpp = cp;
+ debug("eval%d = %d", ops - eval_ops, *valp);
+ return (lt);
+}
+
+/*
+ * Table-driven evaluation of binary operators.
+ */
+static Linetype
+eval_table(const struct ops *ops, int *valp, const char **cpp)
+{
+ const struct op *op;
+ const char *cp;
+ int val;
+ Linetype lt, rt;
+
+ debug("eval%d", ops - eval_ops);
+ cp = *cpp;
+ lt = ops->inner(ops+1, valp, &cp);
+ if (lt == LT_ERROR)
+ return (LT_ERROR);
+ for (;;) {
+ cp = skipcomment(cp);
+ for (op = ops->op; op->str != NULL; op++)
+ if (strncmp(cp, op->str, strlen(op->str)) == 0)
+ break;
+ if (op->str == NULL)
+ break;
+ cp += strlen(op->str);
+ debug("eval%d %s", ops - eval_ops, op->str);
+ rt = ops->inner(ops+1, &val, &cp);
+ if (rt == LT_ERROR)
+ return (LT_ERROR);
+ lt = op->fn(valp, lt, *valp, rt, val);
+ }
+
+ *cpp = cp;
+ debug("eval%d = %d", ops - eval_ops, *valp);
+ debug("eval%d lt = %s", ops - eval_ops, linetype_name[lt]);
+ return (lt);
+}
+
+/*
+ * Evaluate the expression on a #if or #elif line. If we can work out
+ * the result we return LT_TRUE or LT_FALSE accordingly, otherwise we
+ * return just a generic LT_IF.
+ */
+static Linetype
+ifeval(const char **cpp)
+{
+ int ret;
+ int val = 0;
+
+ debug("eval %s", *cpp);
+ constexpr = killconsts ? false : true;
+ ret = eval_table(eval_ops, &val, cpp);
+ debug("eval = %d", val);
+ return (constexpr ? LT_IF : ret == LT_ERROR ? LT_IF : ret);
+}
+
+/*
+ * Skip over comments, strings, and character literals and stop at the
+ * next character position that is not whitespace. Between calls we keep
+ * the comment state in the global variable incomment, and we also adjust
+ * the global variable linestate when we see a newline.
+ * XXX: doesn't cope with the buffer splitting inside a state transition.
+ */
+static const char *
+skipcomment(const char *cp)
+{
+ if (text || ignoring[depth]) {
+ for (; isspace((unsigned char)*cp); cp++)
+ if (*cp == '\n')
+ linestate = LS_START;
+ return (cp);
+ }
+ while (*cp != '\0')
+ /* don't reset to LS_START after a line continuation */
+ if (strncmp(cp, "\\\r\n", 3) == 0)
+ cp += 3;
+ else if (strncmp(cp, "\\\n", 2) == 0)
+ cp += 2;
+ else switch (incomment) {
+ case NO_COMMENT:
+ if (strncmp(cp, "/\\\r\n", 4) == 0) {
+ incomment = STARTING_COMMENT;
+ cp += 4;
+ } else if (strncmp(cp, "/\\\n", 3) == 0) {
+ incomment = STARTING_COMMENT;
+ cp += 3;
+ } else if (strncmp(cp, "/*", 2) == 0) {
+ incomment = C_COMMENT;
+ cp += 2;
+ } else if (strncmp(cp, "//", 2) == 0) {
+ incomment = CXX_COMMENT;
+ cp += 2;
+ } else if (strncmp(cp, "\'", 1) == 0) {
+ incomment = CHAR_LITERAL;
+ linestate = LS_DIRTY;
+ cp += 1;
+ } else if (strncmp(cp, "\"", 1) == 0) {
+ incomment = STRING_LITERAL;
+ linestate = LS_DIRTY;
+ cp += 1;
+ } else if (strncmp(cp, "\n", 1) == 0) {
+ linestate = LS_START;
+ cp += 1;
+ } else if (strchr(" \r\t", *cp) != NULL) {
+ cp += 1;
+ } else
+ return (cp);
+ continue;
+ case CXX_COMMENT:
+ if (strncmp(cp, "\n", 1) == 0) {
+ incomment = NO_COMMENT;
+ linestate = LS_START;
+ }
+ cp += 1;
+ continue;
+ case CHAR_LITERAL:
+ case STRING_LITERAL:
+ if ((incomment == CHAR_LITERAL && cp[0] == '\'') ||
+ (incomment == STRING_LITERAL && cp[0] == '\"')) {
+ incomment = NO_COMMENT;
+ cp += 1;
+ } else if (cp[0] == '\\') {
+ if (cp[1] == '\0')
+ cp += 1;
+ else
+ cp += 2;
+ } else if (strncmp(cp, "\n", 1) == 0) {
+ if (incomment == CHAR_LITERAL)
+ error("unterminated char literal");
+ else
+ error("unterminated string literal");
+ } else
+ cp += 1;
+ continue;
+ case C_COMMENT:
+ if (strncmp(cp, "*\\\r\n", 4) == 0) {
+ incomment = FINISHING_COMMENT;
+ cp += 4;
+ } else if (strncmp(cp, "*\\\n", 3) == 0) {
+ incomment = FINISHING_COMMENT;
+ cp += 3;
+ } else if (strncmp(cp, "*/", 2) == 0) {
+ incomment = NO_COMMENT;
+ cp += 2;
+ } else
+ cp += 1;
+ continue;
+ case STARTING_COMMENT:
+ if (*cp == '*') {
+ incomment = C_COMMENT;
+ cp += 1;
+ } else if (*cp == '/') {
+ incomment = CXX_COMMENT;
+ cp += 1;
+ } else {
+ incomment = NO_COMMENT;
+ linestate = LS_DIRTY;
+ }
+ continue;
+ case FINISHING_COMMENT:
+ if (*cp == '/') {
+ incomment = NO_COMMENT;
+ cp += 1;
+ } else
+ incomment = C_COMMENT;
+ continue;
+ default:
+ abort(); /* bug */
+ }
+ return (cp);
+}
+
+/*
+ * Skip macro arguments.
+ */
+static const char *
+skipargs(const char *cp)
+{
+ const char *ocp = cp;
+ int level = 0;
+ cp = skipcomment(cp);
+ if (*cp != '(')
+ return (cp);
+ do {
+ if (*cp == '(')
+ level++;
+ if (*cp == ')')
+ level--;
+ cp = skipcomment(cp+1);
+ } while (level != 0 && *cp != '\0');
+ if (level == 0)
+ return (cp);
+ else
+ /* Rewind and re-detect the syntax error later. */
+ return (ocp);
+}
+
+/*
+ * Skip over an identifier.
+ */
+static const char *
+skipsym(const char *cp)
+{
+ while (!endsym(*cp))
+ ++cp;
+ return (cp);
+}
+
+/*
+ * Look for the symbol in the symbol table. If it is found, we return
+ * the symbol table index, else we return -1.
+ */
+static int
+findsym(const char *str)
+{
+ const char *cp;
+ int symind;
+
+ cp = skipsym(str);
+ if (cp == str)
+ return (-1);
+ if (symlist) {
+ if (symdepth && firstsym)
+ printf("%s%3d", zerosyms ? "" : "\n", depth);
+ firstsym = zerosyms = false;
+ printf("%s%.*s%s",
+ symdepth ? " " : "",
+ (int)(cp-str), str,
+ symdepth ? "" : "\n");
+ /* we don't care about the value of the symbol */
+ return (0);
+ }
+ for (symind = 0; symind < nsyms; ++symind) {
+ if (strlcmp(symname[symind], str, cp-str) == 0) {
+ debug("findsym %s %s", symname[symind],
+ value[symind] ? value[symind] : "");
+ return (symind);
+ }
+ }
+ return (-1);
+}
+
+/*
+ * Add a symbol to the symbol table.
+ */
+static void
+addsym(bool ignorethis, bool definethis, char *sym)
+{
+ int symind;
+ char *val;
+
+ symind = findsym(sym);
+ if (symind < 0) {
+ if (nsyms >= MAXSYMS)
+ errx(2, "too many symbols");
+ symind = nsyms++;
+ }
+ symname[symind] = sym;
+ ignore[symind] = ignorethis;
+ val = sym + (skipsym(sym) - sym);
+ if (definethis) {
+ if (*val == '=') {
+ value[symind] = val+1;
+ *val = '\0';
+ } else if (*val == '\0')
+ value[symind] = "1";
+ else
+ usage();
+ } else {
+ if (*val != '\0')
+ usage();
+ value[symind] = NULL;
+ }
+ debug("addsym %s=%s", symname[symind],
+ value[symind] ? value[symind] : "undef");
+}
+
+/*
+ * Compare s with n characters of t.
+ * The same as strncmp() except that it checks that s[n] == '\0'.
+ */
+static int
+strlcmp(const char *s, const char *t, size_t n)
+{
+ while (n-- && *t != '\0')
+ if (*s != *t)
+ return ((unsigned char)*s - (unsigned char)*t);
+ else
+ ++s, ++t;
+ return ((unsigned char)*s);
+}
+
+/*
+ * Diagnostics.
+ */
+static void
+debug(const char *msg, ...)
+{
+ va_list ap;
+
+ if (debugging) {
+ va_start(ap, msg);
+ vwarnx(msg, ap);
+ va_end(ap);
+ }
+}
+
+static void
+error(const char *msg)
+{
+ if (depth == 0)
+ warnx("%s: %d: %s", filename, linenum, msg);
+ else
+ warnx("%s: %d: %s (#if line %d depth %d)",
+ filename, linenum, msg, stifline[depth], depth);
+ closeout();
+ errx(2, "output may be truncated");
+}