1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-10 14:00:21 +02:00

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.
This commit is contained in:
Ludovic Courtès 2018-09-23 16:39:42 +02:00
parent 663b8826d7
commit 3ee7673cc9
3 changed files with 39 additions and 3 deletions

View file

@ -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

View file

@ -1624,7 +1624,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;
@ -2433,6 +2436,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 "libguile/cpp-SIG.c"
#include "libguile/posix.x"

View file

@ -1,7 +1,7 @@
;;;; posix.test --- Test suite for Guile POSIX functions. -*- scheme -*-
;;;;
;;;; Copyright 2003, 2004, 2006, 2007, 2010, 2012,
;;;; 2015, 2017 Free Software Foundation, Inc.
;;;; 2015, 2017, 2018 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