summaryrefslogtreecommitdiff
path: root/time.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-25 18:41:32 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-25 18:41:32 +0000
commit762fec4946d4ab0eea846ef87de22e783ddd5ac7 (patch)
tree5e1ca375eafa632cf137335ec096ce89ed688137 /time.c
parent5ac1389aeaa9219bbf56962f5ed4e617a7fdff86 (diff)
* time.c (rb_gmtime, rb_localtime): gmtime and localtime return
NULL on error. [ruby-core:23551] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23569 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'time.c')
-rw-r--r--time.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/time.c b/time.c
index 7fcb7f40ab..33ad1a4b3a 100644
--- a/time.c
+++ b/time.c
@@ -79,8 +79,24 @@ static int leap_year_p(long y);
#else
#define IF_HAVE_GMTIME_R(x) /* nothing */
#define ASCTIME(tm, buf) asctime(tm)
-#define GMTIME(tm, result) (result = *gmtime(tm), &result)
-#define LOCALTIME(tm, result) (result = *localtime(tm), &result)
+#define GMTIME(tm, result) rb_gmtime((tm), &(result))
+#define LOCALTIME(tm, result) rb_localtime((tm), &(result))
+
+static inline struct tm *
+rb_gmtime(const time_t *tm, struct tm *result)
+{
+ struct tm *t = gmtime(tm);
+ if (t) *result = *t;
+ return t;
+}
+
+static inline struct tm *
+rb_localtime(const time_t *tm, struct tm *result)
+{
+ struct tm *t = localtime(tm);
+ if (t) *result = *t;
+ return t;
+}
#endif
static ID id_divmod, id_mul, id_submicro, id_subnano;