unifdef-2.12/0000755003162300316230000000000013621550714011640 5ustar fanf2fanf2unifdef-2.12/Makefile0000644003162300316230000000243713621550713013305 0ustar fanf2fanf2# Makefile for unifdef prefix = ${HOME} bindir = ${prefix}/bin mandir = ${prefix}/share/man man1dir= ${mandir}/man1 bindest= ${DESTDIR}${bindir} man1dest= ${DESTDIR}${man1dir} all: unifdef unifdef: unifdef.c unifdef.h version.h ${CC} ${CFLAGS} ${LDFLAGS} -o unifdef unifdef.c version.h: version.sh version.sh:: scripts/reversion.sh test: unifdef scripts/runtests.sh tests install: unifdef unifdefall.sh unifdef.1 : commands install -m 755 -d ${bindest} install -m 755 unifdef ${bindest}/ install -m 755 unifdefall.sh ${bindest}/unifdefall : manual install -m 755 -d ${man1dest} install -m 644 unifdef.1 ${man1dest}/ ln -s unifdef.1 ${man1dest}/unifdefall.1 clean: rm -f unifdef version.h rm -f tests/*.out tests/*.err tests/*.rc realclean: clean rm -f unifdef.txt [ ! -d .git ] || rm -f Changelog version.sh find . -name .git -prune -o \( \ -name '*~' -o -name '.#*' -o \ -name '*.orig' -o -name '*.core' -o \ -name 'xterm-*' -o -name 'xterm.tar.gz' \ \) -delete DISTEXTRA= version.h version.sh unifdef.txt Changelog release: ${DISTEXTRA} scripts/copycheck.sh scripts/release.sh ${DISTEXTRA} unifdef.txt: unifdef.1 nroff -Tascii -mdoc unifdef.1 | col -bx >unifdef.txt Changelog: version.sh scripts/gitlog2changelog.sh scripts/gitlog2changelog.sh >Changelog # eof unifdef-2.12/version.h0000644003162300316230000000011613621550713013473 0ustar fanf2fanf2"@(#) $Version: unifdef-2.12 $\n" "@(#) $Date: 2020-02-14 16:37:16 +0000 $\n" unifdef-2.12/unifdef.c0000644003162300316230000013375313621550714013440 0ustar fanf2fanf2/* * Copyright (c) 2002 - 2020 Tony Finch * * 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 "unifdef.h" static 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" }; #define linetype_if2elif(lt) ((Linetype)(lt - LT_IF + LT_ELIF)) #define linetype_2dodgy(lt) ((Linetype)(lt + LT_DODGY)) /* 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 "" */ RAW_STRING_LITERAL /* inside R"()" */ } 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 16384 /* 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 /* * 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 inplace; /* -m: modify in place */ 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 const char *linefile; /* file name for #line */ static FILE *output; /* output file pointer */ static const char *ofilename; /* output file name */ static const char *backext; /* backup extension */ static char *tempname; /* avoid splatting input */ static char tline[MAXLINE+EDITSLOP];/* input buffer plus space */ static char *keyword; /* used for editing #elif's */ /* * When processing a file, the output's newline style will match the * input's, and unifdef correctly handles CRLF or LF endings whatever * the platform's native style. The stdio streams are opened in binary * mode to accommodate platforms whose native newline style is CRLF. * When the output isn't a processed input file (when it is error / * debug / diagnostic messages) then unifdef uses native line endings. */ 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; /* to format symdepth output */ static bool firstsym; /* ditto */ static int exitmode; /* exit status mode */ static int exitstat; /* program exit status */ static bool altered; /* was this file modified? */ static void addsym1(bool, bool, char *); static void addsym2(bool, const char *, const char *); static char *astrcat(const char *, const char *); static void cleantemp(void); static void closeio(void); static void debug(const char *, ...); static void debugsym(const char *, int); static bool defundef(void); static void defundefile(const char *); static void done(void); static void error(const char *); static int findsym(const char **); static void flushline(bool); static void hashline(void); static void help(void); static Linetype ifeval(const char **); static void ignoreoff(void); static void ignoreon(void); static void indirectsym(void); static void keywordedit(const char *); static const char *matchsym(const char *, const char *); static void nest(void); static Linetype parseline(void); static void process(void); static void processinout(const char *, const char *); static const char *skipargs(const char *); static const char *skipcomment(const char *); static const char *skiphash(void); static const char *skipline(const char *); static const char *skipsym(const char *); static void state(Ifstate); static void unnest(void); static void usage(void); static void version(void); static const char *xstrdup(const char *, const char *); #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:f:I:M:o:x:bBcdehKklmnsStV")) != -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') addsym1(true, true, optarg); else if (opt == 'U') addsym1(true, false, optarg); else usage(); break; case 'D': /* define a symbol */ addsym1(false, true, optarg); break; case 'U': /* undef a symbol */ addsym1(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 'f': /* definitions file */ defundefile(optarg); break; case 'h': help(); break; case 'K': /* keep ambiguous #ifs */ strictlogic = true; break; case 'k': /* process constant #ifs */ killconsts = true; break; case 'm': /* modify in place */ inplace = true; break; case 'M': /* modify in place and keep backup */ inplace = true; if (strlen(optarg) > 0) backext = optarg; 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': version(); break; case 'x': exitmode = atoi(optarg); if(exitmode < 0 || exitmode > 2) usage(); break; default: usage(); } argc -= optind; argv += optind; if (compblank && lnblank) errx(2, "-B and -b are mutually exclusive"); if (symlist && (ofilename != NULL || inplace || argc > 1)) errx(2, "-s only works with one input file"); if (argc > 1 && ofilename != NULL) errx(2, "-o cannot be used with multiple input files"); if (argc > 1 && !inplace) errx(2, "multiple input files require -m or -M"); if (argc == 0 && inplace) errx(2, "-m requires an input file"); if (argc == 0) argc = 1; if (argc == 1 && !inplace && ofilename == NULL) ofilename = "-"; indirectsym(); atexit(cleantemp); if (ofilename != NULL) processinout(*argv, ofilename); else while (argc-- > 0) { processinout(*argv, *argv); argv++; } switch(exitmode) { case(0): exit(exitstat); case(1): exit(!exitstat); case(2): exit(0); default: abort(); /* bug */ } } /* * File logistics. */ static void processinout(const char *ifn, const char *ofn) { struct stat st; if (ifn == NULL || strcmp(ifn, "-") == 0) { filename = "[stdin]"; linefile = NULL; input = fbinmode(stdin); } else { filename = ifn; linefile = ifn; input = fopen(ifn, "rb"); if (input == NULL) err(2, "can't open %s", ifn); } if (strcmp(ofn, "-") == 0) { output = fbinmode(stdout); process(); return; } if (stat(ofn, &st) < 0) { output = fopen(ofn, "wb"); if (output == NULL) err(2, "can't create %s", ofn); process(); return; } tempname = astrcat(ofn, ".XXXXXX"); output = mktempmode(tempname, st.st_mode); if (output == NULL) err(2, "can't create %s", tempname); process(); if (backext != NULL) { char *backname = astrcat(ofn, backext); if (rename(ofn, backname) < 0) err(2, "can't rename \"%s\" to \"%s\"", ofn, backname); free(backname); } /* leave file unmodified if unifdef made no changes */ if (!altered && backext == NULL) { if (remove(tempname) < 0) warn("can't remove \"%s\"", tempname); } else if (replace(tempname, ofn) < 0) err(2, "can't rename \"%s\" to \"%s\"", tempname, ofn); free(tempname); tempname = NULL; } /* * For cleaning up if there is an error. */ static void cleantemp(void) { if (tempname != NULL) remove(tempname); } /* * Self-identification functions. */ 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 synopsis(FILE *fp) { fprintf(fp, "usage: unifdef [-bBcdehKkmnsStV] [-x{012}] [-Mext] [-opath] \\\n" " [-[i]Dsym[=val]] [-[i]Usym] [-fpath] ... [file] ...\n"); } static void usage(void) { synopsis(stderr); exit(2); } static void help(void) { synopsis(stdout); printf( " -Dsym=val define preprocessor symbol with given value\n" " -Dsym define preprocessor symbol with value 1\n" " -Usym preprocessor symbol is undefined\n" " -iDsym=val \\ ignore C strings and comments\n" " -iDsym ) in sections controlled by these\n" " -iUsym / preprocessor symbols\n" " -fpath file containing #define and #undef directives\n" " -b blank lines instead of deleting them\n" " -B compress blank lines around deleted section\n" " -c complement (invert) keep vs. delete\n" " -d debugging mode\n" " -e ignore multiline preprocessor directives\n" " -h print help\n" " -Ipath extra include file path (ignored)\n" " -K disable && and || short-circuiting\n" " -k process constant #if expressions\n" " -Mext modify in place and keep backups\n" " -m modify input files in place\n" " -n add #line directives to output\n" " -opath output file name\n" " -S list #if control symbols with nesting\n" " -s list #if control symbols\n" " -t ignore C strings and comments\n" " -V print version\n" " -x{012} exit status mode\n" ); exit(0); } /* * 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. We use memcpy() to * overwrite the 4 byte token "elif" with "if " without a '\0' byte. * * 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(); } /* modify this line */ static void Mpass (void) { memcpy(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); altered = true; 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; } /* * The last state transition function. When this is called, * lineval == LT_EOF, so the process() loop will terminate. */ static void done(void) { if (incomment) error("EOF in comment"); closeio(); } /* * Write a line to the output or not, according to command line options. * If writing fails, closeio() will print the error and exit. */ 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) hashline(); if (fputs(tline, output) == EOF) closeio(); delcount = 0; blankmax = blankcount = blankline ? blankcount + 1 : 0; } } else { if (lnblank && fputs(newline, output) == EOF) closeio(); altered = true; delcount += 1; blankcount = 0; } if (debugging && fflush(output) == EOF) closeio(); } /* * Format of #line directives depends on whether we know the input filename. */ static void hashline(void) { int e; if (linefile == NULL) e = fprintf(output, "#line %d%s", linenum, newline); else e = fprintf(output, "#line %d \"%s\"%s", linenum, linefile, newline); if (e < 0) closeio(); } /* * Flush the output and handle errors. */ static void closeio(void) { /* Tidy up after findsym(). */ if (symdepth && !zerosyms) printf("\n"); if (output != NULL && (ferror(output) || fclose(output) == EOF)) err(2, "%s: can't write to output", filename); fclose(input); } /* * The driver for the state machine. */ static void process(void) { Linetype lineval = LT_PLAIN; /* When compressing blank lines, act as if the file is preceded by a large number of blank lines. */ blankmax = blankcount = 1000; zerosyms = true; newline = NULL; linenum = 0; altered = false; while (lineval != LT_EOF) { lineval = parseline(); trans_table[ifstate[depth]][lineval](); debug("process line %d %s -> %s depth %d", linenum, linetype_name[lineval], ifstate_name[ifstate[depth]], depth); } exitstat |= altered; } /* * 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; Linetype retval; Comment_state wascomment; wascomment = incomment; cp = skiphash(); if (cp == NULL) return (LT_EOF); if (newline == NULL) { if (strrchr(tline, '\n') == strrchr(tline, '\r') + 1) newline = newline_crlf; else newline = newline_unix; } if (*cp == '\0') { retval = LT_PLAIN; goto done; } keyword = tline + (cp - tline); if ((cp = matchsym("ifdef", keyword)) != NULL || (cp = matchsym("ifndef", keyword)) != NULL) { 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; } } else if ((cp = matchsym("if", keyword)) != NULL) retval = ifeval(&cp); else if ((cp = matchsym("elif", keyword)) != NULL) retval = linetype_if2elif(ifeval(&cp)); else if ((cp = matchsym("else", keyword)) != NULL) retval = LT_ELSE; else if ((cp = matchsym("endif", keyword)) != NULL) retval = LT_ENDIF; else { cp = skipsym(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(); cp = skipline(cp); retval = LT_PLAIN; goto done; } cp = skipcomment(cp); if (*cp != '\0') { cp = skipline(cp); 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; } /* the following can happen if the last line of the file lacks a newline or if there is too much whitespace in a directive */ if (linestate == LS_HASH) { long len = cp - tline; if (fgets(tline + len, MAXLINE - len, input) == NULL) { if (ferror(input)) err(2, "can't read %s", filename); debug("parser insert newline at EOF", linenum); strcpy(tline + len, newline); cp += strlen(newline); linestate = LS_START; } else { debug("parser concatenate dangling whitespace"); ++linenum; cp = skipcomment(cp); } } if (retval != LT_PLAIN && (wascomment || linestate != LS_START)) { retval = linetype_2dodgy(retval); linestate = LS_DIRTY; } done: 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(long *p, long 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(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a < b, at, bt); } static Linetype op_gt(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a > b, at, bt); } static Linetype op_le(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a <= b, at, bt); } static Linetype op_ge(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a >= b, at, bt); } static Linetype op_eq(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a == b, at, bt); } static Linetype op_ne(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a != b, at, bt); } static Linetype op_or(long *p, Linetype at, long a, Linetype bt, long 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(long *p, Linetype at, long a, Linetype bt, long b) { if (!strictlogic && (at == LT_FALSE || bt == LT_FALSE)) return (*p = 0, LT_FALSE); return op_strict(p, a && b, at, bt); } static Linetype op_blsh(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a << b, at, bt); } static Linetype op_brsh(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a >> b, at, bt); } static Linetype op_add(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a + b, at, bt); } static Linetype op_sub(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a - b, at, bt); } static Linetype op_mul(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a * b, at, bt); } static Linetype op_div(long *p, Linetype at, long a, Linetype bt, long b) { if (bt != LT_TRUE) { debug("eval division by zero"); return (LT_ERROR); } return op_strict(p, a / b, at, bt); } static Linetype op_mod(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a % b, at, bt); } static Linetype op_bor(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a | b, at, bt); } static Linetype op_bxor(long *p, Linetype at, long a, Linetype bt, long b) { return op_strict(p, a ^ b, at, bt); } static Linetype op_band(long *p, Linetype at, long a, Linetype bt, long b) { 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 *, long *, 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. * * The stop characters help with lexical analysis: an operator is not * recognized if it is followed by one of the stop characters because * that would make it a different operator. */ struct op { const char *str; Linetype (*fn)(long *, Linetype, long, Linetype, long); const char *stop; }; struct ops { eval_fn *inner; struct op op[5]; }; static const struct ops eval_ops[] = { { eval_table, { { "||", op_or, NULL } } }, { eval_table, { { "&&", op_and, NULL } } }, { eval_table, { { "|", op_bor, "|" } } }, { eval_table, { { "^", op_bxor, NULL } } }, { eval_table, { { "&", op_band, "&" } } }, { eval_table, { { "==", op_eq, NULL }, { "!=", op_ne, NULL } } }, { eval_table, { { "<=", op_le, NULL }, { ">=", op_ge, NULL }, { "<", op_lt, "<=" }, { ">", op_gt, ">=" } } }, { eval_table, { { "<<", op_blsh, NULL }, { ">>", op_brsh, NULL } } }, { eval_table, { { "+", op_add, NULL }, { "-", op_sub, NULL } } }, { eval_unary, { { "*", op_mul, NULL }, { "/", op_div, NULL }, { "%", op_mod, NULL } } }, }; /* Current operator precedence level */ static long prec(const struct ops *ops) { return (ops - eval_ops); } /* * 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, long *valp, const char **cpp) { const char *cp; char *ep; int sym; bool defparen; Linetype lt; cp = skipcomment(*cpp); if (*cp == '!') { debug("eval%d !", prec(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 == '~') { debug("eval%d ~", prec(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 == '-') { debug("eval%d -", prec(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 (", prec(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", prec(ops)); *valp = strtol(cp, &ep, 0); if (ep == cp) return (LT_ERROR); lt = *valp ? LT_TRUE : LT_FALSE; cp = ep; } else if (matchsym("defined", cp) != NULL) { cp = skipcomment(cp+7); if (*cp == '(') { cp = skipcomment(cp+1); defparen = true; } else { defparen = false; } sym = findsym(&cp); cp = skipcomment(cp); if (defparen && *cp++ != ')') { debug("eval%d defined missing ')'", prec(ops)); return (LT_ERROR); } if (sym < 0) { debug("eval%d defined unknown", prec(ops)); lt = LT_IF; } else { debug("eval%d defined %s", prec(ops), symname[sym]); *valp = (value[sym] != NULL); lt = *valp ? LT_TRUE : LT_FALSE; } constexpr = false; } else if (!endsym(*cp)) { debug("eval%d symbol", prec(ops)); sym = findsym(&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", prec(ops)); return (LT_ERROR); } *cpp = cp; debug("eval%d = %d", prec(ops), *valp); return (lt); } /* * Table-driven evaluation of binary operators. */ static Linetype eval_table(const struct ops *ops, long *valp, const char **cpp) { const struct op *op; const char *cp; long val = 0; Linetype lt, rt; debug("eval%d", prec(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) { /* assume only one-char operators have stop chars */ if (op->stop != NULL && cp[1] != '\0' && strchr(op->stop, cp[1]) != NULL) continue; else break; } } if (op->str == NULL) break; cp += strlen(op->str); debug("eval%d %s", prec(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", prec(ops), *valp); debug("eval%d lt = %s", prec(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) { Linetype ret; long 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); } /* * Read a line and examine its initial part to determine if it is a * preprocessor directive. Returns NULL on EOF, or a pointer to a * preprocessor directive name, or a pointer to the zero byte at the * end of the line. */ static const char * skiphash(void) { const char *cp; linenum++; if (fgets(tline, MAXLINE, input) == NULL) { if (ferror(input)) err(2, "can't read %s", filename); else return (NULL); } cp = skipcomment(tline); if (linestate == LS_START && *cp == '#') { linestate = LS_HASH; return (skipcomment(cp + 1)); } else if (*cp == '\0') { return (cp); } else { return (skipline(cp)); } } /* * Mark a line dirty and consume the rest of it, keeping track of the * lexical state. */ static const char * skipline(const char *cp) { const char *pcp; if (*cp != '\0') linestate = LS_DIRTY; while (*cp != '\0') { cp = skipcomment(pcp = cp); if (pcp == cp) cp++; } return (cp); } /* * 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, "R\"(", 3) == 0) { incomment = RAW_STRING_LITERAL; linestate = LS_DIRTY; cp += 3; } 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 RAW_STRING_LITERAL: if (strncmp(cp, ")\"", 2) == 0) { incomment = NO_COMMENT; cp += 2; } 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); } /* * Skip whitespace and take a copy of any following identifier. */ static const char * getsym(const char **cpp) { const char *cp = *cpp, *sym; cp = skipcomment(cp); cp = skipsym(sym = cp); if (cp == sym) return NULL; *cpp = cp; return (xstrdup(sym, cp)); } /* * Check that s (a symbol) matches the start of t, and that the * following character in t is not a symbol character. Returns a * pointer to the following character in t if there is a match, * otherwise NULL. */ static const char * matchsym(const char *s, const char *t) { while (*s != '\0' && *t != '\0') if (*s != *t) return (NULL); else ++s, ++t; if (*s == '\0' && endsym(*t)) return(t); else return(NULL); } /* * 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 **strp) { const char *str; int symind; str = *strp; *strp = skipsym(str); if (symlist) { if (*strp == str) return (-1); if (symdepth && firstsym) printf("%s%3d", zerosyms ? "" : "\n", depth); firstsym = zerosyms = false; printf("%s%.*s%s", symdepth ? " " : "", (int)(*strp-str), str, symdepth ? "" : "\n"); /* we don't care about the value of the symbol */ return (0); } for (symind = 0; symind < nsyms; ++symind) { if (matchsym(symname[symind], str) != NULL) { debugsym("findsym", symind); return (symind); } } return (-1); } /* * Resolve indirect symbol values to their final definitions. */ static void indirectsym(void) { const char *cp; int changed, sym, ind; do { changed = 0; for (sym = 0; sym < nsyms; ++sym) { if (value[sym] == NULL) continue; cp = value[sym]; ind = findsym(&cp); if (ind == -1 || ind == sym || *cp != '\0' || value[ind] == NULL || value[ind] == value[sym]) continue; debugsym("indir...", sym); value[sym] = value[ind]; debugsym("...ectsym", sym); changed++; } } while (changed); } /* * Add a symbol to the symbol table, specified with the format sym=val */ static void addsym1(bool ignorethis, bool definethis, char *symval) { const char *sym, *val; sym = symval; val = skipsym(sym); if (definethis && *val == '=') { symval[val - sym] = '\0'; val = val + 1; } else if (*val == '\0') { val = definethis ? "1" : NULL; } else { usage(); } addsym2(ignorethis, sym, val); } /* * Add a symbol to the symbol table. */ static void addsym2(bool ignorethis, const char *sym, const char *val) { const char *cp = sym; int symind; symind = findsym(&cp); if (symind < 0) { if (nsyms >= MAXSYMS) errx(2, "too many symbols"); symind = nsyms++; } ignore[symind] = ignorethis; symname[symind] = sym; value[symind] = val; debugsym("addsym", symind); } static void debugsym(const char *why, int symind) { debug("%s %s%c%s", why, symname[symind], value[symind] ? '=' : ' ', value[symind] ? value[symind] : "undef"); } /* * Add symbols to the symbol table from a file containing * #define and #undef preprocessor directives. */ static void defundefile(const char *fn) { filename = fn; input = fopen(fn, "rb"); if (input == NULL) err(2, "can't open %s", fn); linenum = 0; while (defundef()) ; if (ferror(input)) err(2, "can't read %s", filename); else fclose(input); if (incomment) error("EOF in comment"); } /* * Read and process one #define or #undef directive */ static bool defundef(void) { const char *cp, *kw, *sym, *val, *end; cp = skiphash(); if (cp == NULL) return (false); if (*cp == '\0') goto done; /* strip trailing whitespace, and do a fairly rough check to avoid unsupported multi-line preprocessor directives */ end = cp + strlen(cp); while (end > tline && strchr(" \t\n\r", end[-1]) != NULL) --end; if (end > tline && end[-1] == '\\') Eioccc(); kw = cp; if ((cp = matchsym("define", kw)) != NULL) { sym = getsym(&cp); if (sym == NULL) error("Missing macro name in #define"); if (*cp == '(') { val = "1"; } else { cp = skipcomment(cp); val = (cp < end) ? xstrdup(cp, end) : ""; } debug("#define"); addsym2(false, sym, val); } else if ((cp = matchsym("undef", kw)) != NULL) { sym = getsym(&cp); if (sym == NULL) error("Missing macro name in #undef"); cp = skipcomment(cp); debug("#undef"); addsym2(false, sym, NULL); } else { error("Unrecognized preprocessor directive"); } skipline(cp); done: debug("parser line %d state %s comment %s line", linenum, comment_name[incomment], linestate_name[linestate]); return (true); } /* * Concatenate two strings into new memory, checking for failure. */ static char * astrcat(const char *s1, const char *s2) { char *s; int len; size_t size; len = snprintf(NULL, 0, "%s%s", s1, s2); if (len < 0) err(2, "snprintf"); size = (size_t)len + 1; s = (char *)malloc(size); if (s == NULL) err(2, "malloc"); snprintf(s, size, "%s%s", s1, s2); return (s); } /* * Duplicate a segment of a string, checking for failure. */ static const char * xstrdup(const char *start, const char *end) { size_t n; char *s; if (end < start) abort(); /* bug */ n = (size_t)(end - start) + 1; s = (char *)malloc(n); if (s == NULL) err(2, "malloc"); snprintf(s, n, "%s", start); return (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); closeio(); errx(2, "Output may be truncated"); } unifdef-2.12/INSTALL0000644003162300316230000000265113621550713012674 0ustar fanf2fanf2unifdef installation instructions --------------------------------- Dependencies: * unifdef is mostly ANSI C, with a few unixisms * unifdefall is a Unix shell script * the manual uses the nroff mdoc macros * the support and test scripts are Unix shell scripts To build on Unix, type `make`. You can adjust the compilation options using the POSIX standard CFLAGS and LDFLAGS make variables. To install in your home directory, type `make install` or to install in /usr type `make prefix=/usr install`. See the start of the Makefile for the install location variables. The win32 subdirectory contains build files for MinGW and Visual Studio 2010 which make use of the FreeBSD code plus some other portability wrappers. To build with MinGW, type `mingw32-make -f win32/Makefile.mingw`. Unlike the Unix Makefile, the Windows builds do not automatically create or update version.h. The release tar and zip files include a pre-generated version.h but the git repository does not. To build from a git clone you need a Unix shell environment, which you can get as part of GitHub for Windows - http://windows.github.com/ To update version.h, right-click on the fanf2/unifdef repository and select "open a shell here", then type `sh scripts\reversion.sh`. We assume Unix provides the BSD err.h functions and C99 stdbool.h. The FreeBSD subdirectory has copies of err.c and getopt.c for systems such as Windows that don't have them built in. - end - unifdef-2.12/ifdef-how.pl0000755003162300316230000000160313621550713014047 0ustar fanf2fanf2#!/usr/bin/perl use warnings; use strict; if (@ARGV != 2) { die < Print the sequence of preprocessor conditionals which lead to the given line being retained after preprocessing. There is no output if the line is always retained. Conditionals that must be true are printed verbatim; conditionals that musy be false have their preprocessor keyword prefixed with NOT. Warning: this program does not parse comments or strings, so it will not handle tricky code correctly. END } my $file = shift; my $line = shift; open my $fh, '<', $file or die "ifdef-how: open $file: $!\n"; my @stack; while (<$fh>) { last if $. == $line; if (m{^\s*#\s*(if|ifdef|ifndef)\b}) { push @stack, $_; } if (m{^\s*#\s*(elif|else)\b}) { $stack[-1] =~ s{^(\s*#\s*)(?!NOT)\b}{${1}NOT}gm; $stack[-1] .= $_; } if (m{^\s*#\s*endif\b}) { pop @stack; } } print @stack; unifdef-2.12/.travis.yml0000644003162300316230000000210513621550713013746 0ustar fanf2fanf2language: c sudo: false os: - linux - osx compiler: - gcc - clang matrix: include: ## Ubuntu 14.04 Trusty (beta), sudo required! - os: linux dist: trusty sudo: required compiler: gcc env: TRUSTY="yes" - os: linux dist: trusty sudo: required compiler: clang env: TRUSTY="yes" ## MinGW / wine - os: linux sudo: required compiler: i586-mingw32msvc-gcc env: BUILD_MINGW="yes" allow_failures: - compiler: i586-mingw32msvc-gcc install: - env | grep -v "encrypted" | LC_ALL=C sort - if test "${BUILD_MINGW}" = "yes"; then sudo apt-get -qq update && sudo apt-get -qq install wine; fi script: - if test "${BUILD_MINGW}" != "yes"; then make && make test && make release; else export CC=i586-mingw32msvc-gcc; echo -e '#!/bin/bash\nexec wine $0.exe "$@"' > unifdef; chmod ugo+x unifdef; make version.h && make -f win32/Makefile.mingw test; fi branches: only: - master - next - /^travis.*/ - /^tmp.*/ unifdef-2.12/.gitignore0000644003162300316230000000011113621550713013620 0ustar fanf2fanf2Changelog unifdef unifdef.exe unifdef.txt unifdef-* version.h version.sh unifdef-2.12/version.sh0000644003162300316230000000005713621550713013662 0ustar fanf2fanf2V="unifdef-2.12" D="2020-02-14 16:37:16 +0000" unifdef-2.12/unifdef.10000644003162300316230000002743013621550714013350 0ustar fanf2fanf2.\" Copyright (c) 1985, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" Copyright (c) 2002 - 2015 Tony Finch . All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" Dave Yost. It was rewritten to support ANSI C by Tony Finch. .\" .\" 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. .\" 3. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. .\" .Dd December 3, 2015 .Dt UNIFDEF 1 PRM .Os " " .Sh NAME .Nm unifdef , unifdefall .Nd remove preprocessor conditionals from code .Sh SYNOPSIS .Nm .Op Fl bBcdehKkmnsStV .Op Fl I Ns Ar path .Op Fl [i]D Ns Ar sym Ns Op = Ns Ar val .Op Fl [i]U Ns Ar sym .Ar ... .Op Fl f Ar defile .Op Fl x Bro Ar 012 Brc .Op Fl M Ar backext .Op Fl o Ar outfile .Op Ar infile ... .Nm unifdefall .Op Fl I Ns Ar path .Ar ... .Ar file .Sh DESCRIPTION The .Nm utility selectively processes conditional .Xr cpp 1 directives. It removes from a file both the directives and any additional text that they specify should be removed, while otherwise leaving the file alone. .Pp The .Nm utility acts on .Ic #if , #ifdef , #ifndef , .Ic #elif , #else , and .Ic #endif lines, using macros specified in .Fl D and .Fl U command line options or in .Fl f definitions files. A directive is processed if the macro specifications are sufficient to provide a definite value for its control expression. If the result is false, the directive and the following lines under its control are removed. If the result is true, only the directive is removed. An .Ic #ifdef or .Ic #ifndef directive is passed through unchanged if its controlling macro is not specified. Any .Ic #if or .Ic #elif control expression that has an unknown value or that .Nm cannot parse is passed through unchanged. By default, .Nm ignores .Ic #if and .Ic #elif lines with constant expressions; it can be told to process them by specifying the .Fl k flag on the command line. .Pp It understands a commonly-used subset of the expression syntax for .Ic #if and .Ic #elif lines: integer constants, integer values of macros defined on the command line, the .Fn defined operator, the operators .Ic \&! , ~ , - (unary), .Ic * , / , % , + , - , .Ic < , <= , > , >= , == , != , & , ^ , \&| , .Ic && , || , and parenthesized expressions. Division by zero is treated as an unknown value. A kind of .Dq "short circuit" evaluation is used for the .Ic && operator: if either operand is definitely false then the result is false, even if the value of the other operand is unknown. Similarly, if either operand of .Ic || is definitely true then the result is true. .Pp When evaluating an expression, .Nm does not expand macros first. The value of a macro must be a simple number, not an expression. A limited form of indirection is allowed, where one macro's value is the name of another. .Pp In most cases, .Nm does not distinguish between object-like macros (without arguments) and function-like macros (with arguments). A function-like macro invocation can appear in .Ic #if and .Ic #elif control expressions. If the macro is not explicitly defined, or is defined with the .Fl D flag on the command-line, or with .Ic #define in a .Fl f definitions file, its arguments are ignored. If a macro is explicitly undefined on the command line with the .Fl U flag, or with .Ic #undef in a .Fl f definitions file, it may not have any arguments since this leads to a syntax error. .Pp The .Nm utility understands just enough about C to know when one of the directives is inactive because it is inside a comment, or cannot be evaluated because it is split by a backslash-continued line. It spots unusually-formatted preprocessor directives and passes them through unchanged when the layout is too odd for it to handle. (See the .Sx BUGS section below.) .Pp A script called .Nm unifdefall can be used to remove all conditional .Xr cpp 1 directives from a file. It uses .Nm Fl s and .Nm cpp Fl dM to get lists of all the controlling macros and their definitions (or lack thereof), then invokes .Nm with appropriate arguments to process the file. .Sh OPTIONS .Bl -tag -width indent -compact .It Fl D Ns Ar sym Ns = Ns Ar val Specify that a macro is defined to a given value. .Pp .It Fl D Ns Ar sym Specify that a macro is defined to the value 1. .Pp .It Fl U Ns Ar sym Specify that a macro is undefined. .Pp If the same macro appears in more than one argument, the last occurrence dominates. .Pp .It Fl iD Ns Ar sym Ns Op = Ns Ar val .It Fl iU Ns Ar sym C strings, comments, and line continuations are ignored within .Ic #ifdef and .Ic #ifndef blocks controlled by macros specified with these options. .Pp .It Fl f Ar defile The file .Ar defile contains .Ic #define and .Ic #undef preprocessor directives, which have the same effect as the corresponding .Fl D and .Fl U command-line arguments. You can have multiple .Fl f arguments and mix them with .Fl D and .Fl U arguments; later options override earlier ones. .Pp Each directive must be on a single line. Object-like macro definitions (without arguments) are set to the given value. Function-like macro definitions (with arguments) are treated as if they are set to 1. .Pp .Em Warning: string literals and character constants are not parsed correctly in .Fl f files. .Pp .It Fl b Replace removed lines with blank lines instead of deleting them. Mutually exclusive with the .Fl B option. .Pp .It Fl B Compress blank lines around a deleted section. Mutually exclusive with the .Fl b option. .Pp .It Fl c Complement, i.e., lines that would have been removed or blanked are retained and vice versa. .Pp .It Fl d Turn on printing of debugging messages. .Pp .It Fl e By default, .Nm will report an error if it needs to remove a preprocessor directive that spans more than one line, for example, if it has a multi-line comment hanging off its right hand end. The .Fl e flag makes it ignore the line instead. .Pp .It Fl h Print help. .Pp .It Fl I Ns Ar path Specifies to .Nm unifdefall an additional place to look for .Ic #include files. This option is ignored by .Nm for compatibility with .Xr cpp 1 and to simplify the implementation of .Nm unifdefall . .Pp .It Fl K Always treat the result of .Ic && and .Ic || operators as unknown if either operand is unknown, instead of short-circuiting when unknown operands can't affect the result. This option is for compatibility with older versions of .Nm . .Pp .It Fl k Process .Ic #if and .Ic #elif lines with constant expressions. By default, sections controlled by such lines are passed through unchanged because they typically start .Dq Li "#if 0" and are used as a kind of comment to sketch out future or past development. It would be rude to strip them out, just as it would be for normal comments. .Pp .It Fl m Modify one or more input files in place. If an input file is not modified, the original is preserved instead of being overwritten with an identical copy. .Pp .It Fl M Ar backext Modify input files in place, and keep backups of the original files by appending the .Ar backext to the input filenames. A zero length .Ar backext behaves the same as the .Fl m option. .Pp .It Fl n Add .Li #line directives to the output following any deleted lines, so that errors produced when compiling the output file correspond to line numbers in the input file. .Pp .It Fl o Ar outfile Write output to the file .Ar outfile instead of the standard output when processing a single file. .Pp .It Fl s Instead of processing an input file as usual, this option causes .Nm to produce a list of macros that are used in preprocessor directive controlling expressions. .Pp .It Fl S Like the .Fl s option, but the nesting depth of each macro is also printed. This is useful for working out the number of possible combinations of interdependent defined/undefined macros. .Pp .It Fl t Disables parsing for C strings, comments, and line continuations, which is useful for plain text. This is a blanket version of the .Fl iD and .Fl iU flags. .Pp .It Fl V Print version details. .Pp .It Fl x Bro Ar 012 Brc Set exit status mode to zero, one, or two. See the .Sx EXIT STATUS section below for details. .El .Pp The .Nm utility takes its input from .Em stdin if there are no .Ar file arguments. You must use the .Fl m or .Fl M options if there are multiple input files. You can specify inut from stdin or output to stdout with .Ql - . .Pp The .Nm utility works nicely with the .Fl D Ns Ar sym option of .Xr diff 1 . .Sh EXIT STATUS In normal usage the .Nm utility's exit status depends on the mode set using the .Fl x option. .Pp If the exit mode is zero (the default) then .Nm exits with status 0 if the output is an exact copy of the input, or with status 1 if the output differs. .Pp If the exit mode is one, .Nm exits with status 1 if the output is unmodified or 0 if it differs. .Pp If the exit mode is two, .Nm exits with status zero in both cases. .Pp In all exit modes, .Nm exits with status 2 if there is an error. .Pp The exit status is 0 if the .Fl h or .Fl V command line options are given. .Sh DIAGNOSTICS .Bl -item .It .Tn EOF in comment .It Inappropriate .Ic #elif , .Ic #else or .Ic #endif .It Missing macro name in #define or #undef .It Obfuscated preprocessor control line .It Premature .Tn EOF (with the line number of the most recent unterminated .Ic #if ) .It Too many levels of nesting .It Unrecognized preprocessor directive .It Unterminated char or string literal .El .Sh SEE ALSO .Xr cpp 1 , .Xr diff 1 .Pp The unifdef home page is .Pa http://dotat.at/prog/unifdef .Sh HISTORY The .Nm command appeared in .Bx 2.9 . .Tn ANSI\~C support was added in .Fx 4.7 . .Sh AUTHORS .An -nosplit The original implementation was written by .An Dave Yost Aq Mt Dave@Yost.com . .An Tony Finch Aq Mt dot@dotat.at rewrote it to support .Tn ANSI\~C . .Sh BUGS .Bl -bullet .It Expression evaluation is very limited. .It Character constants are not evaluated. String literals and character constants in .Fl f definition files are ignored rather than parsed as part of a macro's replacement tokens. .It Only the basic form of C++ raw string literals is recognized, like .Li R"(string)" without delimiters as in .Li R"delimiter(string)delimiter" . .It Source files are processed one line at a time, so preprocessor directives split across more than one physical line (because of comments or backslash-newline) cannot be handled in every situation. .It Trigraphs are not recognized. .It There is no support for macros with different definitions at different points in the source file. .It The text-mode and ignore functionality does not correspond to modern .Xr cpp 1 behaviour. .El .Pp Please send bug reports by email to .Aq Mt dot@dotat.at . unifdef-2.12/unifdef.h0000644003162300316230000000341113621550714013430 0ustar fanf2fanf2/* * Copyright (c) 2012 - 2013 Tony Finch * * 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. */ #include #include #include #include #include #include #include #include #include /* portability stubs */ #define fbinmode(fp) (fp) #define replace(old,new) rename(old,new) static FILE * mktempmode(char *tmp, int mode) { int fd = mkstemp(tmp); if (fd < 0) return (NULL); fchmod(fd, mode & (S_IRWXU|S_IRWXG|S_IRWXO)); return (fdopen(fd, "wb")); } unifdef-2.12/Changelog0000644003162300316230000062013313621550713013456 0ustar fanf2fanf2--------------------------------------------------- 2020-02-14 16:49:56 +0000 Tony Finch scripts: cleaner Changelog The Changelog was contaminated by branch name decorations, but I only want tags. Although there is a --decorate-refs-exclude option, it does not seem to have any effect on the %d format specifier. Seems easier to just leave them out altogether. scripts/gitlog2changelog.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2020-02-14 16:49:31 +0000 Tony Finch Bump copyright dates COPYING | 2 +- unifdef.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2020-02-14 16:35:26 +0000 Tony Finch man: note incomplete C++ raw string literal support unifdef.1 | 6 ++++++ 1 file changed, 6 insertions(+) --------------------------------------------------- 2020-02-14 17:03:59 +0100 Zenju C++11 raw string literal support unifdef.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) --------------------------------------------------- 2017-04-24 10:45:07 +0100 Tony Finch doc: clarify where to send bug reports README | 7 ++++--- unifdef.1 | 16 +++++++++++----- 2 files changed, 15 insertions(+), 8 deletions(-) --------------------------------------------------- 2017-03-21 13:26:15 +0000 Tony Finch unifdef.1: clarify backslash-newline behaviour in DESCRIPTION unifdef.1 | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) --------------------------------------------------- 2017-02-06 18:52:47 +0000 Tony Finch web: advertise pre-release version web/index.html | 5 +++++ 1 file changed, 5 insertions(+) --------------------------------------------------- 2017-02-06 18:49:50 +0000 Tony Finch Bump copyright dates COPYING | 2 +- unifdef.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2017-02-06 18:21:55 +0000 Tony Finch unifdef: more fixes for weird whitespace The previous attempt (in commit 802c5cd6) to deal with some whitespace corner cases had a bug when parsing a dangling C comment; rather than using the general purpose lexer to scan the dangling line, it assumed the line state must be dirty - which is not necessarily the case for dangling C comments as it is for long linear whitespace or C++ comments. The original example that exposed this problem was from Linux __BACKPORT_LINUX_REGULATOR_DRIVER_H_; the test case in this commit is based on analysis of the bug. Reported-By: Pavel.Aronsky@celeno.com Reported-By: Aviv.Albagli@celeno.com tests/dangle.c | 6 ++++++ tests/dangle.experr | 0 tests/dangle.expout | 6 ++++++ tests/dangle.exprc | 1 + tests/dangle.sh | 1 + tests/whitespace-1.experr | 2 +- unifdef.c | 6 ++++-- 7 files changed, 19 insertions(+), 3 deletions(-) --------------------------------------------------- 2016-02-26 09:39:13 +0000 Tony Finch portability: fix problems compiling with C++ compiler Michael McConville suggested removing a "redundant" cast of the return value from malloc(), based on a change in the OpenBSD version of unifdef. This is a good suggestion for a purely C program, but the cast is required in C++. Carsten Hey contributed some portability improvements in 2012 which included this cast, so that unifdef can be compiled with a C++ compiler. Unfortunately since then there have been several regressions in C++ support. This commit fixes those regressions. unifdef.c | 2 +- win32/unifdef.h | 2 +- win32/win32.c | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) --------------------------------------------------- 2016-02-16 16:58:21 +0000 Tony Finch test: need newlines in MinGW printf workaround tests/outperms.sh | 2 +- tests/overperms.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2016-02-16 16:03:29 +0000 Tony Finch test: GNU printf(1) is POSIXly incorrect tests/outperms.sh | 2 +- tests/overperms.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2016-02-16 14:37:18 +0000 Tony Finch test: ugly workaround for lack of chmod() in MinGW tests/outperms.sh | 5 ++++- tests/overperms.sh | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) --------------------------------------------------- 2016-02-16 14:31:47 +0000 Tony Finch win32: nonexistent new file is not an error in rename(old,new) win32/win32.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2016-02-16 14:06:53 +0000 Tony Finch win32: revert mktempmode() change - it does not help win32/win32.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) --------------------------------------------------- 2016-02-16 14:05:40 +0000 Tony Finch test: revert rm change - I was misreading the error message! tests/multi-generic-sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2016-02-16 13:53:42 +0000 Tony Finch win32: more thorough implementation of mktempmde() Let's see if this makes the permissions tests pass. win32/win32.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --------------------------------------------------- 2016-02-16 13:43:27 +0000 Tony Finch test: suppress error output from rm POSIX says rm -f should not produce any error messages or nonzero exit status, but MinGW fails to follow the rules. tests/multi-generic-sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2016-02-16 13:35:00 +0000 Tony Finch test: typo in stderr redirection, sigh tests/000-init.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2016-02-16 13:25:35 +0000 Tony Finch test: a hack for MinGW on Travis-CI The first test that is run for the MinGW build on Travis-CI is exploding messily when it tries to initialize Wine, but after that most of the other tests run OK. Let's try adding a fake non-test to absorb this mess and get closer to a working build. tests/000-init.experr | 0 tests/000-init.expout | 0 tests/000-init.exprc | 1 + tests/000-init.sh | 1 + 4 files changed, 2 insertions(+) --------------------------------------------------- 2016-02-15 17:38:42 +0000 Tony Finch win32: preen comment win32/win32.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --------------------------------------------------- 2016-02-15 17:33:12 +0000 Tony Finch win32: go back to slow snprintf() because MinGW is still troublesome win32/unifdef.h | 1 - win32/win32.c | 33 ++++++++++++++++++++++++++------- 2 files changed, 26 insertions(+), 8 deletions(-) --------------------------------------------------- 2016-02-15 17:09:33 +0000 Tony Finch README: thanks to Ruediger Meier! README | 3 +++ 1 file changed, 3 insertions(+) --------------------------------------------------- 2016-02-15 17:12:45 +0000 Tony Finch win32: better snprintf() portability hack The code is now much shorter and does not malloc or copy. There is a #define renaming to avoid a name collision since Visual Studio 2015 includes a standard snprintf. Reported-By: Ruediger Meier win32/unifdef.h | 9 ++++++++- win32/win32.c | 33 ++++++++------------------------- 2 files changed, 16 insertions(+), 26 deletions(-) --------------------------------------------------- 2016-02-15 16:20:07 +0000 Tony Finch test: try to work better on MinGW A lot of the test failures are due to CRLFs in stderr which do not match the bare LFs in the experr files. So, unilaterally strip CRs from stderr output. We don't need to do this for stdout, since unifdef writes that in binary mode so it can match the newline style of the input file. We might also need to fix the rc files - let's see how this change works first. scripts/runtests.sh | 5 +++++ 1 file changed, 5 insertions(+) --------------------------------------------------- 2016-02-12 00:47:29 +0100 Ruediger Meier travis: add OSX and Ubuntu Trusty builds Actually this is a rewrite of .travis.yml: - speedup build (sudo: false) - add OSX build - add Ubuntu 14.04 Trusty build (beta) - MinGW is allowed to fail silently (no more "Still Failing" emails!) - add env output for debugging Note "apt-get install wine failed" for Trusty, that's why we don't check MinGW there. Signed-off-by: Ruediger Meier .travis.yml | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) --------------------------------------------------- 2015-12-07 12:10:30 +0000 Tony Finch ifdef-how: what conditionals cause this line to be emitted? Suggested-by: Anthony Liu ifdef-how.pl | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) --------------------------------------------------- 2015-12-03 14:34:11 +0000 Tony Finch Avoid -Wmissing-initializer unifdef.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) --------------------------------------------------- 2015-12-03 14:08:26 +0000 Tony Finch man: use .Mt to mark up email addresses Obtained-from: FreeBSD Submitted-by: Franco Fichtner unifdef.1 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --------------------------------------------------- 2015-12-03 12:15:06 +0000 Tony Finch Freecode is read-only README | 3 --- web/index.html | 2 -- 2 files changed, 5 deletions(-) --------------------------------------------------- 2015-12-03 12:10:08 +0000 Tony Finch Bump copyright dates COPYING | 2 +- unifdef.1 | 4 ++-- unifdef.c | 2 +- win32/unifdef.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2015-12-03 12:06:33 +0000 Tony Finch unifdef-2.11 README | 3 +++ web/index.html | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) --------------------------------------------------- 2015-12-03 11:50:46 +0000 Tony Finch Fix uninitialized variable in evaluator. Inner expressions typically return LT_IF without setting their value pointer when they encounter an unknown value. Binary operators then blindly use these inner values before checking if they are unknown - before checking for LT_IF. This is undefined behaviour, but we usually dodge the bullet - except division can cause things to explode and expose the bug. Initializing the value to zero avoids undefined behaviour. But this means that instead of avoiding division when the denominator is definitely zero (because it might be unknown and zero) we now only divide if it is definitely non-zero. unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2015-12-03 11:42:04 +0000 Tony Finch test: unexpected /0 exception happening in another part of the test tests/div.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --------------------------------------------------- 2015-12-03 11:37:56 +0000 Tony Finch travis: clone deeply, so version tags are included .travis.yml | 3 --- 1 file changed, 3 deletions(-) --------------------------------------------------- 2015-12-03 11:37:23 +0000 Tony Finch test: clearer div test, and try to diagnose unexpected /0 exception tests/div.expout | 5 ++++- tests/div.sh | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) --------------------------------------------------- 2015-12-03 11:17:20 +0000 Tony Finch win32: suppress warnings about POSIX functions win32/unifdef.h | 5 +++++ 1 file changed, 5 insertions(+) --------------------------------------------------- 2015-12-03 11:15:29 +0000 Tony Finch travis: clone with a nonzero depth .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2015-12-03 11:08:24 +0000 Tony Finch Document the buggy effect of the dumb lexer on the -f option. unifdef.1 | 11 +++++++++++ 1 file changed, 11 insertions(+) --------------------------------------------------- 2015-12-03 10:59:28 +0000 Tony Finch Avoid redundant renames with a -M '' empty backup suffix. Submitted-by: Michael McConville unifdef.1 | 5 +++++ unifdef.c | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) --------------------------------------------------- 2015-12-03 10:50:49 +0000 Tony Finch Handle division by zero gracefully. Reported-by: Michael McConville tests/div.c | 3 +++ tests/div.experr | 0 tests/div.expout | 7 +++++++ tests/div.exprc | 1 + tests/div.sh | 3 +++ unifdef.1 | 1 + unifdef.c | 4 ++++ 7 files changed, 19 insertions(+) --------------------------------------------------- 2014-10-24 16:43:51 +0100 Tony Finch Replace hardcoded operator lexing with table-driven code. unifdef.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) --------------------------------------------------- 2014-10-24 15:02:53 +0000 Brian Ginsbach Add support for additional #if/#elif operators Add support for additional operators in a #if/#elif statement. - unary bitwise NOT (one's complement): ~ - unary negative: - - left shift: << - right shift: >> - bitwise AND: & - bitwise exclusive OR: ^ - bitwise inclusive OR: | - addition: + - subtraction: - - multiplcation: * - division: / - modulo: % tests/if7.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/if7.experr | 0 tests/if7.expout | 46 ++++++++++++++++++++++++ tests/if7.exprc | 1 + tests/if7.sh | 1 + tests/recursive.experr | 24 +++++++++++-- unifdef.1 | 6 ++-- unifdef.c | 81 ++++++++++++++++++++++++++++++++++++++++--- 8 files changed, 244 insertions(+), 9 deletions(-) --------------------------------------------------- 2014-10-24 15:01:11 +0000 Brian Ginsbach Add all comparisons to tests Add tests for <, <=, >, and >= comparisons. tests/if5-a.expout | 12 ++++++++++++ tests/if5.c | 28 ++++++++++++++++++++++++++++ tests/if5.expout | 12 ++++++++++++ 3 files changed, 52 insertions(+) --------------------------------------------------- 2014-10-20 21:45:20 +0100 Tony Finch Ensure that newlines change the linestate when skipping junk. Sometimes skipline() would skip meaningful characters without letting skipcomment() look at them. Reported-By: Christoph Schied tests/error.c | 4 ++++ tests/error.experr | 0 tests/error.expout | 2 ++ tests/error.exprc | 1 + tests/error.sh | 1 + unifdef.c | 8 ++++++-- 6 files changed, 14 insertions(+), 2 deletions(-) --------------------------------------------------- 2014-10-20 21:29:13 +0100 Tony Finch tests: update for capitalized diagnostics tests/defundef-broken2.experr | 4 ++-- tests/defundef-broken3.experr | 4 ++-- tests/defundef-broken4.experr | 2 +- tests/whitespace-1.experr | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) --------------------------------------------------- 2014-10-20 21:24:35 +0100 Tony Finch DIAGNOSTICS do not have full stops. unifdef.1 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2014-10-20 21:23:50 +0100 Tony Finch Add some missing DIAGNOSTICS unifdef.1 | 6 ++++++ 1 file changed, 6 insertions(+) --------------------------------------------------- 2014-10-20 21:21:00 +0100 Tony Finch Capitalize error messages unifdef.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) --------------------------------------------------- 2014-10-20 21:19:37 +0100 Tony Finch Alphabetize DIAGNOSTICS unifdef.1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2014-10-20 21:16:34 +0100 Tony Finch Check there is a filename argument for inplace editing. Reported-by: Philip Guenther Submitted-By: Stuart Henderson unifdef.c | 2 ++ 1 file changed, 2 insertions(+) --------------------------------------------------- 2014-01-08 15:03:36 +0000 Tony Finch travis: restore missing semicolon .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2014-01-08 14:59:46 +0000 Tony Finch win32: do not use Unix Makefile for testing on MinGW .travis.yml | 3 +-- win32/Makefile.mingw | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) --------------------------------------------------- 2014-01-08 14:16:13 +0000 Tony Finch win32: avoid deprecated -I- compiler option in MinGW build win32/Makefile.mingw | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --------------------------------------------------- 2014-01-08 14:15:39 +0000 Tony Finch win32: need prototype for snprintf() win32/unifdef.h | 1 + 1 file changed, 1 insertion(+) --------------------------------------------------- 2014-01-08 13:51:53 +0000 Tony Finch unifdef: typo in comment Reported-by: Bernhard Reutner-Fischer unifdef.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2014-01-08 13:39:10 +0000 Tony Finch win32: avoid "secure" string functions - troublesome on MinGW win32/win32.c | 54 ++++++++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 28 deletions(-) --------------------------------------------------- 2014-01-08 00:15:18 +0000 Tony Finch win32: or maybe stdint.h? MinGW seems to disagree with Windows :-( win32/unifdef.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2014-01-08 00:06:22 +0000 Tony Finch win32: need stddef.h win32/unifdef.h | 1 + 1 file changed, 1 insertion(+) --------------------------------------------------- 2014-01-07 23:57:36 +0000 Tony Finch win32: another try at working around lack of _TRUNCATE win32/unifdef.h | 2 -- win32/win32.c | 16 +++++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) --------------------------------------------------- 2014-01-07 23:42:00 +0000 Tony Finch win32: need crtdefs.h? win32/unifdef.h | 2 ++ 1 file changed, 2 insertions(+) --------------------------------------------------- 2014-01-07 22:45:47 +0000 Tony Finch win32: correct variable name in snprintf() win32/win32.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2014-01-07 22:32:21 +0000 Tony Finch unifdef: cleaner exit status handling unifdef.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) --------------------------------------------------- 2014-01-07 20:41:07 +0000 Tony Finch unifdef: do not needlessly modify files when updating in place If unifdef made no changes, leave the original input file in place and delete the temporary working copy. Inspired by http://trac.webkit.org/changeset/156877 tests/overunchanged.experr | 0 tests/overunchanged.expout | 0 tests/overunchanged.exprc | 1 + tests/overunchanged.sh | 8 ++++++++ unifdef.1 | 2 ++ unifdef.c | 13 ++++++++++++- 6 files changed, 23 insertions(+), 1 deletion(-) --------------------------------------------------- 2014-01-07 20:24:11 +0000 Tony Finch unifdef: correct exit status when lines are modified but not deleted tests/exitstat.c | 3 +++ tests/exitstat.experr | 0 tests/exitstat.expout | 3 +++ tests/exitstat.exprc | 1 + tests/exitstat.sh | 1 + unifdef.c | 1 + 6 files changed, 9 insertions(+) --------------------------------------------------- 2014-01-07 20:02:18 +0000 Tony Finch tests: NetBSD pr#47068 tests/NetBSD-47068.c | 2 ++ tests/NetBSD-47068.experr | 0 tests/NetBSD-47068.expout | 2 ++ tests/NetBSD-47068.exprc | 1 + tests/NetBSD-47068.sh | 1 + 5 files changed, 6 insertions(+) --------------------------------------------------- 2014-01-07 19:16:02 +0000 Tony Finch web: update for unifdef-2.10 release web/index.html | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) --------------------------------------------------- 2014-01-07 19:12:35 +0000 Tony Finch bump more copyright dates scripts/copycheck.sh | 4 +++- unifdef.1 | 2 +- unifdef.c | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) --------------------------------------------------- 2014-01-07 19:00:39 +0000 Tony Finch unifdef: do not mark the line as dirty when there is no dirt This caused problems for #undef directives in -f header files: the following line was ignored because the line state got incorrectly updated. Thanks to the uClibc project for reporting the bug and providing a sample test case and a proposed fix. Reported-by: Bernhard Reutner-Fischer tests/defundef-undefdef.experr | 0 tests/defundef-undefdef.expout | 1 + tests/defundef-undefdef.exprc | 1 + tests/defundef-undefdef.sh | 1 + tests/if6.h | 2 ++ unifdef.c | 5 ++--- 6 files changed, 7 insertions(+), 3 deletions(-) --------------------------------------------------- 2014-01-06 10:51:56 +0000 Tony Finch scripts: make release more verbose scripts/release.sh | 2 ++ 1 file changed, 2 insertions(+) --------------------------------------------------- 2014-01-06 10:51:17 +0000 Tony Finch web: link to pre-release web/index.html | 8 ++++++++ 1 file changed, 8 insertions(+) --------------------------------------------------- 2014-01-06 10:42:01 +0000 Tony Finch Bump some copyright dates COPYING | 2 +- win32/unifdef.h | 2 +- win32/win32.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2014-01-06 10:38:00 +0000 Tony Finch win32: a more correct snprintf() portability shim Based on http://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010 win32/unifdef.h | 1 - win32/win32.c | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) --------------------------------------------------- 2013-06-12 15:50:39 +0100 Tony Finch INSTALL: use GitHub for Windows to run Unix shell scripts README: update FreshMeat -> FreeCode and note that GitHub zip file downloads are broken. Suggested-by: Lee M. Hamel INSTALL | 12 +++++++----- README | 6 +++++- 2 files changed, 12 insertions(+), 6 deletions(-) --------------------------------------------------- 2013-06-11 22:10:31 +0100 Tony Finch unifdef: refactor keyword and symbol matching The generic strlcmp() is replaced by the more specific matchsym() and findsym() now includes the effect of skipsym(). This is to prepare for case-insensitive keyword matching, as part of foreign language support. unifdef.c | 155 ++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 84 insertions(+), 71 deletions(-) --------------------------------------------------- 2013-06-07 23:21:03 +0100 Tony Finch unifdef.1: bump date and add link to home page unifdef.1 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) --------------------------------------------------- 2013-06-07 23:10:14 +0100 Tony Finch copycheck: check date in manual scripts/copycheck.sh | 2 ++ 1 file changed, 2 insertions(+) --------------------------------------------------- 2013-06-07 12:09:20 +0100 Tony Finch web: update for unifdef-2.9 release web/index.html | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) --------------------------------------------------- 2013-06-07 11:53:51 +0100 Tony Finch INSTALL: more portability notes. INSTALL | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) --------------------------------------------------- 2013-06-06 12:24:30 +0100 Tony Finch Makefile: correct dependencies and portability to GNU make. My aim was previously to rely on make's built-in rules to build unifdef, on the assumption that this would be the easiest way to do the right thing on unknown systems. The right way to specify the dependencies for unifdef is: unifdef: unifdef.c unifdef.h version.h However GNU make has an incorrect implicit rule: .c: $(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@ This puts all of the prerequisites on the command line, which causes things to break. POSIX specifies the implicit rule as .c: $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< And POSIX says "In an inference rule, the $< macro shall evaluate to the filename whose existence allowed the inference rule to be chosen for the target". In our case $< expands to just unifdef.c which is what we want. Putting .POSIX in the Makefile does not cause GNU make to use the posixly-correct implicit rule definition. The previous version of the Makefile had incorrect dependencies which meant that GNU make (and probably other versions of make) would not rebuild unifdef if the header files were touched. So to fix that bug, and to work around the buggy implicit rule in GNU make, the Makefile now has an expanded version of the standard POSIX build rule for unifdef. Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2013-06-06 11:50:19 +0100 Tony Finch web: bump pre-release web/index.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) --------------------------------------------------- 2013-06-06 11:48:43 +0100 Tony Finch unifdef: Avoid ssize_t for portability unifdef.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2013-05-10 00:16:01 +0200 Ruediger Meier travis-ci: fix release traget by git cloning with infinite depth git describe needs at least the last tag available. This is never sure when using git clone --depth=50 which is done by travis per default. .travis.yml | 3 +++ 1 file changed, 3 insertions(+) --------------------------------------------------- 2013-05-09 21:42:31 +0200 Ruediger Meier scripts: avoid gzip option --keep for compatibility "-k|--keeps" is not available yet in officially released gzip. scripts/release.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2013-05-15 13:22:56 +0100 Tony Finch scripts: fetch Github pull requests scripts/git.config | 1 + 1 file changed, 1 insertion(+) --------------------------------------------------- 2013-05-09 20:44:29 +0100 Tony Finch web: bump pre-release web/index.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) --------------------------------------------------- 2013-05-09 20:38:24 +0100 Tony Finch unifdef: avoid strndup() for non-standard C implementations unifdef.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) --------------------------------------------------- 2013-05-09 20:08:26 +0100 Tony Finch scripts: copycheck fixes ! must go at the start of a pipeline in portable sh Use a default author if git doesn't know who you are. scripts/copycheck.sh | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) --------------------------------------------------- 2013-05-09 20:00:19 +0100 Tony Finch tests: avoid non-portable error message in multimissing tests/multi-generic-sh | 2 +- tests/multimissing.experr | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) --------------------------------------------------- 2013-05-09 19:55:37 +0100 Tony Finch web: bump pre-release web/index.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) --------------------------------------------------- 2013-05-09 19:54:28 +0100 Tony Finch tests: shell . command needs path in argument tests/multi.sh | 2 +- tests/multilnnum.sh | 2 +- tests/multimissing.sh | 2 +- tests/multinewline.sh | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2013-05-09 19:47:56 +0100 Tony Finch web: bump pre-release web/index.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) --------------------------------------------------- 2013-05-09 19:44:58 +0100 Tony Finch tests: leave the source files alone in the multi-file tests tests/multi-generic-sh | 15 +++++++++++++++ tests/multi.expout | 8 ++++---- tests/multi.sh | 10 +++------- tests/multilnnum.expout | 20 ++++++++++---------- tests/multilnnum.sh | 10 +++------- tests/multimissing.experr | 7 +++++-- tests/multimissing.expout | 4 ++-- tests/multimissing.sh | 15 +++------------ tests/multinewline.expout | 8 ++++---- tests/multinewline.sh | 10 +++------- 10 files changed, 52 insertions(+), 55 deletions(-) --------------------------------------------------- 2013-05-09 14:41:53 +0100 Tony Finch Makefile: release fixes Must include version.h for non-unix builds. Re-jig the version dependencies to avoid running reversion.sh twice. Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --------------------------------------------------- 2013-05-08 16:51:11 +0100 Tony Finch web: bump pre-release web/index.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) --------------------------------------------------- 2013-05-08 16:48:49 +0100 Tony Finch tests: clean away more xterm gubbins Makefile | 3 +- tests/xterm.experr | 2 +- tests/xterm.expout | 2671 ---------------------------------------------------- tests/xterm.sh | 7 +- 4 files changed, 6 insertions(+), 2677 deletions(-) --------------------------------------------------- 2013-05-08 16:30:35 +0100 Tony Finch tests: do not ship vast chunks of XTerm By default the xterm test does nothing; if required it will download and upack xterm in order to run the full test. It is likely to break when a new version of xterm is released since the download URL is not versioned. COPYING | 8 - tests/xterm-292-main.c | 5239 --------------------------------------- tests/xterm-defs.h | 6423 ------------------------------------------------ tests/xterm.sh | 38 +- 4 files changed, 33 insertions(+), 11675 deletions(-) --------------------------------------------------- 2013-05-08 16:08:49 +0100 Tony Finch scripts: fold long lines in the Changelog scripts/gitlog2changelog.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-05-08 15:58:15 +0100 Tony Finch scripts: compress releases with xz as well as gzip scripts/release.sh | 6 ++++-- web/index.html | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) --------------------------------------------------- 2013-05-08 15:02:06 +0100 Tony Finch web: bump pre-release web/index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2013-05-08 15:01:17 +0100 Tony Finch COPYING: note part of XTerm is used in the tests COPYING | 8 ++++++++ 1 file changed, 8 insertions(+) --------------------------------------------------- 2013-05-08 14:56:23 +0100 Tony Finch tests: check recursive definitions, and unifdefall xterm The xterm test is my original motivation for unifdef. The OPT_PTY_HANDSHAKE definition relies on indirection and without that feature unifdefall cannot remove all preprocessor conditional directives. tests/recursive.experr | 102 + tests/recursive.expout | 26 + tests/recursive.exprc | 1 + tests/recursive.sh | 1 + tests/xterm-292-main.c | 5239 +++++++++++++++++++++++++++++++++++++++ tests/xterm-defs.h | 6423 ++++++++++++++++++++++++++++++++++++++++++++++++ tests/xterm.experr | 3 + tests/xterm.expout | 2754 +++++++++++++++++++++ tests/xterm.exprc | 1 + tests/xterm.sh | 8 + 10 files changed, 14558 insertions(+) --------------------------------------------------- 2013-05-08 14:46:53 +0100 Tony Finch unifdef: further debugging improvements unifdef.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) --------------------------------------------------- 2013-05-08 13:47:07 +0100 Tony Finch unifdef: improve indirect macro definitions Note in the debug output when a macro value is updated. Do not change a macro from defined to undefined. Recursive definitions no longer cause a loop. unifdef.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) --------------------------------------------------- 2013-05-08 13:30:37 +0100 Tony Finch web: pre-release web/index.html | 6 ++++++ 1 file changed, 6 insertions(+) --------------------------------------------------- 2013-05-08 13:19:31 +0100 Tony Finch scripts: include release tags and renames in Changelog Makefile | 2 +- scripts/gitlog2changelog.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2013-05-08 13:10:11 +0100 Tony Finch web: improve example uses, and add UIT web/index.html | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) --------------------------------------------------- 2013-05-08 12:56:45 +0100 Tony Finch unifdef.1: document indirection, and refer to macros not symbols Trying to be more consistent with terminology from the C standard. unifdef.1 | 76 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 38 insertions(+), 38 deletions(-) --------------------------------------------------- 2013-05-08 12:39:53 +0100 Tony Finch tests: test indirect macro definitions tests/indirect.experr | 0 tests/indirect.expout | 16 ++++++++++++++++ tests/indirect.exprc | 1 + tests/indirect.sh | 1 + 4 files changed, 18 insertions(+) --------------------------------------------------- 2013-05-08 12:39:03 +0100 Tony Finch scripts: add missing release script scripts/release.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) --------------------------------------------------- 2013-05-08 12:31:39 +0100 Tony Finch unifdef: support for simple macro value indirection unifdef.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) --------------------------------------------------- 2013-05-08 11:45:53 +0100 Tony Finch Makefile: delete control characters from manual with col instead of sed Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-05-08 11:21:31 +0100 Tony Finch scripts: move support gubbins into a subdirectory Makefile | 26 +++++++------------------- authors.svn => scripts/authors.svn | 0 copycheck.sh => scripts/copycheck.sh | 0 fixtests.sh => scripts/fixtests.sh | 0 git.config => scripts/git.config | 3 --- scripts/gitlog2changelog.sh | 8 ++++++++ reversion.sh => scripts/reversion.sh | 0 runtests.sh => scripts/runtests.sh | 0 svnup => scripts/svnup.sh | 4 +--- upload => scripts/upload.sh | 0 10 files changed, 16 insertions(+), 25 deletions(-) --------------------------------------------------- 2013-05-08 11:03:38 +0100 Tony Finch Bump copyright dates. COPYING | 4 ++-- unifdef.h | 2 +- win32/unifdef.h | 2 +- win32/win32.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2013-05-08 10:49:28 +0100 Tony Finch copyckeck: ensure copyright dates are correct on release copycheck.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) --------------------------------------------------- 2013-05-06 18:08:08 +0100 Tony Finch web: update for 2.8 release; clearer links to COPYRIGHT and INSTALL web/index.html | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) --------------------------------------------------- 2013-05-06 18:07:21 +0100 Tony Finch INSTALL: be clearer about dependencies up front INSTALL | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --------------------------------------------------- 2013-05-06 17:47:58 +0100 Tony Finch unifdef: fix #undef parser Previously the parser state was incorrect following a #undef which caused the following line to be ignored. Found when testing unifdefall on xterm/main.c. unifdef.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --------------------------------------------------- 2013-05-06 17:40:16 +0100 Tony Finch unifdef: remove spurious \n in debug output unifdef.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-05-06 17:36:34 +0100 Tony Finch unifdef: increase max number of symbols to 16K This is so that it can cope with the output of cc -E -dM xterm/main.c unifdef.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-05-06 17:35:08 +0100 Tony Finch unifdefall: use unifdef -f and delete lots of arcane shell hackery unifdefall.sh | 34 ++++++++-------------------------- 1 file changed, 8 insertions(+), 26 deletions(-) --------------------------------------------------- 2013-04-29 21:10:55 +0100 Tony Finch web: bump pre-release version web/index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2013-04-29 21:02:53 +0100 Tony Finch unifdef: support function-like macro definitions This is a fairly half-arsed implementation that treats function-like macros the same as object-like macros that have been set to 1. It is reasonably consistent with the existing half-arsed treatment of function-like macro invocations in #if and #elif control expressions. The manual now explains this half-arsedness more clearly. tests/broken1.h | 1 - tests/defundef-broken1.experr | 2 - tests/defundef-broken1.exprc | 1 - tests/defundef-broken1.sh | 1 - ...ndef-broken1.expout => defundef-funlike.experr} | 0 tests/defundef-funlike.expout | 13 ++++++ tests/defundef-funlike.exprc | 1 + tests/defundef-funlike.sh | 1 + tests/funlike.h | 1 + unifdef.1 | 51 +++++++++++++++------- unifdef.c | 14 +++--- 11 files changed, 58 insertions(+), 28 deletions(-) --------------------------------------------------- 2013-04-29 20:37:08 +0100 Tony Finch unifdef.1: typo: function-like arguments -> macros unifdef.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-04-27 17:28:18 +0100 Tony Finch web: advertise pre-release web/index.html | 7 +++++++ 1 file changed, 7 insertions(+) --------------------------------------------------- 2013-04-27 17:22:50 +0100 Tony Finch tests: broken #define/#undef files tests/broken1.h | 1 + tests/broken2.h | 1 + tests/broken3.h | 1 + tests/broken4.h | 2 ++ tests/defundef-broken1.experr | 2 ++ tests/defundef-broken1.expout | 0 tests/defundef-broken1.exprc | 1 + tests/defundef-broken1.sh | 1 + tests/defundef-broken2.experr | 2 ++ tests/defundef-broken2.expout | 0 tests/defundef-broken2.exprc | 1 + tests/defundef-broken2.sh | 1 + tests/defundef-broken3.experr | 2 ++ tests/defundef-broken3.expout | 0 tests/defundef-broken3.exprc | 1 + tests/defundef-broken3.sh | 1 + tests/defundef-broken4.experr | 2 ++ tests/defundef-broken4.expout | 0 tests/defundef-broken4.exprc | 1 + tests/defundef-broken4.sh | 1 + 20 files changed, 21 insertions(+) --------------------------------------------------- 2013-04-27 17:21:15 +0100 Tony Finch unifdef: correct check for multi-line #define/#undef directives unifdef.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-04-27 16:57:50 +0100 Tony Finch unifdef.1: explain #define restrictions unifdef.1 | 7 +++++++ 1 file changed, 7 insertions(+) --------------------------------------------------- 2013-04-27 16:52:26 +0100 Tony Finch unifdef: no need to edit keywords in defundef() unifdef.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) --------------------------------------------------- 2013-04-27 16:44:58 +0100 Tony Finch unifdef: rewrite the #define/#undef file parser unifdef.c | 158 +++++++++++++++++++++----------------------------------------- 1 file changed, 52 insertions(+), 106 deletions(-) --------------------------------------------------- 2013-04-27 16:41:31 +0100 Tony Finch unifdef: 64 bit evaluator, and quell type conversion warnings unifdef.c | 66 +++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 23 deletions(-) --------------------------------------------------- 2013-04-27 16:38:00 +0100 Tony Finch tests: display progress runtests.sh | 3 +++ 1 file changed, 3 insertions(+) --------------------------------------------------- 2013-04-26 17:48:14 +0100 Tony Finch unifdef: more refactoring in -f mode Moving towards sharing more of the parsing code between -f header files and normal source files. unifdef.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) --------------------------------------------------- 2013-04-26 17:43:54 +0100 Tony Finch unifdef: Fix the behaviour of #define without a value On the command line, `-DFOO` is a short-hand for `-DFOO=1` whereas `#define FOO` is like `-DFOO=`. tests/if1.h | 2 +- unifdef.c | 30 ++++++++++++------------------ 2 files changed, 13 insertions(+), 19 deletions(-) --------------------------------------------------- 2013-04-26 16:13:48 +0100 Tony Finch reversion: avoid spurious rebuilds in a dirty tree reversion.sh | 3 +++ 1 file changed, 3 insertions(+) --------------------------------------------------- 2013-04-26 16:13:22 +0100 Tony Finch Makefile: need a dependency on unifdef.h Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-04-26 15:51:56 +0100 Tony Finch unifdef: count lines correctly when processing multiple files tests/multilnnum.experr | 0 tests/multilnnum.expout | 42 ++++++++++++++++++++++++++++++++++++++++++ tests/multilnnum.exprc | 1 + tests/multilnnum.sh | 7 +++++++ unifdef.c | 1 + 5 files changed, 51 insertions(+) --------------------------------------------------- 2013-04-17 21:44:38 +0100 Tony Finch tests: check handling of weird whitespace tests/whitespace-1.experr | 2 ++ tests/whitespace-1.expout | 1 + tests/whitespace-1.exprc | 1 + tests/whitespace-1.sh | 1 + tests/whitespace-2.experr | 0 tests/whitespace-2.expout | 5 +++++ tests/whitespace-2.exprc | 1 + tests/whitespace-2.sh | 1 + tests/whitespace.c | 7 +++++++ 9 files changed, 19 insertions(+) --------------------------------------------------- 2013-04-17 21:44:02 +0100 Tony Finch tests: add missing if1.h tests/if1.h | 3 +++ 1 file changed, 3 insertions(+) --------------------------------------------------- 2013-04-17 21:39:15 +0100 Tony Finch unifdef: improve handling of weird whitespace This fixes the handling of lots of whitespace on a line, and restores proper handling of final lines without newlines. unifdef.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) --------------------------------------------------- 2013-04-17 20:51:25 +0100 Tony Finch unifdef: refactor parseline() Create functions for finding preprocessor directives and for skipping trailing junk and non-preprocessor text. This simplifies parseline() and it will also be useful in defundef(). unifdef.c | 182 +++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 98 insertions(+), 84 deletions(-) --------------------------------------------------- 2013-04-16 22:43:24 +0100 Tony Finch unifdef: trace -f activity only in debug mode tests/if1-f.experr | 3 --- unifdef.c | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) --------------------------------------------------- 2013-04-16 22:40:16 +0100 Tony Finch tests: check basics of -f tests/if1-f.experr | 3 +++ tests/if1-f.expout | 16 ++++++++++++++++ tests/if1-f.exprc | 1 + tests/if1-f.sh | 1 + 4 files changed, 21 insertions(+) --------------------------------------------------- 2013-04-16 22:34:11 +0100 Tony Finch unifdef: better error handling and style for defundef() unifdef.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) --------------------------------------------------- 2013-04-16 22:17:49 +0100 Tony Finch unifdef: correctly handle multiple input files with differing newline styles tests/multinewline.experr | 0 tests/multinewline.expout | 39 +++++++++++++++++++++++++++++++++++++++ tests/multinewline.exprc | 1 + tests/multinewline.sh | 7 +++++++ unifdef.c | 1 + 5 files changed, 48 insertions(+) --------------------------------------------------- 2013-04-16 22:09:16 +0100 Tony Finch unifdef: stylish undefile() unifdef.c | 133 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 67 insertions(+), 66 deletions(-) --------------------------------------------------- 2013-04-16 21:52:41 +0100 Tony Finch README: credit Steve Underwood README | 3 +++ 1 file changed, 3 insertions(+) --------------------------------------------------- 2013-04-16 21:50:45 +0100 Tony Finch unifdef: cleanup addsym() code duplication and name undefile() unifdef.c | 70 ++++++++++++++++++++++++++++----------------------------------- 1 file changed, 31 insertions(+), 39 deletions(-) --------------------------------------------------- 2013-04-16 21:28:53 +0100 Tony Finch unifdef: use -f option for definitions files, and add documentation unifdef.1 | 22 ++++++++++++++++++++++ unifdef.c | 14 +++++++------- 2 files changed, 29 insertions(+), 7 deletions(-) --------------------------------------------------- 2013-04-16 20:51:34 +0100 Tony Finch unifdef: read definitions an undefinitions from a file Submitted-by: Steve Underwood unifdef.c | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 165 insertions(+), 2 deletions(-) --------------------------------------------------- 2013-04-07 11:07:46 +0100 Tony Finch win32: report intermediate errors in replace() win32/win32.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2013-04-07 11:04:10 +0100 Tony Finch unifdef: slightly cleaner backup filename handling unifdef.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-04-07 10:57:48 +0100 Tony Finch unifdef: close input when processing is complete This avoids leaking input file handles when processing multiple files, and it should help with the temporary file handling problems on Windows. unifdef.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) --------------------------------------------------- 2013-04-07 10:55:13 +0100 Tony Finch unifdef: add a comment to explain the newline handling unifdef.c | 9 +++++++++ 1 file changed, 9 insertions(+) --------------------------------------------------- 2013-04-06 13:51:10 +0100 Tony Finch win32: ReplaceFile() is not the right thing either. Sometimes unifdef calls replace() when the target filename does not exist, in which situation ReplaceFile() fails. So it is easier to call remove() and rename() and not worry about atomic replacement. win32/win32.c | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) --------------------------------------------------- 2013-04-04 12:46:09 +0200 Ruediger Meier travis-ci: import travis yaml controller .travis.yml is used for automatic builds on travis build farm (https://travis-ci.org/) if the travis service hook is enabled for the repo on github. This inital yaml controller will run 3 different compilers (gcc, clang, mingw). Mingw builds will use wine for running the test suite, which currently fails for some tests to be fixed (or skipped) later. Builds are enabled for two branches "master" and "tmp" where the tmp branch may be used to try something out whithout polluting the master history (specially when changing/testing .travis.yml itself). .travis.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) --------------------------------------------------- 2013-04-06 13:24:03 +0100 Tony Finch win32: use ReplaceFile() instead of rename() The Windows implementation of rename() fails if the new filename already exists. When processing the input file in place, unifdef uses ReplaceFile() instead. unifdef.c | 2 +- unifdef.h | 2 ++ win32/unifdef.h | 1 + win32/win32.c | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) --------------------------------------------------- 2013-04-04 13:28:31 +0200 Ruediger Meier Makefile: specify path to version.sh in release target. Some shells only source from $PATH not the current directory. Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-04-04 13:11:20 +0200 Ruediger Meier Tell git to ignore .exe target. .gitignore | 1 + 1 file changed, 1 insertion(+) --------------------------------------------------- 2013-04-04 12:45:05 +0200 Ruediger Meier INSTALL: fix typo INSTALL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-04-02 21:51:39 +0100 Tony Finch tests/multimissing: avoid platform-dependent error message Reported-by: Ruediger Meier tests/multimissing.experr | 3 +-- tests/multimissing.sh | 9 +++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) --------------------------------------------------- 2013-04-02 14:07:20 +0200 Ruediger Meier tests: locale-independent diffs in multi-file tests We want to sed away file mtimes from the diff output but date/time format may depend on platform and locale. (Noticed on OpenBSD 5.1) tests/multi.sh | 4 ++-- tests/multimissing.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2013-04-02 21:27:17 +0100 Tony Finch unifdefall: use cc -E -dM instead of cpp -dM This is a workaround for Mac OS X, in which ccp invokes gcc with the -traditional-cpp option which disables C99 variadic macros. Unfortunately stdio.h requires variadic macro support so real programs, as well as the tests, are likely to break. I am not sure if this is the right fix. It is marginally closer to POSIX, since it has c99 -E but not cpp. But POSIX also lacks cc and the -dM option. unifdefall.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-04-02 21:25:14 +0100 Tony Finch tests: fix a typo in a type name, caught by clang tests/if5-a.expout | 2 +- tests/if5.c | 2 +- tests/if5.expout | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2013-03-31 16:00:36 +0100 Tony Finch reversion: deal with a git regression when the tree is clean Some time between git-1.7.3 and git-1.7.10 `git show --quiet` stopped working. Apparently the official way to suppress the diff output is now with the -s option. Neither of these options is documented in the `git show` man page; `git diff` documents the --quiet option for this purpose and `git log` documents the -s option. See also http://thread.gmane.org/gmane.comp.version-control.git/174665 Reported-by: Bruce Korb reversion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-03-28 19:05:30 +0000 Tony Finch bump copyright dates unifdef.1 | 2 +- unifdef.c | 2 +- unifdefall.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2013-03-28 19:04:50 +0000 Tony Finch web: freshmeat iis now freecode web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2013-03-28 18:50:12 +0000 Tony Finch Release unifdef-2.7 web/index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2013-03-28 18:43:36 +0000 Tony Finch web: bump prerelease version again web/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2013-03-28 18:37:41 +0000 Tony Finch unifdef.1: Remove superfluous paragraph macro. Obtained-from: Joel Dahl unifdef.1 | 1 - 1 file changed, 1 deletion(-) --------------------------------------------------- 2013-03-28 18:35:10 +0000 Tony Finch unifdefall: No need to use `basename`. Obtained-from: David O'Brien unifdefall.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) --------------------------------------------------- 2013-03-28 18:18:48 +0000 Tony Finch unifdef: fix type mismatch in debug() calls. Adapted from a similar fix by Jörg Sonnenberger unifdef.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) --------------------------------------------------- 2013-03-28 17:36:25 +0000 Tony Finch win32: Makefile for MinGW. Suggested by: Mateusz Czaplinski INSTALL | 8 +++++--- win32/Makefile.mingw | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) --------------------------------------------------- 2013-03-28 17:24:37 +0000 Tony Finch unifdef.c: quell warnings unifdef.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) --------------------------------------------------- 2013-03-28 16:47:06 +0000 Tony Finch web: bump prerelease version web/index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2013-03-28 16:38:34 +0000 Tony Finch Include the input file name on #line directives. Suggested by: Bob Lewis tests/overlnnum.expout | 8 ++++---- unifdef.c | 26 +++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 7 deletions(-) --------------------------------------------------- 2013-03-28 16:08:00 +0000 Tony Finch Configurable exit mode, to be more friendly to make files. Suggested by: Bob Lewis tests/exitmode0a.experr | 0 tests/exitmode0a.expout | 16 ++++++++++++++++ tests/exitmode0a.exprc | 1 + tests/exitmode0a.sh | 1 + tests/exitmode0b.experr | 0 tests/exitmode0b.expout | 26 ++++++++++++++++++++++++++ tests/exitmode0b.exprc | 1 + tests/exitmode0b.sh | 1 + tests/exitmode1a.experr | 0 tests/exitmode1a.expout | 16 ++++++++++++++++ tests/exitmode1a.exprc | 1 + tests/exitmode1a.sh | 1 + tests/exitmode1b.experr | 0 tests/exitmode1b.expout | 26 ++++++++++++++++++++++++++ tests/exitmode1b.exprc | 1 + tests/exitmode1b.sh | 1 + tests/exitmode2a.experr | 0 tests/exitmode2a.expout | 16 ++++++++++++++++ tests/exitmode2a.exprc | 1 + tests/exitmode2a.sh | 1 + tests/exitmode2b.experr | 0 tests/exitmode2b.expout | 26 ++++++++++++++++++++++++++ tests/exitmode2b.exprc | 1 + tests/exitmode2b.sh | 1 + unifdef.1 | 40 ++++++++++++++++++++++++++++++++++++---- unifdef.c | 23 ++++++++++++++++------- 26 files changed, 190 insertions(+), 11 deletions(-) --------------------------------------------------- 2012-09-06 17:58:59 +0100 Tony Finch web: fix the anchor text too! web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2012-09-06 17:57:07 +0100 Tony Finch web: correct link to Windows .zip file Reported by: Mateusz Czaplinski web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2012-02-22 14:04:31 +0000 Tony Finch web: bump pre-release version web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2012-02-22 13:52:47 +0000 Tony Finch win32: build fixes Submitted by: 김이선 win32/unifdef.h | 2 ++ win32/unifdef.vcxproj | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) --------------------------------------------------- 2012-02-21 18:45:52 +0000 Tony Finch web: advertise pre-release with Windows support web/index.html | 2 ++ 1 file changed, 2 insertions(+) --------------------------------------------------- 2012-02-21 18:42:22 +0000 Tony Finch reversion: more verbose when updating. Changelog depends on version.h. Makefile | 2 +- reversion.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) --------------------------------------------------- 2012-02-21 18:08:23 +0000 Tony Finch release: build zip file as well as tarball. Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) --------------------------------------------------- 2012-02-21 18:00:44 +0000 Tony Finch release: include the portability stuff in release tarballs. We now also include version.h so the Windows build doesn't need to run version.sh. INSTALL | 10 ++++++---- Makefile | 24 +++++++----------------- win32/unifdef.vcxproj | 1 + 3 files changed, 14 insertions(+), 21 deletions(-) --------------------------------------------------- 2012-02-21 17:21:29 +0000 Tony Finch win32: Visual Studio 2010 build files. Submitted by: 김이선 win32/unifdef.sln | 20 ++++++++++++ win32/unifdef.vcxproj | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) --------------------------------------------------- 2012-02-21 16:45:19 +0000 Tony Finch port: Windows support. I have already committed copies of the err.c and getopt.c library code from FreeBSD. Another trouble spot is the temporary file used when modifying in place. I have pulled this out into a support function with different implementations on Unix and Windows. Windows lacks mkstemp(), so there we just use mktemp() and for simplicity leave the permissions as the default set by fopen() rather than copying from another file. Unifdef does its own newline handling in order to work correctly with files that use CRLF or bare LF regardless of the system's native preference. It therefore opens streams in binary mode. On Windows we also need to put stdin and stdout into binary mode for consistency. More trivially, there is no stdbool support and a couple of library functions have gratuitous underscores appended to their names. This is based on submissions from the following people, to whom I am grateful since I lack Windows development experience. Submitted by: 김이선 Submitted by: Alexander Mohr COPYING | 18 ++++++++------- unifdef.c | 21 ++++-------------- unifdef.h | 48 +++++++++++++++++++++++++++++++++++++++ win32/unifdef.h | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ win32/win32.c | 40 +++++++++++++++++++++++++++++++++ 5 files changed, 171 insertions(+), 25 deletions(-) --------------------------------------------------- 2012-02-21 16:02:48 +0000 Tony Finch unifdef: Update copyright dates. COPYING | 4 ++-- unifdef.1 | 4 ++-- unifdef.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2012-02-21 15:41:46 +0000 Tony Finch port: clean up err.c and getopt.c Move headers out to shared unifdef.h Make getopt use prototypes and const correctly. Remove err_set_file and err_set_exit support. FreeBSD/err.c | 93 +++++++++++--------------------------------------------- FreeBSD/getopt.c | 27 +++------------- 2 files changed, 23 insertions(+), 97 deletions(-) --------------------------------------------------- 2012-02-21 13:27:28 +0000 Tony Finch unifdef.c: use memcpy() instead of the dodgy strncpy(). This makes it clearer that I do not want a '\0' terminator. Submitted by: Carsten Hey unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2012-02-21 12:34:35 +0000 Tony Finch unifdef.c: prefer remove() to unlink() for portability. Submitted by: Carsten Hey unifdef.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2012-02-21 12:27:55 +0000 Tony Finch unifdef.c: Fix memory leaks in temporary and backup file handling. unifdef.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) --------------------------------------------------- 2012-02-20 18:58:01 +0000 Tony Finch port: Copy err.c and getopt.c from FreeBSD. FreeBSD/err.c | 195 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ FreeBSD/getopt.c | 135 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 330 insertions(+) --------------------------------------------------- 2012-02-20 17:09:55 +0000 Tony Finch tests: multi-file, error handling, output permissions. Also: the fixtests script updates the test suite after it has been changed and passed a manual check. The runtests script now runs each test in a subshell so that tests have greater control over their exit status. fixtests.sh | 9 +++++++++ runtests.sh | 2 +- tests/multi.experr | 0 tests/multi.expout | 36 ++++++++++++++++++++++++++++++++++++ tests/multi.exprc | 1 + tests/multi.sh | 7 +++++++ tests/multimissing.experr | 3 +++ tests/multimissing.expout | 22 ++++++++++++++++++++++ tests/multimissing.exprc | 1 + tests/multimissing.sh | 7 +++++++ tests/outdir.exprc | 2 +- tests/outdir.sh | 2 ++ tests/outeperm.experr | 1 + tests/outeperm.expout | 0 tests/outeperm.exprc | 1 + tests/outeperm.sh | 6 ++++++ tests/outfile.exprc | 2 +- tests/outfile.sh | 2 ++ tests/outperms.experr | 1 + tests/outperms.expout | 16 ++++++++++++++++ tests/outperms.exprc | 1 + tests/outperms.sh | 7 +++++++ tests/overdir.exprc | 2 +- tests/overdir.sh | 2 ++ tests/overenoent.experr | 1 + tests/overenoent.expout | 0 tests/overenoent.exprc | 1 + tests/overenoent.sh | 5 +++++ tests/overin.exprc | 2 +- tests/overin.sh | 2 ++ tests/overlnnum.exprc | 2 +- tests/overlnnum.sh | 2 ++ tests/overperms.experr | 2 ++ tests/overperms.expout | 16 ++++++++++++++++ tests/overperms.exprc | 1 + tests/overperms.sh | 9 +++++++++ tests/overwrite.exprc | 2 +- tests/overwrite.sh | 2 ++ 38 files changed, 173 insertions(+), 7 deletions(-) --------------------------------------------------- 2012-02-20 15:54:17 +0000 Tony Finch unifdef.c: Sensible permissions on output files. This fixes a regression in the multiple files support. unifdef.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) --------------------------------------------------- 2012-02-19 19:42:11 +0000 Tony Finch unifdef.c: Some C89 and C++ compatibility. Suggested by: Carsten Hey unifdef.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) --------------------------------------------------- 2012-02-18 20:15:27 +0000 Tony Finch Add a -h (print help) option. unifdef.1 | 5 ++++- unifdef.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 53 insertions(+), 6 deletions(-) --------------------------------------------------- 2012-02-17 22:47:24 +0000 Tony Finch unifdef.c: trim unnecessary header includes We now avoid using errno.h, because on some glibc systems it is the only header that depends on the kernel headers. This makes it possible to install the Linux kernel headers from source to fix a broken system with incomplete headers. Suggested by: Mike Frysinger unifdef.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) --------------------------------------------------- 2012-02-17 22:31:19 +0000 Tony Finch Support for processing multiple files in place, with or without backups. Suggested by: Joergen Edelbo unifdef.1 | 46 +++++++------ unifdef.c | 219 ++++++++++++++++++++++++++++++++++++-------------------------- 2 files changed, 155 insertions(+), 110 deletions(-) --------------------------------------------------- 2012-02-17 18:18:26 +0000 Tony Finch unifdef.1: alphabetize options; better phrasing and concision. unifdef.1 | 98 +++++++++++++++++++++++++-------------------------------------- 1 file changed, 39 insertions(+), 59 deletions(-) --------------------------------------------------- 2011-11-07 17:14:54 +0000 Tony Finch unifdef.1: Split some macros with many arguments. Improves compatibility with non-GNU troff. Obtained from: Jason McIntyre unifdef.1 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) --------------------------------------------------- 2011-11-07 17:00:13 +0000 Tony Finch Make copyright string static to please static analysers. Obtained-from: Ed Schouten unifdef.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2011-05-23 10:53:20 +0100 Tony Finch reversion.sh: Less verbose in normal cases, more verbose on error. reversion.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) --------------------------------------------------- 2011-05-23 10:45:47 +0100 Tony Finch test: Use the PATH to find unifdef. runtests.sh | 1 + tests/NetBSD-42628.sh | 2 +- tests/args1.sh | 2 +- tests/args2.sh | 2 +- tests/blank0d.sh | 2 +- tests/blank0u.sh | 2 +- tests/blank1d.sh | 2 +- tests/blank1u.sh | 2 +- tests/blank2d.sh | 2 +- tests/blank2u.sh | 2 +- tests/blank3d.sh | 2 +- tests/blank3u.sh | 2 +- tests/blank4d.sh | 2 +- tests/blank4u.sh | 2 +- tests/crlf-a.sh | 2 +- tests/crlf-b.sh | 2 +- tests/crlf-c.sh | 2 +- tests/crlf-d.sh | 2 +- tests/debian-603860.sh | 2 +- tests/empty.sh | 2 +- tests/if1-a.sh | 2 +- tests/if1-k.sh | 2 +- tests/if1-kDU.sh | 2 +- tests/if1.sh | 2 +- tests/if1a.sh | 2 +- tests/if2-a.sh | 2 +- tests/if2-k.sh | 2 +- tests/if2-kDU.sh | 2 +- tests/if2.sh | 2 +- tests/if3-a.sh | 2 +- tests/if3-k.sh | 2 +- tests/if3-kDU.sh | 2 +- tests/if3.sh | 2 +- tests/if4-a.sh | 2 +- tests/if4-k.sh | 2 +- tests/if4-kDU.sh | 2 +- tests/if4.sh | 2 +- tests/if5-a.sh | 2 +- tests/if5-k.sh | 2 +- tests/if5-kDU.sh | 2 +- tests/if5.sh | 2 +- tests/if6a.sh | 2 +- tests/if6b.sh | 2 +- tests/if6c.sh | 2 +- tests/if6d.sh | 2 +- tests/none.sh | 2 +- tests/outdir.sh | 2 +- tests/outfile.sh | 2 +- tests/overdir.sh | 2 +- tests/overin.sh | 2 +- tests/overlnnum.sh | 2 +- tests/overwrite.sh | 2 +- tests/small1.sh | 2 +- tests/small2.sh | 2 +- tests/spaces1.sh | 2 +- tests/spaces2.sh | 2 +- tests/spaces3.sh | 2 +- tests/spaces4.sh | 2 +- 58 files changed, 58 insertions(+), 57 deletions(-) --------------------------------------------------- 2011-05-23 10:18:59 +0100 Tony Finch tests: Add a test case from NetBSD PR 42628. This is adapted from the NetBSD automated testing framework, to which the test case was added by Jukka Ruohonen . Obtained-from: http://cvsweb.netbsd.org/bsdweb.cgi/src/tests/usr.bin/unifdef/ tests/NetBSD-42628.c | 25 +++++++++++++++++++++++++ tests/NetBSD-42628.experr | 0 tests/NetBSD-42628.expout | 6 ++++++ tests/NetBSD-42628.exprc | 1 + tests/NetBSD-42628.sh | 1 + 5 files changed, 33 insertions(+) --------------------------------------------------- 2011-04-20 12:14:46 +0100 Tony Finch .htaccess: remove gzip encoding This should discourage HTTP clients from auto-decompressing .tar.gz files and causing higher-level tools to get checksum mismatches. web/.htaccess | 2 ++ 1 file changed, 2 insertions(+) --------------------------------------------------- 2011-02-22 16:53:10 +0000 Tony Finch Release unifdef-2.6 web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2011-02-21 17:20:13 +0000 Tony Finch unifdef: -s and -o are mutually exclusive unifdef.c | 2 ++ 1 file changed, 2 insertions(+) --------------------------------------------------- 2011-01-21 17:45:45 +0000 Tony Finch unifdef.c: detect output errors promptly This ensures that errno has a meaningful value when we come to print the error message. unifdef.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) --------------------------------------------------- 2011-01-21 17:27:39 +0000 Tony Finch unifdef.c: Use ferror() to detect IO errors better. unifdef.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) --------------------------------------------------- 2011-01-20 17:31:28 +0000 Tony Finch unifdef.c: Write line numbers to -o output file. I must have missed this because NetBSD doesn't have the -n feature. tests/overlnnum.experr | 0 tests/overlnnum.expout | 20 ++++++++++++++++++++ tests/overlnnum.exprc | 1 + tests/overlnnum.sh | 4 ++++ unifdef.c | 2 +- 5 files changed, 26 insertions(+), 1 deletion(-) --------------------------------------------------- 2011-01-20 17:20:57 +0000 Tony Finch unifdef.c: further error message improvements unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2011-01-20 16:27:06 +0000 Tony Finch unifdef.c: more output filename correctness. Submitted-by: Brian Ginsbach unifdef.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2011-01-18 19:51:40 +0000 Tony Finch Update copyright date. COPYING | 4 ++-- unifdef.1 | 4 ++-- unifdef.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2011-01-18 18:48:45 +0000 Tony Finch Release unifdef-2.5 web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2011-01-18 18:39:52 +0000 Tony Finch admin: no need to keep old import script visible authors.cvs | 2 -- import-script | 76 ----------------------------------------------------------- 2 files changed, 78 deletions(-) --------------------------------------------------- 2011-01-18 18:11:24 +0000 Tony Finch authors.svn: add joel authors.svn | 1 + 1 file changed, 1 insertion(+) --------------------------------------------------- 2011-01-18 17:50:58 +0000 Tony Finch unifdef.c: correct output filename when overwriting stdin The bug occurs in cases like `unifdef -o file < file` tests/overin.experr | 0 tests/overin.expout | 16 ++++++++++++++++ tests/overin.exprc | 1 + tests/overin.sh | 4 ++++ unifdef.c | 4 ++-- 5 files changed, 23 insertions(+), 2 deletions(-) --------------------------------------------------- 2011-01-18 17:37:58 +0000 Tony Finch unifdef.c: neater overwrite check, inspired by ginsbach@NetBSD.org unifdef.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) --------------------------------------------------- 2011-01-17 11:16:21 +0000 Tony Finch unifdef.c: explain in comments that strncpy() is used correctly. unifdef.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-11-18 16:51:40 +0000 Tony Finch tests: add one taken from Debian bug #603860 tests/debian-603860.c | 8 ++++++++ tests/debian-603860.experr | 0 tests/debian-603860.expout | 2 ++ tests/debian-603860.exprc | 1 + tests/debian-603860.sh | 1 + 5 files changed, 12 insertions(+) --------------------------------------------------- 2010-11-09 11:28:11 +0000 Tony Finch web/index.html: Add a link to my homepage in the header. web/index.html | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-09-13 12:14:15 +0000 Tony Finch Re-roll release of unifdef-2.4 --------------------------------------------------- 2010-09-13 12:00:04 +0000 Tony Finch Makefile: omit merge commits from the Changelog Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-09-13 12:03:10 +0000 Tony Finch svnup: switch to admin branch so git svn fetch can read authors file. svnup | 2 ++ 1 file changed, 2 insertions(+) --------------------------------------------------- 2010-09-13 11:52:48 +0000 Tony Finch Release unifdef-2.4 web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-09-13 11:13:43 +0000 Tony Finch reversion.sh: do not search $PATH for version.sh The "." keyword for sourcing files searches $PATH when its argument does not contain a slash. If you want to load a file from $PWD, you have to prefix the filename with "./". Signed-off-by: Mike Frysinger reversion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-08-03 15:58:22 +0100 Tony Finch unifdef.1: fix typo (degugging -> debugging) Obtained from: Joel Dahl unifdef.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-05-01 20:49:47 +0000 Tony Finch upload: seems we need separate pushes for heads and tags. upload | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2010-05-01 20:47:08 +0000 Tony Finch upload tags to github upload | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-04-12 16:38:19 +0000 Tony Finch COPYING: explain the deleted advertising clause more clearly. COPYING | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2010-04-05 03:00:24 +0100 Tony Finch reversion.sh: put hyphen in unifdef-N.N reversion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-04-04 21:22:05 +0000 Tony Finch upload: git gc --aggressively upload | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-31 13:57:08 +0000 Tony Finch web: Advertise repository using native git protocol web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-18 16:28:14 +0000 Tony Finch Makefile: reinstate realclean's double negative logic The positive logic causes make to bomb out when there is no .git directory. Reported-by: Colin Watson Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-16 10:14:31 +0000 Tony Finch web/.htaccess: fix the redirects for the old test URLs. This requires a disgusting double redirect hack because Apache-1.3 percent-encodes ? and ; in URLs generated by RedirectMatch, but not with plain Redirect. web/.htaccess | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-03-15 19:05:10 +0000 Tony Finch upload: Changelog file not needed for website upload | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) --------------------------------------------------- 2010-03-15 19:00:06 +0000 Tony Finch Makefile: remove double negative logic in realclean target Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-15 18:56:36 +0000 Tony Finch upload: Ensure all generated web site files are in the right place upload | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) --------------------------------------------------- 2010-03-15 18:54:03 +0000 Tony Finch Makefile: do not remove any ${DISTFILES} in the clean target. Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-03-15 14:53:30 +0000 Tony Finch Makefile: add missing blank line at end of Changelog Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-12 21:50:14 +0000 Tony Finch upload: Add a README.html for gitweb. upload | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --------------------------------------------------- 2010-03-12 19:42:53 +0000 Tony Finch Save a copy of my main .git/config git.config | 12 ++++++++++++ 1 file changed, 12 insertions(+) --------------------------------------------------- 2010-03-12 19:37:19 +0000 Tony Finch upload: ensure unifdef.txt exists upload | 1 + 1 file changed, 1 insertion(+) --------------------------------------------------- 2010-03-12 19:36:26 +0000 Tony Finch Remove the upload script to the admin branch. Makefile | 9 --------- 1 file changed, 9 deletions(-) --------------------------------------------------- 2010-03-12 19:34:06 +0000 Tony Finch Move the upload script into the admin area. upload | 11 +++++++++++ 1 file changed, 11 insertions(+) --------------------------------------------------- 2010-03-12 19:06:39 +0000 Tony Finch README: include an introductory paragraph README | 5 +++++ 1 file changed, 5 insertions(+) --------------------------------------------------- 2010-03-12 18:57:52 +0000 Tony Finch Make import-script un-runnable but keep it for reference import-script | 3 +++ 1 file changed, 3 insertions(+) --------------------------------------------------- 2010-03-12 18:55:34 +0000 Tony Finch Add a little script for re-syncing with FreeBSD's svn repo. svnup | 12 ++++++++++++ 1 file changed, 12 insertions(+) --------------------------------------------------- 2010-03-12 18:50:35 +0000 Tony Finch git-svn turns out not to work very well with non-default names. import-script | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) --------------------------------------------------- 2010-03-12 17:34:56 +0000 Tony Finch reversion.sh: tidier version numbers for modified sources reversion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-03-12 16:27:30 +0000 Tony Finch Release unifdef-2.3 web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-12 16:23:35 +0000 Tony Finch Makefile: upload to github before chiark Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-12 16:21:27 +0000 Tony Finch 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 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 Rename get-version.sh to reversion.sh for fun. Makefile | 4 ++-- get-version.sh => reversion.sh | 0 2 files changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-03-12 15:23:40 +0000 Tony Finch Makefile: do not try to build unifdef.txt by default. DISTFILES shouldn't be in non-release targets. Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-12 12:22:51 +0000 Tony Finch Add -V and -S flags to synopses unifdef.1 | 2 +- unifdef.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-03-12 11:07:35 +0000 Tony Finch web/index.html: link to github web/index.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-03-12 11:07:35 +0000 Tony Finch web/index.html: link to github web/index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2010-03-12 11:03:03 +0000 Tony Finch README: add information about obtaining unifdef using git. README | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) --------------------------------------------------- 2010-03-12 11:01:15 +0000 Tony Finch Makefile: tweak upload target Remove unsafe `git prune`. Push a copy to github. Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-12 11:00:26 +0000 Tony Finch web/index.html: Fix git clone URL. web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-12 10:15:18 +0000 Tony Finch Release unifdef-2.2 web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-12 10:08:04 +0000 Tony Finch unifdefall: print debugging output to stderr unifdefall.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2010-03-12 10:04:14 +0000 Tony Finch unifdefall: correct exit status if the clean-up rm fails Reported-by: Bob Proulx unifdefall.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-12 09:52:46 +0000 Tony Finch get-version.sh: fix build in clean git working tree `git show` exited non-zero which aborted the build. get-version.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-03-12 09:34:18 +0000 Tony Finch Makefile: fix version.h -> unifdef.c -> unifdef dependencies. Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2010-03-12 09:28:02 +0000 Tony Finch 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 file changed, 5 insertions(+), 3 deletions(-) --------------------------------------------------- 2010-03-11 21:41:45 +0000 Tony Finch Makefile: safer "realclean" target Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-11 21:17:58 +0000 Tony Finch Release unifdef-2.1 web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-11 21:12:03 +0000 Tony Finch 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 Makefile: remove release.sh from DISTFILES Makefile | 1 - 1 file changed, 1 deletion(-) --------------------------------------------------- 2010-03-11 20:59:11 +0000 Tony Finch Makefile: prune .git before uploading Makefile | 1 + 1 file changed, 1 insertion(+) --------------------------------------------------- 2010-03-11 20:56:29 +0000 Tony Finch index.html: mention the git glone command web/index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2010-03-11 20:52:26 +0000 Tony Finch Re-do the website handling and add an upload target. Makefile | 15 +++++++++++---- index.html.in => web/index.html | 17 ++--------------- 2 files changed, 13 insertions(+), 19 deletions(-) --------------------------------------------------- 2010-03-11 20:28:13 +0000 Tony Finch Tell git to ignore release files. .gitignore | 1 + 1 file changed, 1 insertion(+) --------------------------------------------------- 2010-03-11 20:27:04 +0000 Tony Finch 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 Tell git to ignore output files. .gitignore | 5 +++++ 1 file changed, 5 insertions(+) --------------------------------------------------- 2010-03-11 20:04:35 +0000 Tony Finch Makefile: do not clean inside .git directory. Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-11 18:57:37 +0000 Tony Finch 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 Makefile: clean trailing whitespace. Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-11 18:56:58 +0000 Tony Finch INSTALL: Note the CFLAGS and LDFLAGS make variables. INSTALL | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2010-03-11 18:56:34 +0000 Tony Finch 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-11 18:52:37 +0000 Tony Finch combine admin repo too import-script | 2 ++ 1 file changed, 2 insertions(+) --------------------------------------------------- 2010-03-11 18:43:15 +0000 Tony Finch A reminder of how this repository was created. authors.cvs | 2 ++ authors.svn | 14 ++++++++++++ import-script | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) --------------------------------------------------- 2010-03-10 17:42:54 +0000 Tony Finch 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 Forced commit to note change to test suite. runtests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2010-03-07 17:56:06 +0000 Tony Finch 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 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 Add the COPYING file to the release. release.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2010-03-06 14:38:50 +0000 Tony Finch Fix HTML markup snafu. index.html.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-03-06 14:37:14 +0000 Tony Finch 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 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 Adjust man page document title for backwards compatibility. Reported by: Bob Proulx unifdef.1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2010-02-23 12:27:11 +0000 Tony Finch 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 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-02-22 18:58:50 +0000 Tony Finch Drop 1. from the version number release.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-02-22 18:58:30 +0000 Tony Finch 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 file changed, 13 insertions(+), 4 deletions(-) --------------------------------------------------- 2010-02-21 16:55:04 +0000 Tony Finch We don't need to compile unifdef when preparing the release. release.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-02-21 16:53:20 +0000 Tony Finch 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 Makefile | 14 +++++++------- release.sh | 7 +++++-- 2 files changed, 12 insertions(+), 9 deletions(-) --------------------------------------------------- 2010-02-19 20:43:13 +0000 Tony Finch Use -mdoc macro package when invoking nroff. Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-02-19 20:25:50 +0000 Tony Finch 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 A small tidy-up in process() unifdef.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) --------------------------------------------------- 2010-02-19 19:46:41 +0000 Tony Finch Expand ACCESSPERMS rather than conditionally #defining it. unifdef.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) --------------------------------------------------- 2010-02-19 18:35:26 +0000 Tony Finch Define ACCESSPERMS on systems (like Cygwin) that lack it. Suggested by Mark Rushakoff. unifdef.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --------------------------------------------------- 2010-02-19 17:30:50 +0000 Tony Finch 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 Improve portability to systems with native CRLF newlines. unifdef.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2010-02-19 17:11:39 +0000 Tony Finch Remove FreeBSD from manual page rubric, and update its date. unifdef.1 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2010-02-19 16:44:02 +0000 Tony Finch List INSTALL file on homepage index.html.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2010-02-19 16:37:05 +0000 Tony Finch 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 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.experr | 0 tests/crlf-a.expout | 10 ++++++++++ tests/crlf-a.exprc | 1 + tests/crlf-a.sh | 1 + tests/crlf-b.experr | 0 tests/crlf-b.expout | 14 ++++++++++++++ tests/crlf-b.exprc | 1 + tests/crlf-b.sh | 1 + tests/crlf-c.experr | 0 tests/crlf-c.expout | 16 ++++++++++++++++ tests/crlf-c.exprc | 1 + tests/crlf-c.sh | 1 + tests/crlf-d.experr | 0 tests/crlf-d.expout | 18 ++++++++++++++++++ tests/crlf-d.exprc | 1 + tests/crlf-d.sh | 1 + tests/crlf.c | 20 ++++++++++++++++++++ unifdef.c | 54 ++++++++++++++++++++++++++++++++++++----------------- 19 files changed, 125 insertions(+), 20 deletions(-) --------------------------------------------------- 2010-02-19 16:29:59 +0000 Tony Finch 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 More tests of keyword edits tests/if6.c | 11 +++++++++++ tests/if6a.experr | 0 tests/if6a.expout | 1 + tests/if6a.exprc | 1 + tests/if6a.sh | 1 + tests/if6b.experr | 0 tests/if6b.expout | 5 +++++ tests/if6b.exprc | 1 + tests/if6b.sh | 1 + tests/if6c.experr | 0 tests/if6c.expout | 7 +++++++ tests/if6c.exprc | 1 + tests/if6c.sh | 1 + tests/if6d.experr | 0 tests/if6d.expout | 9 +++++++++ tests/if6d.exprc | 1 + tests/if6d.sh | 1 + 17 files changed, 41 insertions(+) --------------------------------------------------- 2010-02-19 15:50:26 +0000 Tony Finch Test #elif -> #if edit tests/if1a.experr | 0 tests/if1a.expout | 23 +++++++++++++++++++++++ tests/if1a.exprc | 1 + tests/if1a.sh | 1 + 4 files changed, 25 insertions(+) --------------------------------------------------- 2010-01-20 00:48:26 +0000 Tony Finch unifdef.c: better diagnostics on write failure unifdef.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-01-19 20:33:00 +0000 Tony Finch unifdef.c: fix portability to 64 bit platforms. printf("%.*s",i,s) expects an int not a ptrdiff_t unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-01-19 18:22:53 +0000 Tony Finch Fix English usage in wishlist comment unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2010-01-19 18:03:02 +0000 Tony Finch 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 file changed, 8 insertions(+), 10 deletions(-) --------------------------------------------------- 2010-01-19 17:33:53 +0000 Tony Finch Update manual date and copyright. unifdef.1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2010-01-19 16:23:35 +0000 Tony Finch 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 via NetBSD tests/outdir.experr | 0 tests/outdir.expout | 14 +++++++ tests/outdir.exprc | 1 + tests/outdir.sh | 4 ++ tests/outfile.experr | 0 tests/outfile.expout | 14 +++++++ tests/outfile.exprc | 1 + tests/outfile.sh | 3 ++ tests/overdir.experr | 0 tests/overdir.expout | 14 +++++++ tests/overdir.exprc | 1 + tests/overdir.sh | 5 +++ tests/overwrite.experr | 0 tests/overwrite.expout | 14 +++++++ tests/overwrite.exprc | 1 + tests/overwrite.sh | 4 ++ unifdef.1 | 17 +++++++- unifdef.c | 106 +++++++++++++++++++++++++++++++++++++++++++------ 18 files changed, 185 insertions(+), 14 deletions(-) --------------------------------------------------- 2010-01-19 16:09:50 +0000 Tony Finch unifdefall: tidy copyright notice to match unifdef.c unifdefall.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) --------------------------------------------------- 2010-01-19 13:37:00 +0000 Tony Finch release.sh: Add INSTALL to list of tarball contents. release.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2010-01-19 13:36:22 +0000 Tony Finch Add Jonathan Nieder to unifdefall's copyright declaration. unifdefall.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --------------------------------------------------- 2010-01-15 18:37:39 +0000 Tony Finch Clean up the Makefile. Makefile | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) --------------------------------------------------- 2010-01-15 18:33:05 +0000 Tony Finch 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 INSTALL | 18 ++++++++++++++++++ Makefile | 20 +++++++++++++++++++- README | 13 ++----------- 3 files changed, 39 insertions(+), 12 deletions(-) --------------------------------------------------- 2010-01-15 17:43:17 +0000 Tony Finch Makefile: do not remove Changelog on clean Regenerating the Changelog requires access to the unifdef CVS repository. Submitted-by: Jonathan Nieder Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2010-01-15 17:41:21 +0000 Tony Finch 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 unifdefall.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) --------------------------------------------------- 2009-12-02 15:21:22 +0000 Tony Finch Fix ident string -- gcc optimised it away. unifdef.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) --------------------------------------------------- 2009-11-27 17:30:39 +0000 Tony Finch Include full CVS log in the Changelog. Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-27 17:24:25 +0000 Tony Finch release.sh: remove tests/CVS from tarball, and upload files faster. release.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-27 17:21:26 +0000 Tony Finch 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 unifdef.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) --------------------------------------------------- 2009-11-27 17:14:32 +0000 Tony Finch 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 runtests.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-27 15:40:10 +0000 Tony Finch 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 file changed, 4 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-27 14:35:51 +0000 Tony Finch Consistent ordering of ${got} and ${exp} in the test script runtests.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2009-11-27 14:34:09 +0000 Tony Finch 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 Improve phrasing on web page index.html.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-27 14:30:02 +0000 Tony Finch 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 Add some unifdefall test cases. tests/if1-a.experr | 0 tests/if1-a.exprc | 1 + tests/if1-a.sh | 1 + tests/if2-a.experr | 0 tests/if2-a.exprc | 1 + tests/if2-a.sh | 1 + tests/if3-a.experr | 0 tests/if3-a.exprc | 1 + tests/if3-a.sh | 1 + tests/if4-a.experr | 0 tests/if4-a.exprc | 1 + tests/if4-a.sh | 1 + tests/if5-a.experr | 0 tests/if5-a.exprc | 1 + tests/if5-a.sh | 1 + 15 files changed, 10 insertions(+) --------------------------------------------------- 2009-11-27 14:20:59 +0000 Tony Finch Ensure we clean up after a successful test. runtests.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2009-11-27 14:08:08 +0000 Tony Finch 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 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.experr | 0 tests/args1.c.expout | 1 - tests/args1.c.exprc | 1 - tests/args2.c.experr | 0 tests/args2.c.expout | 3 --- tests/args2.c.exprc | 1 - tests/blank0d.c.experr | 0 tests/blank0d.c.expout | 23 --------------------- tests/blank0d.c.exprc | 1 - tests/blank0u.c.experr | 0 tests/blank0u.c.expout | 22 -------------------- tests/blank0u.c.exprc | 1 - tests/blank1d.c.experr | 0 tests/blank1d.c.expout | 23 --------------------- tests/blank1d.c.exprc | 1 - tests/blank1u.c.experr | 0 tests/blank1u.c.expout | 21 ------------------- tests/blank1u.c.exprc | 1 - tests/blank2d.c.experr | 0 tests/blank2d.c.expout | 23 --------------------- tests/blank2d.c.exprc | 1 - tests/blank2u.c.experr | 0 tests/blank2u.c.expout | 20 ------------------ tests/blank2u.c.exprc | 1 - tests/blank3d.c.experr | 0 tests/blank3d.c.expout | 23 --------------------- tests/blank3d.c.exprc | 1 - tests/blank3u.c.experr | 0 tests/blank3u.c.expout | 19 ----------------- tests/blank3u.c.exprc | 1 - tests/blank4d.c.experr | 0 tests/blank4d.c.expout | 23 --------------------- tests/blank4d.c.exprc | 1 - tests/blank4u.c.experr | 0 tests/blank4u.c.expout | 18 ----------------- tests/blank4u.c.exprc | 1 - tests/empty.c.experr | 0 tests/empty.c.expout | 0 tests/empty.c.exprc | 1 - tests/if1-a.c.expout | 15 -------------- tests/if1-k.c.experr | 0 tests/if1-k.c.expout | 29 -------------------------- tests/if1-k.c.exprc | 1 - tests/if1-kDU.c.experr | 0 tests/if1-kDU.c.expout | 19 ----------------- tests/if1-kDU.c.exprc | 1 - tests/if1.c.experr | 0 tests/if1.c.expout | 15 -------------- tests/if1.c.exprc | 1 - tests/if2-a.c.expout | 12 ----------- tests/if2-k.c.experr | 0 tests/if2-k.c.expout | 20 ------------------ tests/if2-k.c.exprc | 1 - tests/if2-kDU.c.experr | 0 tests/if2-kDU.c.expout | 16 --------------- tests/if2-kDU.c.exprc | 1 - tests/if2.c.experr | 0 tests/if2.c.expout | 12 ----------- tests/if2.c.exprc | 1 - tests/if3-a.c.expout | 12 ----------- tests/if3-k.c.experr | 0 tests/if3-k.c.expout | 20 ------------------ tests/if3-k.c.exprc | 1 - tests/if3-kDU.c.experr | 0 tests/if3-kDU.c.expout | 16 --------------- tests/if3-kDU.c.exprc | 1 - tests/if3.c.experr | 0 tests/if3.c.expout | 12 ----------- tests/if3.c.exprc | 1 - tests/if4-a.c.expout | 21 ------------------- tests/if4-k.c.experr | 0 tests/if4-k.c.expout | 41 ------------------------------------- tests/if4-k.c.exprc | 1 - tests/if4-kDU.c.experr | 0 tests/if4-kDU.c.expout | 25 ----------------------- tests/if4-kDU.c.exprc | 1 - tests/if4.c.experr | 0 tests/if4.c.expout | 21 ------------------- tests/if4.c.exprc | 1 - tests/if5-a.c.expout | 27 ------------------------- tests/if5-k.c.experr | 0 tests/if5-k.c.expout | 55 -------------------------------------------------- tests/if5-k.c.exprc | 1 - tests/if5-kDU.c.experr | 0 tests/if5-kDU.c.expout | 31 ---------------------------- tests/if5-kDU.c.exprc | 1 - tests/if5.c.experr | 0 tests/if5.c.expout | 27 ------------------------- tests/if5.c.exprc | 1 - tests/none.c.experr | 0 tests/none.c.expout | 4 ---- tests/none.c.exprc | 1 - tests/runtests | 51 ---------------------------------------------- tests/small1.c.experr | 0 tests/small1.c.expout | 12 ----------- tests/small1.c.exprc | 1 - tests/small2.c.experr | 0 tests/small2.c.expout | 12 ----------- tests/small2.c.exprc | 1 - tests/spaces1.c.experr | 0 tests/spaces1.c.expout | 12 ----------- tests/spaces1.c.exprc | 1 - tests/spaces2.c.experr | 0 tests/spaces2.c.expout | 12 ----------- tests/spaces2.c.exprc | 1 - tests/spaces3.c.experr | 0 tests/spaces3.c.expout | 12 ----------- tests/spaces3.c.exprc | 1 - tests/spaces4.c.experr | 0 tests/spaces4.c.expout | 12 ----------- tests/spaces4.c.exprc | 1 - 114 files changed, 18 insertions(+), 841 deletions(-) --------------------------------------------------- 2009-11-27 13:08:58 +0000 Tony Finch Additional tests from Bob Proulx 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.experr | 0 tests/if1-k.c.expout | 29 +++++++++++++++++++++++ tests/if1-k.c.exprc | 1 + tests/if1-k.experr | 0 tests/if1-k.expout | 29 +++++++++++++++++++++++ tests/if1-k.exprc | 1 + tests/if1-kDU.args | 1 + tests/if1-kDU.c | 37 +++++++++++++++++++++++++++++ tests/if1-kDU.c.experr | 0 tests/if1-kDU.c.expout | 19 +++++++++++++++ tests/if1-kDU.c.exprc | 1 + tests/if1-kDU.experr | 0 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.experr | 0 tests/if2-k.c.expout | 20 ++++++++++++++++ tests/if2-k.c.exprc | 1 + tests/if2-k.experr | 0 tests/if2-k.expout | 20 ++++++++++++++++ tests/if2-k.exprc | 1 + tests/if2-kDU.args | 1 + tests/if2-kDU.c | 28 ++++++++++++++++++++++ tests/if2-kDU.c.experr | 0 tests/if2-kDU.c.expout | 16 +++++++++++++ tests/if2-kDU.c.exprc | 1 + tests/if2-kDU.experr | 0 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.experr | 0 tests/if3-k.c.expout | 20 ++++++++++++++++ tests/if3-k.c.exprc | 1 + tests/if3-k.experr | 0 tests/if3-k.expout | 20 ++++++++++++++++ tests/if3-k.exprc | 1 + tests/if3-kDU.args | 1 + tests/if3-kDU.c | 28 ++++++++++++++++++++++ tests/if3-kDU.c.experr | 0 tests/if3-kDU.c.expout | 16 +++++++++++++ tests/if3-kDU.c.exprc | 1 + tests/if3-kDU.experr | 0 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.experr | 0 tests/if4-k.c.expout | 41 ++++++++++++++++++++++++++++++++ tests/if4-k.c.exprc | 1 + tests/if4-k.experr | 0 tests/if4-k.expout | 41 ++++++++++++++++++++++++++++++++ tests/if4-k.exprc | 1 + tests/if4-kDU.args | 1 + tests/if4-kDU.c | 49 +++++++++++++++++++++++++++++++++++++++ tests/if4-kDU.c.experr | 0 tests/if4-kDU.c.expout | 25 ++++++++++++++++++++ tests/if4-kDU.c.exprc | 1 + tests/if4-kDU.experr | 0 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.experr | 0 tests/if5-k.c.expout | 55 +++++++++++++++++++++++++++++++++++++++++++ tests/if5-k.c.exprc | 1 + tests/if5-k.experr | 0 tests/if5-k.expout | 55 +++++++++++++++++++++++++++++++++++++++++++ tests/if5-k.exprc | 1 + tests/if5-kDU.args | 1 + tests/if5-kDU.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/if5-kDU.c.experr | 0 tests/if5-kDU.c.expout | 31 +++++++++++++++++++++++++ tests/if5-kDU.c.exprc | 1 + tests/if5-kDU.experr | 0 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 +++ 128 files changed, 1276 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-27 12:48:13 +0000 Tony Finch List significant contributions in the README README | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) --------------------------------------------------- 2009-11-27 12:36:54 +0000 Tony Finch Improve the blurb on the web page, based on the Debian package's description by Jonathan Nieder . index.html.in | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) --------------------------------------------------- 2009-11-26 14:12:30 +0000 Tony Finch Fix web page markup index.html.in | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) --------------------------------------------------- 2009-11-26 14:01:26 +0000 Tony Finch Makefile: clean index.html generated by release.sh Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-26 13:56:22 +0000 Tony Finch 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 Try again to prevent CVS keyword expansion in the wrong part of release.sh release.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-26 13:52:09 +0000 Tony Finch Do not expand CVS keywords in the wrong part of release.sh release.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-26 13:50:10 +0000 Tony Finch 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 file changed, 7 insertions(+), 5 deletions(-) --------------------------------------------------- 2009-11-26 13:48:45 +0000 Tony Finch 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 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 unifdefall.sh | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) --------------------------------------------------- 2009-11-26 02:22:24 +0000 Tony Finch unifdefall: Use {} instead of () for redirecting a group of commands. Submitted-by: Jonathan Nieder unifdefall.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2009-11-26 02:14:47 +0000 Tony Finch unifdefall: remove debugging remnants. unifdefall.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2009-11-25 19:54:34 +0000 Tony Finch unifdefall: update copyright dates. unifdefall.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-25 19:33:51 +0000 Tony Finch Makefile: really clean more. Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-25 19:32:40 +0000 Tony Finch 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 unifdefall.sh | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) --------------------------------------------------- 2009-11-25 19:24:59 +0000 Tony Finch unifdefall: fix mktemp invocation Actually remove the -t that should have gone in rev. 1.14 unifdefall.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-25 19:23:12 +0000 Tony Finch unifdefall: simplify redirections to the temporary script unifdefall.sh | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) --------------------------------------------------- 2009-11-25 18:05:11 +0000 Tony Finch unifdefall: force the "C" locale to avoid braindamage Reported-by: Jonathan Nieder unifdefall.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --------------------------------------------------- 2009-11-25 18:02:41 +0000 Tony Finch unifdefall: clean up temporary files on failure Submitted-by: Jonathan Nieder unifdefall.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) --------------------------------------------------- 2009-11-25 18:00:54 +0000 Tony Finch unifdefall: allow spaces in $TMPDIR Submitted-by: Jonathan Nieder unifdefall.sh | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) --------------------------------------------------- 2009-11-25 17:56:10 +0000 Tony Finch 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 unifdefall.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-25 17:54:13 +0000 Tony Finch Use $() instead of `` in unifdefall. unifdefall.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2009-11-25 00:11:02 +0000 Tony Finch Improve the behaviour of the -B option. Submitted-by: Anders H Kaseorg 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 Add some test cases for blank line squashing. tests/blank0d.args | 1 + tests/blank0d.c | 25 +++++++++++++++++++++++++ tests/blank0d.c.experr | 0 tests/blank0d.c.expout | 23 +++++++++++++++++++++++ tests/blank0d.c.exprc | 1 + tests/blank0d.experr | 0 tests/blank0d.expout | 23 +++++++++++++++++++++++ tests/blank0d.exprc | 1 + tests/blank0u.args | 1 + tests/blank0u.c | 25 +++++++++++++++++++++++++ tests/blank0u.c.experr | 0 tests/blank0u.c.expout | 22 ++++++++++++++++++++++ tests/blank0u.c.exprc | 1 + tests/blank0u.experr | 0 tests/blank0u.expout | 22 ++++++++++++++++++++++ tests/blank0u.exprc | 1 + tests/blank1d.args | 1 + tests/blank1d.c | 25 +++++++++++++++++++++++++ tests/blank1d.c.experr | 0 tests/blank1d.c.expout | 22 ++++++++++++++++++++++ tests/blank1d.c.exprc | 1 + tests/blank1d.experr | 0 tests/blank1d.expout | 22 ++++++++++++++++++++++ tests/blank1d.exprc | 1 + tests/blank1u.args | 1 + tests/blank1u.c | 25 +++++++++++++++++++++++++ tests/blank1u.c.experr | 0 tests/blank1u.c.expout | 21 +++++++++++++++++++++ tests/blank1u.c.exprc | 1 + tests/blank1u.experr | 0 tests/blank1u.expout | 21 +++++++++++++++++++++ tests/blank1u.exprc | 1 + tests/blank2d.args | 1 + tests/blank2d.c | 25 +++++++++++++++++++++++++ tests/blank2d.c.experr | 0 tests/blank2d.c.expout | 21 +++++++++++++++++++++ tests/blank2d.c.exprc | 1 + tests/blank2d.experr | 0 tests/blank2d.expout | 21 +++++++++++++++++++++ tests/blank2d.exprc | 1 + tests/blank2u.args | 1 + tests/blank2u.c | 25 +++++++++++++++++++++++++ tests/blank2u.c.experr | 0 tests/blank2u.c.expout | 20 ++++++++++++++++++++ tests/blank2u.c.exprc | 1 + tests/blank2u.experr | 0 tests/blank2u.expout | 20 ++++++++++++++++++++ tests/blank2u.exprc | 1 + tests/blank3d.args | 1 + tests/blank3d.c | 25 +++++++++++++++++++++++++ tests/blank3d.c.experr | 0 tests/blank3d.c.expout | 20 ++++++++++++++++++++ tests/blank3d.c.exprc | 1 + tests/blank3d.experr | 0 tests/blank3d.expout | 20 ++++++++++++++++++++ tests/blank3d.exprc | 1 + tests/blank3u.args | 1 + tests/blank3u.c | 25 +++++++++++++++++++++++++ tests/blank3u.c.experr | 0 tests/blank3u.c.expout | 19 +++++++++++++++++++ tests/blank3u.c.exprc | 1 + tests/blank3u.experr | 0 tests/blank3u.expout | 19 +++++++++++++++++++ tests/blank3u.exprc | 1 + tests/blank4d.args | 1 + tests/blank4d.c | 25 +++++++++++++++++++++++++ tests/blank4d.c.experr | 0 tests/blank4d.c.expout | 19 +++++++++++++++++++ tests/blank4d.c.exprc | 1 + tests/blank4d.experr | 0 tests/blank4d.expout | 19 +++++++++++++++++++ tests/blank4d.exprc | 1 + tests/blank4u.args | 1 + tests/blank4u.c | 25 +++++++++++++++++++++++++ tests/blank4u.c.experr | 0 tests/blank4u.c.expout | 18 ++++++++++++++++++ tests/blank4u.c.exprc | 1 + tests/blank4u.experr | 0 tests/blank4u.expout | 18 ++++++++++++++++++ tests/blank4u.exprc | 1 + 80 files changed, 690 insertions(+) --------------------------------------------------- 2009-11-24 23:46:36 +0000 Tony Finch 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 Add a couple of tests for macro argument handling tests/args1.c | 3 +++ tests/args1.c.experr | 0 tests/args1.c.expout | 1 + tests/args1.c.exprc | 1 + tests/args1.experr | 0 tests/args1.expout | 1 + tests/args1.exprc | 1 + tests/args2.c | 3 +++ tests/args2.c.experr | 0 tests/args2.c.expout | 3 +++ tests/args2.c.exprc | 1 + tests/args2.experr | 0 tests/args2.expout | 3 +++ tests/args2.exprc | 1 + 14 files changed, 18 insertions(+) --------------------------------------------------- 2009-11-24 22:39:36 +0000 Tony Finch 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 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 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 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 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 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 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 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 Import Bob Proulx's test suite from the Debian package. tests/Makefile | 12 +++++++++++ tests/empty.c | 0 tests/empty.c.experr | 0 tests/empty.c.expout | 0 tests/empty.experr | 0 tests/empty.expout | 0 tests/if1.c | 22 ++++++++++++++++++++ tests/if1.c.experr | 0 tests/if1.c.expout | 12 +++++++++++ tests/if1.experr | 0 tests/if1.expout | 12 +++++++++++ tests/if2.c | 13 ++++++++++++ tests/if2.c.experr | 0 tests/if2.c.expout | 9 ++++++++ tests/if2.experr | 0 tests/if2.expout | 9 ++++++++ tests/if3.c | 13 ++++++++++++ tests/if3.c.experr | 0 tests/if3.c.expout | 9 ++++++++ tests/if3.experr | 0 tests/if3.expout | 9 ++++++++ tests/if4.c | 34 ++++++++++++++++++++++++++++++ tests/if4.c.experr | 0 tests/if4.c.expout | 18 ++++++++++++++++ tests/if4.experr | 0 tests/if4.expout | 18 ++++++++++++++++ tests/if5.c | 48 +++++++++++++++++++++++++++++++++++++++++++ tests/if5.c.experr | 0 tests/if5.c.expout | 24 ++++++++++++++++++++++ tests/if5.experr | 0 tests/if5.expout | 24 ++++++++++++++++++++++ tests/none.c | 1 + tests/none.c.experr | 0 tests/none.c.expout | 1 + tests/none.experr | 0 tests/none.expout | 1 + tests/simple1 | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/simple2 | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/simple3 | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/small1.c | 13 ++++++++++++ tests/small1.c.experr | 0 tests/small1.c.expout | 9 ++++++++ tests/small1.experr | 0 tests/small1.expout | 9 ++++++++ tests/small2.c | 13 ++++++++++++ tests/small2.c.experr | 0 tests/small2.c.expout | 9 ++++++++ tests/small2.experr | 0 tests/small2.expout | 9 ++++++++ tests/spaces1.c | 13 ++++++++++++ tests/spaces1.c.experr | 0 tests/spaces1.c.expout | 9 ++++++++ tests/spaces1.experr | 0 tests/spaces1.expout | 9 ++++++++ tests/spaces2.c | 13 ++++++++++++ tests/spaces2.c.experr | 0 tests/spaces2.c.expout | 9 ++++++++ tests/spaces2.experr | 0 tests/spaces2.expout | 9 ++++++++ tests/spaces3.c | 13 ++++++++++++ tests/spaces3.c.experr | 0 tests/spaces3.c.expout | 9 ++++++++ tests/spaces3.experr | 0 tests/spaces3.expout | 9 ++++++++ tests/spaces4.c | 13 ++++++++++++ tests/spaces4.c.experr | 0 tests/spaces4.c.expout | 9 ++++++++ tests/spaces4.experr | 0 tests/spaces4.expout | 9 ++++++++ 69 files changed, 643 insertions(+) --------------------------------------------------- 2009-11-24 17:50:35 +0000 Tony Finch Less stilted English in the man page. unifdef.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-24 17:49:13 +0000 Tony Finch Handle macros with arguments. Submitted-by: Anders H Kaseorg unifdef.1 | 13 ++++++++++++- unifdef.c | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) --------------------------------------------------- 2009-11-24 16:51:38 +0000 Tony Finch Use isalnum() instead of isalpha() + isdigit(). unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-24 12:14:37 +0000 Tony Finch Run the release script verbosely. release.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-24 12:12:31 +0000 Tony Finch Add a non-portability note to the README. README | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) --------------------------------------------------- 2009-11-24 11:58:41 +0000 Tony Finch Rename getline() to parseline() to avoid clashing with a glibc function. unifdef.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2009-11-23 19:15:42 +0000 Tony Finch Add a realclean target Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) --------------------------------------------------- 2009-11-23 19:14:02 +0000 Tony Finch 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 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 Include the Release script in the release. release.sh | 1 + 1 file changed, 1 insertion(+) --------------------------------------------------- 2009-11-23 18:53:35 +0000 Tony Finch 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 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 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 unifdef.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-23 17:59:33 +0000 Tony Finch Correct the HISTORY section and add an AUTHORS section. Obtained from FreeBSD. unifdef.1 | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) --------------------------------------------------- 2009-11-23 17:58:27 +0000 Tony Finch Add a "release" target Makefile | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) --------------------------------------------------- 2008-03-10 16:15:52 +0000 Tony Finch update synopsis unifdef.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2008-03-10 16:08:47 +0000 Tony Finch 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 Fix the state transition table. unifdef.c | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) --------------------------------------------------- 2008-03-10 15:24:29 +0000 Tony Finch 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 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 Typo in comment spotted by Hasso Tepper at DragonFlyBSD. unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2008-02-29 13:17:37 +0000 Tony Finch Ah, I have worked out another way of triggering the abort. I think this fix covers all the cases. unifdef.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) --------------------------------------------------- 2008-02-29 12:44:25 +0000 Tony Finch Remove a bit of copyright crap. unifdef.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) --------------------------------------------------- 2008-02-29 12:30:36 +0000 Tony Finch Sync usage with synopsis in man page unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2008-02-29 12:29:34 +0000 Tony Finch Ensure man page is ASCII. Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2008-02-29 12:26:04 +0000 Tony Finch 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 file changed, 14 insertions(+), 5 deletions(-) --------------------------------------------------- 2007-04-30 07:37:17 +0000 Tony Finch Fix explanation of copyright history. unifdef.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) --------------------------------------------------- 2005-08-12 10:59:21 +0000 Tony Finch Allow #if defined SYM as well as #if defined(SYM) unifdef.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) --------------------------------------------------- 2005-03-08 12:39:01 +0000 Tony Finch sync with upstream unifdef.1 | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) --------------------------------------------------- 2005-03-08 12:38:48 +0000 Tony Finch copyright dates unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2005-03-08 12:07:27 +0000 Tony Finch Update the copyright notice to the FreeBSD standard. Do not recognize comment markers inside string and character literals. unifdef.c | 59 ++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 15 deletions(-) --------------------------------------------------- 2003-08-12 20:51:30 +0000 Tony Finch simpler declaration of copyright[] unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2003-08-12 20:33:59 +0000 Tony Finch 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 file changed, 6 insertions(+), 17 deletions(-) --------------------------------------------------- 2003-08-12 20:32:39 +0000 Tony Finch FreeBSD cvs id isn't relevant in this file in the upstream version. unifdefall.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) --------------------------------------------------- 2003-08-12 20:32:12 +0000 Tony Finch Current FreeBSD cvs id unifdef.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-08-12 20:12:24 +0000 Tony Finch 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 Add a little sanity checking to the state transition table code. unifdef.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) --------------------------------------------------- 2003-08-12 19:35:31 +0000 Tony Finch a minor style improvement unifdef.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2003-08-12 19:23:12 +0000 Tony Finch 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 file changed, 7 insertions(+), 8 deletions(-) --------------------------------------------------- 2003-08-07 16:01:10 +0000 Tony Finch Sync with FreeBSD unifdef.1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2003-07-31 08:21:00 +0000 Tony Finch 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 add FreeBSD-style copyright & licence unifdefall.sh | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-07-31 08:10:39 +0000 Tony Finch 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 file changed, 4 insertions(+), 7 deletions(-) --------------------------------------------------- 2003-07-31 07:59:15 +0000 Tony Finch 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 file changed, 2 insertions(+), 6 deletions(-) --------------------------------------------------- 2003-07-01 15:32:48 +0000 Tony Finch FreeBSD ident string unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-07-01 15:21:25 +0000 Tony Finch style tweak unifdef.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) --------------------------------------------------- 2003-07-01 15:13:49 +0000 Tony Finch Make the handling of EOF a little more elegant. unifdef.c | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) --------------------------------------------------- 2003-07-01 14:53:50 +0000 Tony Finch clean Makefile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-07-01 08:34:43 +0000 Tony Finch a comment about line continuations unifdef.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2003-07-01 08:19:58 +0000 Tony Finch Improve the expression evaluator's debugging output. unifdef.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-06-30 14:30:54 +0000 Tony Finch More improvements to comments regarding global variables. unifdef.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) --------------------------------------------------- 2003-06-30 14:26:48 +0000 Tony Finch Make a note in a comment about the relationship between getline() and skipcomment() w.r.t. the linestate. unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2003-06-30 14:22:40 +0000 Tony Finch When in text mode, or when ignoring a symbol, skipcomment needs to adjust the linestate when it hits a newline. unifdef.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) --------------------------------------------------- 2003-06-30 14:03:56 +0000 Tony Finch Sync with FreeBSD. unifdef.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) --------------------------------------------------- 2003-01-20 14:43:55 +0000 Tony Finch makefile for unifdef Makefile | 11 +++++++++++ 1 file changed, 11 insertions(+) --------------------------------------------------- 2003-01-20 14:37:08 +0000 Tony Finch 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 add a note about probalems caused by division unifdef.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-01-20 13:48:06 +0000 Tony Finch typo unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-01-20 12:46:08 +0000 Tony Finch 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 clean up some -o remnants unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2003-01-20 12:03:48 +0000 Tony Finch terminological consistency: s/modify/edit/ unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-01-20 12:03:10 +0000 Tony Finch Compactify the Mfoo functions. unifdef.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) --------------------------------------------------- 2003-01-20 11:46:53 +0000 Tony Finch more idiomatic strlcpy usage unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-01-20 11:45:32 +0000 Tony Finch Correct dodgy handling -- line continuations in keywords are always an error. unifdef.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) --------------------------------------------------- 2003-01-20 11:36:12 +0000 Tony Finch 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 remove another spurious space unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-01-20 02:58:11 +0000 Tony Finch 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 unifdef.1 | 24 +++++++++-- unifdef.c | 142 ++++++++++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 123 insertions(+), 43 deletions(-) --------------------------------------------------- 2003-01-20 02:53:27 +0000 Tony Finch replace accidentally zapped #endif unifdef.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2003-01-20 02:50:36 +0000 Tony Finch Sync $FreeBSD$ unifdef.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) --------------------------------------------------- 2003-01-20 01:51:11 +0000 Tony Finch Deconfuse ingnore[] (which is a per-symbol flag) and ignoring[] (which is the stack of ignore states). unifdef.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2003-01-20 01:32:23 +0000 Tony Finch Whitespace fixes from OpenBSD. unifdef.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2003-01-20 00:59:36 +0000 Tony Finch Be more explicit about the failure mode. Reported by: Poul-Henning Kamp unifdef.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) --------------------------------------------------- 2003-01-20 00:50:06 +0000 Tony Finch typo: maintin -> maintain unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-01-20 00:01:49 +0000 Tony Finch Purge strcpy() to appease OpenBSD. Consistently use the term "edit" when talking about changing preprocessor keywords in the output. Suggested by: Ted Unangst unifdef.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) --------------------------------------------------- 2003-01-17 19:19:13 +0000 Tony Finch mdoc pedantry from FreeBSD unifdef.1 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2003-01-17 19:04:36 +0000 Tony Finch Style fix: brackets around the argument to return. From OpenBSD. unifdef.c | 68 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) --------------------------------------------------- 2003-01-17 19:03:02 +0000 Tony Finch Add a necessary cast to an argument of printf. From OpenBSD. unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2003-01-17 19:01:59 +0000 Tony Finch Whitespace fixes from OpenBSD. unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-12-13 15:26:41 +0000 Tony Finch 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 file changed, 18 insertions(+), 19 deletions(-) --------------------------------------------------- 2002-12-13 15:20:05 +0000 Tony Finch make warns-clean in an evil manner unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-12-13 13:58:00 +0000 Tony Finch factor out an error message unifdef.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-12-13 11:44:25 +0000 Tony Finch remove an XXX that has been addressed unifdef.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) --------------------------------------------------- 2002-12-13 11:42:37 +0000 Tony Finch sort getopt cases unifdef.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2002-12-13 11:40:08 +0000 Tony Finch Use ISO/IEC 9899:1999 minimum translation limits unifdef.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) --------------------------------------------------- 2002-12-13 11:33:34 +0000 Tony Finch expand on unifdef's understanding of C unifdef.1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-12-13 11:24:26 +0000 Tony Finch note the appearance of ANSI support unifdef.1 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-12-13 11:24:08 +0000 Tony Finch describe the limitation on preprocessor lines better unifdef.1 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-12-13 11:15:20 +0000 Tony Finch spot backslash-newline in a preprocessor keyword unifdef.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-12-13 11:13:02 +0000 Tony Finch fix an error message unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-12-13 11:11:11 +0000 Tony Finch less obfuscated ifdef/ifndef handling unifdef.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2002-12-13 11:04:43 +0000 Tony Finch comment the state enums unifdef.c | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) --------------------------------------------------- 2002-12-12 19:53:53 +0000 Tony Finch move the forward declaration of struct ops to a better place unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-12-12 19:52:26 +0000 Tony Finch move flushline() back where it used to be unifdef.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) --------------------------------------------------- 2002-12-12 19:50:15 +0000 Tony Finch more commentary on strlcmp() unifdef.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-12-12 19:46:44 +0000 Tony Finch comment all globals unifdef.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2002-12-12 19:45:29 +0000 Tony Finch terminological consistency for pass states unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-12-12 19:43:04 +0000 Tony Finch fix some comments unifdef.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-12-12 19:42:23 +0000 Tony Finch re-order enums to reduce diffs with FreeBSD unifdef.c | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) --------------------------------------------------- 2002-12-12 19:38:45 +0000 Tony Finch remove some c&p garbage unifdef.c | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) --------------------------------------------------- 2002-12-12 19:36:23 +0000 Tony Finch move flushline closer to its usage point unifdef.c | 60 +++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 19 deletions(-) --------------------------------------------------- 2002-12-12 19:35:17 +0000 Tony Finch rename a variable in process() to reduce diffs with FreeBSD unifdef.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2002-12-12 19:29:02 +0000 Tony Finch move the tables closer to their interpreters unifdef.c | 317 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 160 insertions(+), 157 deletions(-) --------------------------------------------------- 2002-12-12 19:15:24 +0000 Tony Finch reduce the space used by the state transition functions unifdef.c | 146 ++++++++++++++++++++++++-------------------------------------- 1 file changed, 57 insertions(+), 89 deletions(-) --------------------------------------------------- 2002-12-12 19:04:56 +0000 Tony Finch note another diagnostic unifdef.1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-12-12 19:04:56 +0000 Tony Finch make everything static, and improve the order of declarations unifdef.c | 328 +++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 175 insertions(+), 153 deletions(-) --------------------------------------------------- 2002-12-12 17:59:51 +0000 Tony Finch Improve the state table commentary. unifdef.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) --------------------------------------------------- 2002-12-12 17:41:39 +0000 Tony Finch reduce state transition table line lengths below 80 unifdef.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) --------------------------------------------------- 2002-12-12 17:30:55 +0000 Tony Finch reduce state function line lengths below 80 unifdef.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) --------------------------------------------------- 2002-12-12 17:24:26 +0000 Tony Finch Exit 1 if the output differs from the input. unifdef.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-12-12 17:21:22 +0000 Tony Finch Exit 2 on error. unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-12-12 17:21:04 +0000 Tony Finch Bring the DIAGNOSTICS in line with reality. unifdef.1 | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) --------------------------------------------------- 2002-12-12 17:17:52 +0000 Tony Finch 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 skipsym doesn't need a separate test for '\0' unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-12-12 17:11:28 +0000 Tony Finch rename constexpr back to keepthis to reduce diffs unifdef.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) --------------------------------------------------- 2002-12-12 17:06:15 +0000 Tony Finch stcomline isn't used any more unifdef.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) --------------------------------------------------- 2002-12-12 17:05:00 +0000 Tony Finch Note that NO_COMMMENT is false, as before. unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-12-12 17:03:37 +0000 Tony Finch Move the error function back to the end unifdef.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) --------------------------------------------------- 2002-12-12 17:02:08 +0000 Tony Finch Better error messages outside #if groups unifdef.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-12-12 17:01:50 +0000 Tony Finch Note a new diagnostic for preprocessor lines we can't handle. unifdef.1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-12-12 17:00:04 +0000 Tony Finch Instead of quietly ballsing up the output, bitch if we encounter a preprocessor line we can't handle. unifdef.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) --------------------------------------------------- 2002-12-12 16:04:04 +0000 Tony Finch Rename checkline() to getline() and move the fgets() inside it. unifdef.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) --------------------------------------------------- 2002-12-11 20:46:06 +0000 Tony Finch Add a missing unignore() unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-12-11 20:42:47 +0000 Tony Finch Handle #ifs nested inside a false block correctly. unifdef.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) --------------------------------------------------- 2002-12-11 20:15:57 +0000 Tony Finch remove nul character comment unifdef.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) --------------------------------------------------- 2002-12-11 20:05:52 +0000 Tony Finch 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 file changed, 205 insertions(+), 247 deletions(-) --------------------------------------------------- 2002-12-11 20:04:40 +0000 Tony Finch some more bugs unifdef.1 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-12-11 02:28:22 +0000 Tony Finch Rename keepthis to constexpr which is easier to think about. Re-comment and re-arrange some globals. unifdef.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) --------------------------------------------------- 2002-12-11 02:22:44 +0000 Tony Finch Add a note about trigraphs. unifdef.1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-12-11 02:13:04 +0000 Tony Finch Use fgets instead of getline() because the latter gets EOF wrong. unifdef.c | 77 ++------------------------------------------------------------- 1 file changed, 2 insertions(+), 75 deletions(-) --------------------------------------------------- 2002-12-11 02:07:02 +0000 Tony Finch 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 Add an asymmetric variant of strncmp() called strlcmp(). unifdef.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-12-11 00:00:47 +0000 Tony Finch handle end-of-string in skipsym() unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-12-10 23:20:14 +0000 Tony Finch A neater way of handling #elif unifdef.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) --------------------------------------------------- 2002-12-10 23:02:11 +0000 Tony Finch Fix findsym()'s comment. unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-12-10 23:01:04 +0000 Tony Finch Improve findsym(). unifdef.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) --------------------------------------------------- 2002-12-10 21:11:58 +0000 Tony Finch Remove quote handling. unifdef.c | 70 ++++++++------------------------------------------------------- 1 file changed, 9 insertions(+), 61 deletions(-) --------------------------------------------------- 2002-12-10 21:11:19 +0000 Tony Finch Update the spec to relate better to ANSI C. Strings no longer affect the preprocessor, but line continuations do. unifdef.1 | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) --------------------------------------------------- 2002-12-10 17:28:09 +0000 Tony Finch 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 file changed, 3 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-12-10 17:23:54 +0000 Tony Finch Sync with FreeBSD unifdef.1 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2002-12-10 17:12:58 +0000 Tony Finch Handle inquote more elegantly unifdef.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) --------------------------------------------------- 2002-12-10 17:00:39 +0000 Tony Finch Make the symbol table zero-based, and remove an incorrect comment. unifdef.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) --------------------------------------------------- 2002-12-10 16:22:12 +0000 Tony Finch Terminological consistency: only use the word "ignore" to mean non-C parsing. unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-12-10 16:10:51 +0000 Tony Finch Ensure that cursym is always set by checkline(). unifdef.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-09-24 19:52:11 +0000 Tony Finch 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 improve language unifdef.1 | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) --------------------------------------------------- 2002-09-24 19:43:57 +0000 Tony Finch conform to the spec -- the -k option to unifdef is now needed unifdefall.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-09-24 19:16:29 +0000 Tony Finch 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 add freebsd version string unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-05-30 11:47:26 +0000 Tony Finch Sync with FreeBSD's mdoc markup fixes. unifdef.1 | 84 +++++++++++++++++++++++++++++---------------------------------- 1 file changed, 39 insertions(+), 45 deletions(-) --------------------------------------------------- 2002-05-21 17:33:41 +0000 Tony Finch style(9) whitespace unifdef.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2002-05-15 19:37:50 +0000 Tony Finch consistent spacing in the function declarations unifdef.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) --------------------------------------------------- 2002-05-15 19:36:10 +0000 Tony Finch cast away qualifiers less evilly unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-05-15 19:34:40 +0000 Tony Finch Replace h0h0opt with getopt. unifdef.c | 135 ++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 78 insertions(+), 57 deletions(-) --------------------------------------------------- 2002-05-15 18:55:14 +0000 Tony Finch Don't run off the end of command-line options inside findsym(). unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-05-15 15:43:14 +0000 Tony Finch a typo and a formatting fix from dwmalone unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-05-15 10:31:20 +0000 Tony Finch FreeBSD CVS ID correctness unifdefall.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-05-14 22:15:03 +0000 Tony Finch be more optimistic about the level of expression support unifdef.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-05-14 22:13:21 +0000 Tony Finch 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 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-05-14 21:14:30 +0000 Tony Finch Correct the ordering and indentation of the CVS IDs according to FreeBSD style. unifdef.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2002-05-14 21:11:50 +0000 Tony Finch add a missing comma to the SEE ALSO list unifdef.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-05-14 21:11:14 +0000 Tony Finch Document unifdefall and the -I option. unifdef.1 | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-05-02 12:38:29 +0000 Tony Finch Better function names -- doif() -> process() and doif_1() -> doif() unifdef.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) --------------------------------------------------- 2002-05-02 12:36:22 +0000 Tony Finch consistent commenting unifdef.c | 69 ++++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 21 deletions(-) --------------------------------------------------- 2002-05-02 12:17:31 +0000 Tony Finch Consistent spacing in declaration of local variables, and simplified flushline(). unifdef.c | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) --------------------------------------------------- 2002-05-02 00:03:41 +0000 Tony Finch note #line wish unifdef.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-04-29 16:41:08 +0000 Tony Finch Handle symbols that are defined without a value correctly, again. unifdefall.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-29 16:17:39 +0000 Tony Finch output of cpp needs to be sorted unifdefall.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-29 03:08:10 +0000 Tony Finch clean up tmp dir unifdefall.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-04-29 03:07:20 +0000 Tony Finch tidy up unifdefall.sh | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) --------------------------------------------------- 2002-04-29 03:00:58 +0000 Tony Finch Don't get confused by symbols that are the prefix of other symbols. unifdefall.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-29 02:55:15 +0000 Tony Finch mention support for the comparison operators unifdef.1 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-04-29 02:53:58 +0000 Tony Finch 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 file changed, 123 insertions(+), 92 deletions(-) --------------------------------------------------- 2002-04-29 00:20:42 +0000 Tony Finch Handle symbols that are defined without a value correctly. unifdefall.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-29 00:18:06 +0000 Tony Finch -d -> --debug unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-04-29 00:17:11 +0000 Tony Finch Fix handling of bracketed expressions -- we didn't pass over the ) unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-28 23:42:36 +0000 Tony Finch A script for stripping out as many #if's from a file as possible. unifdefall.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) --------------------------------------------------- 2002-04-28 22:32:30 +0000 Tony Finch Ignore -Ifoo options so that the same options can be used with cpp -dM unifdef.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) --------------------------------------------------- 2002-04-28 22:15:26 +0000 Tony Finch allow a - on the command line to mean "input from stdin" unifdef.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-28 22:14:07 +0000 Tony Finch say explicitly that at least one -D or -U is needed unifdef.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-27 17:27:14 +0000 Tony Finch allow longer lines in the input unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-27 17:26:53 +0000 Tony Finch avoid a potential buffer overflow unifdef.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) --------------------------------------------------- 2002-04-27 17:23:47 +0000 Tony Finch spell getlin() with an e unifdef.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2002-04-26 20:44:33 +0000 Tony Finch remove redundant function unifdef.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) --------------------------------------------------- 2002-04-26 20:32:23 +0000 Tony Finch Multiple __RCSID()s is not portable, so use __IDSTRING() instead. unifdef.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) --------------------------------------------------- 2002-04-26 20:23:09 +0000 Tony Finch move a #define to a better place unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-26 20:18:07 +0000 Tony Finch add a couple of missing [=val] phrases unifdef.1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-04-26 20:17:35 +0000 Tony Finch use .Li for #if directives unifdef.1 | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) --------------------------------------------------- 2002-04-26 20:09:37 +0000 Tony Finch change the #if bug into an expression handling bug unifdef.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-26 20:08:45 +0000 Tony Finch mention the elif diagnostic unifdef.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-26 20:07:49 +0000 Tony Finch see also cpp(1) unifdef.1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-04-26 20:07:29 +0000 Tony Finch remove spurious historical note unifdef.1 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) --------------------------------------------------- 2002-04-26 20:05:12 +0000 Tony Finch explain the -s option unifdef.1 | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-04-26 20:01:06 +0000 Tony Finch Improve the explanation of the -D and -U options. unifdef.1 | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) --------------------------------------------------- 2002-04-26 19:54:54 +0000 Tony Finch better introductory paragraph unifdef.1 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) --------------------------------------------------- 2002-04-26 19:51:20 +0000 Tony Finch remove -compact from the flag list unifdef.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-26 19:50:54 +0000 Tony Finch expand the introduction to explain the new functionality unifdef.1 | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) --------------------------------------------------- 2002-04-26 19:26:10 +0000 Tony Finch add a paragraph gap between -l and -t unifdef.1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-04-26 19:24:47 +0000 Tony Finch Add the optional symbol value to the various places -Dsym is mentioned, and add the -s flag to the synopsis. unifdef.1 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) --------------------------------------------------- 2002-04-26 19:20:34 +0000 Tony Finch update document date and one-line description unifdef.1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-04-26 19:15:55 +0000 Tony Finch add $dotat$ unifdef.1 | 1 + 1 file changed, 1 insertion(+) --------------------------------------------------- 2002-04-26 19:15:14 +0000 Tony Finch add my name to the copyright section unifdef.1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --------------------------------------------------- 2002-04-26 19:14:35 +0000 Tony Finch add unifdef manual page from FreeBSD unifdef.1 | 173 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) --------------------------------------------------- 2002-04-26 19:12:22 +0000 Tony Finch Add a new option for printing a list of the symbols found in #if expressions. unifdef.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-04-26 19:03:48 +0000 Tony Finch option variables in alphabetical order unifdef.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-04-26 19:02:45 +0000 Tony Finch parse options in alphabetical order unifdef.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --------------------------------------------------- 2002-04-26 18:56:55 +0000 Tony Finch fix some h0h0 formatting unifdef.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) --------------------------------------------------- 2002-04-26 18:51:19 +0000 Tony Finch Fix the handling of #elif. unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-26 18:13:43 +0000 Tony Finch put my name in the copyright section unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-26 17:42:31 +0000 Tony Finch 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 file changed, 72 insertions(+), 69 deletions(-) --------------------------------------------------- 2002-04-26 17:33:47 +0000 Tony Finch use enums where appropriate unifdef.c | 64 +++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 36 insertions(+), 28 deletions(-) --------------------------------------------------- 2002-04-26 17:25:50 +0000 Tony Finch blank lines after functions unifdef.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-04-26 17:23:57 +0000 Tony Finch const correctness unifdef.c | 110 ++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 53 insertions(+), 57 deletions(-) --------------------------------------------------- 2002-04-26 17:05:23 +0000 Tony Finch more bool correctness unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-26 17:02:17 +0000 Tony Finch Since MAXSYMS is bigger than CHAR_MAX, nsyms has to be an int. unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-26 17:01:38 +0000 Tony Finch ANSI function definitions unifdef.c | 62 +++++++++++++++++++------------------------------------------- 1 file changed, 19 insertions(+), 43 deletions(-) --------------------------------------------------- 2002-04-26 16:56:34 +0000 Tony Finch Replace the homegrown Bool/YES/NO with stdbool.h things, and ensure that boolean variables are declared consistently. unifdef.c | 110 ++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 53 insertions(+), 57 deletions(-) --------------------------------------------------- 2002-04-26 16:49:11 +0000 Tony Finch Add __FBSDID and conditionalize the __RCSIDs unifdef.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) --------------------------------------------------- 2002-04-26 16:47:53 +0000 Tony Finch add some debugging code unifdef.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-26 15:47:04 +0000 Tony Finch fix the line number reporting in the last change unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-26 15:38:59 +0000 Tony Finch Improve error reporting -- include the start line of the current #if. unifdef.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) --------------------------------------------------- 2002-04-26 15:34:44 +0000 Tony Finch Remove some slight punning between comment types and booleans. unifdef.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) --------------------------------------------------- 2002-04-26 15:06:30 +0000 Tony Finch Avoid reparsing the line that causes doif() to return to doif_1(). unifdef.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) --------------------------------------------------- 2002-04-26 13:54:16 +0000 Tony Finch put the newline on the #endif that replaces #elif lines unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-26 13:51:41 +0000 Tony Finch Finish implementation of #elif and nesting. This version passes some initial tests. unifdef.c | 133 ++++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 94 insertions(+), 39 deletions(-) --------------------------------------------------- 2002-04-25 23:46:55 +0000 Tony Finch partial implementation of #elif and properly nesting #ifs. unifdef.c | 216 +++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 130 insertions(+), 86 deletions(-) --------------------------------------------------- 2002-04-25 23:27:40 +0000 Tony Finch remove redundant stline variable unifdef.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) --------------------------------------------------- 2002-04-25 23:25:31 +0000 Tony Finch simplify error line number handling unifdef.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) --------------------------------------------------- 2002-04-25 23:02:51 +0000 Tony Finch simplify error handling unifdef.c | 59 +++++++++++++++++++++-------------------------------------- 1 file changed, 21 insertions(+), 38 deletions(-) --------------------------------------------------- 2002-04-25 21:44:51 +0000 Tony Finch fix a comment to reflect the previous change unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-25 21:43:07 +0000 Tony Finch Change the "unknown symbol" return value from findsym() from -1 to 0. unifdef.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) --------------------------------------------------- 2002-04-25 21:19:55 +0000 Tony Finch remove an unnecessary variable inside doif() unifdef.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) --------------------------------------------------- 2002-04-25 20:24:16 +0000 Tony Finch Remove the inif argument to doif() entirely, since inif == (depth != 0). unifdef.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) --------------------------------------------------- 2002-04-25 20:20:05 +0000 Tony Finch 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 file changed, 21 insertions(+), 27 deletions(-) --------------------------------------------------- 2002-04-25 19:59:46 +0000 Tony Finch 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 file changed, 7 insertions(+), 12 deletions(-) --------------------------------------------------- 2002-04-25 18:45:54 +0000 Tony Finch purge LT_OTHER since it's a synonym for LT_IF unifdef.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) --------------------------------------------------- 2002-04-25 18:17:09 +0000 Tony Finch 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 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-25 18:15:23 +0000 Tony Finch use __RCSID for the sccs id and remove redundant #ifndef lint lines unifdef.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) --------------------------------------------------- 2002-04-25 18:10:00 +0000 Tony Finch 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 file changed, 145 insertions(+), 10 deletions(-) --------------------------------------------------- 2002-04-25 16:16:26 +0000 Tony Finch allow whitespace before # unifdef.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-25 16:12:23 +0000 Tony Finch fix location of a { unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-25 16:11:54 +0000 Tony Finch add a function that will evaluate if expressions unifdef.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-25 16:05:30 +0000 Tony Finch remove spurious fflush() unifdef.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) --------------------------------------------------- 2002-04-25 16:04:55 +0000 Tony Finch style: #include ordering; variable alignment unifdef.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) --------------------------------------------------- 2002-04-25 16:03:16 +0000 Tony Finch use err() unifdef.c | 83 ++++++++++++++++++++++++++------------------------------------- 1 file changed, 34 insertions(+), 49 deletions(-) --------------------------------------------------- 2002-04-25 15:51:42 +0000 Tony Finch another formatting improvement unifdef.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) --------------------------------------------------- 2002-04-25 15:37:25 +0000 Tony Finch sensible else if formatting unifdef.c | 150 ++++++++++++++++++++++++++++---------------------------------- 1 file changed, 67 insertions(+), 83 deletions(-) --------------------------------------------------- 2002-04-25 15:31:28 +0000 Tony Finch deal with -Dsym=value unifdef.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) --------------------------------------------------- 2002-04-25 15:02:48 +0000 Tony Finch move #endif comments to a better place unifdef.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) --------------------------------------------------- 2002-04-25 14:59:59 +0000 Tony Finch allow a reasonable number of symbols unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --------------------------------------------------- 2002-04-25 14:57:56 +0000 Tony Finch remove BSS cruft unifdef.c | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) --------------------------------------------------- 2002-04-25 14:55:27 +0000 Tony Finch remove __P unifdef.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) --------------------------------------------------- 2002-04-25 14:52:54 +0000 Tony Finch revert to the CSRG copyright/sccs rubric and add $dotat$ unifdef.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) --------------------------------------------------- 2002-04-25 14:50:23 +0000 Tony Finch import from NetBSD unifdef.c | 684 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 684 insertions(+) --------------------------------------------------- unifdef-2.12/COPYING0000644003162300316230000001026613621550713012677 0ustar fanf2fanf2unifdef copyright licence ------------------------- All files in this package are distributed under the two-clause BSD copyright licence, except for the manual page unifdef.1 and the portability support code in the FreeBSD subdirectory, which all have a three-clause BSD copyright licence. Unifdef 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.c carried the four-clause BSD copyright licence. None of its code remains in this version (though some of the names remain) so it now carries the more liberal two-clause licence. Unless otherwise stated, the files in this package are: Copyright (c) 2002 - 2020 Tony Finch unifdefall.sh is: Copyright (c) 2002 - 2013 Tony Finch Copyright (c) 2009 - 2010 Jonathan Nieder Some files in the tests directory are: Copyright 2004, 2008 Bob Proulx The two-clause BSD copyright licence applying to all the above files is: 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. The three-clause BSD copyright licence for the manual page unifdef.1 and the portability support code from FreeBSD is below. The fourth advertising clause that used to appear between clauses 2 and 3 was rescinded by the University of California Berkeley in 1999. ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change Copyright (c) 1985 - 1994 The Regents of the University of California. All rights reserved. Copyright (c) 2002 - 2012 Tony Finch . All rights reserved. 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. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. - end - unifdef-2.12/README0000644003162300316230000000310213621550713012513 0ustar fanf2fanf2unifdef - selectively remove C preprocessor conditionals Written by Tony Finch - http://dotat.at/prog/unifdef/ The unifdef utility selectively processes conditional C preprocessor #if and #ifdef directives. It removes from a file both the directives and the additional text that they delimit, while otherwise leaving the file alone. Please see the INSTALL file for installation instructions. Pre-formatted documentation can be found in unifdef.txt You can download the latest release tar and zip files from: http://dotat.at/prog/unifdef You can clone the development repository using: git clone http://dotat.at/git/unifdef.git I also maintain a copy at http://github.com/fanf2/unifdef (Warning: GitHub's zip download is incomplete and unusable.) Please send bug reports and patches to me via email to the address above. Unless you state otherwise, I will assume that any contributions are under the two-clause BSD licence. See the COPYING file for details. Thanks to the following people for their contributions: Bob Proulx - test suite Jonathan Nieder - bug fixes, improved unifdefall Anders H Kaseorg - bug fixes and other improvements Ruediger Meier - build and portability cleanups Ben Hutchings at Solarflare Communications - lenient evaluation of && and || Steve Underwood - read #define and #undef directives from a file Brian Ginsbach - improved expression evaluator Other contributions are listed in the Changelog. - end - unifdef-2.12/tests/0000755003162300316230000000000013621550714013002 5ustar fanf2fanf2unifdef-2.12/tests/if5-k.sh0000644003162300316230000000002313621550714014244 0ustar fanf2fanf2unifdef -k if5-k.c unifdef-2.12/tests/if5-kDU.c0000644003162300316230000000177113621550714014320 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if 0 /* This code is commented out. "#if 0 then" */ #else /* This code is passed through. "#if 0 else" */ #endif #if 1 /* This code is passed through. "#if 1 then" */ #else /* This code is passed through. "#if 1 else" */ #endif #if FOOB == 42 int foo1() { return 0; } #else #error FOOB not 42 #endif #if FOOB != 42 #error FOO is 2 #else int foo2() { return 0; } #endif #if FOOB == 42 || FOO == 1 intx foo3() { return 0; } #else #error FOO not 1 or BAR not 1 #endif #if FOOB != 42 && FOO != 1 #error FOOB not 42 and FOO not 1 #else int foo4() { return 0; } #endif #if FOOB == 42 || FOO != 1 int foo5() { return 0; } #else #error FOOB is 42 or FOO is not 1 #endif #if FOO != 1 || FOOB != 42 #error FOO is 1 or FOOB is 42 #else int foo6() { return 0; } #endif int main() { foo1(); foo2(); foo3(); foo4(); foo5(); foo6(); } unifdef-2.12/tests/multimissing.sh0000644003162300316230000000012413621550714016057 0ustar fanf2fanf2opts="-DFOO=1 -DFOOB=42 -UBAR" files="if1.c ifmissing.c if2.c" . ./multi-generic-sh unifdef-2.12/tests/overlnnum.experr0000644003162300316230000000000013621550714016244 0ustar fanf2fanf2unifdef-2.12/tests/multinewline.exprc0000644003162300316230000000000213621550714016551 0ustar fanf2fanf21 unifdef-2.12/tests/blank3u.experr0000644003162300316230000000000013621550713015555 0ustar fanf2fanf2unifdef-2.12/tests/if1.experr0000644003162300316230000000000013621550714014676 0ustar fanf2fanf2unifdef-2.12/tests/blank4d.exprc0000644003162300316230000000000213621550713015353 0ustar fanf2fanf21 unifdef-2.12/tests/if3-kDU.sh0000644003162300316230000000005513621550714014500 0ustar fanf2fanf2unifdef -k -DFOO=1 -DFOOB=42 -UBAR if3-kDU.c unifdef-2.12/tests/if6b.experr0000644003162300316230000000000013621550714015045 0ustar fanf2fanf2unifdef-2.12/tests/if1-a.exprc0000644003162300316230000000000213621550714014732 0ustar fanf2fanf21 unifdef-2.12/tests/defundef-funlike.experr0000644003162300316230000000000013621550713017431 0ustar fanf2fanf2unifdef-2.12/tests/if4.c0000644003162300316230000000120313621550714013624 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if defined(FOO) || defined(FOOB) int foo1() { return 0; } #else #error FOO or FOOB not defined #endif #if defined(FOOB) || defined(FOO) int foo2() { return 0; } #else #error FOO or FOOB not defined #endif #if defined(FOO) && defined(FOOB) int foo3() { return 0; } #else #error FOO and FOOB not defined #endif #if defined(FOOB) && defined(FOO) int foo4() { return 0; } #else #error FOO and FOOB not defined #endif int main() { foo1(); foo2(); foo3(); foo4(); } unifdef-2.12/tests/exitmode0a.sh0000644003162300316230000000005213621550714015372 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR -x0 if1.c unifdef-2.12/tests/debian-603860.expout0000644003162300316230000000004413621550713016233 0ustar fanf2fanf2char foo[] = "rm -rf /*"; /* baz */ unifdef-2.12/tests/blank4u.exprc0000644003162300316230000000000213621550713015374 0ustar fanf2fanf21 unifdef-2.12/tests/if7.expout0000644003162300316230000000110413621550714014731 0ustar fanf2fanf2/* Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo1() { return 0; } int foo2() { return 0; } int foo3() { return 0; } int foo4() { return 0; } int foo5() { return 0; } int foo6() { return 0; } int foo7() { return 0; } int foo8() { return 0; } int foo9() { return 0; } int foo10() { return 0; } int foo11() { return 0; } int foo12() { return 0; } int main() { foo1(); foo2(); foo3(); foo4(); foo5(); foo6(); foo7(); foo8(); foo9(); foo10(); foo11(); foo12(); } unifdef-2.12/tests/if4-k.sh0000644003162300316230000000002313621550714014243 0ustar fanf2fanf2unifdef -k if4-k.c unifdef-2.12/tests/empty.expout0000644003162300316230000000000013621550714015374 0ustar fanf2fanf2unifdef-2.12/tests/if2-a.experr0000644003162300316230000000000013621550714015115 0ustar fanf2fanf2unifdef-2.12/tests/blank0u.expout0000644003162300316230000000015113621550713015600 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif unifdef-2.12/tests/multi.sh0000644003162300316230000000011013621550714014460 0ustar fanf2fanf2opts="-DFOO=1 -DFOOB=42 -UBAR" files="if1.c if2.c" . ./multi-generic-sh unifdef-2.12/tests/defundef-broken2.expout0000644003162300316230000000000013621550713017355 0ustar fanf2fanf2unifdef-2.12/tests/outeperm.expout0000644003162300316230000000000013621550714016076 0ustar fanf2fanf2unifdef-2.12/tests/blank0d.c0000644003162300316230000000020113621550713014451 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/if5-k.experr0000644003162300316230000000000013621550714015132 0ustar fanf2fanf2unifdef-2.12/tests/blank3d.expout0000644003162300316230000000015613621550713015567 0ustar fanf2fanf2#ifdef FOO4 four #endif three #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/blank2u.exprc0000644003162300316230000000000213621550713015372 0ustar fanf2fanf21 unifdef-2.12/tests/recursive.sh0000644003162300316230000000007113621550714015343 0ustar fanf2fanf2unifdef -d -DFOO=BAR -DBAR=ZIG -DZIG=BAR -DQUX=QUX if1.c unifdef-2.12/tests/blank0d.expout0000644003162300316230000000015613621550713015564 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif zero unifdef-2.12/tests/crlf.c0000644003162300316230000000033213621550713014071 0ustar fanf2fanf2#if F1 int f1() { return 0; } #elif F2 int f2() { return 0; } #elif F3 int f3() { return 0; } #elif F4 int f4() { return 0; } #else int f() { return 0; } #endif \/ /\ comment /\ *\ comment *\ /\ eof unifdef-2.12/tests/if3.expout0000644003162300316230000000033313621550714014730 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int main() { foo(); } unifdef-2.12/tests/multinewline.expout0000644003162300316230000000105013621550714016760 0ustar fanf2fanf2--- mcrlf.c~ +++ mcrlf.c @@ -1,14 +1,4 @@ -#if F1 int f1() { return 0; } -#elif F2 -int f2() { return 0; } -#elif F3 -int f3() { return 0; } -#elif F4 -int f4() { return 0; } -#else -int f() { return 0; } -#endif \/ /\ comment --- mif1.c~ +++ mif1.c @@ -5,18 +5,12 @@ #include #include -#if FOO int foo() { return 0; } -#else -#error FOO not defined -#endif #if BAR int foo() { return 0; } -#elif FOO -int bar() { return 0; } #else -#error FOO not defined +int bar() { return 0; } #endif int main() unifdef-2.12/tests/exitmode0b.exprc0000644003162300316230000000000213621550714016075 0ustar fanf2fanf20 unifdef-2.12/tests/if5.expout0000644003162300316230000000104313621550714014731 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo1() { return 0; } int foo2() { return 0; } int foo3() { return 0; } int foo4() { return 0; } int foo5() { return 0; } int foo6() { return 0; } int foo7() { return 0; } int foo8() { return 0; } int foo9() { return 0; } int foo10() { return 0; } int main() { foo1(); foo2(); foo3(); foo4(); foo5(); foo6(); foo7(); foo8(); foo9(); foo10(); } unifdef-2.12/tests/blank4u.expout0000644003162300316230000000014513621550713015607 0ustar fanf2fanf2#ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/if5-kDU.experr0000644003162300316230000000000013621550714015363 0ustar fanf2fanf2unifdef-2.12/tests/blank0d.sh0000644003162300316230000000003413621550713014645 0ustar fanf2fanf2unifdef -B -DFOO0 blank0d.c unifdef-2.12/tests/defundef-broken3.exprc0000644003162300316230000000000213621550713017155 0ustar fanf2fanf22 unifdef-2.12/tests/if1a.experr0000644003162300316230000000000013621550714015037 0ustar fanf2fanf2unifdef-2.12/tests/if2-kDU.experr0000644003162300316230000000000013621550714015360 0ustar fanf2fanf2unifdef-2.12/tests/overenoent.exprc0000644003162300316230000000000213621550714016221 0ustar fanf2fanf22 unifdef-2.12/tests/000-init.exprc0000644003162300316230000000000213621550713015274 0ustar fanf2fanf20 unifdef-2.12/tests/blank3d.sh0000644003162300316230000000003413621550713014650 0ustar fanf2fanf2unifdef -B -DFOO3 blank3d.c unifdef-2.12/tests/if4-kDU.c0000644003162300316230000000156013621550714014313 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if 0 /* This code is commented out. "#if 0 then" */ #else /* This code is passed through. "#if 0 else" */ #endif #if 1 /* This code is passed through. "#if 1 then" */ #else /* This code is passed through. "#if 1 else" */ #endif #if defined(FOO) || defined(FOOB) int foo1() { return 0; } #else #error FOO or FOOB not defined #endif #if defined(FOOB) || defined(FOO) int foo2() { return 0; } #else #error FOO or FOOB not defined #endif #if defined(FOO) && defined(FOOB) int foo3() { return 0; } #else #error FOO and FOOB not defined #endif #if defined(FOOB) && defined(FOO) int foo4() { return 0; } #else #error FOO and FOOB not defined #endif int main() { foo1(); foo2(); foo3(); foo4(); } unifdef-2.12/tests/if5.sh0000644003162300316230000000004613621550714014021 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR if5.c unifdef-2.12/tests/blank1u.c0000644003162300316230000000020113621550713014473 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/blank1d.experr0000644003162300316230000000000013621550713015532 0ustar fanf2fanf2unifdef-2.12/tests/if2-kDU.exprc0000644003162300316230000000000213621550714015176 0ustar fanf2fanf21 unifdef-2.12/tests/NetBSD-47068.sh0000644003162300316230000000003513621550713015100 0ustar fanf2fanf2unifdef -Ubar NetBSD-47068.c unifdef-2.12/tests/exitmode0b.experr0000644003162300316230000000000013621550714016257 0ustar fanf2fanf2unifdef-2.12/tests/overperms.sh0000644003162300316230000000042213621550714015356 0ustar fanf2fanf2cp if1.c outfile.c chmod 640 outfile.c ls -l outfile.c | cut -d' ' -f1 1>&2 unifdef -DFOO=1 -DFOOB=42 -UBAR -m outfile.c e=$? case ${BUILD_MINGW} in (yes) printf '%s\n' '-rw-r-----' 1>&2 ;; (*) ls -l outfile.c | cut -d' ' -f1 1>&2 ;; esac cat outfile.c rm outfile.c exit $e unifdef-2.12/tests/if1.h0000644003162300316230000000005113621550714013626 0ustar fanf2fanf2#define FOO 1 #define FOOB 42 #undef BAR unifdef-2.12/tests/if6c.sh0000644003162300316230000000002313621550714014160 0ustar fanf2fanf2unifdef -DF3 if6.c unifdef-2.12/tests/overlnnum.expout0000644003162300316230000000053013621550714016273 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #line 9 "overwrite.c" int foo() { return 0; } #line 13 "overwrite.c" #line 17 "overwrite.c" int bar() { return 0; } #line 21 "overwrite.c" int main() { foo(); bar(); } unifdef-2.12/tests/if2-kDU.sh0000644003162300316230000000005513621550714014477 0ustar fanf2fanf2unifdef -k -DFOO=1 -DFOOB=42 -UBAR if2-kDU.c unifdef-2.12/tests/outperms.experr0000644003162300316230000000001313621550714016101 0ustar fanf2fanf2-rw-r----- unifdef-2.12/tests/exitmode2b.expout0000644003162300316230000000056713621550714016322 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if FOO int foo() { return 0; } #else #error FOO not defined #endif #if BAR int foo() { return 0; } #elif FOO int bar() { return 0; } #else #error FOO not defined #endif int main() { foo(); bar(); } unifdef-2.12/tests/blank2d.experr0000644003162300316230000000000013621550713015533 0ustar fanf2fanf2unifdef-2.12/tests/exitmode1a.experr0000644003162300316230000000000013621550714016257 0ustar fanf2fanf2unifdef-2.12/tests/outfile.sh0000644003162300316230000000013213621550714015001 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR -ooutfile.c if1.c e=$? cat outfile.c rm outfile.c exit $e unifdef-2.12/tests/if6b.expout0000644003162300316230000000010213621550714015067 0ustar fanf2fanf2#if F1 int f1() { return 0; } #else int f2() { return 0; } #endif unifdef-2.12/tests/overunchanged.sh0000644003162300316230000000043713621550714016172 0ustar fanf2fanf2cp if1.c overunchanged.c ls -i overunchanged.c >overunchanged-before unifdef -DWEASEL=1 -ooverunchanged.c overunchanged.c e=$? ls -i overunchanged.c >overunchanged-after diff overunchanged-before overunchanged-after rm -f overunchanged-before overunchanged-after overunchanged.c exit $e unifdef-2.12/tests/multi.expout0000644003162300316230000000072213621550714015403 0ustar fanf2fanf2--- mif1.c~ +++ mif1.c @@ -5,19 +5,9 @@ #include #include -#if FOO int foo() { return 0; } -#else -#error FOO not defined -#endif -#if BAR -int foo() { return 0; } -#elif FOO int bar() { return 0; } -#else -#error FOO not defined -#endif int main() { --- mif2.c~ +++ mif2.c @@ -5,11 +5,7 @@ #include #include -#if defined(FOO) int foo() { return 0; } -#else -#error FOO not defined -#endif int main() { unifdef-2.12/tests/blank4d.expout0000644003162300316230000000015613621550713015570 0ustar fanf2fanf2four #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/if6a.experr0000644003162300316230000000000013621550714015044 0ustar fanf2fanf2unifdef-2.12/tests/if4-k.exprc0000644003162300316230000000000213621550714014747 0ustar fanf2fanf21 unifdef-2.12/tests/if1-k.expout0000644003162300316230000000073713621550714015166 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include /* This code is passed through. "#if 0 else" */ /* This code is passed through. "#if 1 then" */ #if FOO int foo() { return 0; } #else #error FOO not defined #endif #if BAR int foo() { return 0; } #elif FOO int bar() { return 0; } #else #error FOO not defined #endif int main() { foo(); bar(); } unifdef-2.12/tests/overunchanged.expout0000644003162300316230000000000013621550714017066 0ustar fanf2fanf2unifdef-2.12/tests/overperms.expout0000644003162300316230000000037513621550714016277 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/exitstat.c0000644003162300316230000000003413621550714015010 0ustar fanf2fanf2#if FALSE #elif TRUE #endif unifdef-2.12/tests/if1-a.sh0000644003162300316230000000005413621550714014232 0ustar fanf2fanf2unifdefall.sh -DFOO=1 -DFOOB=42 -UBAR if1.c unifdef-2.12/tests/if4-kDU.exprc0000644003162300316230000000000213621550714015200 0ustar fanf2fanf21 unifdef-2.12/tests/crlf-b.expout0000644003162300316230000000016513621550713015416 0ustar fanf2fanf2#if F1 int f1() { return 0; } #else int f2() { return 0; } #endif \/ /\ comment /\ *\ comment *\ /\ eof unifdef-2.12/tests/if1a.exprc0000644003162300316230000000000213621550714014655 0ustar fanf2fanf21 unifdef-2.12/tests/if5-kDU.expout0000644003162300316230000000077213621550714015422 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include /* This code is passed through. "#if 0 else" */ /* This code is passed through. "#if 1 then" */ int foo1() { return 0; } int foo2() { return 0; } intx foo3() { return 0; } int foo4() { return 0; } int foo5() { return 0; } int foo6() { return 0; } int main() { foo1(); foo2(); foo3(); foo4(); foo5(); foo6(); } unifdef-2.12/tests/overlnnum.exprc0000644003162300316230000000000213621550714016062 0ustar fanf2fanf21 unifdef-2.12/tests/small1.c0000644003162300316230000000041213621550714014334 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #ifdef FOO int foo() { return 0; } #else #error FOO not defined #endif int main() { foo(); } unifdef-2.12/tests/exitmode2a.exprc0000644003162300316230000000000213621550714016076 0ustar fanf2fanf20 unifdef-2.12/tests/spaces4.expout0000644003162300316230000000033613621550714015614 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ # include # include int foo() { return 0; } int main() { foo(); } unifdef-2.12/tests/args2.expout0000644003162300316230000000005213621550713015262 0ustar fanf2fanf2#if defined(FOO) || BAR(arg) hello #endif unifdef-2.12/tests/blank4d.experr0000644003162300316230000000000013621550713015535 0ustar fanf2fanf2unifdef-2.12/tests/if2.expout0000644003162300316230000000033313621550714014727 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int main() { foo(); } unifdef-2.12/tests/exitmode0b.expout0000644003162300316230000000056713621550714016320 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if FOO int foo() { return 0; } #else #error FOO not defined #endif #if BAR int foo() { return 0; } #elif FOO int bar() { return 0; } #else #error FOO not defined #endif int main() { foo(); bar(); } unifdef-2.12/tests/if4-kDU.expout0000644003162300316230000000066113621550714015416 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include /* This code is passed through. "#if 0 else" */ /* This code is passed through. "#if 1 then" */ int foo1() { return 0; } int foo2() { return 0; } int foo3() { return 0; } int foo4() { return 0; } int main() { foo1(); foo2(); foo3(); foo4(); } unifdef-2.12/tests/exitmode1b.exprc0000644003162300316230000000000213621550714016076 0ustar fanf2fanf21 unifdef-2.12/tests/div.experr0000644003162300316230000000000013621550714015001 0ustar fanf2fanf2unifdef-2.12/tests/blank1d.c0000644003162300316230000000020113621550713014452 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/blank0d.exprc0000644003162300316230000000000213621550713015347 0ustar fanf2fanf21 unifdef-2.12/tests/if1-k.sh0000644003162300316230000000002313621550714014240 0ustar fanf2fanf2unifdef -k if1-k.c unifdef-2.12/tests/blank2d.sh0000644003162300316230000000003413621550713014647 0ustar fanf2fanf2unifdef -B -DFOO2 blank2d.c unifdef-2.12/tests/none.expout0000644003162300316230000000023213621550714015204 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ int foo() { return 0; } unifdef-2.12/tests/if6c.experr0000644003162300316230000000000013621550714015046 0ustar fanf2fanf2unifdef-2.12/tests/crlf-d.expout0000644003162300316230000000027113621550713015416 0ustar fanf2fanf2#if F1 int f1() { return 0; } #elif F2 int f2() { return 0; } #elif F3 int f3() { return 0; } #else int f4() { return 0; } #endif \/ /\ comment /\ *\ comment *\ /\ eof unifdef-2.12/tests/spaces3.exprc0000644003162300316230000000000213621550714015376 0ustar fanf2fanf21 unifdef-2.12/tests/if1.exprc0000644003162300316230000000000213621550714014514 0ustar fanf2fanf21 unifdef-2.12/tests/xterm.sh0000644003162300316230000000140613621550714014476 0ustar fanf2fanf2# hacks so we don't have to distribute huge chunks of XTerm if [ ! -f xterm-really ] then cat xterm.expout cat xterm.experr 1>&2 exit $(cat xterm.exprc) fi if [ -f xterm-clean ] then rm xterm.tar.gz xterm-defs.h xterm-main.c fi if [ ! -f xterm.tar.gz ] then wget -q http://invisible-island.net/datafiles/release/xterm.tar.gz fi if [ ! -f xterm-main.c ] then tar xf xterm.tar.gz cd xterm-[0-9][0-9][0-9] gcc -I/usr/X11R6/include -I. -E -dM \ main.c > ../xterm-defs.h cat main.c > ../xterm-main.c cd .. rm -r xterm-[0-9][0-9][0-9] fi unifdef -s xterm-main.c | sed 's/^/#undef /' >xterm-undefs.h echo $? 1>&2 unifdef -f xterm-undefs.h -f xterm-defs.h xterm-main.c >xterm-out.c echo $? 1>&2 grep '#' xterm-out.c echo $? 1>&2 rm -f xterm-undefs.h xterm-out.c unifdef-2.12/tests/empty.c0000644003162300316230000000000013621550714014272 0ustar fanf2fanf2unifdef-2.12/tests/blank0u.experr0000644003162300316230000000000013621550713015552 0ustar fanf2fanf2unifdef-2.12/tests/if6b.sh0000644003162300316230000000002313621550714014157 0ustar fanf2fanf2unifdef -DF2 if6.c unifdef-2.12/tests/if1-f.experr0000644003162300316230000000000013621550714015121 0ustar fanf2fanf2unifdef-2.12/tests/spaces1.exprc0000644003162300316230000000000213621550714015374 0ustar fanf2fanf21 unifdef-2.12/tests/if1-a.expout0000644003162300316230000000037513621550714015152 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/if6b.exprc0000644003162300316230000000000213621550714014663 0ustar fanf2fanf21 unifdef-2.12/tests/if3-kDU.expout0000644003162300316230000000050313621550714015410 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include /* This code is passed through. "#if 0 else" */ /* This code is passed through. "#if 1 then" */ int foo() { return 0; } int main() { foo(); } unifdef-2.12/tests/exitmode1b.experr0000644003162300316230000000000013621550714016260 0ustar fanf2fanf2unifdef-2.12/tests/if5-k.c0000644003162300316230000000177113621550714014067 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if 0 /* This code is commented out. "#if 0 then" */ #else /* This code is passed through. "#if 0 else" */ #endif #if 1 /* This code is passed through. "#if 1 then" */ #else /* This code is passed through. "#if 1 else" */ #endif #if FOOB == 42 int foo1() { return 0; } #else #error FOOB not 42 #endif #if FOOB != 42 #error FOO is 2 #else int foo2() { return 0; } #endif #if FOOB == 42 || FOO == 1 intx foo3() { return 0; } #else #error FOO not 1 or BAR not 1 #endif #if FOOB != 42 && FOO != 1 #error FOOB not 42 and FOO not 1 #else int foo4() { return 0; } #endif #if FOOB == 42 || FOO != 1 int foo5() { return 0; } #else #error FOOB is 42 or FOO is not 1 #endif #if FOO != 1 || FOOB != 42 #error FOO is 1 or FOOB is 42 #else int foo6() { return 0; } #endif int main() { foo1(); foo2(); foo3(); foo4(); foo5(); foo6(); } unifdef-2.12/tests/small2.expout0000644003162300316230000000033313621550714015441 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int bar() { return 0; } int main() { bar(); } unifdef-2.12/tests/defundef-broken3.experr0000644003162300316230000000012513621550713017347 0ustar fanf2fanf2unifdef: broken3.h: 1: Missing macro name in #undef unifdef: Output may be truncated unifdef-2.12/tests/if4.experr0000644003162300316230000000000013621550714014701 0ustar fanf2fanf2unifdef-2.12/tests/blank1d.sh0000644003162300316230000000003413621550713014646 0ustar fanf2fanf2unifdef -B -DFOO1 blank1d.c unifdef-2.12/tests/exitmode2b.exprc0000644003162300316230000000000213621550714016077 0ustar fanf2fanf20 unifdef-2.12/tests/blank1u.sh0000644003162300316230000000003413621550713014667 0ustar fanf2fanf2unifdef -B -UFOO1 blank1u.c unifdef-2.12/tests/if4-a.exprc0000644003162300316230000000000213621550714014735 0ustar fanf2fanf21 unifdef-2.12/tests/crlf-c.experr0000644003162300316230000000000013621550713015364 0ustar fanf2fanf2unifdef-2.12/tests/blank2u.expout0000644003162300316230000000015013621550713015601 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/if1a.expout0000644003162300316230000000052713621550714015074 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if FOO int foo() { return 0; } #else #error FOO not defined #endif #if FOO int bar() { return 0; } #else #error FOO not defined #endif int main() { foo(); bar(); } unifdef-2.12/tests/NetBSD-47068.expout0000644003162300316230000000002213621550713016006 0ustar fanf2fanf2#ifdef foo #endif unifdef-2.12/tests/blank3d.experr0000644003162300316230000000000013621550713015534 0ustar fanf2fanf2unifdef-2.12/tests/if3-k.exprc0000644003162300316230000000000213621550714014746 0ustar fanf2fanf21 unifdef-2.12/tests/args2.exprc0000644003162300316230000000000213621550713015052 0ustar fanf2fanf20 unifdef-2.12/tests/if2-a.sh0000644003162300316230000000005413621550714014233 0ustar fanf2fanf2unifdefall.sh -DFOO=1 -DFOOB=42 -UBAR if2.c unifdef-2.12/tests/indirect.expout0000644003162300316230000000037513621550714016056 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/overenoent.expout0000644003162300316230000000000013621550714016422 0ustar fanf2fanf2unifdef-2.12/tests/if7.sh0000644003162300316230000000004613621550714014023 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR if7.c unifdef-2.12/tests/args1.sh0000644003162300316230000000005013621550713014345 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR args1.c unifdef-2.12/tests/empty.experr0000644003162300316230000000000013621550714015355 0ustar fanf2fanf2unifdef-2.12/tests/if6.c0000644003162300316230000000024113621550714013627 0ustar fanf2fanf2#if F1 int f1() { return 0; } #elif F2 int f2() { return 0; } #elif F3 int f3() { return 0; } #elif F4 int f4() { return 0; } #else int f() { return 0; } #endif unifdef-2.12/tests/outeperm.exprc0000644003162300316230000000000213621550714015675 0ustar fanf2fanf22 unifdef-2.12/tests/exitmode1b.expout0000644003162300316230000000056713621550714016321 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if FOO int foo() { return 0; } #else #error FOO not defined #endif #if BAR int foo() { return 0; } #elif FOO int bar() { return 0; } #else #error FOO not defined #endif int main() { foo(); bar(); } unifdef-2.12/tests/if2-a.exprc0000644003162300316230000000000213621550714014733 0ustar fanf2fanf21 unifdef-2.12/tests/if2-a.expout0000644003162300316230000000033313621550714015145 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int main() { foo(); } unifdef-2.12/tests/debian-603860.experr0000644003162300316230000000000013621550713016204 0ustar fanf2fanf2unifdef-2.12/tests/if4-a.experr0000644003162300316230000000000013621550714015117 0ustar fanf2fanf2unifdef-2.12/tests/if4-k.expout0000644003162300316230000000135313621550714015164 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include /* This code is passed through. "#if 0 else" */ /* This code is passed through. "#if 1 then" */ #if defined(FOO) || defined(FOOB) int foo1() { return 0; } #else #error FOO or FOOB not defined #endif #if defined(FOOB) || defined(FOO) int foo2() { return 0; } #else #error FOO or FOOB not defined #endif #if defined(FOO) && defined(FOOB) int foo3() { return 0; } #else #error FOO and FOOB not defined #endif #if defined(FOOB) && defined(FOO) int foo4() { return 0; } #else #error FOO and FOOB not defined #endif int main() { foo1(); foo2(); foo3(); foo4(); } unifdef-2.12/tests/debian-603860.exprc0000644003162300316230000000000213621550713016022 0ustar fanf2fanf21 unifdef-2.12/tests/dangle.expout0000644003162300316230000000012213621550713015474 0ustar fanf2fanf2#ifdef FIRST wombats #endif /* com mmm mmmm ment */ unifdef-2.12/tests/if1-f.sh0000644003162300316230000000002713621550714014237 0ustar fanf2fanf2unifdef -f if1.h if1.c unifdef-2.12/tests/broken3.h0000644003162300316230000000002413621550713014511 0ustar fanf2fanf2#undef &%^$&%$##@^$ unifdef-2.12/tests/if5-a.expout0000644003162300316230000000104313621550714015147 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo1() { return 0; } int foo2() { return 0; } int foo3() { return 0; } int foo4() { return 0; } int foo5() { return 0; } int foo6() { return 0; } int foo7() { return 0; } int foo8() { return 0; } int foo9() { return 0; } int foo10() { return 0; } int main() { foo1(); foo2(); foo3(); foo4(); foo5(); foo6(); foo7(); foo8(); foo9(); foo10(); } unifdef-2.12/tests/multimissing.expout0000644003162300316230000000043413621550714016775 0ustar fanf2fanf2--- mif1.c~ +++ mif1.c @@ -5,19 +5,9 @@ #include #include -#if FOO int foo() { return 0; } -#else -#error FOO not defined -#endif -#if BAR -int foo() { return 0; } -#elif FOO int bar() { return 0; } -#else -#error FOO not defined -#endif int main() { unifdef-2.12/tests/exitmode1a.expout0000644003162300316230000000037513621550714016315 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/spaces1.experr0000644003162300316230000000000013621550714015556 0ustar fanf2fanf2unifdef-2.12/tests/debian-603860.c0000644003162300316230000000012613621550713015132 0ustar fanf2fanf2#ifdef FOO int a; #endif char foo[] = "rm -rf /*"; #ifdef FOO int b; #endif /* baz */ unifdef-2.12/tests/if5-kDU.sh0000644003162300316230000000005513621550714014502 0ustar fanf2fanf2unifdef -k -DFOO=1 -DFOOB=42 -UBAR if5-kDU.c unifdef-2.12/tests/if5-k.exprc0000644003162300316230000000000213621550714014750 0ustar fanf2fanf21 unifdef-2.12/tests/if1-a.experr0000644003162300316230000000000013621550714015114 0ustar fanf2fanf2unifdef-2.12/tests/args1.exprc0000644003162300316230000000000213621550713015051 0ustar fanf2fanf21 unifdef-2.12/tests/if2-k.sh0000644003162300316230000000002313621550714014241 0ustar fanf2fanf2unifdef -k if2-k.c unifdef-2.12/tests/args2.c0000644003162300316230000000005213621550713014160 0ustar fanf2fanf2#if defined(FOO) || BAR(arg) hello #endif unifdef-2.12/tests/blank1d.exprc0000644003162300316230000000000213621550713015350 0ustar fanf2fanf21 unifdef-2.12/tests/blank2u.c0000644003162300316230000000020113621550713014474 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/outfile.expout0000644003162300316230000000037513621550714015724 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/NetBSD-47068.exprc0000644003162300316230000000000213621550713015601 0ustar fanf2fanf20 unifdef-2.12/tests/crlf-d.exprc0000644003162300316230000000000213621550713015203 0ustar fanf2fanf21 unifdef-2.12/tests/if6a.expout0000644003162300316230000000002713621550714015074 0ustar fanf2fanf2int f1() { return 0; } unifdef-2.12/tests/blank3d.exprc0000644003162300316230000000000213621550713015352 0ustar fanf2fanf21 unifdef-2.12/tests/exitstat.sh0000644003162300316230000000003413621550714015200 0ustar fanf2fanf2unifdef -DTRUE=1 exitstat.c unifdef-2.12/tests/if7.experr0000644003162300316230000000000013621550714014704 0ustar fanf2fanf2unifdef-2.12/tests/defundef-broken3.expout0000644003162300316230000000000013621550713017356 0ustar fanf2fanf2unifdef-2.12/tests/exitmode0b.sh0000644003162300316230000000002213621550714015370 0ustar fanf2fanf2unifdef -x0 if1.c unifdef-2.12/tests/indirect.exprc0000644003162300316230000000000213621550714015636 0ustar fanf2fanf21 unifdef-2.12/tests/overdir.sh0000644003162300316230000000025313621550714015010 0ustar fanf2fanf2mkdir -p overdir cp if1.c overdir/overwrite.c unifdef -DFOO=1 -DFOOB=42 -UBAR -ooverdir/overwrite.c overdir/overwrite.c e=$? cat overdir/overwrite.c rm -r overdir exit $e unifdef-2.12/tests/overunchanged.experr0000644003162300316230000000000013621550714017047 0ustar fanf2fanf2unifdef-2.12/tests/multilnnum.sh0000644003162300316230000000011313621550714015535 0ustar fanf2fanf2opts="-DFOO=1 -DFOOB=42 -UBAR -n" files="if1.c if2.c" . ./multi-generic-sh unifdef-2.12/tests/args1.expout0000644003162300316230000000000613621550713015260 0ustar fanf2fanf2hello unifdef-2.12/tests/whitespace-1.exprc0000644003162300316230000000000213621550714016327 0ustar fanf2fanf22 unifdef-2.12/tests/args1.c0000644003162300316230000000005413621550713014161 0ustar fanf2fanf2#if defined(DUMMY) || FOO(arg) hello #endif unifdef-2.12/tests/small1.expout0000644003162300316230000000033313621550714015440 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int main() { foo(); } unifdef-2.12/tests/outperms.exprc0000644003162300316230000000000213621550714015713 0ustar fanf2fanf21 unifdef-2.12/tests/outeperm.sh0000644003162300316230000000016413621550714015177 0ustar fanf2fanf2mkdir -p outdir chmod 555 outdir unifdef -DFOO=1 -DFOOB=42 -UBAR -ooutdir/outfile.c if1.c e=$? rmdir outdir exit $e unifdef-2.12/tests/overin.exprc0000644003162300316230000000000213621550714015337 0ustar fanf2fanf21 unifdef-2.12/tests/defundef-undefdef.experr0000644003162300316230000000000013621550713017554 0ustar fanf2fanf2unifdef-2.12/tests/empty.sh0000644003162300316230000000005013621550714014467 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR empty.c unifdef-2.12/tests/blank3u.c0000644003162300316230000000020113621550713014475 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/spaces3.experr0000644003162300316230000000000013621550714015560 0ustar fanf2fanf2unifdef-2.12/tests/outeperm.experr0000644003162300316230000000007213621550714016070 0ustar fanf2fanf2unifdef: can't create outdir/outfile.c: Permission denied unifdef-2.12/tests/defundef-broken2.exprc0000644003162300316230000000000213621550713017154 0ustar fanf2fanf22 unifdef-2.12/tests/overwrite.exprc0000644003162300316230000000000213621550714016063 0ustar fanf2fanf21 unifdef-2.12/tests/spaces3.c0000644003162300316230000000042413621550714014507 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ # include # include # ifndef BAR int bar() { return 0; } # else # error BAR defined # endif int main() { bar(); } unifdef-2.12/tests/dangle.exprc0000644003162300316230000000000213621550713015266 0ustar fanf2fanf20 unifdef-2.12/tests/blank4d.sh0000644003162300316230000000003413621550713014651 0ustar fanf2fanf2unifdef -B -DFOO4 blank4d.c unifdef-2.12/tests/if1-kDU.c0000644003162300316230000000114313621550714014305 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if 0 /* This code is commented out. "#if 0 then" */ #else /* This code is passed through. "#if 0 else" */ #endif #if 1 /* This code is passed through. "#if 1 then" */ #else /* This code is commented out. "#if 1 else" */ #endif #if FOO int foo() { return 0; } #else #error FOO not defined #endif #if BAR int foo() { return 0; } #elif FOO int bar() { return 0; } #else #error FOO not defined #endif int main() { foo(); bar(); } unifdef-2.12/tests/broken4.h0000644003162300316230000000003213621550713014511 0ustar fanf2fanf2#define FOO \ bar unifdef-2.12/tests/multinewline.experr0000644003162300316230000000000013621550714016733 0ustar fanf2fanf2unifdef-2.12/tests/if1-k.c0000644003162300316230000000114313621550714014054 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if 0 /* This code is commented out. "#if 0 then" */ #else /* This code is passed through. "#if 0 else" */ #endif #if 1 /* This code is passed through. "#if 1 then" */ #else /* This code is commented out. "#if 1 else" */ #endif #if FOO int foo() { return 0; } #else #error FOO not defined #endif #if BAR int foo() { return 0; } #elif FOO int bar() { return 0; } #else #error FOO not defined #endif int main() { foo(); bar(); } unifdef-2.12/tests/if3-k.sh0000644003162300316230000000002313621550714014242 0ustar fanf2fanf2unifdef -k if3-k.c unifdef-2.12/tests/if3-kDU.experr0000644003162300316230000000000013621550714015361 0ustar fanf2fanf2unifdef-2.12/tests/small2.experr0000644003162300316230000000000013621550714015411 0ustar fanf2fanf2unifdef-2.12/tests/if2-kDU.c0000644003162300316230000000077513621550714014320 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if 0 /* This code is commented out. "#if 0 then" */ #else /* This code is passed through. "#if 0 else" */ #endif #if 1 /* This code is passed through. "#if 1 then" */ #else /* This code is passed through. "#if 1 else" */ #endif #if defined(FOO) int foo() { return 0; } #else #error FOO not defined #endif int main() { foo(); } unifdef-2.12/tests/recursive.experr0000644003162300316230000000757613621550714016257 0ustar fanf2fanf2unifdef: addsym FOO=BAR unifdef: addsym BAR=ZIG unifdef: addsym ZIG=BAR unifdef: addsym QUX=QUX unifdef: findsym BAR=ZIG unifdef: indir... FOO=BAR unifdef: ...ectsym FOO=ZIG unifdef: findsym ZIG=BAR unifdef: indir... BAR=ZIG unifdef: ...ectsym BAR=BAR unifdef: findsym BAR=BAR unifdef: findsym QUX=QUX unifdef: findsym ZIG=BAR unifdef: indir... FOO=ZIG unifdef: ...ectsym FOO=BAR unifdef: findsym BAR=BAR unifdef: findsym BAR=BAR unifdef: findsym QUX=QUX unifdef: findsym BAR=BAR unifdef: findsym BAR=BAR unifdef: findsym BAR=BAR unifdef: findsym QUX=QUX unifdef: parser line 1 state C comment START line unifdef: process line 1 PLAIN -> OUTSIDE depth 0 unifdef: parser line 2 state C comment START line unifdef: process line 2 PLAIN -> OUTSIDE depth 0 unifdef: parser line 3 state NO comment START line unifdef: process line 3 PLAIN -> OUTSIDE depth 0 unifdef: parser line 4 state NO comment START line unifdef: process line 4 PLAIN -> OUTSIDE depth 0 unifdef: parser line 5 state NO comment START line unifdef: process line 5 PLAIN -> OUTSIDE depth 0 unifdef: parser line 6 state NO comment START line unifdef: process line 6 PLAIN -> OUTSIDE depth 0 unifdef: parser line 7 state NO comment START line unifdef: process line 7 PLAIN -> OUTSIDE depth 0 unifdef: eval FOO unifdef: eval0 unifdef: eval1 unifdef: eval2 unifdef: eval3 unifdef: eval4 unifdef: eval5 unifdef: eval6 unifdef: eval7 unifdef: eval8 unifdef: eval9 unifdef: eval10 symbol unifdef: findsym FOO=BAR unifdef: eval = 0 unifdef: parser line 8 state NO comment START line unifdef: process line 8 IF -> PASS_MIDDLE depth 1 unifdef: parser line 9 state NO comment START line unifdef: process line 9 PLAIN -> PASS_MIDDLE depth 1 unifdef: parser line 10 state NO comment START line unifdef: process line 10 ELSE -> PASS_ELSE depth 1 unifdef: parser line 11 state NO comment START line unifdef: process line 11 PLAIN -> PASS_ELSE depth 1 unifdef: parser line 12 state NO comment START line unifdef: process line 12 ENDIF -> OUTSIDE depth 0 unifdef: parser line 13 state NO comment START line unifdef: process line 13 PLAIN -> OUTSIDE depth 0 unifdef: eval BAR unifdef: eval0 unifdef: eval1 unifdef: eval2 unifdef: eval3 unifdef: eval4 unifdef: eval5 unifdef: eval6 unifdef: eval7 unifdef: eval8 unifdef: eval9 unifdef: eval10 symbol unifdef: findsym BAR=BAR unifdef: eval = 0 unifdef: parser line 14 state NO comment START line unifdef: process line 14 IF -> PASS_MIDDLE depth 1 unifdef: parser line 15 state NO comment START line unifdef: process line 15 PLAIN -> PASS_MIDDLE depth 1 unifdef: eval FOO unifdef: eval0 unifdef: eval1 unifdef: eval2 unifdef: eval3 unifdef: eval4 unifdef: eval5 unifdef: eval6 unifdef: eval7 unifdef: eval8 unifdef: eval9 unifdef: eval10 symbol unifdef: findsym FOO=BAR unifdef: eval = 0 unifdef: parser line 16 state NO comment START line unifdef: process line 16 ELIF -> PASS_MIDDLE depth 1 unifdef: parser line 17 state NO comment START line unifdef: process line 17 PLAIN -> PASS_MIDDLE depth 1 unifdef: parser line 18 state NO comment START line unifdef: process line 18 ELSE -> PASS_ELSE depth 1 unifdef: parser line 19 state NO comment START line unifdef: process line 19 PLAIN -> PASS_ELSE depth 1 unifdef: parser line 20 state NO comment START line unifdef: process line 20 ENDIF -> OUTSIDE depth 0 unifdef: parser line 21 state NO comment START line unifdef: process line 21 PLAIN -> OUTSIDE depth 0 unifdef: parser line 22 state NO comment START line unifdef: process line 22 PLAIN -> OUTSIDE depth 0 unifdef: parser line 23 state NO comment START line unifdef: process line 23 PLAIN -> OUTSIDE depth 0 unifdef: parser line 24 state NO comment START line unifdef: process line 24 PLAIN -> OUTSIDE depth 0 unifdef: parser line 25 state NO comment START line unifdef: process line 25 PLAIN -> OUTSIDE depth 0 unifdef: parser line 26 state NO comment START line unifdef: process line 26 PLAIN -> OUTSIDE depth 0 unifdef: process line 27 EOF -> OUTSIDE depth 0 unifdef-2.12/tests/NetBSD-42628.sh0000644003162300316230000000004513621550713015076 0ustar fanf2fanf2unifdef -U__FreeBSD__ NetBSD-42628.c unifdef-2.12/tests/whitespace-1.expout0000644003162300316230000000000413621550714016534 0ustar fanf2fanf2foo unifdef-2.12/tests/blank1u.exprc0000644003162300316230000000000213621550713015371 0ustar fanf2fanf21 unifdef-2.12/tests/div.expout0000644003162300316230000000012613621550714015031 0ustar fanf2fanf2undef #if 10 / DENOM DIVISION #endif one DIVISION zero #if 10 / DENOM DIVISION #endif unifdef-2.12/tests/if3-k.experr0000644003162300316230000000000013621550714015130 0ustar fanf2fanf2unifdef-2.12/tests/exitmode1b.sh0000644003162300316230000000002213621550714015371 0ustar fanf2fanf2unifdef -x1 if1.c unifdef-2.12/tests/defundef-broken4.sh0000644003162300316230000000003313621550713016453 0ustar fanf2fanf2unifdef -f broken4.h if1.c unifdef-2.12/tests/multi.exprc0000644003162300316230000000000213621550714015167 0ustar fanf2fanf21 unifdef-2.12/tests/if3-kDU.c0000644003162300316230000000077313621550714014317 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if 0 /* This code is commented out. "#if 0 then" */ #else /* This code is passed through. "#if 0 else" */ #endif #if 1 /* This code is passed through. "#if 1 then" */ #else /* This code is passed through. "#if 1 else" */ #endif #if ! defined(BAR) int foo() { return 0; } #else #error BAR defined #endif int main() { foo(); } unifdef-2.12/tests/if3.experr0000644003162300316230000000000013621550714014700 0ustar fanf2fanf2unifdef-2.12/tests/multilnnum.experr0000644003162300316230000000000013621550714016423 0ustar fanf2fanf2unifdef-2.12/tests/if3-k.expout0000644003162300316230000000056613621550714015170 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include /* This code is passed through. "#if 0 else" */ /* This code is passed through. "#if 1 then" */ #if ! defined(BAR) int foo() { return 0; } #else #error BAR defined #endif int main() { foo(); } unifdef-2.12/tests/spaces4.sh0000644003162300316230000000005213621550714014675 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR spaces4.c unifdef-2.12/tests/exitmode1a.sh0000644003162300316230000000005213621550714015373 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR -x1 if1.c unifdef-2.12/tests/dangle.c0000644003162300316230000000012213621550713014372 0ustar fanf2fanf2#ifdef FIRST wombats #endif /* com mmm mmmm ment */ unifdef-2.12/tests/overdir.expout0000644003162300316230000000037513621550714015727 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/if3-kDU.exprc0000644003162300316230000000000213621550714015177 0ustar fanf2fanf21 unifdef-2.12/tests/if1a.sh0000644003162300316230000000002413621550714014152 0ustar fanf2fanf2unifdef -UBAR if1.c unifdef-2.12/tests/if6a.sh0000644003162300316230000000002313621550714014156 0ustar fanf2fanf2unifdef -DF1 if6.c unifdef-2.12/tests/overwrite.experr0000644003162300316230000000000013621550714016245 0ustar fanf2fanf2unifdef-2.12/tests/if5-a.sh0000644003162300316230000000005413621550714014236 0ustar fanf2fanf2unifdefall.sh -DFOO=1 -DFOOB=42 -UBAR if5.c unifdef-2.12/tests/if5-kDU.exprc0000644003162300316230000000000213621550714015201 0ustar fanf2fanf21 unifdef-2.12/tests/if1-kDU.expout0000644003162300316230000000054513621550714015414 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include /* This code is passed through. "#if 0 else" */ /* This code is passed through. "#if 1 then" */ int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/if2.c0000644003162300316230000000042013621550714013622 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if defined(FOO) int foo() { return 0; } #else #error FOO not defined #endif int main() { foo(); } unifdef-2.12/tests/spaces1.expout0000644003162300316230000000033513621550714015610 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ # include # include int foo() { return 0; } int main() { foo(); } unifdef-2.12/tests/if4-kDU.sh0000644003162300316230000000005513621550714014501 0ustar fanf2fanf2unifdef -k -DFOO=1 -DFOOB=42 -UBAR if4-kDU.c unifdef-2.12/tests/if6c.exprc0000644003162300316230000000000213621550714014664 0ustar fanf2fanf21 unifdef-2.12/tests/defundef-broken2.experr0000644003162300316230000000012613621550713017347 0ustar fanf2fanf2unifdef: broken2.h: 1: Missing macro name in #define unifdef: Output may be truncated unifdef-2.12/tests/multimissing.exprc0000644003162300316230000000000213621550714016561 0ustar fanf2fanf22 unifdef-2.12/tests/small2.c0000644003162300316230000000041313621550714014336 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #ifndef BAR int bar() { return 0; } #else #error BAR not defined #endif int main() { bar(); } unifdef-2.12/tests/if2-kDU.expout0000644003162300316230000000050313621550714015407 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include /* This code is passed through. "#if 0 else" */ /* This code is passed through. "#if 1 then" */ int foo() { return 0; } int main() { foo(); } unifdef-2.12/tests/if1-kDU.exprc0000644003162300316230000000000213621550714015175 0ustar fanf2fanf21 unifdef-2.12/tests/exitmode2b.sh0000644003162300316230000000002213621550714015372 0ustar fanf2fanf2unifdef -x2 if1.c unifdef-2.12/tests/whitespace-2.exprc0000644003162300316230000000000213621550714016330 0ustar fanf2fanf21 unifdef-2.12/tests/if1-f.expout0000644003162300316230000000037513621550714015157 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/whitespace-2.sh0000644003162300316230000000003313621550714015625 0ustar fanf2fanf2unifdef -DBAR whitespace.c unifdef-2.12/tests/overin.expout0000644003162300316230000000037513621550714015557 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/exitmode2b.experr0000644003162300316230000000000013621550714016261 0ustar fanf2fanf2unifdef-2.12/tests/overdir.experr0000644003162300316230000000000013621550714015671 0ustar fanf2fanf2unifdef-2.12/tests/crlf-d.sh0000644003162300316230000000002413621550713014500 0ustar fanf2fanf2unifdef -DF4 crlf.c unifdef-2.12/tests/defundef-funlike.exprc0000644003162300316230000000000213621550713017247 0ustar fanf2fanf21 unifdef-2.12/tests/overperms.experr0000644003162300316230000000002613621550714016251 0ustar fanf2fanf2-rw-r----- -rw-r----- unifdef-2.12/tests/defundef-undefdef.sh0000644003162300316230000000002713621550713016672 0ustar fanf2fanf2unifdef -f if6.h if6.c unifdef-2.12/tests/outdir.exprc0000644003162300316230000000000213621550714015343 0ustar fanf2fanf21 unifdef-2.12/tests/if6d.exprc0000644003162300316230000000000213621550714014665 0ustar fanf2fanf21 unifdef-2.12/tests/defundef-broken2.sh0000644003162300316230000000003313621550713016451 0ustar fanf2fanf2unifdef -f broken2.h if1.c unifdef-2.12/tests/NetBSD-42628.expout0000644003162300316230000000010613621550713016006 0ustar fanf2fanf2#include #include #include unifdef-2.12/tests/if4.exprc0000644003162300316230000000000213621550714014517 0ustar fanf2fanf21 unifdef-2.12/tests/overwrite.expout0000644003162300316230000000037513621550714016303 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/crlf-c.exprc0000644003162300316230000000000213621550713015202 0ustar fanf2fanf21 unifdef-2.12/tests/error.exprc0000644003162300316230000000000213621550714015166 0ustar fanf2fanf21 unifdef-2.12/tests/if3.c0000644003162300316230000000041613621550714013630 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if ! defined(BAR) int foo() { return 0; } #else #error BAR defined #endif int main() { foo(); } unifdef-2.12/tests/NetBSD-47068.c0000644003162300316230000000002113621550713014703 0ustar fanf2fanf2#ifdef foo #endifunifdef-2.12/tests/if1-kDU.sh0000644003162300316230000000005513621550714014476 0ustar fanf2fanf2unifdef -k -DFOO=1 -DFOOB=42 -UBAR if1-kDU.c unifdef-2.12/tests/NetBSD-47068.experr0000644003162300316230000000000013621550713015763 0ustar fanf2fanf2unifdef-2.12/tests/if6d.expout0000644003162300316230000000020213621550714015072 0ustar fanf2fanf2#if F1 int f1() { return 0; } #elif F2 int f2() { return 0; } #elif F3 int f3() { return 0; } #else int f4() { return 0; } #endif unifdef-2.12/tests/exitstat.expout0000644003162300316230000000002713621550714016114 0ustar fanf2fanf2#if FALSE #else #endif unifdef-2.12/tests/small2.exprc0000644003162300316230000000000213621550714015227 0ustar fanf2fanf21 unifdef-2.12/tests/if6d.experr0000644003162300316230000000000013621550714015047 0ustar fanf2fanf2unifdef-2.12/tests/blank2d.c0000644003162300316230000000020113621550713014453 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/div.exprc0000644003162300316230000000000213621550714014617 0ustar fanf2fanf20 unifdef-2.12/tests/multinewline.sh0000644003162300316230000000007413621550714016053 0ustar fanf2fanf2opts="-DFOO -DF1" files="crlf.c if1.c" . ./multi-generic-sh unifdef-2.12/tests/if1-kDU.experr0000644003162300316230000000000013621550714015357 0ustar fanf2fanf2unifdef-2.12/tests/if3-a.experr0000644003162300316230000000000013621550714015116 0ustar fanf2fanf2unifdef-2.12/tests/indirect.sh0000644003162300316230000000005613621550714015140 0ustar fanf2fanf2unifdef -DFOO=ZIG -DZIG -DFOOB=42 -UBAR if1.c unifdef-2.12/tests/outperms.expout0000644003162300316230000000037513621550714016133 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/none.sh0000644003162300316230000000004713621550714014276 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR none.c unifdef-2.12/tests/crlf-b.exprc0000644003162300316230000000000213621550713015201 0ustar fanf2fanf21 unifdef-2.12/tests/overunchanged.exprc0000644003162300316230000000000213621550714016665 0ustar fanf2fanf20 unifdef-2.12/tests/overenoent.sh0000644003162300316230000000016013621550714015517 0ustar fanf2fanf2ln -s nonexistent/path outfile.c unifdef -DFOO=1 -DFOOB=42 -UBAR -ooutfile.c if1.c e=$? rm -f outfile.c exit $e unifdef-2.12/tests/overlnnum.sh0000644003162300316230000000017613621550714015367 0ustar fanf2fanf2cp if1.c overwrite.c unifdef -DFOO=1 -DFOOB=42 -UBAR -n -ooverwrite.c overwrite.c e=$? cat overwrite.c rm overwrite.c exit $e unifdef-2.12/tests/000-init.sh0000644003162300316230000000005313621550713014573 0ustar fanf2fanf2unifdef /dev/null 2>&1 || true unifdef-2.12/tests/crlf-b.sh0000644003162300316230000000002413621550713014476 0ustar fanf2fanf2unifdef -DF2 crlf.c unifdef-2.12/tests/defundef-undefdef.exprc0000644003162300316230000000000213621550713017372 0ustar fanf2fanf21 unifdef-2.12/tests/recursive.expout0000644003162300316230000000056713621550714016267 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if FOO int foo() { return 0; } #else #error FOO not defined #endif #if BAR int foo() { return 0; } #elif FOO int bar() { return 0; } #else #error FOO not defined #endif int main() { foo(); bar(); } unifdef-2.12/tests/blank1d.expout0000644003162300316230000000015613621550713015565 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif one #ifdef FOO0 zero #endif unifdef-2.12/tests/outdir.expout0000644003162300316230000000037513621550714015563 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/blank4d.c0000644003162300316230000000020113621550713014455 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/small1.exprc0000644003162300316230000000000213621550714015226 0ustar fanf2fanf21 unifdef-2.12/tests/exitmode0a.exprc0000644003162300316230000000000213621550714016074 0ustar fanf2fanf21 unifdef-2.12/tests/if5.exprc0000644003162300316230000000000213621550714014520 0ustar fanf2fanf21 unifdef-2.12/tests/blank4u.sh0000644003162300316230000000003413621550713014672 0ustar fanf2fanf2unifdef -B -UFOO4 blank4u.c unifdef-2.12/tests/args2.experr0000644003162300316230000000000013621550713015234 0ustar fanf2fanf2unifdef-2.12/tests/multimissing.experr0000644003162300316230000000030213621550714016750 0ustar fanf2fanf2unifdef: can't open mifmissing.c: No such file or directory diff: mifmissing.c~: No such file or directory diff: mifmissing.c: No such file or directory diff: mif2.c~: No such file or directory unifdef-2.12/tests/overdir.exprc0000644003162300316230000000000213621550714015507 0ustar fanf2fanf21 unifdef-2.12/tests/funlike.h0000644003162300316230000000003113621550714014602 0ustar fanf2fanf2#define FOO(a,b,c) a+b+c unifdef-2.12/tests/if2-k.experr0000644003162300316230000000000013621550714015127 0ustar fanf2fanf2unifdef-2.12/tests/xterm.exprc0000644003162300316230000000000213621550714015174 0ustar fanf2fanf20 unifdef-2.12/tests/overperms.exprc0000644003162300316230000000000213621550714016057 0ustar fanf2fanf21 unifdef-2.12/tests/blank1u.experr0000644003162300316230000000000013621550713015553 0ustar fanf2fanf2unifdef-2.12/tests/dangle.experr0000644003162300316230000000000013621550713015450 0ustar fanf2fanf2unifdef-2.12/tests/crlf-c.sh0000644003162300316230000000002413621550713014477 0ustar fanf2fanf2unifdef -DF3 crlf.c unifdef-2.12/tests/000-init.experr0000644003162300316230000000000013621550713015456 0ustar fanf2fanf2unifdef-2.12/tests/outfile.experr0000644003162300316230000000000013621550714015666 0ustar fanf2fanf2unifdef-2.12/tests/spaces2.expout0000644003162300316230000000033513621550714015611 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ # include # include int bar() { return 0; } int main() { bar(); } unifdef-2.12/tests/none.c0000644003162300316230000000023213621550714014102 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ int foo() { return 0; } unifdef-2.12/tests/whitespace-1.sh0000644003162300316230000000003313621550714015624 0ustar fanf2fanf2unifdef -DFOO whitespace.c unifdef-2.12/tests/blank0u.exprc0000644003162300316230000000000213621550713015370 0ustar fanf2fanf21 unifdef-2.12/tests/spaces2.sh0000644003162300316230000000005213621550714014673 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR spaces2.c unifdef-2.12/tests/exitmode0a.expout0000644003162300316230000000037513621550714016314 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/recursive.exprc0000644003162300316230000000000213621550714016044 0ustar fanf2fanf20 unifdef-2.12/tests/args2.sh0000644003162300316230000000005013621550713014346 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR args2.c unifdef-2.12/tests/small1.experr0000644003162300316230000000000013621550714015410 0ustar fanf2fanf2unifdef-2.12/tests/if3-k.c0000644003162300316230000000077313621550714014066 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if 0 /* This code is commented out. "#if 0 then" */ #else /* This code is passed through. "#if 0 else" */ #endif #if 1 /* This code is passed through. "#if 1 then" */ #else /* This code is passed through. "#if 1 else" */ #endif #if ! defined(BAR) int foo() { return 0; } #else #error BAR defined #endif int main() { foo(); } unifdef-2.12/tests/NetBSD-42628.c0000644003162300316230000000061513621550713014711 0ustar fanf2fanf2#if defined(__FreeBSD__) #include #else #include #endif #if defined(__FreeBSD__) #include #include #include #include #include #include #else #include #endif #if defined(__FreeBSD__) #endif #ifdef __FreeBSD__ #include #else #include #endif unifdef-2.12/tests/blank3u.exprc0000644003162300316230000000000213621550713015373 0ustar fanf2fanf21 unifdef-2.12/tests/blank0u.c0000644003162300316230000000020113621550713014472 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/whitespace.c0000644003162300316230000001167313621550714015312 0ustar fanf2fanf2#ifdef FOO foo #endif //spong #ifdef BAR bar #endifunifdef-2.12/tests/outfile.exprc0000644003162300316230000000000213621550714015504 0ustar fanf2fanf21 unifdef-2.12/tests/if2.experr0000644003162300316230000000000013621550714014677 0ustar fanf2fanf2unifdef-2.12/tests/blank3d.c0000644003162300316230000000020113621550713014454 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/if4-a.expout0000644003162300316230000000051113621550714015145 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo1() { return 0; } int foo2() { return 0; } int foo3() { return 0; } int foo4() { return 0; } int main() { foo1(); foo2(); foo3(); foo4(); } unifdef-2.12/tests/if1-f.exprc0000644003162300316230000000000213621550714014737 0ustar fanf2fanf21 unifdef-2.12/tests/overenoent.experr0000644003162300316230000000007313621550714016415 0ustar fanf2fanf2unifdef: can't create outfile.c: No such file or directory unifdef-2.12/tests/if7.c0000644003162300316230000000256013621550714013636 0ustar fanf2fanf2/* Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if (FOOB | FOO) == 43 int foo1() { return 0; } #else #error FOOB bitwise-or FOO is not 43 #endif #if (FOO ^ FOO) == 0 int foo2() { return 0; } #else #error FOO bitwise-xor FOO is not 0 #endif #if (FOOB & 2) == 2 int foo3() { return 0; } #else #error FOOB bitwise-and 2 is not 2 #endif #if (FOO << 1) == 2 int foo4() { return 0; } #else #error FOO left-shift 2 is not 2 #endif #if (FOOB >> 4) == 2 int foo5() { return 0; } #else #error FOOB right-shift 2 is not 2 #endif #if (FOOB + FOO) == 43 int foo6() { return 0; } #else #error FOOB add FOO is not 43 #endif #if (FOOB - FOO) == 41 int foo7() { return 0; } #else #error FOOB subtract FOO is not 41 #endif #if (FOOB * 2) == 84 int foo8() { return 0; } #else #error FOOB multiply 2 is not 84 #endif #if (FOOB / 2) == 21 int foo9() { return 0; } #else #error FOOB divided 2 is not 21 #endif #if (FOOB % FOO) == 0 int foo10() { return 0; } #else #error FOOB modulo FOO is not 0 #endif #if ~(FOOB) == -43 int foo11() { return 0; } #else #error bitwise-not FOOB is not -43 #endif #if -(FOOB) == -42 int foo12() { return 0; } #else #error negate FOOB is not -42 #endif int main() { foo1(); foo2(); foo3(); foo4(); foo5(); foo6(); foo7(); foo8(); foo9(); foo10(); foo11(); foo12(); } unifdef-2.12/tests/if6a.exprc0000644003162300316230000000000213621550714014662 0ustar fanf2fanf21 unifdef-2.12/tests/blank3u.expout0000644003162300316230000000014513621550713015606 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/indirect.experr0000644003162300316230000000000013621550714016020 0ustar fanf2fanf2unifdef-2.12/tests/if4-kDU.experr0000644003162300316230000000000013621550714015362 0ustar fanf2fanf2unifdef-2.12/tests/blank0d.experr0000644003162300316230000000000013621550713015531 0ustar fanf2fanf2unifdef-2.12/tests/crlf-b.experr0000644003162300316230000000000013621550713015363 0ustar fanf2fanf2unifdef-2.12/tests/overin.sh0000644003162300316230000000015513621550714014641 0ustar fanf2fanf2cp if1.c overin.c unifdef -DFOO=1 -DFOOB=42 -UBAR -ooverin.c Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if FOO int foo() { return 0; } #else #error FOO not defined #endif #if BAR int foo() { return 0; } #elif FOO int bar() { return 0; } #else #error FOO not defined #endif int main() { foo(); bar(); } unifdef-2.12/tests/multi-generic-sh0000644003162300316230000000032613621550714016102 0ustar fanf2fanf2mfiles="" for f in $files do rm -f m$f [ -f $f ] && cp $f m$f mfiles="$mfiles m$f" done unifdef -M~ $opts $mfiles e=$? for f in $mfiles do diff -u $f~ $f | sed '/^[+-]\{3\} /s/ .*//' rm -f $f~ $f done exit $e unifdef-2.12/tests/outperms.sh0000644003162300316230000000032513621550714015214 0ustar fanf2fanf2umask 027 unifdef -DFOO=1 -DFOOB=42 -UBAR -ooutfile.c if1.c e=$? case ${BUILD_MINGW} in (yes) printf '%s\n' '-rw-r-----' 1>&2 ;; (*) ls -l outfile.c | cut -d' ' -f1 1>&2 ;; esac cat outfile.c rm outfile.c exit $e unifdef-2.12/tests/xterm.expout0000644003162300316230000000525513621550714015416 0ustar fanf2fanf2#define RES_OFFSET(field) XtOffsetOf(XTERM_RESOURCE, field) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define HAS_BSD_GROUPS #include /* for NOFILE */ #define WTMP #include #define UTMP_STR utmp #include /* openpty() */ #include #include #define TERMCAP_ERASE "kb" #define VAL_INITIAL_ERASE A2E(8) #define VAL_LINE_SPEED B38400 #define TERMIO_STRUCT struct termios #define ttySetAttr(fd, datap) tcsetattr(fd, TCSANOW, datap) #define ttyGetAttr(fd, datap) tcgetattr(fd, datap) #define ttyFlush(fd) tcflush(fd, TCOFLUSH) #define TTYMODE(name) { name, sizeof(name)-1, 0, 0 } #define XTTYMODE_intr 0 #define XTTYMODE_quit 1 #define XTTYMODE_erase 2 #define XTTYMODE_kill 3 #define XTTYMODE_eof 4 #define XTTYMODE_eol 5 #define XTTYMODE_swtch 6 #define XTTYMODE_start 7 #define XTTYMODE_stop 8 #define XTTYMODE_brk 9 #define XTTYMODE_susp 10 #define XTTYMODE_dsusp 11 #define XTTYMODE_rprnt 12 #define XTTYMODE_flush 13 #define XTTYMODE_weras 14 #define XTTYMODE_lnext 15 #define XTTYMODE_status 16 #define XTTYMODE_erase2 17 #define XTTYMODE_eol2 18 #define validTtyChar(data, n) \ #define TMODE(ind,var) if (ttymodelist[ind].set) var = (cc_t) ttymodelist[ind].value #include /* XmuGetHostname */ #define MIT_CONSOLE_LEN 12 #define MIT_CONSOLE "MIT_CONSOLE_" #define SetUtmpHost(dst, screen) \ {"#", ".iconGeometry",XrmoptionStickyArg, (XPointer) NULL}, { "#geom", "icon window geometry" }, TRACE(("...decode_keyvalue %#x\n", value)); #define isOption(string) (Boolean)((string)[0] == '-' || (string)[0] == '+') #define DATA(option,kind) { option, NULL, kind, (XtPointer) NULL } #undef DATA #define ITEM(n) ((Cardinal)(n) < XtNumber(optionDescList) \ #undef ITEM #define disableSetUid() /* nothing */ #define disableSetGid() /* nothing */ #define DATA(name) { #name, es##name } #undef DATA #define USE_OPENPTY 1 #define NO_FDS {-1, -1} #define TRACE_HANDSHAKE(tag, data) /* nothing */ TRACE(("set_owner(%s, uid=%d, gid=%d, mode=%#o\n", TRACE(("...stat uid=%d, gid=%d, mode=%#o\n", #define close_fd(fd) close(fd), fd = -1 #define USE_NO_DEV_TTY 1 if ((ptr1 = x_strindex(oldtc, "co#")) == NULL) { strcat(oldtc, "co#80:"); ptr1 = x_strindex(oldtc, "co#"); if ((ptr2 = x_strindex(oldtc, "li#")) == NULL) { strcat(oldtc, "li#24:"); ptr2 = x_strindex(oldtc, "li#"); TRACE(("...parsed #%d: %s=%#x\n", count, mp->name, c)); unifdef-2.12/tests/if3.exprc0000644003162300316230000000000213621550714014516 0ustar fanf2fanf21 unifdef-2.12/tests/small2.sh0000644003162300316230000000005113621550714014524 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR small2.c unifdef-2.12/tests/small1.sh0000644003162300316230000000005113621550714014523 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR small1.c unifdef-2.12/tests/if1-k.exprc0000644003162300316230000000000213621550714014744 0ustar fanf2fanf21 unifdef-2.12/tests/if3-a.exprc0000644003162300316230000000000213621550714014734 0ustar fanf2fanf21 unifdef-2.12/tests/if3-a.expout0000644003162300316230000000033313621550714015146 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int main() { foo(); } unifdef-2.12/tests/if2-k.expout0000644003162300316230000000057013621550714015162 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include /* This code is passed through. "#if 0 else" */ /* This code is passed through. "#if 1 then" */ #if defined(FOO) int foo() { return 0; } #else #error FOO not defined #endif int main() { foo(); } unifdef-2.12/tests/blank3u.sh0000644003162300316230000000003413621550713014671 0ustar fanf2fanf2unifdef -B -UFOO3 blank3u.c unifdef-2.12/tests/blank2d.exprc0000644003162300316230000000000213621550713015351 0ustar fanf2fanf21 unifdef-2.12/tests/if6.h0000644003162300316230000000004113621550714013632 0ustar fanf2fanf2#undef gruntfuttock #define F1 1 unifdef-2.12/tests/defundef-broken4.expout0000644003162300316230000000000013621550713017357 0ustar fanf2fanf2unifdef-2.12/tests/outdir.sh0000644003162300316230000000017013621550714014642 0ustar fanf2fanf2mkdir -p outdir unifdef -DFOO=1 -DFOOB=42 -UBAR -ooutdir/outfile.c if1.c e=$? cat outdir/outfile.c rm -r outdir exit $e unifdef-2.12/tests/if6d.sh0000644003162300316230000000002313621550714014161 0ustar fanf2fanf2unifdef -DF4 if6.c unifdef-2.12/tests/multilnnum.exprc0000644003162300316230000000000213621550714016241 0ustar fanf2fanf21 unifdef-2.12/tests/crlf-a.expout0000644003162300316230000000010613621550713015410 0ustar fanf2fanf2int f1() { return 0; } \/ /\ comment /\ *\ comment *\ /\ eof unifdef-2.12/tests/crlf-d.experr0000644003162300316230000000000013621550713015365 0ustar fanf2fanf2unifdef-2.12/tests/if5.experr0000644003162300316230000000000013621550714014702 0ustar fanf2fanf2unifdef-2.12/tests/exitmode2a.expout0000644003162300316230000000037513621550714016316 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/defundef-undefdef.expout0000644003162300316230000000002713621550713017604 0ustar fanf2fanf2int f1() { return 0; } unifdef-2.12/tests/xterm.experr0000644003162300316230000000000613621550714015364 0ustar fanf2fanf20 1 0 unifdef-2.12/tests/blank2d.expout0000644003162300316230000000015613621550713015566 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif two #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/blank1u.expout0000644003162300316230000000015113621550713015601 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/exitmode2a.experr0000644003162300316230000000000013621550714016260 0ustar fanf2fanf2unifdef-2.12/tests/spaces3.sh0000644003162300316230000000005213621550714014674 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR spaces3.c unifdef-2.12/tests/if2.exprc0000644003162300316230000000000213621550714014515 0ustar fanf2fanf21 unifdef-2.12/tests/if7.exprc0000644003162300316230000000000213621550714014522 0ustar fanf2fanf21 unifdef-2.12/tests/crlf-a.experr0000644003162300316230000000000013621550713015362 0ustar fanf2fanf2unifdef-2.12/tests/dangle.sh0000644003162300316230000000002113621550713014560 0ustar fanf2fanf2unifdef dangle.c unifdef-2.12/tests/crlf-a.sh0000644003162300316230000000002413621550713014475 0ustar fanf2fanf2unifdef -DF1 crlf.c unifdef-2.12/tests/if1-k.experr0000644003162300316230000000000013621550714015126 0ustar fanf2fanf2unifdef-2.12/tests/spaces1.c0000644003162300316230000000042113621550714014502 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ # include # include # ifdef FOO int foo() { return 0; } # else # error FOO not defined # endif int main() { foo(); } unifdef-2.12/tests/spaces1.sh0000644003162300316230000000005213621550714014672 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR spaces1.c unifdef-2.12/tests/defundef-broken4.experr0000644003162300316230000000013513621550713017351 0ustar fanf2fanf2unifdef: broken4.h: 1: Obfuscated preprocessor control line unifdef: Output may be truncated unifdef-2.12/tests/multi.experr0000644003162300316230000000000013621550714015351 0ustar fanf2fanf2unifdef-2.12/tests/broken2.h0000644003162300316230000000003113621550713014506 0ustar fanf2fanf2#define /* nothing */ unifdef-2.12/tests/blank4u.experr0000644003162300316230000000000013621550713015556 0ustar fanf2fanf2unifdef-2.12/tests/empty.exprc0000644003162300316230000000000213621550714015173 0ustar fanf2fanf20 unifdef-2.12/tests/exitstat.exprc0000644003162300316230000000000213621550714015702 0ustar fanf2fanf21 unifdef-2.12/tests/if4-a.sh0000644003162300316230000000005413621550714014235 0ustar fanf2fanf2unifdefall.sh -DFOO=1 -DFOOB=42 -UBAR if4.c unifdef-2.12/tests/div.sh0000644003162300316230000000023413621550714014117 0ustar fanf2fanf2echo undef if ! unifdef div.c then unifdef -d div.c fi echo one unifdef -DDENOM div.c echo zero if ! unifdef -UDENOM div.c then unifdef -d -UDENOM div.c fi unifdef-2.12/tests/spaces4.c0000644003162300316230000000042313621550714014507 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ # include # include # ifdef FOO int foo() { return 0; } # else # error FOO defined # endif int main() { foo(); } unifdef-2.12/tests/spaces2.experr0000644003162300316230000000000013621550714015557 0ustar fanf2fanf2unifdef-2.12/tests/none.exprc0000644003162300316230000000000213621550714014774 0ustar fanf2fanf20 unifdef-2.12/tests/NetBSD-42628.exprc0000644003162300316230000000000213621550713015576 0ustar fanf2fanf21 unifdef-2.12/tests/debian-603860.sh0000644003162300316230000000003613621550713015322 0ustar fanf2fanf2unifdef -UFOO debian-603860.c unifdef-2.12/tests/none.experr0000644003162300316230000000000013621550714015156 0ustar fanf2fanf2unifdef-2.12/tests/if2-k.c0000644003162300316230000000077513621550714014067 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if 0 /* This code is commented out. "#if 0 then" */ #else /* This code is passed through. "#if 0 else" */ #endif #if 1 /* This code is passed through. "#if 1 then" */ #else /* This code is passed through. "#if 1 else" */ #endif #if defined(FOO) int foo() { return 0; } #else #error FOO not defined #endif int main() { foo(); } unifdef-2.12/tests/exitmode1a.exprc0000644003162300316230000000000213621550714016075 0ustar fanf2fanf20 unifdef-2.12/tests/defundef-funlike.sh0000644003162300316230000000003613621550713016547 0ustar fanf2fanf2unifdef -f funlike.h small1.c unifdef-2.12/tests/if2-k.exprc0000644003162300316230000000000213621550714014745 0ustar fanf2fanf21 unifdef-2.12/tests/spaces4.exprc0000644003162300316230000000000213621550714015377 0ustar fanf2fanf21 unifdef-2.12/tests/if5-k.expout0000644003162300316230000000156413621550714015171 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include /* This code is passed through. "#if 0 else" */ /* This code is passed through. "#if 1 then" */ #if FOOB == 42 int foo1() { return 0; } #else #error FOOB not 42 #endif #if FOOB != 42 #error FOO is 2 #else int foo2() { return 0; } #endif #if FOOB == 42 || FOO == 1 intx foo3() { return 0; } #else #error FOO not 1 or BAR not 1 #endif #if FOOB != 42 && FOO != 1 #error FOOB not 42 and FOO not 1 #else int foo4() { return 0; } #endif #if FOOB == 42 || FOO != 1 int foo5() { return 0; } #else #error FOOB is 42 or FOO is not 1 #endif #if FOO != 1 || FOOB != 42 #error FOO is 1 or FOOB is 42 #else int foo6() { return 0; } #endif int main() { foo1(); foo2(); foo3(); foo4(); foo5(); foo6(); } unifdef-2.12/tests/blank2u.experr0000644003162300316230000000000013621550713015554 0ustar fanf2fanf2unifdef-2.12/tests/000-init.expout0000644003162300316230000000000013621550713015475 0ustar fanf2fanf2unifdef-2.12/tests/defundef-broken3.sh0000644003162300316230000000003313621550713016452 0ustar fanf2fanf2unifdef -f broken3.h if1.c unifdef-2.12/tests/if1.expout0000644003162300316230000000037513621550714014734 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int bar() { return 0; } int main() { foo(); bar(); } unifdef-2.12/tests/spaces3.expout0000644003162300316230000000033613621550714015613 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ # include # include int bar() { return 0; } int main() { bar(); } unifdef-2.12/tests/spaces2.exprc0000644003162300316230000000000213621550714015375 0ustar fanf2fanf21 unifdef-2.12/tests/multilnnum.expout0000644003162300316230000000110313621550714016447 0ustar fanf2fanf2--- mif1.c~ +++ mif1.c @@ -5,19 +5,13 @@ #include #include -#if FOO +#line 9 "mif1.c" int foo() { return 0; } -#else -#error FOO not defined -#endif +#line 13 "mif1.c" -#if BAR -int foo() { return 0; } -#elif FOO +#line 17 "mif1.c" int bar() { return 0; } -#else -#error FOO not defined -#endif +#line 21 "mif1.c" int main() { --- mif2.c~ +++ mif2.c @@ -5,11 +5,9 @@ #include #include -#if defined(FOO) +#line 9 "mif2.c" int foo() { return 0; } -#else -#error FOO not defined -#endif +#line 13 "mif2.c" int main() { unifdef-2.12/tests/blank0u.sh0000644003162300316230000000003413621550713014666 0ustar fanf2fanf2unifdef -B -UFOO0 blank0u.c unifdef-2.12/tests/outdir.experr0000644003162300316230000000000013621550714015525 0ustar fanf2fanf2unifdef-2.12/tests/spaces2.c0000644003162300316230000000041613621550714014507 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ # include # include # ifndef BAR int bar() { return 0; } # else # error BAR defined # endif int main() { bar(); } unifdef-2.12/tests/if3-a.sh0000644003162300316230000000005413621550714014234 0ustar fanf2fanf2unifdefall.sh -DFOO=1 -DFOOB=42 -UBAR if3.c unifdef-2.12/tests/if5.c0000644003162300316230000000223313621550714013631 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if FOOB == 42 int foo1() { return 0; } #else #error FOOB not 42 #endif #if FOOB != 42 #error FOO is 2 #else int foo2() { return 0; } #endif #if FOOB == 42 || FOO == 1 int foo3() { return 0; } #else #error FOO not 1 or BAR not 1 #endif #if FOOB != 42 && FOO != 1 #error FOOB not 42 and FOO not 1 #else int foo4() { return 0; } #endif #if FOOB == 42 || FOO != 1 int foo5() { return 0; } #else #error FOOB is 42 or FOO is not 1 #endif #if FOO != 1 || FOOB != 42 #error FOO is 1 or FOOB is 42 #else int foo6() { return 0; } #endif #if FOO > FOOB #error FOO is greater than FOOB #else int foo7() { return 0; } #endif #if FOOB < FOO #error FOOB is less than FOO #else int foo8() { return 0; } #endif #if FOO >= FOOB #error FOO is greater than or equal FOOB #else int foo9() { return 0; } #endif #if FOOB <= FOO #error FOOB is less than or equal FOO #else int foo10() { return 0; } #endif int main() { foo1(); foo2(); foo3(); foo4(); foo5(); foo6(); foo7(); foo8(); foo9(); foo10(); } unifdef-2.12/tests/blank4u.c0000644003162300316230000000020113621550713014476 0ustar fanf2fanf2#ifdef FOO4 four #endif #ifdef FOO3 three #endif #ifdef FOO2 two #endif #ifdef FOO1 one #endif #ifdef FOO0 zero #endif unifdef-2.12/tests/if5-a.exprc0000644003162300316230000000000213621550714014736 0ustar fanf2fanf21 unifdef-2.12/tests/whitespace-1.experr0000644003162300316230000000016513621550714016525 0ustar fanf2fanf2unifdef: whitespace.c: 4: Obfuscated preprocessor control line (#if line 1 depth 1) unifdef: Output may be truncated unifdef-2.12/tests/error.sh0000644003162300316230000000003013621550714014460 0ustar fanf2fanf2unifdef -DFOO=1 error.c unifdef-2.12/tests/if4-k.c0000644003162300316230000000156013621550714014062 0ustar fanf2fanf2/* Copyright 2004, 2008 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include #if 0 /* This code is commented out. "#if 0 then" */ #else /* This code is passed through. "#if 0 else" */ #endif #if 1 /* This code is passed through. "#if 1 then" */ #else /* This code is passed through. "#if 1 else" */ #endif #if defined(FOO) || defined(FOOB) int foo1() { return 0; } #else #error FOO or FOOB not defined #endif #if defined(FOOB) || defined(FOO) int foo2() { return 0; } #else #error FOO or FOOB not defined #endif #if defined(FOO) && defined(FOOB) int foo3() { return 0; } #else #error FOO and FOOB not defined #endif #if defined(FOOB) && defined(FOO) int foo4() { return 0; } #else #error FOO and FOOB not defined #endif int main() { foo1(); foo2(); foo3(); foo4(); } unifdef-2.12/tests/whitespace-2.expout0000644003162300316230000001165213621550714016550 0ustar fanf2fanf2#ifdef FOO foo #endif //spong bar unifdef-2.12/tests/if6c.expout0000644003162300316230000000014213621550714015074 0ustar fanf2fanf2#if F1 int f1() { return 0; } #elif F2 int f2() { return 0; } #else int f3() { return 0; } #endif unifdef-2.12/tests/if1.sh0000644003162300316230000000004613621550714014015 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR if1.c unifdef-2.12/tests/defundef-funlike.expout0000644003162300316230000000033313621550713017461 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo() { return 0; } int main() { foo(); } unifdef-2.12/tests/if4-k.experr0000644003162300316230000000000013621550714015131 0ustar fanf2fanf2unifdef-2.12/tests/if5-a.experr0000644003162300316230000000000013621550714015120 0ustar fanf2fanf2unifdef-2.12/tests/exitmode0a.experr0000644003162300316230000000000013621550714016256 0ustar fanf2fanf2unifdef-2.12/tests/args1.experr0000644003162300316230000000000013621550713015233 0ustar fanf2fanf2unifdef-2.12/tests/exitstat.experr0000644003162300316230000000000013621550714016064 0ustar fanf2fanf2unifdef-2.12/tests/if4.expout0000644003162300316230000000051113621550714014727 0ustar fanf2fanf2/* Copyright 2004 Bob Proulx Distributed under the two-clause BSD licence; see the COPYING file for details. */ #include #include int foo1() { return 0; } int foo2() { return 0; } int foo3() { return 0; } int foo4() { return 0; } int main() { foo1(); foo2(); foo3(); foo4(); } unifdef-2.12/tests/crlf-c.expout0000644003162300316230000000022713621550713015416 0ustar fanf2fanf2#if F1 int f1() { return 0; } #elif F2 int f2() { return 0; } #else int f3() { return 0; } #endif \/ /\ comment /\ *\ comment *\ /\ eof unifdef-2.12/tests/error.c0000644003162300316230000000003713621550714014277 0ustar fanf2fanf2#if FOO != 5 #error #endif bar unifdef-2.12/tests/defundef-broken4.exprc0000644003162300316230000000000213621550713017156 0ustar fanf2fanf22 unifdef-2.12/tests/if3.sh0000644003162300316230000000004613621550714014017 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR if3.c unifdef-2.12/tests/crlf-a.exprc0000644003162300316230000000000213621550713015200 0ustar fanf2fanf21 unifdef-2.12/tests/if4.sh0000644003162300316230000000004613621550714014020 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR if4.c unifdef-2.12/tests/error.experr0000644003162300316230000000000013621550714015350 0ustar fanf2fanf2unifdef-2.12/tests/NetBSD-42628.experr0000644003162300316230000000000013621550713015760 0ustar fanf2fanf2unifdef-2.12/tests/whitespace-2.experr0000644003162300316230000000000013621550714016512 0ustar fanf2fanf2unifdef-2.12/tests/overwrite.sh0000644003162300316230000000017313621550714015365 0ustar fanf2fanf2cp if1.c overwrite.c unifdef -DFOO=1 -DFOOB=42 -UBAR -ooverwrite.c overwrite.c e=$? cat overwrite.c rm overwrite.c exit $e unifdef-2.12/tests/exitmode2a.sh0000644003162300316230000000005213621550714015374 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR -x2 if1.c unifdef-2.12/tests/error.expout0000644003162300316230000000001313621550714015373 0ustar fanf2fanf2#error bar unifdef-2.12/tests/overin.experr0000644003162300316230000000000013621550714015521 0ustar fanf2fanf2unifdef-2.12/tests/if2.sh0000644003162300316230000000004613621550714014016 0ustar fanf2fanf2unifdef -DFOO=1 -DFOOB=42 -UBAR if2.c unifdef-2.12/tests/div.c0000644003162300316230000000003713621550713013727 0ustar fanf2fanf2#if 10 / DENOM DIVISION #endif unifdef-2.12/tests/blank2u.sh0000644003162300316230000000003413621550713014670 0ustar fanf2fanf2unifdef -B -UFOO2 blank2u.c unifdef-2.12/tests/spaces4.experr0000644003162300316230000000000013621550714015561 0ustar fanf2fanf2unifdef-2.12/unifdef.txt0000644003162300316230000002504013621550713014021 0ustar fanf2fanf2UNIFDEF(1) Programmer's Manual UNIFDEF(1) NAME unifdef, unifdefall -- remove preprocessor conditionals from code SYNOPSIS unifdef [-bBcdehKkmnsStV] [-Ipath] [-[i]Dsym[=val]] [-[i]Usym] ... [-f defile] [-x {012}] [-M backext] [-o outfile] [infile ...] unifdefall [-Ipath] ... file DESCRIPTION The unifdef utility selectively processes conditional cpp(1) directives. It removes from a file both the directives and any additional text that they specify should be removed, while otherwise leaving the file alone. The unifdef utility acts on #if, #ifdef, #ifndef, #elif, #else, and #endif lines, using macros specified in -D and -U command line options or in -f definitions files. A directive is processed if the macro specifi- cations are sufficient to provide a definite value for its control expression. If the result is false, the directive and the following lines under its control are removed. If the result is true, only the directive is removed. An #ifdef or #ifndef directive is passed through unchanged if its controlling macro is not specified. Any #if or #elif control expression that has an unknown value or that unifdef cannot parse is passed through unchanged. By default, unifdef ignores #if and #elif lines with constant expressions; it can be told to process them by speci- fying the -k flag on the command line. It understands a commonly-used subset of the expression syntax for #if and #elif lines: integer constants, integer values of macros defined on the command line, the defined() operator, the operators !, ~, - (unary), *, /, %, +, -, <, <=, >, >=, ==, !=, &, ^, |, &&, ||, and parenthesized expressions. Division by zero is treated as an unknown value. A kind of ``short circuit'' evaluation is used for the && operator: if either oper- and is definitely false then the result is false, even if the value of the other operand is unknown. Similarly, if either operand of || is def- initely true then the result is true. When evaluating an expression, unifdef does not expand macros first. The value of a macro must be a simple number, not an expression. A limited form of indirection is allowed, where one macro's value is the name of another. In most cases, unifdef does not distinguish between object-like macros (without arguments) and function-like macros (with arguments). A func- tion-like macro invocation can appear in #if and #elif control expres- sions. If the macro is not explicitly defined, or is defined with the -D flag on the command-line, or with #define in a -f definitions file, its arguments are ignored. If a macro is explicitly undefined on the command line with the -U flag, or with #undef in a -f definitions file, it may not have any arguments since this leads to a syntax error. The unifdef utility understands just enough about C to know when one of the directives is inactive because it is inside a comment, or cannot be evaluated because it is split by a backslash-continued line. It spots unusually-formatted preprocessor directives and passes them through unchanged when the layout is too odd for it to handle. (See the BUGS section below.) A script called unifdefall can be used to remove all conditional cpp(1) directives from a file. It uses unifdef -s and cpp -dM to get lists of all the controlling macros and their definitions (or lack thereof), then invokes unifdef with appropriate arguments to process the file. OPTIONS -Dsym=val Specify that a macro is defined to a given value. -Dsym Specify that a macro is defined to the value 1. -Usym Specify that a macro is undefined. If the same macro appears in more than one argument, the last occurrence dominates. -iDsym[=val] -iUsym C strings, comments, and line continuations are ignored within #ifdef and #ifndef blocks controlled by macros specified with these options. -f defile The file defile contains #define and #undef preprocessor direc- tives, which have the same effect as the corresponding -D and -U command-line arguments. You can have multiple -f arguments and mix them with -D and -U arguments; later options override earlier ones. Each directive must be on a single line. Object-like macro defi- nitions (without arguments) are set to the given value. Func- tion-like macro definitions (with arguments) are treated as if they are set to 1. Warning: string literals and character constants are not parsed correctly in -f files. -b Replace removed lines with blank lines instead of deleting them. Mutually exclusive with the -B option. -B Compress blank lines around a deleted section. Mutually exclu- sive with the -b option. -c Complement, i.e., lines that would have been removed or blanked are retained and vice versa. -d Turn on printing of debugging messages. -e By default, unifdef will report an error if it needs to remove a preprocessor directive that spans more than one line, for exam- ple, if it has a multi-line comment hanging off its right hand end. The -e flag makes it ignore the line instead. -h Print help. -Ipath Specifies to unifdefall an additional place to look for #include files. This option is ignored by unifdef for compatibility with cpp(1) and to simplify the implementation of unifdefall. -K Always treat the result of && and || operators as unknown if either operand is unknown, instead of short-circuiting when unknown operands can't affect the result. This option is for compatibility with older versions of unifdef. -k Process #if and #elif lines with constant expressions. By default, sections controlled by such lines are passed through unchanged because they typically start ``#if 0'' and are used as a kind of comment to sketch out future or past development. It would be rude to strip them out, just as it would be for normal comments. -m Modify one or more input files in place. If an input file is not modified, the original is preserved instead of being overwritten with an identical copy. -M backext Modify input files in place, and keep backups of the original files by appending the backext to the input filenames. A zero length backext behaves the same as the -m option. -n Add #line directives to the output following any deleted lines, so that errors produced when compiling the output file correspond to line numbers in the input file. -o outfile Write output to the file outfile instead of the standard output when processing a single file. -s Instead of processing an input file as usual, this option causes unifdef to produce a list of macros that are used in preprocessor directive controlling expressions. -S Like the -s option, but the nesting depth of each macro is also printed. This is useful for working out the number of possible combinations of interdependent defined/undefined macros. -t Disables parsing for C strings, comments, and line continuations, which is useful for plain text. This is a blanket version of the -iD and -iU flags. -V Print version details. -x {012} Set exit status mode to zero, one, or two. See the EXIT STATUS section below for details. The unifdef utility takes its input from stdin if there are no file argu- ments. You must use the -m or -M options if there are multiple input files. You can specify inut from stdin or output to stdout with '-'. The unifdef utility works nicely with the -Dsym option of diff(1). EXIT STATUS In normal usage the unifdef utility's exit status depends on the mode set using the -x option. If the exit mode is zero (the default) then unifdef exits with status 0 if the output is an exact copy of the input, or with status 1 if the out- put differs. If the exit mode is one, unifdef exits with status 1 if the output is unmodified or 0 if it differs. If the exit mode is two, unifdef exits with status zero in both cases. In all exit modes, unifdef exits with status 2 if there is an error. The exit status is 0 if the -h or -V command line options are given. DIAGNOSTICS EOF in comment Inappropriate #elif, #else or #endif Missing macro name in #define or #undef Obfuscated preprocessor control line Premature EOF (with the line number of the most recent unterminated #if) Too many levels of nesting Unrecognized preprocessor directive Unterminated char or string literal SEE ALSO cpp(1), diff(1) The unifdef home page is http://dotat.at/prog/unifdef HISTORY The unifdef command appeared in 2.9BSD. ANSI C support was added in FreeBSD 4.7. AUTHORS The original implementation was written by Dave Yost . Tony Finch rewrote it to support ANSI C. BUGS o Expression evaluation is very limited. o Character constants are not evaluated. String literals and character constants in -f definition files are ignored rather than parsed as part of a macro's replacement tokens. o Only the basic form of C++ raw string literals is recognized, like R"(string)" without delimiters as in R"delimiter(string)delimiter". o Source files are processed one line at a time, so preprocessor direc- tives split across more than one physical line (because of comments or backslash-newline) cannot be handled in every situation. o Trigraphs are not recognized. o There is no support for macros with different definitions at differ- ent points in the source file. o The text-mode and ignore functionality does not correspond to modern cpp(1) behaviour. Please send bug reports by email to . December 3, 2015 unifdef-2.12/win32/0000755003162300316230000000000013621550714012602 5ustar fanf2fanf2unifdef-2.12/win32/unifdef.sln0000644003162300316230000000156013621550714014742 0ustar fanf2fanf2 Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unifdef", "unifdef.vcxproj", "{52450E07-855E-4522-BD4C-7B1E84D8D592}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {52450E07-855E-4522-BD4C-7B1E84D8D592}.Debug|Win32.ActiveCfg = Debug|Win32 {52450E07-855E-4522-BD4C-7B1E84D8D592}.Debug|Win32.Build.0 = Debug|Win32 {52450E07-855E-4522-BD4C-7B1E84D8D592}.Release|Win32.ActiveCfg = Release|Win32 {52450E07-855E-4522-BD4C-7B1E84D8D592}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal unifdef-2.12/win32/Makefile.mingw0000644003162300316230000000057613621550714015372 0ustar fanf2fanf2# To build, run: # mingw32-make -f win32/Makefile.mingw all: unifdef.exe unifdef.exe: unifdef.c win32/win32.c FreeBSD/getopt.c FreeBSD/err.c cd win32 && \ cp ../unifdef.c ../version.h . && \ $(CC) $(CFLAGS) $(LDFLAGS) -I. -o ../unifdef.exe unifdef.c \ win32.c ../FreeBSD/getopt.c ../FreeBSD/err.c && \ rm -f unifdef.c version.h test: unifdef.exe scripts/runtests.sh tests unifdef-2.12/win32/unifdef.h0000644003162300316230000000547113621550714014402 0ustar fanf2fanf2/* * Copyright (c) 2012 - 2015 Tony Finch * * 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. */ /* Stop being stupid about POSIX functions */ #define _CRT_SECURE_NO_WARNINGS #define _SCL_SECURE_NO_WARNINGS #define _CRT_NONSTDC_NO_WARNINGS #include #include #include #include #include #include #include /* Windows POSIX-flavoured headers */ #include #include #include #define stat _stat /* fake stdbool.h */ #define true 1 #define false 0 #define bool int /* used by err.c and getopt.c */ #define _getprogname() "unifdef" /* * The snprintf() workaround is unnecessary in Visual Studio 2015 or later * but dogma dictates that #if directives are not allowed inside unifdef. */ #define snprintf c99_snprintf /* win32.c */ int replace(const char *oldname, const char *newname); FILE *mktempmode(char *tmp, int mode); FILE *fbinmode(FILE *fp); int c99_snprintf(char *buf, size_t buflen, const char *format, ...); /* err.c */ void err(int, const char *, ...); void verr(int, const char *, va_list); void errc(int, int, const char *, ...); void verrc(int, int, const char *, va_list); void errx(int, const char *, ...); void verrx(int, const char *, va_list); void warn(const char *, ...); void vwarn(const char *, va_list); void warnc(int, const char *, ...); void vwarnc(int, const char *, va_list); void warnx(const char *, ...); void vwarnx(const char *, va_list); /* getopt.c */ int getopt(int nargc, char *nargv[], const char *ostr); extern int opterr, optind, optopt, optreset; extern char *optarg; unifdef-2.12/win32/unifdef.vcxproj0000644003162300316230000001135113621550714015640 0ustar fanf2fanf2 Debug Win32 Release Win32 {52450E07-855E-4522-BD4C-7B1E84D8D592} Win32Proj unifdef Application true MultiByte Application false true MultiByte true false Use Level3 Disabled WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDebug .\ unifdef.h Console true Level3 Use MaxSpeed true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded .\ unifdef.h Console true true true Create Create unifdef-2.12/win32/win32.c0000644003162300316230000000540213621550714013711 0ustar fanf2fanf2/* * Copyright (c) 2012 - 2014 Tony Finch * * 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. */ #include "unifdef.h" /* * The Windows implementation of rename() fails if the new filename * already exists. Atomic replacement is not really needed, so just * remove anything that might be in the way before renaming. */ int replace(const char *oldname, const char *newname) { if (remove(newname) < 0 && errno != ENOENT) warn("can't remove \"%s\"", newname); return (rename(oldname, newname)); } FILE * mktempmode(char *tmp, int mode) { mode = mode; return (fopen(_mktemp(tmp), "wb")); } FILE * fbinmode(FILE *fp) { _setmode(_fileno(fp), _O_BINARY); return (fp); } /* * This is more long-winded than seems necessary because MinGW * doesn't have a proper implementation of _vsnprintf_s(). * * This link has some useful info about snprintf() on Windows: * http://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010 */ int c99_snprintf(char *buf, size_t buflen, const char *format, ...) { va_list ap; int outlen, cpylen, tmplen; char *tmp; va_start(ap, format); outlen = _vscprintf(format, ap); va_end(ap); if (buflen == 0 || outlen < 0) return outlen; if (buflen > outlen) cpylen = outlen; else cpylen = buflen - 1; /* Paranoia about off-by-one errors in _snprintf() */ tmplen = outlen + 2; tmp = (char *)malloc(tmplen); if (tmp == NULL) err(2, "malloc"); va_start(ap, format); _vsnprintf(tmp, tmplen, format, ap); va_end(ap); memcpy(buf, tmp, cpylen); buf[cpylen] = '\0'; free(tmp); return outlen; } unifdef-2.12/scripts/0000755003162300316230000000000013621550713013326 5ustar fanf2fanf2unifdef-2.12/scripts/git.config0000644003162300316230000000060713621550713015303 0ustar fanf2fanf2[core] repositoryformatversion = 0 [svn-remote "svn"] rewriteRoot = svn://svn.FreeBSD.org/base/head/usr.bin/unifdef url = svn+ssh://fanf@svn.FreeBSD.org/base/head/usr.bin/unifdef fetch = :refs/remotes/git-svn [remote "github"] url = git@github.com:fanf2/unifdef.git fetch = +refs/heads/*:refs/remotes/github/* fetch = +refs/pull/*/head:refs/remotes/github/pull/* unifdef-2.12/scripts/gitlog2changelog.sh0000755003162300316230000000027713621550713017112 0ustar fanf2fanf2#!/bin/sh line="---------------------------------------------------" git log --no-merges -M --stat \ --pretty=format:"$line%n%ai %an <%ae>%n%n%s%n%n%b" | uniq | fold -s echo echo $line unifdef-2.12/scripts/fixtests.sh0000755003162300316230000000014513621550713015536 0ustar fanf2fanf2#!/bin/sh for ext in err out rc do for f in tests/*.$ext do mv $f ${f%.$ext}.exp$ext done done unifdef-2.12/scripts/release.sh0000755003162300316230000000035013621550713015303 0ustar fanf2fanf2#!/bin/sh . ./version.sh for f in $@ $(git ls-files | egrep -v '^web/|^[.]git$') do mkdir -p web/$V/$(dirname $f) cp $f web/$V/$f done cd web zip -qr $V.zip $V tar cf $V.tar $V xz -k9 $V.tar gzip -9 $V.tar rm -R $V ls -l $V.* unifdef-2.12/scripts/runtests.sh0000755003162300316230000000110213621550713015546 0ustar fanf2fanf2#!/bin/sh export PATH="$(pwd):${PATH}" ${1:+cd} ${1:-:} for cmd in *.sh do printf . t=${cmd%.sh} sh ./${cmd} >${t}.out 2>${t}.err echo $? >${t}.rc # strip carriage returns from error output # in case we are trying to run on MinGW tr -d ' ' >${t}.xerr <${t}.err mv ${t}.xerr ${t}.err ok=true for e in out err rc do exp=${t}.exp${e} got=${t}.${e} if ! cmp -s ${exp} ${got} then echo echo FAILED: ${got}: $(cat ${cmd}) diff -u ${exp} ${got} ok=false fi done if ${ok} then rm -f ${t}.out ${t}.err ${t}.rc else rc=1 fi done echo exit ${rc} unifdef-2.12/scripts/reversion.sh0000755003162300316230000000144413621550713015704 0ustar fanf2fanf2#!/bin/sh if [ ! -f version.sh ] && [ ! -d .git ] then echo Your copy of unifdef is incomplete 1>&2 exit 1 fi [ -f version.sh ] && . ./version.sh if [ -d .git ] then GV=$(git describe | sed 's|-g*|.|g;s|[.]|-|') git update-index -q --refresh if git diff-index --quiet HEAD then GD="$(git show --pretty=format:%ai -s HEAD)" else GD="$(date +'%Y-%m-%d %H:%M:%S %z')" GV=$GV.XX fi [ unifdef -nt unifdef.c ] && [ unifdef -nt unifdef.h ] && GD="$D" if [ "$GV $GD" != "$V $D" ] then echo "version $V $D" 1>&2 echo " -> $GV $GD" 1>&2 V="$GV" D="$GD" echo "V=\"$V\"" >version.sh echo "D=\"$D\"" >>version.sh rm -f version.h fi fi if [ ! -f version.h ] then printf '"@(#) $Version: %s $\\n"\n' "$V" >version.h printf '"@(#) $Date: %s $\\n"\n' "$D" >>version.h fi unifdef-2.12/scripts/upload.sh0000755003162300316230000000100513621550713015145 0ustar fanf2fanf2#!/bin/sh -e make unifdef.txt cp unifdef.txt web git gc --aggressive git update-server-info git push --all github git push --tags github # for gitweb echo "selectively remove C preprocessor conditionals" >.git/description echo "Homepage: http://dotat.at/prog/unifdef" >.git/README.html touch .git/git-daemon-export-ok rsync --recursive --links --delete .git/ chiark:public-git/unifdef.git/ rsync --recursive --links web/ chiark:public-html/prog/unifdef/ exit unifdef-2.12/scripts/svnup.sh0000755003162300316230000000027613621550713015045 0ustar fanf2fanf2#!/bin/sh -e git svn fetch -A scripts/authors.svn git checkout FreeBSD case "$(git merge --no-commit git-svn)" in "Already up-to-date.") exit 0 esac git commit -m 'Merge back from svn' unifdef-2.12/scripts/copycheck.sh0000755003162300316230000000062113621550713015634 0ustar fanf2fanf2#!/bin/sh me=$(git config user.name || echo WHO-AM-I) now=$(date +%Y) ! git grep -l "Copyright .* $me" | grep -v 'tests/.*[.]exp[a-z]*' | ( while read f do git log --format="%ci $f" -1 -- $f done; git log --format="%ci COPYING" -1 ) | grep ^$now | while read d t z f do grep -H -m 1 "Copyright .* $me" $f done | grep -v $now grep ^[.]Dd unifdef.1 | grep -v "$(date +'%B [0-9]*, %Y')" exit 0 unifdef-2.12/scripts/authors.svn0000644003162300316230000000122713621550713015545 0ustar fanf2fanf2charnier = Philippe Charnier dd = Dima Dorfman ed = Ed Schouten fanf = Tony Finch hrs = Hiroki Sato imp = Warner Losh jmallett = Juli Mallett joel = Joel Dahl markm = Mark Murray nik = Nik Clayton obrien = David E. O'Brien peter = Peter Wemm rgrimes = Rodney W. Grimes ru = Ruslan Ermilov schweikh = Jens Schweikhardt unifdef-2.12/unifdefall.sh0000755003162300316230000000406013621550714014310 0ustar fanf2fanf2#!/bin/sh # # unifdefall: remove all the #if's from a source file # # Copyright (c) 2002 - 2013 Tony Finch # Copyright (c) 2009 - 2010 Jonathan Nieder # # 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 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 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. set -e unifdef="$(dirname "$0")/unifdef" if [ ! -e "$unifdef" ] then unifdef=unifdef fi case "$@" in "-d "*) echo DEBUGGING 1>&2 debug=-d shift esac tmp=$(mktemp -d "${TMPDIR:-/tmp}/${0##*/}.XXXXXXXXXX") || exit 2 trap 'rm -r "$tmp" || exit 2' EXIT export LC_ALL=C # list of all controlling macros; assume these are undefined "$unifdef" $debug -s "$@" | sort -u | sed 's/^/#undef /' >"$tmp/undefs" # list of all macro definitions cc -E -dM "$@" | sort >"$tmp/defs" case $debug in -d) cat "$tmp/undefs" "$tmp/defs" 1>&2 esac # order of -f arguments means definitions override undefs "$unifdef" $debug -k -f "$tmp/undefs" -f "$tmp/defs" "$@" unifdef-2.12/FreeBSD/0000755003162300316230000000000013621550713013051 5ustar fanf2fanf2unifdef-2.12/FreeBSD/getopt.c0000644003162300316230000000722013621550713014520 0ustar fanf2fanf2/* * Copyright (c) 1987, 1993, 1994 * The Regents of the University of California. All rights reserved. * * 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. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. */ #include "unifdef.h" int opterr = 1, /* if error message should be printed */ optind = 1, /* index into parent argv vector */ optopt, /* character checked for validity */ optreset; /* reset getopt */ char *optarg; /* argument associated with option */ #define BADCH (int)'?' #define BADARG (int)':' static char EMSG[] = ""; /* * getopt -- * Parse argc/argv argument vector. */ int getopt(int nargc, char *nargv[], const char *ostr) { static char *place = EMSG; /* option letter processing */ const char *oli; /* option letter list index */ if (optreset || *place == 0) { /* update scanning pointer */ optreset = 0; place = nargv[optind]; if (optind >= nargc || *place++ != '-') { /* Argument is absent or is not an option */ place = EMSG; return (-1); } optopt = *place++; if (optopt == '-' && *place == 0) { /* "--" => end of options */ ++optind; place = EMSG; return (-1); } if (optopt == 0) { /* Solitary '-', treat as a '-' option if the program (eg su) is looking for it. */ place = EMSG; if (strchr(ostr, '-') == NULL) return (-1); optopt = '-'; } } else optopt = *place++; /* See if option letter is one the caller wanted... */ if (optopt == ':' || (oli = strchr(ostr, optopt)) == NULL) { if (*place == 0) ++optind; if (opterr && *ostr != ':') (void)fprintf(stderr, "%s: illegal option -- %c\n", _getprogname(), optopt); return (BADCH); } /* Does this option need an argument? */ if (oli[1] != ':') { /* don't need argument */ optarg = NULL; if (*place == 0) ++optind; } else { /* Option-argument is either the rest of this argument or the entire next argument. */ if (*place) optarg = place; else if (nargc > ++optind) optarg = nargv[optind]; else { /* option-argument absent */ place = EMSG; if (*ostr == ':') return (BADARG); if (opterr) (void)fprintf(stderr, "%s: option requires an argument -- %c\n", _getprogname(), optopt); return (BADCH); } place = EMSG; ++optind; } return (optopt); /* return option letter */ } unifdef-2.12/FreeBSD/err.c0000644003162300316230000000627313621550713014015 0ustar fanf2fanf2/*- * Copyright (c) 1993 * The Regents of the University of California. All rights reserved. * * 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. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. */ #include "unifdef.h" void err(int eval, const char *fmt, ...) { va_list ap; va_start(ap, fmt); verrc(eval, errno, fmt, ap); va_end(ap); } void verr(int eval, const char *fmt, va_list ap) { verrc(eval, errno, fmt, ap); } void errc(int eval, int code, const char *fmt, ...) { va_list ap; va_start(ap, fmt); verrc(eval, code, fmt, ap); va_end(ap); } void verrc(int eval, int code, const char *fmt, va_list ap) { fprintf(stderr, "%s: ", _getprogname()); if (fmt != NULL) { vfprintf(stderr, fmt, ap); fprintf(stderr, ": "); } fprintf(stderr, "%s\n", strerror(code)); exit(eval); } void errx(int eval, const char *fmt, ...) { va_list ap; va_start(ap, fmt); verrx(eval, fmt, ap); va_end(ap); } void verrx(int eval, const char *fmt, va_list ap) { fprintf(stderr, "%s: ", _getprogname()); if (fmt != NULL) vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); exit(eval); } void warn(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vwarnc(errno, fmt, ap); va_end(ap); } void vwarn(const char *fmt, va_list ap) { vwarnc(errno, fmt, ap); } void warnc(int code, const char *fmt, ...) { va_list ap; va_start(ap, fmt); vwarnc(code, fmt, ap); va_end(ap); } void vwarnc(int code, const char *fmt, va_list ap) { fprintf(stderr, "%s: ", _getprogname()); if (fmt != NULL) { vfprintf(stderr, fmt, ap); fprintf(stderr, ": "); } fprintf(stderr, "%s\n", strerror(code)); } void warnx(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vwarnx(fmt, ap); va_end(ap); } void vwarnx(const char *fmt, va_list ap) { fprintf(stderr, "%s: ", _getprogname()); if (fmt != NULL) vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); }