Author: se Date: Wed Oct 28 13:06:39 2020 New Revision: 367103 URL: https://svnweb.freebsd.org/changeset/base/367103
Log: Fix parsing of #ifdef in calendar files There was code to process an #ifndef tokens, but none for #ifdef. The #ifdef token was mentioned as unsupported in the BUGS section, but no reason was given and I do not see why it should stay omitted. Misleading information in The BUGS section of the man-page regarding the maximum number of #define and #include statements supported has been removed. These limits might have applied to a prior version of this program, but do not seem to apply to the current implementation. I have not tried to test for the existence of the limits, but the include file processing just recursively calls the parser (without counting the recursion depth) and the stringlist functions do not impose a limit on the number of entries. Reported by: j...@berklix.com MFC after: 3 days Modified: head/usr.bin/calendar/calendar.1 head/usr.bin/calendar/io.c Modified: head/usr.bin/calendar/calendar.1 ============================================================================== --- head/usr.bin/calendar/calendar.1 Wed Oct 28 11:54:09 2020 (r367102) +++ head/usr.bin/calendar/calendar.1 Wed Oct 28 13:06:39 2020 (r367103) @@ -346,11 +346,9 @@ double-check the start and end time of solar and lunar .Sh BUGS The .Nm -internal cpp does not correctly do #ifndef and will discard the rest -of the file if a #ifndef is triggered. -It also has a maximum of 50 include file and/or 100 #defines -and only recognises #include, #define and -#ifndef. +internal cpp does not support nested conditions and will continue +parsing of the input file on the next #endif even in nested contexts. +It does only recognise #include, #define, #ifdef and #ifndef. .Pp There is no possibility to properly specify the local position needed for solar and lunar calculations. Modified: head/usr.bin/calendar/io.c ============================================================================== --- head/usr.bin/calendar/io.c Wed Oct 28 11:54:09 2020 (r367102) +++ head/usr.bin/calendar/io.c Wed Oct 28 13:06:39 2020 (r367103) @@ -212,6 +212,21 @@ token(char *line, FILE *out, bool *skip) return (T_OK); } + if (strncmp(line, "ifdef", 5) == 0) { + walk = line + 6; + trimlr(&walk); + + if (*walk == '\0') { + warnx("Expecting arguments after #ifdef"); + return (T_ERR); + } + + if (definitions == NULL || sl_find(definitions, walk) == NULL) + *skip = true; + + return (T_OK); + } + if (strncmp(line, "ifndef", 6) == 0) { walk = line + 6; trimlr(&walk); _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"