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"

Reply via email to