Module Name:    src
Committed By:   apb
Date:           Wed Oct  8 14:43:48 UTC 2014

Modified Files:
        src/lib/libutil: parsedate.y

Log Message:
Add a new non-terminal "time_numericzone" for a time with
a numeric timezone.  Move some productions from "time" to "time_numericzone".
Increment yyHaveZone when encountering one of these.

Previously, input of the form "HH:MM:SS +ZZZZ" would not have set the
yyhaveZone flag.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/lib/libutil/parsedate.y

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libutil/parsedate.y
diff -u src/lib/libutil/parsedate.y:1.18 src/lib/libutil/parsedate.y:1.19
--- src/lib/libutil/parsedate.y:1.18	Wed Oct  8 14:32:29 2014
+++ src/lib/libutil/parsedate.y	Wed Oct  8 14:43:48 2014
@@ -14,7 +14,7 @@
 
 #include <sys/cdefs.h>
 #ifdef __RCSID
-__RCSID("$NetBSD: parsedate.y,v 1.18 2014/10/08 14:32:29 apb Exp $");
+__RCSID("$NetBSD: parsedate.y,v 1.19 2014/10/08 14:43:48 apb Exp $");
 #endif
 
 #include <stdio.h>
@@ -118,6 +118,10 @@ spec	: /* NULL */
 item	: time {
 	    param->yyHaveTime++;
 	}
+	| time_numericzone {
+	    param->yyHaveTime++;
+	    param->yyHaveZone++;
+	}
 	| zone {
 	    param->yyHaveZone++;
 	}
@@ -197,33 +201,35 @@ time	: tUNUMBER tMERIDIAN {
 	    param->yySeconds = 0;
 	    param->yyMeridian = $4;
 	}
-	| tUNUMBER ':' tUNUMBER tSNUMBER {
-	    param->yyHour = $1;
-	    param->yyMinutes = $3;
-	    param->yyMeridian = MER24;
-	    param->yyDSTmode = DSToff;
-	    param->yyTimezone = - ($4 % 100 + ($4 / 100) * 60);
-	}
 	| tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid {
 	    param->yyHour = $1;
 	    param->yyMinutes = $3;
 	    param->yySeconds = $5;
 	    param->yyMeridian = $6;
 	}
-	| tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER {
+	| tUNUMBER ':' tUNUMBER ':' tUNUMBER '.' tUNUMBER {
 	    param->yyHour = $1;
 	    param->yyMinutes = $3;
 	    param->yySeconds = $5;
 	    param->yyMeridian = MER24;
+/* XXX: Do nothing with millis */
+	}
+	;
+
+time_numericzone : tUNUMBER ':' tUNUMBER tSNUMBER {
+	    param->yyHour = $1;
+	    param->yyMinutes = $3;
+	    param->yyMeridian = MER24;
 	    param->yyDSTmode = DSToff;
-	    param->yyTimezone = - ($6 % 100 + ($6 / 100) * 60);
+	    param->yyTimezone = - ($4 % 100 + ($4 / 100) * 60);
 	}
-	| tUNUMBER ':' tUNUMBER ':' tUNUMBER '.' tUNUMBER {
+	| tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER {
 	    param->yyHour = $1;
 	    param->yyMinutes = $3;
 	    param->yySeconds = $5;
 	    param->yyMeridian = MER24;
-/* XXX: Do nothing with millis */
+	    param->yyDSTmode = DSToff;
+	    param->yyTimezone = - ($6 % 100 + ($6 / 100) * 60);
 	}
 	;
 

Reply via email to