summaryrefslogtreecommitdiff
path: root/ext/date/lib/parse_date.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/date/lib/parse_date.c')
-rw-r--r--ext/date/lib/parse_date.c45
1 files changed, 36 insertions, 9 deletions
diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c
index 50990ffbd1..c6ce621a71 100644
--- a/ext/date/lib/parse_date.c
+++ b/ext/date/lib/parse_date.c
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Fri Nov 25 16:42:37 2011 */
+/* Generated by re2c 0.13.5 on Sat Nov 26 16:43:35 2011 */
#line 1 "ext/date/lib/parse_date.re"
/*
+----------------------------------------------------------------------+
@@ -24917,8 +24917,19 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim
switch (*fptr) {
case 'D': /* three letter day */
case 'l': /* full day */
- if (!timelib_lookup_relunit((char **) &ptr)) {
- add_pbf_error(s, "A textual day could not be found", string, begin);
+ {
+ const timelib_relunit* tmprel = 0;
+
+ tmprel = timelib_lookup_relunit((char **) &ptr);
+ if (!tmprel) {
+ add_pbf_error(s, "A textual day could not be found", string, begin);
+ break;
+ } else {
+ in.time->have_relative = 1;
+ in.time->relative.have_weekday_relative = 1;
+ in.time->relative.weekday = tmprel->multiplier;
+ in.time->relative.weekday_behavior = 1;
+ }
}
break;
case 'd': /* two digit day, with leading zero */
@@ -25001,15 +25012,31 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim
}
break;
case 'i': /* two digit minute, with leading zero */
- TIMELIB_CHECK_NUMBER;
- if ((s->time->i = timelib_get_nr((char **) &ptr, 2)) == TIMELIB_UNSET) {
- add_pbf_error(s, "A two digit minute could not be found", string, begin);
+ {
+ int length;
+ timelib_sll min;
+
+ TIMELIB_CHECK_NUMBER;
+ min = timelib_get_nr_ex((char **) &ptr, 2, &length);
+ if (min == TIMELIB_UNSET || length != 2) {
+ add_pbf_error(s, "A two digit minute could not be found", string, begin);
+ } else {
+ s->time->i = min;
+ }
}
break;
case 's': /* two digit second, with leading zero */
- TIMELIB_CHECK_NUMBER;
- if ((s->time->s = timelib_get_nr((char **) &ptr, 2)) == TIMELIB_UNSET) {
- add_pbf_error(s, "A two digit second could not be found", string, begin);
+ {
+ int length;
+ timelib_sll sec;
+
+ TIMELIB_CHECK_NUMBER;
+ sec = timelib_get_nr_ex((char **) &ptr, 2, &length);
+ if (sec == TIMELIB_UNSET || length != 2) {
+ add_pbf_error(s, "A two second minute could not be found", string, begin);
+ } else {
+ s->time->s = sec;
+ }
}
break;
case 'u': /* up to six digit millisecond */