Skip to content

Commit

Permalink
* time.c (rb_timespec_now): added.
Browse files Browse the repository at this point in the history
* time.c (rb_time_timespec_new): added.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52514 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nurse committed Nov 10, 2015
1 parent 1ed3287 commit f1df08e
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 13 deletions.
6 changes: 6 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
Tue Nov 10 11:25:29 2015 NARUSE, Yui <naruse@ruby-lang.org>

* time.c (rb_timespec_now): added.

* time.c (rb_time_timespec_new): added.

Tue Nov 10 06:17:17 2015 Eric Wong <e@80x24.org>

* variable.c (rb_autoload_load): allow recursive calls
Expand Down
5 changes: 5 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,11 @@ with all sufficient information, see the ChangeLog file.
class is already defined but its superclass does not match the given
superclass, as well as definitions in ruby level.

* rb_timespec_now() is added to fetch current datetime as struct timespec.

* rb_time_timespec_new() is added to create a time object with epoch,
nanosecond, and UTC/localtime/time offset arguments.

=== Build system updates

=== Implementation changes
Expand Down
2 changes: 2 additions & 0 deletions include/ruby/intern.h
Original file line number Diff line number Diff line change
Expand Up @@ -919,8 +919,10 @@ VALUE rb_mutex_unlock(VALUE mutex);
VALUE rb_mutex_sleep(VALUE self, VALUE timeout);
VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg);
/* time.c */
void rb_timespec_now(struct timespec *);
VALUE rb_time_new(time_t, long);
VALUE rb_time_nano_new(time_t, long);
VALUE rb_time_timespec_new(const struct timespec *, int);
VALUE rb_time_num_new(VALUE, VALUE);
struct timeval rb_time_interval(VALUE num);
struct timeval rb_time_timeval(VALUE time);
Expand Down
61 changes: 48 additions & 13 deletions time.c
Original file line number Diff line number Diff line change
Expand Up @@ -1892,19 +1892,11 @@ timew2timespec_exact(wideval_t timew, struct timespec *ts)
return ts;
}

static VALUE
time_init_0(VALUE time)
void
rb_timespec_now(struct timespec *ts)
{
struct time_object *tobj;
struct timespec ts;

time_modify(time);
GetNewTimeval(time, tobj);
tobj->gmt = 0;
tobj->tm_got=0;
tobj->timew = WINT2FIXWV(0);
#ifdef HAVE_CLOCK_GETTIME
if (clock_gettime(CLOCK_REALTIME, &ts) == -1) {
if (clock_gettime(CLOCK_REALTIME, ts) == -1) {
rb_sys_fail("clock_gettime");
}
#else
Expand All @@ -1913,10 +1905,24 @@ time_init_0(VALUE time)
if (gettimeofday(&tv, 0) < 0) {
rb_sys_fail("gettimeofday");
}
ts.tv_sec = tv.tv_sec;
ts.tv_nsec = tv.tv_usec * 1000;
ts->tv_sec = tv.tv_sec;
ts->tv_nsec = tv.tv_usec * 1000;
}
#endif
}

static VALUE
time_init_0(VALUE time)
{
struct time_object *tobj;
struct timespec ts;

time_modify(time);
GetNewTimeval(time, tobj);
tobj->gmt = 0;
tobj->tm_got=0;
tobj->timew = WINT2FIXWV(0);
rb_timespec_now(&ts);
tobj->timew = timespec2timew(&ts);

return time;
Expand Down Expand Up @@ -2299,12 +2305,41 @@ rb_time_new(time_t sec, long usec)
return time_new_timew(rb_cTime, timew);
}

/* returns localtime time object */
VALUE
rb_time_nano_new(time_t sec, long nsec)
{
return time_new_timew(rb_cTime, nsec2timew(sec, nsec));
}

/**
* Returns a time object with UTC/localtime/fixed offset
*
* offset is -86400 < fixoff < 86400 or INT_MAX (UTC) or INT_MAX-1 (localtime)
*/
VALUE
rb_time_timespec_new(const struct timespec *ts, int offset)
{
struct time_object *tobj;
VALUE time = time_new_timew(rb_cTime, nsec2timew(ts->tv_sec, ts->tv_nsec));

if (-86400 < offset && offset < 86400) { /* fixoff */
GetTimeval(time, tobj);
TIME_SET_FIXOFF(tobj, INT2FIX(offset));
}
else if (offset == INT_MAX) { /* UTC */
GetTimeval(time, tobj);
TIME_SET_UTC(tobj);
}
else if (offset == INT_MAX-1) { /* localtime */
}
else {
rb_raise(rb_eArgError, "utc_offset out of range");
}

return time;
}

VALUE
rb_time_num_new(VALUE timev, VALUE off)
{
Expand Down

0 comments on commit f1df08e

Please sign in to comment.