svn commit: r204262 - user/edwin/calendar

Edwin Groothuis edwin at FreeBSD.org
Tue Feb 23 21:28:25 UTC 2010


Author: edwin
Date: Tue Feb 23 21:28:25 2010
New Revision: 204262
URL: http://svn.freebsd.org/changeset/base/204262

Log:
  Properly handle definitions in dayofmonth/month* format. (* means
  variable each year, which unless these calendar files are updated
  every year will be out of sync very fast)

Modified:
  user/edwin/calendar/io.c
  user/edwin/calendar/parsedata.c

Modified: user/edwin/calendar/io.c
==============================================================================
--- user/edwin/calendar/io.c	Tue Feb 23 21:26:05 2010	(r204261)
+++ user/edwin/calendar/io.c	Tue Feb 23 21:28:25 2010	(r204262)
@@ -181,6 +181,13 @@ cal(void)
 		    extradata)) == 0)
 			continue;
 		*pp = p;
+		if (count < 0) {
+			/* Show error status based on return value */
+			fprintf(stderr, "Ignored: %s\n", buf);
+			if (count == -1)
+				continue;
+			count = -count + 1;
+		}
 
 		/* Find the last tab */
 		while (pp[1] == '\t')

Modified: user/edwin/calendar/parsedata.c
==============================================================================
--- user/edwin/calendar/parsedata.c	Tue Feb 23 21:26:05 2010	(r204261)
+++ user/edwin/calendar/parsedata.c	Tue Feb 23 21:28:25 2010	(r204262)
@@ -374,6 +374,7 @@ parsedaymonth(char *date, int *yearp, in
 	int idayofweek, imonth, idayofmonth, year, index;
 	int d, m, dow, rm, rd, offset;
 	char *ed;
+	int retvalsign = 1;
 
 	static struct yearinfo *years, *yearinfo;
 
@@ -458,6 +459,15 @@ parsedaymonth(char *date, int *yearp, in
 			continue;
 		}
 
+		/* XXX Same day every year, but variable */
+		if (*flags == (F_MONTH | F_DAYOFMONTH | F_VARIABLE)) {
+			if (!remember_ymd(year, imonth, idayofmonth))
+				continue;
+			remember(&index, yearp, monthp, dayp, edp,
+			    year, imonth, idayofmonth, NULL);
+			continue;
+		}
+
 		/* Same day every month */
 		if (*flags == (F_ALLMONTH | F_DAYOFMONTH)) {
 			for (m = 1; m <= 12; m++) {
@@ -697,9 +707,13 @@ parsedaymonth(char *date, int *yearp, in
 		debug_determinestyle(2, date, *flags, month, imonth,
 		    dayofmonth, idayofmonth, dayofweek, idayofweek,
 		    modifieroffset, modifierindex, specialday);
+		retvalsign = -1;
 	}
 
-	return (index);
+	if (retvalsign == -1)
+		return (-index - 1);
+	else
+		return (index);
 }
 
 static char *


More information about the svn-src-user mailing list