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