bin/186294: calendar(1): calendar' preprocessor process comments

oliver oliver at beefrankly.org
Mon Mar 3 19:00:05 UTC 2014


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

From: oliver <oliver at beefrankly.org>
To: bug-followup at FreeBSD.org, romain at FreeBSD.org
Cc:  
Subject: Re: bin/186294: calendar(1): calendar' 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==--


More information about the freebsd-bugs mailing list