From ae73017cadc3114cf7dc4ef43f0a163414f0c50e Mon Sep 17 00:00:00 2001 From: knu Date: Sun, 4 Mar 2007 14:51:31 +0000 Subject: * file.c (rb_file_s_utime): allow nil to set the current time. * lib/fileutils.rb (touch): ditto, and added :mtime and :nocreate options. fixed: [ruby-talk:219037] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@11987 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- file.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'file.c') diff --git a/file.c b/file.c index f36ed235a5..e392cd7b35 100644 --- a/file.c +++ b/file.c @@ -2008,13 +2008,16 @@ rb_file_s_utime(argc, argv) VALUE *argv; { VALUE atime, mtime, rest; - struct timeval tvp[2]; + struct timeval tvs[2], *tvp = NULL; long n; rb_scan_args(argc, argv, "2*", &atime, &mtime, &rest); - tvp[0] = rb_time_timeval(atime); - tvp[1] = rb_time_timeval(mtime); + if (!NIL_P(atime) || !NIL_P(mtime)) { + tvp = tvs; + tvp[0] = rb_time_timeval(atime); + tvp[1] = rb_time_timeval(mtime); + } n = apply2files(utime_internal, rest, tvp); return LONG2FIX(n); @@ -2047,16 +2050,19 @@ rb_file_s_utime(argc, argv) VALUE atime, mtime, rest; long n; struct timeval tv; - struct utimbuf utbuf; + struct utimbuf utbuf, *utp = NULL; rb_scan_args(argc, argv, "2*", &atime, &mtime, &rest); - tv = rb_time_timeval(atime); - utbuf.actime = tv.tv_sec; - tv = rb_time_timeval(mtime); - utbuf.modtime = tv.tv_sec; + if (!NIL_P(atime) || !NIL_P(mtime)) { + utp = &utbuf; + tv = rb_time_timeval(atime); + utp->actime = tv.tv_sec; + tv = rb_time_timeval(mtime); + utp->modtime = tv.tv_sec; + } - n = apply2files(utime_internal, rest, &utbuf); + n = apply2files(utime_internal, rest, utp); return LONG2FIX(n); } -- cgit v1.2.3