Commit Graph

56 Commits

Author SHA1 Message Date
ed
8ea5e6afe9 Mark global functions and/or variables in unifdef(1) static where possible.
This allows compilers and static analyzers to more thorough analysis.
2011-11-06 18:50:00 +00:00
fanf
9a13618035 Update to upstrea version 2.5.6.
Detect IO errors properly.
Write #line directives to the correct output stream.

Obtained from:	http://dotat.at/prog/unifdef
2011-01-21 18:10:11 +00:00
fanf
2c7d17da62 Update to upstream version 2.3
Only significant change is to fix a bu when the output file overwrites
the input when the input is redirected.

Obtained from: http://dotat.at/prog/unifdef
2011-01-18 19:13:03 +00:00
joel
6da836a30b Fix typos. 2010-08-01 09:10:09 +00:00
fanf
231ed98ffa Update to upstream version 2.3
Add -V (display version) and -S (list controlling symbols per #if
with nesting information) options, and improve unifdefall debug output.
Done committing 0 revisions to SVN

Obtained from: http://dotat.at/prog/unifdef
2010-03-12 17:55:29 +00:00
fanf
94f94d90e4 Update to upstream version 1.338
Fix a long-standing cpp compatibility bug: The -DFOO argument
(without an explicit value) should define FOO to 1 not to the empty
string.

Add support for CRLF newlines, based on a suggestion from Mark Rushakoff.

Obtained from:	http://dotat.at/prog/unifdef/
2010-02-19 16:54:51 +00:00
fanf
eb17713b6a Fix portability to 64 bit platforms.
printf("%.*s",i,s) expects an int not a ptrdiff_t

Thanks to bf1783 (at) googlemail.com for the bug report.
2010-01-19 20:35:44 +00:00
fanf
cfa2ac450d Sync unifdefall with upstream. It no longer relies entirely on $PATH
to find unifdef, in order to support running the test suite before
installing.
2010-01-19 18:18:15 +00:00
fanf
d3169e6c49 Add a -o outfile option, which can be used to specify an output file. The
file can safely be the same as the input file.  Idea from IRIX unifdef(1).
This version fixes a bug in the NetBSD unifdef which refuses to
write to a -o outfile which does not exist.

Obtained from: NetBSD
2010-01-19 18:13:54 +00:00
ed
9b380e30d4 Build usr.bin/ with WARNS=6 by default.
Also add some missing $FreeBSD$ to keep svn happy.
2010-01-02 10:27:05 +00:00
fanf
a855bffe78 unifdef: 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>
2009-11-27 17:53:49 +00:00
fanf
59b0d1fa1f 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.

Use {} instead of () for redirecting a group of commands.

Submitted by: Jonathan Nieder <jrnieder@gmail.com>
2009-11-26 19:08:33 +00:00
fanf
66e49eaba6 Remove debugging remnants from unifdefall.
Submitted by:	Jonathan Nieder <jrnieder@gmail.com>
2009-11-26 02:14:08 +00:00
fanf
0960dfee41 Update unifdef to my upstream version 1.188
Main highlights:

(A) The new -B option compresses blank lines around a deleted section
    so that blank lines around "paragraphs" of code don't get doubled.

(B) Lenient evaluation of && and || so that #if expressions can be
    evaluated even when some of their sub-expressions cannot be.

(C) The evaluator can now handle macros with arguments.

(D) Portability fixes, especially for unifdefall.

Contributions from:
Ben Hutchings at Solarflare Communications (A and B)
Anders H Kaseorg <andersk@mit.edu> (A and C)
Jonathan Nieder <jrnieder@gmail.com> (D)

Obtained from:  http://dotat.at/prog/unifdef/
2009-11-25 20:23:18 +00:00
hrs
b80049d8e2 Add AUTHORS section[*] and fix HISTORY section.
Requested by:		Dave Yost (original author)[*]
History checked by:	The CSRG Archives
MFC after:		3 days
2008-05-02 16:23:47 +00:00
fanf
960a8a877c Typo in comment spotted by Hasso Tepper.
Obtained from: DragonFlyBSD
2008-03-02 22:27:49 +00:00
fanf
7b6c8b6229 A fix for other ways of triggering joe@'s bug. 2008-02-29 13:19:50 +00:00
fanf
7a1729a27e Allow #if defined SYM as well as #if defined(SYM). Fix an abort
caused by files that have #endif and no newline on the last line
(reported by joe@). Also fix a benign uninitialized variable bug.
Update and tidy the copyright.
2008-02-29 12:57:14 +00:00
ru
0491ba1f63 Sync program's usage() with manpage's SYNOPSIS. 2005-05-21 09:55:10 +00:00
fanf
dc5d130c24 Sync with upstream:
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.
Add a -n option to insert #line directives in the output.
Ignore comment markers inside string and character literals
(bug reported by Amos Shapira <amos.shapira@netregistry.com.au>).
More accurate copyright notices.
2005-03-08 12:52:00 +00:00
ru
7f3c7f0d46 Sort sections. 2005-01-18 13:43:56 +00:00
ru
6cc4b6c220 Added the EXIT STATUS section where appropriate. 2005-01-17 07:44:44 +00:00
fanf
1a6a93b81e Improve expression evaluation debugging output, tidy up the handling of
EOF, and improve the commentary about backslash-newline handling.
2003-07-01 15:30:43 +00:00
fanf
cca07433cc Various fixes from upstream, including a bug...
Fix the usage synopsis.

Amend the copyright notice to reflect the fact that there's no Berkeley
code left.

Fix a typo in a comment, improve the descriptions of the way we use
some global variables (relevant to the bug below), and note that
division-by-zero has side effects so the current expression evaluator
can't be trivially extended to arithmetic in its current design.

Avoid hitting an abort(); /* bug */ when in "text mode" (i.e.
ignoring comment state) by updating the line parser state properly.

PR:	53907
2003-06-30 14:46:25 +00:00
fanf
fd4b814ebf MAINTAINER line moved to MAINTAINERS file. 2003-06-04 10:01:10 +00:00
obrien
2a8f1d64a1 Make GCC 3.3 happy with rcsid[], sccs[], and copyright[]. 2003-05-03 19:44:46 +00:00
ru
0dea541567 mdoc(7) police: Scheduled sweep. 2003-02-24 22:53:26 +00:00
fanf
d707a4320d Sync with upstream again:
* Be less strict about multi-line preprocessor directives (e.g. those
    with comments hanging off the right-hand end) since they're more
    of a problem in practise than I expected. Prompted by phk.

* Fix the handling of "ignore" symbols.

* Style pedantry from OpenBSD and Ted Unangst <tedu@stanford.edu>,
    including some whitespace fixes and removal of strcpy()
    (and not including excessively strict KNF enforcement).

* Fix some typos and terminological inconsistencies.
2003-01-20 12:41:41 +00:00
fanf
8a62aaa425 Style fixes: brackets around the argument of return, and removal of
excess space.

Obtained from: OpenBSD
2003-01-17 19:12:02 +00:00
fanf
fd01cb8163 Add a necessary cast, because ptrdiff_t isn't necessarily the same as int.
Obtained from: OpenBSD
2003-01-17 19:10:18 +00:00
ru
6ec2630499 mdoc(7) police: markup nits. 2002-12-23 15:14:12 +00:00
fanf
fd4a464ac4 Sync with up-stream version, including a number of bug-fixes:
* The partial-evaluation of #elif sequences was broken and the
spaghetti logic of its implementation was too hard to understand.
I've re-done it using a straight-forward table-driven push-down
automaton.

* The pre-processor line parser did not allow for all of the weird
places that people might put comments, which could have caused it
to add syntax-errors to the output by removing a #if line containing
the start- or end-marker of a comment.

* The lexer didn't need to special-case the handling of string-literals
or character-constants, but it did need to learn about line-continuations
(backslash-newline).

* The input routine was buggy and bit-rotten and trivially replacable
with fgets(). I've also made the program static- and const-safe and
improved the presentation-order. The formatting of the state-transition
tables remains non-stylish.

This commit-messsage was brought to you by code-point 45.

MFC-after: one-week
2002-12-18 20:50:44 +00:00
ru
4e662b87d4 mdoc(7) police: s/nul character/null character/.
Approved by:	re
2002-12-04 14:42:49 +00:00
fanf
e51e2c42c3 The spec says that unifdefall removes all #ifs, and this now requires
the -k flag to unifdef.
2002-09-24 19:50:03 +00:00
fanf
31ed0a9f39 The readability is improved by reducing the use of the passive voice.
No changes to the meaning are made.
2002-09-24 19:48:39 +00:00
fanf
e90165a4c9 It is probably a bad idea to unconditionally process directives with
constant controlling expressions: in particular, removing #if 0 sections
is considered "rude". This commit changes the default so that such
things are passed through unchanged, and the old behaviour can be had
with the -k "kill konsts" flag.

Suggested by:	markm
MFC after:	3 weeks
2002-09-24 19:27:44 +00:00
jmallett
2b6e4e1504 Remove local prototypes for main(). 2002-08-19 03:07:56 +00:00
ru
516f6d963f Fixed improper SCRIPTS assignment that broke `clean'. 2002-07-21 21:03:47 +00:00
fanf
68f8c604ee Character 0 is nul not null. 2002-05-30 11:42:44 +00:00
ru
810a072466 mdoc(7) police: tidy up. 2002-05-30 11:29:25 +00:00
fanf
977ef0bf3c Sync with upstream version:
* Ensure we work within the array bounds when parsing command-line options;
  * Replace h0h0getopt with getopt(3);
  * Use consistent whitespace style in the function declarations.

Revieweded by:	dwmalone (mentor)
2002-05-23 16:50:41 +00:00
fanf
94a883658e Upgrade unifdef:
* It now knows about the existence of #elif which would have
    caused it to produce incorrect results in some situations.

  * It can now process #if and #elif lines according to the
    values of symbols that are specified on the command line.
    The expression parser is only a simple subset of what C
    allows but it should be sufficient for most real-world
    code (it can cope with everything it finds in xterm).

  * It has an option for printing all of the symbols that might
    control #if processing. The unifdefall script uses this
    option along with cpp -dM to strip all #ifs from a file.

  * It has much larger static limits.

  * It handles nested #ifs much more completely.

There have also been many style improvements: KNF; ANSI function
definitions; all global stuff moved to the top of the file; use
stdbool instead of h0h0bool; const-correctness; err(3) instead
of fprintf(stderr, ...); enum instead of #define; commentary.

I used NetBSD's unifdef as the basis of this since it has received
the most attention over the years.

PR:		37454
Reviewed by:	markm, dwmalone
Approved by:	dwmalone (mentor)
MFC after:	3 weeks
2002-05-15 16:30:28 +00:00
charnier
ad8a79e6a5 Use `The .Nm utility' 2002-04-20 12:18:28 +00:00
imp
0b20191705 remove __P 2002-03-22 01:42:45 +00:00
markm
66061c79bd WARNS=2 fixes, use __FBSDID(), kill register keyword. 2001-12-11 23:20:23 +00:00
ru
36f138439b mdoc(7) police: removed HISTORY info from the .Os call. 2001-07-10 14:16:33 +00:00
dd
dc0185a459 Include missing header files which define functions for which gcc has
builtins (e.g., exit, strcmp).
2001-06-24 19:50:42 +00:00
schweikh
89bf59e333 Fix a grammar bogon. 2001-04-26 17:16:59 +00:00
ru
0d1334ca0c mdoc(7) police: use the new features of the Nm macro. 2000-11-20 19:21:22 +00:00
ru
a6f5d950d8 Avoid use of direct troff requests in mdoc(7) manual pages. 2000-11-10 17:46:15 +00:00