diff --git a/libguile/posix.c b/libguile/posix.c index f386fdfcf..73921a2c9 100644 --- a/libguile/posix.c +++ b/libguile/posix.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -1399,7 +1399,7 @@ SCM_DEFINE (scm_utime, "utime", 1, 5, 0, if (SCM_UNBNDP (actime)) { -#if HAVE_UTIMENSAT +#ifdef HAVE_UTIMENSAT atim_sec = 0; atim_nsec = UTIME_NOW; #else @@ -1418,7 +1418,7 @@ SCM_DEFINE (scm_utime, "utime", 1, 5, 0, if (SCM_UNBNDP (modtime)) { -#if HAVE_UTIMENSAT +#ifdef HAVE_UTIMENSAT mtim_sec = 0; mtim_nsec = UTIME_NOW; #else @@ -1440,7 +1440,7 @@ SCM_DEFINE (scm_utime, "utime", 1, 5, 0, else f = SCM_NUM2INT (6, flags); -#if HAVE_UTIMENSAT +#ifdef HAVE_UTIMENSAT { struct timespec times[2]; times[0].tv_sec = atim_sec; @@ -1449,7 +1449,7 @@ SCM_DEFINE (scm_utime, "utime", 1, 5, 0, times[1].tv_nsec = mtim_nsec; STRING_SYSCALL (pathname, c_pathname, - rv = utimensat (AT_FDCWD, c_pathname, ×, f)); + rv = utimensat (AT_FDCWD, c_pathname, times, f)); } #else { diff --git a/test-suite/tests/posix.test b/test-suite/tests/posix.test index 06b70baa0..6cfecee1a 100644 --- a/test-suite/tests/posix.test +++ b/test-suite/tests/posix.test @@ -1,6 +1,6 @@ ;;;; posix.test --- Test suite for Guile POSIX functions. -*- scheme -*- ;;;; -;;;; Copyright 2003, 2004, 2006, 2007 Free Software Foundation, Inc. +;;;; Copyright 2003, 2004, 2006, 2007, 2010 Free Software Foundation, Inc. ;;;; ;;;; This library is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Lesser General Public @@ -160,4 +160,23 @@ (throw 'unsupported) (ttyname file))))) +;; +;; utimes +;; +(with-test-prefix "utime" + + (pass-if "valid argument (second resolution)" + (let ((file "posix.test-utime")) + (dynamic-wind + (lambda () + (close-port (open-output-file file))) + (lambda () + (let* ((accessed (+ (current-time) 3600)) + (modified (- accessed 1000))) + (utime file accessed modified) + (let ((info (stat file))) + (and (= (stat:atime info) accessed) + (= (stat:mtime info) modified))))) + (lambda () + (delete-file file))))))