The following reply was made to PR bin/186294; it has been noted by GNATS.

From: oliver <[email protected]>
To: [email protected], [email protected]
Cc:  
Subject: Re: bin/186294: calendar(1): calendar&#39; preprocessor process
 comments
Date: Mon, 3 Mar 2014 19:54:02 +0100

 --MP_/PvNvoarowC1Efp0H7PxZt==
 Content-Type: text/plain; charset=US-ASCII
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline
 
 okay, here is my final patch for this issue and issue bin/184648
 
 I modified my original patch for removing multiple inline comments. I
 tested it against an original version of calendar and did not find any
 additional issues.
 
 Greetings, Oliver
 --MP_/PvNvoarowC1Efp0H7PxZt==
 Content-Type: text/plain
 Content-Transfer-Encoding: 7bit
 Content-Disposition: attachment; filename=patch3.txt
 
 --- /usr/src/usr.bin/calendar/calcpp.c 2014-03-03 19:22:25.000000000 +0100
 +++ calcpp.c   2014-03-03 19:19:37.000000000 +0100
 @@ -52,6 +52,8 @@
  static void pushfp(FILE *fp);
  static FILE *popfp(void);
  static int tokenscpp(char *buf, char *string);
 +static void striptags(char *buf, int size, const char *ts, const char *te);
 +static void rmcomments(char *buf, int size); 
  
  #define T_INVALID     -1
  #define T_INCLUDE     0
 @@ -93,6 +95,7 @@
                        return(fp);
                }
        }
 +      rmcomments(buf,size);
        switch (tokenscpp(buf, name)) {
        case T_INCLUDE:
                *buf = '\0';
 @@ -230,3 +233,48 @@
                        return (1);
        return (0);
  }
 +
 +
 +
 +
 +
 +static void 
 +rmcomments(char *buf, int size) 
 +{
 +      striptags(buf,size,"/*", "*/");
 +}
 +
 +
 +static void 
 +striptags(char *buf, int size, const char *ts, const char *te)
 +{
 +      static int cf = 0; /* carry flag */
 +      int te_len = strlen(te); /* end tag length */
 +      char *idx_ts = strstr(buf, ts);
 +      char *idx_te = strstr(buf, te);
 +      if (idx_ts == NULL && idx_te == NULL) {
 +              if (cf == 0)
 +                      return;
 +              else  
 +                      *buf='\0';
 +      } else if (idx_ts != NULL && idx_te == NULL) {
 +              if (cf == 0) {
 +                      cf = 1;
 +                      buf = idx_ts; 
 +              }
 +              *buf = '\0';
 +      } else if (idx_ts != NULL && idx_te != NULL && cf == 0) { 
 +              if (idx_ts < idx_te) {
 +                      memmove(idx_ts, idx_te+te_len,
 +                             (buf+size)-(idx_ts+te_len));
 +              } else {
 +                      buf = idx_ts;
 +              }
 +              striptags(buf,size,ts,te);
 +      } else if (idx_ts == NULL && idx_te != NULL && cf == 1) {
 +              memmove(buf, idx_te+te_len,
 +                     (buf+size)-(idx_te+te_len));
 +              cf = 0;
 +      }
 +      return;
 +}
 
 --MP_/PvNvoarowC1Efp0H7PxZt==--
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"

Reply via email to