ruby-changes:2479
From: ko1@a...
Date: 19 Nov 2007 18:48:21 +0900
Subject: [ruby-changes:2479] akr - Ruby:r13970 (trunk): * file.c (utime_internal): fallback utimensat to utimes.
akr 2007-11-19 18:48:00 +0900 (Mon, 19 Nov 2007) New Revision: 13970 Modified files: trunk/ChangeLog trunk/file.c Log: * file.c (utime_internal): fallback utimensat to utimes. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/file.c?r1=13970&r2=13969 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13970&r2=13969 Index: ChangeLog =================================================================== --- ChangeLog (revision 13969) +++ ChangeLog (revision 13970) @@ -1,3 +1,7 @@ +Mon Nov 19 18:46:49 2007 Tanaka Akira <akr@f...> + + * file.c (utime_internal): fallback utimensat to utimes. + Mon Nov 19 17:51:27 2007 Tanaka Akira <akr@f...> * configure.in: check struct timespec, clock_gettime, utimensat, Index: file.c =================================================================== --- file.c (revision 13969) +++ file.c (revision 13970) @@ -2041,23 +2041,31 @@ struct timespec rb_time_timespec(VALUE time); -#if defined(HAVE_UTIMENSAT) +#if defined(HAVE_UTIMES) static void utime_internal(const char *path, void *arg) { struct timespec *tsp = arg; - if (utimensat(AT_FDCWD, path, tsp, 0) < 0) - rb_sys_fail(path); -} + struct timeval tvbuf[2], *tvp = arg; -#elif defined(HAVE_UTIMES) +#ifdef HAVE_UTIMENSAT + static int try_utimensat = 1; -static void -utime_internal(const char *path, void *arg) -{ - struct timespec *tsp = arg; - struct timeval tvbuf[2], *tvp = arg; + if (try_utimensat) { + struct timespec *tsp = arg; + if (utimensat(AT_FDCWD, path, tsp, 0) < 0) { + if (errno == ENOSYS) { + try_utimensat = 0; + goto no_utimensat; + } + rb_sys_fail(path); + } + return; + } +no_utimensat: +#endif + if (tsp) { tvbuf[0].tv_sec = tsp[0].tv_sec; tvbuf[0].tv_usec = tsp[0].tv_nsec / 1000; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml