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

oliver oliver at beefrankly.org
Wed Feb 19 17:20:01 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: Wed, 19 Feb 2014 18:16:25 +0100

 --MP_/NAgdYqlUya1F0SfphC5qWGw
 Content-Type: text/plain; charset=US-ASCII
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline
 
 sorry wrong patch file, patch again - correct version.
 --MP_/NAgdYqlUya1F0SfphC5qWGw
 Content-Type: text/plain
 Content-Transfer-Encoding: 7bit
 Content-Disposition: attachment; filename=patch.txt
 
 --- /usr/src/usr.bin/calendar/calcpp.c	2014-02-19 00:43:47.000000000 +0100
 +++ calcpp.c	2014-02-19 17:56:34.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,46 @@
  			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;
 +                	while (buf++ != idx_ts); 
 +            	}
 +            	*buf = '\0';
 +    	} else if (idx_ts != NULL && idx_te != NULL && cf == 0 
 +	    	&& idx_ts < idx_te) {
 +            	memmove(idx_ts, idx_te+te_len,
 +	    	       (buf+size)-(idx_ts+te_len));
 +            	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_/NAgdYqlUya1F0SfphC5qWGw--


More information about the freebsd-bugs mailing list