home_run 0.9.1-x86-mswin32-60 → 0.9.2-x86-mswin32-60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +8 -0
- data/README.rdoc +3 -7
- data/ext/date_ext/date_ext.c +65 -61
- data/ext/date_ext/date_ext.h +1 -2
- data/ext/date_ext/date_parser.c +59 -55
- data/ext/date_ext/date_parser.rl +12 -8
- data/ext/date_ext/datetime.c +90 -74
- data/ext/date_ext/extconf.rb +2 -0
- data/lib/1.8/date_ext.so +0 -0
- data/lib/1.9/date_ext.so +0 -0
- data/spec/datetime/accessor_spec.rb +13 -4
- data/spec/datetime/parse_spec.rb +10 -1
- metadata +4 -4
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 0.9.2 (2010-09-13)
|
2
|
+
|
3
|
+
* Make DateTime#sec_fraction on ruby 1.9 to be compatible with 1.9 stdlib (jeremyevans)
|
4
|
+
|
5
|
+
* Remove the use of the %hhi sprintf format specifier, for greater standards compatibility (jeremyevans)
|
6
|
+
|
7
|
+
* Fix a bug where the same symbol was present in multiple objects, causing build failures with -fno-common (jeremyevans) (#10)
|
8
|
+
|
1
9
|
=== 0.9.1 (2010-09-01)
|
2
10
|
|
3
11
|
* Fix strptime for %Y%m%d and similar formats (jeremyevans) (#9)
|
data/README.rdoc
CHANGED
@@ -78,9 +78,6 @@ and 1.9.
|
|
78
78
|
|
79
79
|
== Installing into site_ruby
|
80
80
|
|
81
|
-
This is only necessary on ruby 1.8, as on ruby 1.9, gem directories
|
82
|
-
come before the standard library directories in the load path.
|
83
|
-
|
84
81
|
After installing the gem:
|
85
82
|
|
86
83
|
home_run --install
|
@@ -94,9 +91,6 @@ If you ever want to uninstall from site_ruby:
|
|
94
91
|
|
95
92
|
== Running without installing into site_ruby
|
96
93
|
|
97
|
-
Just like installing into site_ruby, this should only be necessary
|
98
|
-
on ruby 1.8.
|
99
|
-
|
100
94
|
If you don't want to install into site_ruby, you can use home_run's
|
101
95
|
Date/DateTime classes for specific programs by running your script
|
102
96
|
using home_run:
|
@@ -118,7 +112,9 @@ date, you can end up with situations where the Date instances created
|
|
118
112
|
before the require use the standard library version of Date, while the
|
119
113
|
Date instances created after the require use this library's version.
|
120
114
|
However, in some cases (such as on Heroku), this is the only way to
|
121
|
-
easily use this library.
|
115
|
+
easily use this library. If you need to do this and you are using
|
116
|
+
Rails 3, make sure you require home_run before rails/all in
|
117
|
+
config/application.rb.
|
122
118
|
|
123
119
|
== Running the specs
|
124
120
|
|
data/ext/date_ext/date_ext.c
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
#include <ctype.h>
|
2
2
|
#include "date_ext.h"
|
3
3
|
|
4
|
+
#ifdef RHR_ENCODING
|
5
|
+
int rhrd_encoding_index;
|
6
|
+
#endif
|
7
|
+
|
4
8
|
const unsigned char rhrd_days_in_month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
5
9
|
const long rhrd_cumulative_days_in_month[13] = {0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
|
6
10
|
const unsigned char rhrd_yday_to_month[366] = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12};
|
@@ -111,7 +115,7 @@ long rhrd__mod(long a, long b) {
|
|
111
115
|
/* Same as above but for long long dividend. */
|
112
116
|
long rhrd__modll(long long a, long b) {
|
113
117
|
long c;
|
114
|
-
c = a % b;
|
118
|
+
c = (long)(a % b);
|
115
119
|
if (c < 0) {
|
116
120
|
c += b;
|
117
121
|
}
|
@@ -189,12 +193,12 @@ void rhrd__jd_to_civil(rhrd_t *date) {
|
|
189
193
|
c = (long)floor((b - 122.1) / 365.25);
|
190
194
|
d = (long)floor(365.25 * c);
|
191
195
|
e = (long)floor((b - d) / 30.6001);
|
192
|
-
date->day = b - d - (long)floor(30.6001 * e);
|
196
|
+
date->day = (unsigned char)(b - d - (long)floor(30.6001 * e));
|
193
197
|
if (e <= 13) {
|
194
|
-
date->month = e - 1;
|
198
|
+
date->month = (unsigned char)(e - 1);
|
195
199
|
date->year = c - 4716;
|
196
200
|
} else {
|
197
|
-
date->month = e - 13;
|
201
|
+
date->month = (unsigned char)(e - 13);
|
198
202
|
date->year = c - 4715;
|
199
203
|
}
|
200
204
|
date->flags |= RHR_HAVE_CIVIL;
|
@@ -318,13 +322,13 @@ VALUE rhrd__add_months(VALUE self, long n) {
|
|
318
322
|
n = rhrd__safe_add_long(n, (long)(d->month));
|
319
323
|
if(n > 1 && n <= 12) {
|
320
324
|
newd->year = d->year;
|
321
|
-
newd->month = n;
|
325
|
+
newd->month = (unsigned char)n;
|
322
326
|
} else {
|
323
327
|
x = n / 12;
|
324
328
|
n = n % 12;
|
325
329
|
if (n <= 0) {
|
326
330
|
newd->year = d->year + x - 1;
|
327
|
-
newd->month = n + 12;
|
331
|
+
newd->month = (unsigned char)(n + 12);
|
328
332
|
} else {
|
329
333
|
newd->year = d->year + x;
|
330
334
|
newd->month = (unsigned char)n;
|
@@ -405,7 +409,7 @@ void rhrd__fill_commercial(rhrd_t *d) {
|
|
405
409
|
rhrd__jd_to_civil(&n);
|
406
410
|
a = n.year;
|
407
411
|
d->year = d->jd >= rhrd__commercial_to_jd(a + 1, 1, 1) ? a + 1 : a;
|
408
|
-
d->month = 1 + (d->jd - rhrd__commercial_to_jd(d->year, 1, 1)) / 7;
|
412
|
+
d->month = (unsigned char)(1 + (d->jd - rhrd__commercial_to_jd(d->year, 1, 1)) / 7);
|
409
413
|
d->day = (unsigned char)rhrd__jd_to_cwday(d->jd);
|
410
414
|
}
|
411
415
|
|
@@ -519,7 +523,7 @@ long long rhrd__jd_to_unix(long long jd) {
|
|
519
523
|
* julian date, losing any information about
|
520
524
|
* fractional days. */
|
521
525
|
long rhrd__unix_to_jd(long long t) {
|
522
|
-
return t/RHR_SECONDS_PER_DAY + RHR_UNIX_EPOCH;
|
526
|
+
return (long)(t/RHR_SECONDS_PER_DAY + RHR_UNIX_EPOCH);
|
523
527
|
}
|
524
528
|
|
525
529
|
/* Fill the given rhrt_d's jd field based on the
|
@@ -527,7 +531,7 @@ long rhrd__unix_to_jd(long long t) {
|
|
527
531
|
void rhrd__today(rhrd_t * d) {
|
528
532
|
VALUE t;
|
529
533
|
t = rb_funcall(rb_cTime, rhrd_id_now, 0);
|
530
|
-
d->jd = rhrd__unix_to_jd(NUM2LONG(rb_funcall(t, rhrd_id_to_i, 0)) + NUM2LONG(rb_funcall(t, rhrd_id_utc_offset, 0)));
|
534
|
+
d->jd = rhrd__unix_to_jd((long long)NUM2LONG(rb_funcall(t, rhrd_id_to_i, 0)) + NUM2LONG(rb_funcall(t, rhrd_id_utc_offset, 0)));
|
531
535
|
d->flags |= RHR_HAVE_JD;
|
532
536
|
RHR_CHECK_JD(d);
|
533
537
|
}
|
@@ -644,7 +648,7 @@ int rhrd__fill_from_hash(rhrd_t *d, VALUE hash) {
|
|
644
648
|
if(!rhrd__valid_commercial(d, d->year, 1, NUM2LONG(rwday), RHR_NO_RAISE)) {
|
645
649
|
return 1;
|
646
650
|
}
|
647
|
-
d->flags &= ~RHR_HAVE_CIVIL;
|
651
|
+
d->flags &= (unsigned char)~RHR_HAVE_CIVIL;
|
648
652
|
return 0;
|
649
653
|
} else if (RTEST(rwnum0)) {
|
650
654
|
d->jd = rhrd__weeknum_to_jd(year, NUM2LONG(rwnum0), RTEST(rwday) ? NUM2LONG(rwday) : (RTEST(rcwday) ? rhrd__mod(NUM2LONG(rcwday), 7) : 0), 0);
|
@@ -693,7 +697,7 @@ int rhrd__fill_from_hash(rhrd_t *d, VALUE hash) {
|
|
693
697
|
wday = NUM2LONG(rwday);
|
694
698
|
rhrd__today(d);
|
695
699
|
d->jd += wday - rhrd__jd_to_wday(d->jd);
|
696
|
-
d->flags &= ~RHR_HAVE_CIVIL;
|
700
|
+
d->flags &= (unsigned char)~RHR_HAVE_CIVIL;
|
697
701
|
return 0;
|
698
702
|
} else {
|
699
703
|
return -1;
|
@@ -774,19 +778,19 @@ VALUE rhrd__strftime(rhrdt_t *d, const char * fmt, int fmt_len) {
|
|
774
778
|
cp += sprintf(str + cp, "%s", rhrd__month_names[d->month]);
|
775
779
|
break;
|
776
780
|
case 'c':
|
777
|
-
cp += sprintf(str + cp, "%s %s %
|
781
|
+
cp += sprintf(str + cp, "%s %s %2i %02i:%02i:%02i %04li", rhrd__abbr_day_names[rhrd__jd_to_wday(d->jd)], rhrd__abbr_month_names[d->month], (int)d->day, (int)d->hour, (int)d->minute, (int)d->second, d->year);
|
778
782
|
break;
|
779
783
|
case 'C':
|
780
784
|
cp += sprintf(str + cp, "%02li", d->year / 100);
|
781
785
|
break;
|
782
786
|
case 'd':
|
783
|
-
cp += sprintf(str + cp, "%
|
787
|
+
cp += sprintf(str + cp, "%02i", (int)d->day);
|
784
788
|
break;
|
785
789
|
case 'e':
|
786
|
-
cp += sprintf(str + cp, "%
|
790
|
+
cp += sprintf(str + cp, "%2i", (int)d->day);
|
787
791
|
break;
|
788
792
|
case 'F':
|
789
|
-
cp += sprintf(str + cp, "%04li-%
|
793
|
+
cp += sprintf(str + cp, "%04li-%02i-%02i", d->year, (int)d->month, (int)d->day);
|
790
794
|
break;
|
791
795
|
case 'g':
|
792
796
|
cp += sprintf(str + cp, "%02li", cd.year % 100);
|
@@ -795,28 +799,28 @@ VALUE rhrd__strftime(rhrdt_t *d, const char * fmt, int fmt_len) {
|
|
795
799
|
cp += sprintf(str + cp, "%04li", cd.year);
|
796
800
|
break;
|
797
801
|
case 'H':
|
798
|
-
cp += sprintf(str + cp, "%
|
802
|
+
cp += sprintf(str + cp, "%02i", (int)d->hour);
|
799
803
|
break;
|
800
804
|
case 'I':
|
801
|
-
cp += sprintf(str + cp, "%
|
805
|
+
cp += sprintf(str + cp, "%02i", (int)((d->hour == 12 || d->hour == 0) ? 12 : d->hour % 12));
|
802
806
|
break;
|
803
807
|
case 'j':
|
804
808
|
cp += sprintf(str + cp, "%03li", rhrd__ordinal_day(d->year, d->month, d->day));
|
805
809
|
break;
|
806
810
|
case 'k':
|
807
|
-
cp += sprintf(str + cp, "%
|
811
|
+
cp += sprintf(str + cp, "%2i", (int)(d->hour));
|
808
812
|
break;
|
809
813
|
case 'l':
|
810
|
-
cp += sprintf(str + cp, "%
|
814
|
+
cp += sprintf(str + cp, "%2i", (int)((d->hour == 12 || d->hour == 0) ? 12 : d->hour % 12));
|
811
815
|
break;
|
812
816
|
case 'L':
|
813
817
|
cp += sprintf(str + cp, "%03" PRId64, (d->nanos % RHR_NANOS_PER_SECOND)/1000000);
|
814
818
|
break;
|
815
819
|
case 'm':
|
816
|
-
cp += sprintf(str + cp, "%
|
820
|
+
cp += sprintf(str + cp, "%02i", (int)(d->month));
|
817
821
|
break;
|
818
822
|
case 'M':
|
819
|
-
cp += sprintf(str + cp, "%
|
823
|
+
cp += sprintf(str + cp, "%02i", (int)(d->minute));
|
820
824
|
break;
|
821
825
|
case 'N':
|
822
826
|
cp += sprintf(str + cp, "%09" PRId64, (d->nanos % RHR_NANOS_PER_SECOND));
|
@@ -831,38 +835,38 @@ VALUE rhrd__strftime(rhrdt_t *d, const char * fmt, int fmt_len) {
|
|
831
835
|
cp += sprintf(str + cp, d->hour >= 12 ? "pm" : "am");
|
832
836
|
break;
|
833
837
|
case 'Q':
|
834
|
-
cp += sprintf(str + cp, "%" PRId64, rhrd__jd_to_unix(d->jd) * 1000 + d->nanos/RHR_NANOS_PER_MILLISECOND - d->offset * 60000);
|
838
|
+
cp += sprintf(str + cp, "%" PRId64, rhrd__jd_to_unix((long long)d->jd) * 1000 + d->nanos/RHR_NANOS_PER_MILLISECOND - d->offset * 60000);
|
835
839
|
break;
|
836
840
|
case 'r':
|
837
|
-
cp += sprintf(str + cp, "%
|
841
|
+
cp += sprintf(str + cp, "%2i:%02i:%02i %s", (int)((d->hour == 12 || d->hour == 0) ? 12 : d->hour % 12), (int)d->minute, (int)d->second, d->hour >= 12 ? "PM" : "AM");
|
838
842
|
break;
|
839
843
|
case 'R':
|
840
|
-
cp += sprintf(str + cp, "%
|
844
|
+
cp += sprintf(str + cp, "%02i:%02i", (int)d->hour, (int)d->minute);
|
841
845
|
break;
|
842
846
|
case 's':
|
843
|
-
cp += sprintf(str + cp, "%" PRId64, rhrd__jd_to_unix(d->jd) + d->nanos/RHR_NANOS_PER_SECOND - d->offset * 60);
|
847
|
+
cp += sprintf(str + cp, "%" PRId64, rhrd__jd_to_unix((long long)d->jd) + d->nanos/RHR_NANOS_PER_SECOND - d->offset * 60);
|
844
848
|
break;
|
845
849
|
case 'S':
|
846
|
-
cp += sprintf(str + cp, "%
|
850
|
+
cp += sprintf(str + cp, "%02i", (int)d->second);
|
847
851
|
break;
|
848
852
|
case 't':
|
849
853
|
cp += sprintf(str + cp, "\t");
|
850
854
|
break;
|
851
855
|
case 'X':
|
852
856
|
case 'T':
|
853
|
-
cp += sprintf(str + cp, "%
|
857
|
+
cp += sprintf(str + cp, "%02i:%02i:%02i", (int)d->hour, (int)d->minute, (int)d->second);
|
854
858
|
break;
|
855
859
|
case 'u':
|
856
|
-
cp += sprintf(str + cp, "%
|
860
|
+
cp += sprintf(str + cp, "%i", (int)cd.day);
|
857
861
|
break;
|
858
862
|
case 'U':
|
859
863
|
cp += sprintf(str + cp, "%li", rhrd__jd_to_weeknum(d->jd, 0));
|
860
864
|
break;
|
861
865
|
case 'v':
|
862
|
-
cp += sprintf(str + cp, "%
|
866
|
+
cp += sprintf(str + cp, "%2i-%s-%04li", (int)d->day, rhrd__abbr_month_names[d->month], d->year);
|
863
867
|
break;
|
864
868
|
case 'V':
|
865
|
-
cp += sprintf(str + cp, "%
|
869
|
+
cp += sprintf(str + cp, "%02i", (int)cd.month);
|
866
870
|
break;
|
867
871
|
case 'w':
|
868
872
|
cp += sprintf(str + cp, "%li", rhrd__jd_to_wday(d->jd));
|
@@ -872,7 +876,7 @@ VALUE rhrd__strftime(rhrdt_t *d, const char * fmt, int fmt_len) {
|
|
872
876
|
break;
|
873
877
|
case 'D':
|
874
878
|
case 'x':
|
875
|
-
cp += sprintf(str + cp, "%
|
879
|
+
cp += sprintf(str + cp, "%02i/%02i/%02li", (int)d->month, (int)d->day, d->year % 100);
|
876
880
|
break;
|
877
881
|
case 'y':
|
878
882
|
cp += sprintf(str + cp, "%02li", d->year % 100);
|
@@ -887,7 +891,7 @@ VALUE rhrd__strftime(rhrdt_t *d, const char * fmt, int fmt_len) {
|
|
887
891
|
cp += sprintf(str + cp, "%+03i:%02i", d->offset/60, abs(d->offset % 60));
|
888
892
|
break;
|
889
893
|
case '+':
|
890
|
-
cp += sprintf(str + cp, "%s %s %
|
894
|
+
cp += sprintf(str + cp, "%s %s %2i %02i:%02i:%02i %+03i:%02i %04li", rhrd__abbr_day_names[rhrd__jd_to_wday(d->jd)], rhrd__abbr_month_names[d->month], (int)d->day, (int)d->hour, (int)d->minute, (int)d->second, d->offset/60, abs(d->offset % 60), d->year);
|
891
895
|
break;
|
892
896
|
default:
|
893
897
|
str[cp] = c;
|
@@ -973,9 +977,9 @@ VALUE rhrd__strptime(VALUE rstr, const char *fmt_str, long fmt_len) {
|
|
973
977
|
break;
|
974
978
|
case 'A':
|
975
979
|
for(i = 0; i < 7; i++) {
|
976
|
-
scan_len = strlen(rhrd__day_names[i]);
|
980
|
+
scan_len = (int)strlen(rhrd__day_names[i]);
|
977
981
|
if (pos + scan_len <= len) {
|
978
|
-
if(strncasecmp(str + pos, rhrd__day_names[i], scan_len) == 0) {
|
982
|
+
if(strncasecmp(str + pos, rhrd__day_names[i], (size_t)scan_len) == 0) {
|
979
983
|
wday = i;
|
980
984
|
break;
|
981
985
|
}
|
@@ -1006,9 +1010,9 @@ VALUE rhrd__strptime(VALUE rstr, const char *fmt_str, long fmt_len) {
|
|
1006
1010
|
break;
|
1007
1011
|
case 'B':
|
1008
1012
|
for(i = 1; i < 13; i++) {
|
1009
|
-
scan_len = strlen(rhrd__month_names[i]);
|
1013
|
+
scan_len = (int)strlen(rhrd__month_names[i]);
|
1010
1014
|
if (pos + scan_len <= len) {
|
1011
|
-
if(strncasecmp(str + pos, rhrd__month_names[i], scan_len) == 0) {
|
1015
|
+
if(strncasecmp(str + pos, rhrd__month_names[i], (size_t)scan_len) == 0) {
|
1012
1016
|
month = i;
|
1013
1017
|
break;
|
1014
1018
|
}
|
@@ -1095,7 +1099,7 @@ VALUE rhrd__strptime(VALUE rstr, const char *fmt_str, long fmt_len) {
|
|
1095
1099
|
if (sscanf(str + pos, "%03ld%n", &sec_fraction_num, &scan_len) != 1) {
|
1096
1100
|
return Qnil;
|
1097
1101
|
}
|
1098
|
-
sec_fraction = sec_fraction_num/pow(10, scan_len);
|
1102
|
+
sec_fraction = sec_fraction_num/pow(10.0, (double)scan_len);
|
1099
1103
|
state |= RHRR_SEC_FRACTION_SET;
|
1100
1104
|
break;
|
1101
1105
|
case 'm':
|
@@ -1128,7 +1132,7 @@ VALUE rhrd__strptime(VALUE rstr, const char *fmt_str, long fmt_len) {
|
|
1128
1132
|
if (sscanf(str + pos, "%09ld%n", &sec_fraction_num, &scan_len) != 1) {
|
1129
1133
|
return Qnil;
|
1130
1134
|
}
|
1131
|
-
sec_fraction = sec_fraction_num/pow(10, scan_len);
|
1135
|
+
sec_fraction = sec_fraction_num/pow(10.0, (double)scan_len);
|
1132
1136
|
state |= RHRR_SEC_FRACTION_SET;
|
1133
1137
|
break;
|
1134
1138
|
case 'P':
|
@@ -1418,7 +1422,7 @@ VALUE rhrd__strptime(VALUE rstr, const char *fmt_str, long fmt_len) {
|
|
1418
1422
|
}
|
1419
1423
|
if(state & RHRR_UNIXM_SET) {
|
1420
1424
|
rb_hash_aset(hash, rhrd_sym_seconds, LL2NUM(milliseconds/1000));
|
1421
|
-
rb_hash_aset(hash, rhrd_sym_sec_fraction, rb_float_new((milliseconds % 1000)/1000.0));
|
1425
|
+
rb_hash_aset(hash, rhrd_sym_sec_fraction, rb_float_new((double)(milliseconds % 1000)/1000.0));
|
1422
1426
|
}
|
1423
1427
|
if(RTEST(zone)) {
|
1424
1428
|
rb_hash_aset(hash, rhrd_sym_zone, zone);
|
@@ -2000,7 +2004,7 @@ VALUE rhrd_s_zone_to_diff(VALUE klass, VALUE str) {
|
|
2000
2004
|
v = rb_funcall(str, rhrd_id_split, 1, rhrd_re_comma_period);
|
2001
2005
|
e = rb_ary_entry(v, 1);
|
2002
2006
|
return LONG2NUM(((NUM2LONG(rb_funcall(rb_ary_entry(v, 0), rhrd_id_to_i, 0)) * RHR_SECONDS_PER_HOUR)
|
2003
|
-
+ ((NUM2LONG(rb_funcall(e, rhrd_id_to_i, 0)) * RHR_SECONDS_PER_HOUR) / (long)pow(10, RSTRING_LEN(rb_str_to_str(e))))) * offset);
|
2007
|
+
+ ((NUM2LONG(rb_funcall(e, rhrd_id_to_i, 0)) * RHR_SECONDS_PER_HOUR) / (long)pow(10.0, (double)RSTRING_LEN(rb_str_to_str(e))))) * offset);
|
2004
2008
|
}
|
2005
2009
|
}
|
2006
2010
|
switch (len) {
|
@@ -2067,10 +2071,10 @@ static VALUE rhrd_asctime(VALUE self) {
|
|
2067
2071
|
RHR_FILL_JD(d)
|
2068
2072
|
|
2069
2073
|
s = rb_str_buf_new(128);
|
2070
|
-
len = snprintf(RSTRING_PTR(s), 128, "%s %s %
|
2074
|
+
len = snprintf(RSTRING_PTR(s), 128, "%s %s %2i 00:00:00 %04li",
|
2071
2075
|
rhrd__abbr_day_names[rhrd__jd_to_wday(d->jd)],
|
2072
2076
|
rhrd__abbr_month_names[d->month],
|
2073
|
-
d->day,
|
2077
|
+
(int)d->day,
|
2074
2078
|
d->year);
|
2075
2079
|
if (len == -1 || len > 127) {
|
2076
2080
|
rb_raise(rb_eNoMemError, "in Date#asctime (in snprintf)");
|
@@ -2283,8 +2287,8 @@ static VALUE rhrd_inspect(VALUE self) {
|
|
2283
2287
|
RHR_FILL_CIVIL(d)
|
2284
2288
|
|
2285
2289
|
s = rb_str_buf_new(128);
|
2286
|
-
len = snprintf(RSTRING_PTR(s), 128, "#<Date %04li-%
|
2287
|
-
d->year, d->month, d->day);
|
2290
|
+
len = snprintf(RSTRING_PTR(s), 128, "#<Date %04li-%02i-%02i>",
|
2291
|
+
d->year, (int)d->month, (int)d->day);
|
2288
2292
|
if (len == -1 || len > 127) {
|
2289
2293
|
rb_raise(rb_eNoMemError, "in Date#inspect (in snprintf)");
|
2290
2294
|
}
|
@@ -2617,8 +2621,8 @@ static VALUE rhrd_to_s(VALUE self) {
|
|
2617
2621
|
RHR_FILL_CIVIL(d)
|
2618
2622
|
|
2619
2623
|
s = rb_str_buf_new(128);
|
2620
|
-
len = snprintf(RSTRING_PTR(s), 128, "%04li-%
|
2621
|
-
d->year, d->month, d->day);
|
2624
|
+
len = snprintf(RSTRING_PTR(s), 128, "%04li-%02i-%02i",
|
2625
|
+
d->year, (int)d->month, (int)d->day);
|
2622
2626
|
if (len == -1 || len > 127) {
|
2623
2627
|
rb_raise(rb_eNoMemError, "in Date#to_s (in snprintf)");
|
2624
2628
|
}
|
@@ -2784,7 +2788,7 @@ static VALUE rhrd_op_minus(VALUE self, VALUE other) {
|
|
2784
2788
|
RHR_FILL_JD(d)
|
2785
2789
|
RHRDT_FILL_JD(newdt)
|
2786
2790
|
RHRDT_FILL_NANOS(newdt)
|
2787
|
-
return rb_float_new(d->jd - (newdt->jd + newdt->nanos/RHR_NANOS_PER_DAYD));
|
2791
|
+
return rb_float_new(d->jd - (newdt->jd + (double)newdt->nanos/RHR_NANOS_PER_DAYD));
|
2788
2792
|
}
|
2789
2793
|
if (RTEST((rb_obj_is_kind_of(other, rhrd_class)))) {
|
2790
2794
|
Data_Get_Struct(other, rhrd_t, newd);
|
@@ -3139,9 +3143,9 @@ static VALUE rhrd_httpdate(VALUE self) {
|
|
3139
3143
|
RHR_FILL_JD(d)
|
3140
3144
|
|
3141
3145
|
s = rb_str_buf_new(128);
|
3142
|
-
len = snprintf(RSTRING_PTR(s), 128, "%s, %
|
3146
|
+
len = snprintf(RSTRING_PTR(s), 128, "%s, %02i %s %04li 00:00:00 GMT",
|
3143
3147
|
rhrd__abbr_day_names[rhrd__jd_to_wday(d->jd)],
|
3144
|
-
d->day,
|
3148
|
+
(int)d->day,
|
3145
3149
|
rhrd__abbr_month_names[d->month],
|
3146
3150
|
d->year);
|
3147
3151
|
if (len == -1 || len > 127) {
|
@@ -3172,7 +3176,7 @@ static VALUE rhrd_jisx0301(VALUE self) {
|
|
3172
3176
|
|
3173
3177
|
s = rb_str_buf_new(128);
|
3174
3178
|
if (d->jd < 2405160) {
|
3175
|
-
len = snprintf(RSTRING_PTR(s), 128, "%04li-%
|
3179
|
+
len = snprintf(RSTRING_PTR(s), 128, "%04li-%02i-%02i", d->year, (int)d->month, (int)d->day);
|
3176
3180
|
} else {
|
3177
3181
|
if (d->jd >= 2447535) {
|
3178
3182
|
c = 'H';
|
@@ -3187,7 +3191,7 @@ static VALUE rhrd_jisx0301(VALUE self) {
|
|
3187
3191
|
c = 'M';
|
3188
3192
|
year = d->year - 1867;
|
3189
3193
|
}
|
3190
|
-
len = snprintf(RSTRING_PTR(s), 128, "%c%02li.%
|
3194
|
+
len = snprintf(RSTRING_PTR(s), 128, "%c%02li.%02i.%02i", c, year, (int)d->month, (int)d->day);
|
3191
3195
|
}
|
3192
3196
|
if (len == -1 || len > 127) {
|
3193
3197
|
rb_raise(rb_eNoMemError, "in Date#jisx0301 (in snprintf)");
|
@@ -3394,9 +3398,9 @@ static VALUE rhrd_rfc2822(VALUE self) {
|
|
3394
3398
|
RHR_FILL_JD(d)
|
3395
3399
|
|
3396
3400
|
s = rb_str_buf_new(128);
|
3397
|
-
len = snprintf(RSTRING_PTR(s), 128, "%s, %
|
3401
|
+
len = snprintf(RSTRING_PTR(s), 128, "%s, %i %s %04li 00:00:00 +0000",
|
3398
3402
|
rhrd__abbr_day_names[rhrd__jd_to_wday(d->jd)],
|
3399
|
-
d->day,
|
3403
|
+
(int)d->day,
|
3400
3404
|
rhrd__abbr_month_names[d->month],
|
3401
3405
|
d->year);
|
3402
3406
|
if (len == -1 || len > 127) {
|
@@ -3423,7 +3427,7 @@ static VALUE rhrd_rfc3339(VALUE self) {
|
|
3423
3427
|
RHR_FILL_CIVIL(d)
|
3424
3428
|
|
3425
3429
|
s = rb_str_buf_new(128);
|
3426
|
-
len = snprintf(RSTRING_PTR(s), 128, "%04li-%
|
3430
|
+
len = snprintf(RSTRING_PTR(s), 128, "%04li-%02i-%02iT00:00:00+00:00", d->year, (int)d->month, (int)d->day);
|
3427
3431
|
if (len == -1 || len > 127) {
|
3428
3432
|
rb_raise(rb_eNoMemError, "in Date#rfc3339 (in snprintf)");
|
3429
3433
|
}
|
@@ -3697,11 +3701,11 @@ static VALUE rhrd_s_day_fraction_to_time(VALUE klass, VALUE rf) {
|
|
3697
3701
|
int h, m, s;
|
3698
3702
|
|
3699
3703
|
f = NUM2DBL(rf) * 24;
|
3700
|
-
h = floor(f);
|
3704
|
+
h = (int)floor(f);
|
3701
3705
|
f = (f - h) * 60;
|
3702
|
-
m = floor(f);
|
3706
|
+
m = (int)floor(f);
|
3703
3707
|
f = (f - m) * 60;
|
3704
|
-
s = floor(f);
|
3708
|
+
s = (int)floor(f);
|
3705
3709
|
f = (f - s)/RHR_SECONDS_PER_DAY;
|
3706
3710
|
return rb_ary_new3(4, LONG2NUM(h), LONG2NUM(m), LONG2NUM(s), rb_float_new(f));
|
3707
3711
|
}
|
@@ -4109,7 +4113,7 @@ void Init_date_ext(void) {
|
|
4109
4113
|
rb_ary_push(rhrd_monthnames, Qnil);
|
4110
4114
|
rb_ary_push(rhrd_abbr_monthnames, Qnil);
|
4111
4115
|
for(i = 1; i < 13; i++) {
|
4112
|
-
rb_ary_push(rhrd_monthnames, rb_str_new2(rhrd__month_names[i]));
|
4116
|
+
rb_ary_push(rhrd_monthnames, rb_str_new2((const char *)rhrd__month_names[i]));
|
4113
4117
|
rb_ary_push(rhrd_abbr_monthnames, rb_str_new2(rhrd__abbr_month_names[i]));
|
4114
4118
|
}
|
4115
4119
|
|
@@ -4299,9 +4303,9 @@ void Init_date_ext(void) {
|
|
4299
4303
|
/* Define some static regexps. The 1 for the options makes
|
4300
4304
|
* it case insensitive, as I don't want to deal with including
|
4301
4305
|
* the ruby regex header just to get it. */
|
4302
|
-
rhrd_zone_re = rb_reg_new(rhrd__zone_re_str, strlen(rhrd__zone_re_str), 1);
|
4303
|
-
rhrd_zone_dst_re = rb_reg_new(rhrd__zone_dst_re_str, strlen(rhrd__zone_dst_re_str), 1);
|
4304
|
-
rhrd_zone_sign_re = rb_reg_new(rhrd__zone_sign_re_str, strlen(rhrd__zone_sign_re_str), 1);
|
4306
|
+
rhrd_zone_re = rb_reg_new(rhrd__zone_re_str, (int)strlen(rhrd__zone_re_str), 1);
|
4307
|
+
rhrd_zone_dst_re = rb_reg_new(rhrd__zone_dst_re_str, (int)strlen(rhrd__zone_dst_re_str), 1);
|
4308
|
+
rhrd_zone_sign_re = rb_reg_new(rhrd__zone_sign_re_str, (int)strlen(rhrd__zone_sign_re_str), 1);
|
4305
4309
|
rhrd_re_comma_period = rb_reg_new("[,.]", 4, 0);
|
4306
4310
|
|
4307
4311
|
/* Register global variables with Garbage collector, so users
|
data/ext/date_ext/date_ext.h
CHANGED
@@ -119,7 +119,6 @@ so that no calculations can overflow.
|
|
119
119
|
#define RHRDT_FILL_NANOS(d) if (!((d)->flags & RHR_HAVE_NANOS)) { rhrdt__hms_to_nanos(d); }
|
120
120
|
|
121
121
|
#ifdef RHR_ENCODING
|
122
|
-
int rhrd_encoding_index;
|
123
122
|
#define RHR_ASCII_ENCODING(s) s = rb_enc_associate_index(s, rhrd_encoding_index); \
|
124
123
|
if(rb_default_internal_encoding()) {s = rb_str_export_to_enc(s, rb_default_internal_encoding());}
|
125
124
|
#else
|
@@ -135,7 +134,7 @@ int rhrd_encoding_index;
|
|
135
134
|
#define RHR_SPACE_SHIP(x, l, r) if (l < r) { x = -1; } else if (l == r) { x = 0; } else { x = 1; }
|
136
135
|
|
137
136
|
#define RHR_CHECK_JD(d) if ((d->jd > RHR_JD_MAX) || (d->jd < RHR_JD_MIN)) { rb_raise(rb_eRangeError, "date out of range: jd = %li", d->jd);}
|
138
|
-
#define RHR_CHECK_CIVIL(d) if (!rhrd__valid_civil_limits(d->year, d->month, d->day)) { rb_raise(rb_eRangeError, "date out of range: year = %li, month = %
|
137
|
+
#define RHR_CHECK_CIVIL(d) if (!rhrd__valid_civil_limits(d->year, d->month, d->day)) { rb_raise(rb_eRangeError, "date out of range: year = %li, month = %i, day = %i", d->year, (int)d->month, (int)d->day);}
|
139
138
|
|
140
139
|
#define RHR_CACHED_IV(self, iv) VALUE v = rb_ivar_get(self, iv); if (RTEST(v)) {return v;}
|
141
140
|
|