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); } ;