diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-09-23 16:39:42 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2019-05-23 15:43:28 +0200 |
commit | 827e88b4b798b11013e8a9ef4e0f6ad111966321 (patch) | |
tree | a71bc86ba7e7dec3c7e36d22e126985cf1dbbf77 | |
parent | 176bfd0bce4220b0565d192a93bd9e2f81a1f1fe (diff) | |
download | guile-827e88b4b798b11013e8a9ef4e0f6ad111966321.tar.gz |
Define AT_SYMLINK_NOFOLLOW et al.
* libguile/posix.c (scm_init_posix): Define AT_SYMLINK_NOFOLLOW,
AT_SYMLINK_FOLLOW, AT_NO_AUTOMOUNT, and AT_EMPTY_PATH when available.
(scm_utime): Mention AT_SYMLINK_NOFOLLOW.
* doc/ref/posix.texi (File System): Update accordingly.
* test-suite/tests/posix.test ("utime")["AT_SYMLINK_NOFOLLOW"]: New test.
-rw-r--r-- | doc/ref/posix.texi | 5 | ||||
-rw-r--r-- | libguile/posix.c | 20 | ||||
-rw-r--r-- | test-suite/tests/posix.test | 21 |
3 files changed, 41 insertions, 5 deletions
diff --git a/doc/ref/posix.texi b/doc/ref/posix.texi index 5cb68a292..1470e5f36 100644 --- a/doc/ref/posix.texi +++ b/doc/ref/posix.texi @@ -801,6 +801,11 @@ systems. @end lisp will set the access time to one hour in the past and the modification time to the current time. + +@vindex AT_SYMLINK_NOFOLLOW +Last, @var{flags} may be either @code{0} or the +@code{AT_SYMLINK_NOFOLLOW} constant, to set the time of +@var{pathname} even if it is a symbolic link. @end deffn @findex unlink diff --git a/libguile/posix.c b/libguile/posix.c index 2ad6c89bb..43e353eb6 100644 --- a/libguile/posix.c +++ b/libguile/posix.c @@ -1,4 +1,4 @@ -/* Copyright 1995-2014,2016-2018 +/* Copyright 1995-2014,2016-2019 Free Software Foundation, Inc. This file is part of Guile. @@ -1626,7 +1626,10 @@ SCM_DEFINE (scm_utime, "utime", 1, 5, 0, "(utime \"foo\" (- (current-time) 3600))\n" "@end lisp\n" "will set the access time to one hour in the past and the\n" - "modification time to the current time.") + "modification time to the current time.\n\n" + "Last, @var{flags} may be either @code{0} or the\n" + "@code{AT_SYMLINK_NOFOLLOW} constant, to set the time of\n" + "@var{pathname} even if it is a symbolic link.\n") #define FUNC_NAME s_scm_utime { int rv; @@ -2435,6 +2438,19 @@ scm_init_posix () scm_c_define ("LOCK_NB", scm_from_int (LOCK_NB)); #endif +#ifdef AT_SYMLINK_NOFOLLOW + scm_c_define ("AT_SYMLINK_NOFOLLOW", scm_from_int (AT_SYMLINK_NOFOLLOW)); +#endif +#ifdef AT_SYMLINK_FOLLOW + scm_c_define ("AT_SYMLINK_FOLLOW", scm_from_int (AT_SYMLINK_FOLLOW)); +#endif +#ifdef AT_NO_AUTOMOUNT + scm_c_define ("AT_NO_AUTOMOUNT", scm_from_int (AT_NO_AUTOMOUNT)); +#endif +#ifdef AT_EMPTY_PATH + scm_c_define ("AT_EMPTY_PATH", scm_from_int (AT_EMPTY_PATH)); +#endif + #include "cpp-SIG.c" #include "posix.x" diff --git a/test-suite/tests/posix.test b/test-suite/tests/posix.test index 1765206f0..aa1605a6b 100644 --- a/test-suite/tests/posix.test +++ b/test-suite/tests/posix.test @@ -1,7 +1,7 @@ ;;;; posix.test --- Test suite for Guile POSIX functions. -*- scheme -*- ;;;; -;;;; Copyright 2003, 2004, 2006, 2007, 2010, 2012, -;;;; 2015, 2017, 2019 Free Software Foundation, Inc. +;;;; Copyright 2003-2004,2006-2007,2010,2012,2015,2017-2019 +;;;; 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 @@ -181,7 +181,22 @@ (and (= (stat:atime info) accessed) (= (stat:mtime info) modified))))) (lambda () - (delete-file file)))))) + (delete-file file))))) + + (pass-if-equal "AT_SYMLINK_NOFOLLOW" + '(1 1) + (if (defined? 'AT_SYMLINK_NOFOLLOW) + (let ((file "posix.test-utime")) + (dynamic-wind + (lambda () + (symlink "/dev/null" file)) + (lambda () + (utime file 1 1 0 0 AT_SYMLINK_NOFOLLOW) + (let ((info (lstat file))) + (list (stat:atime info) (stat:mtime info)))) + (lambda () + (delete-file file)))) + (throw 'unsupported)))) ;; ;; affinity |