]> git.ipfire.org Git - thirdparty/gnulib.git/commitdiff
issymlinkat: Remove accidental dependency from issymlink on $(LIBINTL).
authorBruno Haible <bruno@clisp.org>
Thu, 4 Dec 2025 19:53:25 +0000 (20:53 +0100)
committerBruno Haible <bruno@clisp.org>
Thu, 4 Dec 2025 20:21:00 +0000 (21:21 +0100)
* lib/issymlinkat.h: New file, based on lib/issymlink.h.
* lib/issymlink.h (_GL_ISSYMLINKAT_INLINE, issymlinkat): Remove
definitions.
* lib/issymlinkat.c: Include issymlinkat.h instead of issymlink.h.
* lib/fchmodat.c: Likewise.
* lib/renameatu.c: Likewise.
* lib/unlinkat.c: Likewise.
* lib/lchmod.c: Include issymlinkat.h.
* modules/issymlinkat (Files): Add lib/issymlinkat.h. Remove
lib/issymlink.h.
(Include): Specify issymlinkat.h instead of issymlink.h.
* NEWS: Mention the change.

ChangeLog
NEWS
lib/fchmodat.c
lib/issymlink.h
lib/issymlinkat.c
lib/issymlinkat.h [new file with mode: 0644]
lib/lchmod.c
lib/renameatu.c
lib/unlinkat.c
modules/issymlinkat

index 358de4427d8ad1431a76af184fda75ac009139f4..6b5b6e111dd7bfb909634225961893e0bde55ac2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2025-12-04  Bruno Haible  <bruno@clisp.org>
+
+       issymlinkat: Remove accidental dependency from issymlink on $(LIBINTL).
+       * lib/issymlinkat.h: New file, based on lib/issymlink.h.
+       * lib/issymlink.h (_GL_ISSYMLINKAT_INLINE, issymlinkat): Remove
+       definitions.
+       * lib/issymlinkat.c: Include issymlinkat.h instead of issymlink.h.
+       * lib/fchmodat.c: Likewise.
+       * lib/renameatu.c: Likewise.
+       * lib/unlinkat.c: Likewise.
+       * lib/lchmod.c: Include issymlinkat.h.
+       * modules/issymlinkat (Files): Add lib/issymlinkat.h. Remove
+       lib/issymlink.h.
+       (Include): Specify issymlinkat.h instead of issymlink.h.
+       * NEWS: Mention the change.
+
 2025-12-04  Bruno Haible  <bruno@clisp.org>
 
        Document modern C coding style.
diff --git a/NEWS b/NEWS
index d954840bfaf7ec71419555ebc7efc35bc67e0173..5fea672149971c03c857d8a42e3db20f1cbf574d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -78,6 +78,9 @@ User visible incompatible changes
 
 Date        Modules         Changes
 
+2025-12-04  issymlinkat     The include file is changed from "issymlink.h" to
+                            "issymlinkat.h".
+
 2025-11-01  nstrftime       The return type is now signed not size_t,
             c-nstrftime     the failure return value is now -1 not 0,
             fprintftime     and errno is no longer preserved on success.
index 9151778b8e331b989a24aaa2ca0d94d81465c0b3..4aa764f8510429798dc90cb17554e2dce7dbc3bd 100644 (file)
@@ -46,7 +46,7 @@ orig_fchmodat (int dir, char const *file, mode_t mode, int flags)
 
 #include <intprops.h>
 
-#include "issymlink.h"
+#include "issymlinkat.h"
 
 /* Invoke chmod or lchmod on FILE, using mode MODE, in the directory
    open on descriptor FD.  If possible, do it without changing the
index af6dc965645a98477b9aabd44688b88d700564cf..a3f97cb5211cbd1427471841e6931685da00fa92 100644 (file)
@@ -23,7 +23,7 @@
 #endif
 
 #include <errno.h>
-#include <unistd.h> /* for readlink, readlinkat */
+#include <unistd.h> /* for readlink */
 
 
 _GL_INLINE_HEADER_BEGIN
@@ -31,11 +31,7 @@ _GL_INLINE_HEADER_BEGIN
 #ifndef _GL_ISSYMLINK_INLINE
 # define _GL_ISSYMLINK_INLINE _GL_INLINE
 #endif
-#ifndef _GL_ISSYMLINKAT_INLINE
-# define _GL_ISSYMLINKAT_INLINE _GL_INLINE
-#endif
 
-#if GNULIB_ISSYMLINK
 /* Tests whether FILENAME represents a symbolic link.
    This function is more reliable than lstat() / fstatat() followed by S_ISLNK,
    because it avoids possible EOVERFLOW errors.
@@ -44,9 +40,9 @@ _GL_INLINE_HEADER_BEGIN
      0                      if FILENAME exists and is not a symbolic link,
     -1 with errno set       if determination failed, in particular
     -1 with errno = ENOENT or ENOTDIR  if FILENAME does not exist.  */
-# ifdef __cplusplus
+#ifdef __cplusplus
 extern "C" {
-# endif
+#endif
 _GL_ISSYMLINK_INLINE int issymlink (const char *filename)
      _GL_ARG_NONNULL ((1));
 _GL_ISSYMLINK_INLINE int
@@ -60,42 +56,8 @@ issymlink (const char *filename)
   else
     return -1;
 }
-# ifdef __cplusplus
-}
-# endif
-#endif
-
-#if GNULIB_ISSYMLINKAT
-/* Tests whether FILENAME represents a symbolic link.
-   This function is more reliable than lstat() / fstatat() followed by S_ISLNK,
-   because it avoids possible EOVERFLOW errors.
-   If FILENAME is a relative file name, it is interpreted as relative to the
-   directory referred to by FD (where FD = AT_FDCWD denotes the current
-   directory).
-   Returns
-     1                      if FILENAME is a symbolic link,
-     0                      if FILENAME exists and is not a symbolic link,
-    -1 with errno set       if determination failed, in particular
-    -1 with errno = ENOENT or ENOTDIR  if FILENAME does not exist.  */
-# ifdef __cplusplus
-extern "C" {
-# endif
-_GL_ISSYMLINKAT_INLINE int issymlinkat (int fd, const char *filename)
-     _GL_ARG_NONNULL ((2));
-_GL_ISSYMLINKAT_INLINE int
-issymlinkat (int fd, const char *filename)
-{
-  char linkbuf[1];
-  if (readlinkat (fd, filename, linkbuf, sizeof (linkbuf)) >= 0)
-    return 1;
-  if (errno == EINVAL)
-    return 0;
-  else
-    return -1;
-}
-# ifdef __cplusplus
+#ifdef __cplusplus
 }
-# endif
 #endif
 
 _GL_INLINE_HEADER_END
index 8286356c8a210bfd0387baa7383f018986f41559..ebd937e91bc524ca888e702a0d9f8a0f98bc9f8b 100644 (file)
@@ -17,4 +17,4 @@
 #include <config.h>
 
 #define _GL_ISSYMLINKAT_INLINE _GL_EXTERN_INLINE
-#include "issymlink.h"
+#include "issymlinkat.h"
diff --git a/lib/issymlinkat.h b/lib/issymlinkat.h
new file mode 100644 (file)
index 0000000..abbbbff
--- /dev/null
@@ -0,0 +1,68 @@
+/* Test whether a file is a symbolic link.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+
+   This file is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   This file is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _ISSYMLINKAT_H
+#define _ISSYMLINKAT_H
+
+/* This file uses _GL_ARG_NONNULL, _GL_INLINE.  */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
+#include <errno.h>
+#include <unistd.h> /* for readlinkat */
+
+
+_GL_INLINE_HEADER_BEGIN
+
+#ifndef _GL_ISSYMLINKAT_INLINE
+# define _GL_ISSYMLINKAT_INLINE _GL_INLINE
+#endif
+
+/* Tests whether FILENAME represents a symbolic link.
+   This function is more reliable than lstat() / fstatat() followed by S_ISLNK,
+   because it avoids possible EOVERFLOW errors.
+   If FILENAME is a relative file name, it is interpreted as relative to the
+   directory referred to by FD (where FD = AT_FDCWD denotes the current
+   directory).
+   Returns
+     1                      if FILENAME is a symbolic link,
+     0                      if FILENAME exists and is not a symbolic link,
+    -1 with errno set       if determination failed, in particular
+    -1 with errno = ENOENT or ENOTDIR  if FILENAME does not exist.  */
+#ifdef __cplusplus
+extern "C" {
+#endif
+_GL_ISSYMLINKAT_INLINE int issymlinkat (int fd, const char *filename)
+     _GL_ARG_NONNULL ((2));
+_GL_ISSYMLINKAT_INLINE int
+issymlinkat (int fd, const char *filename)
+{
+  char linkbuf[1];
+  if (readlinkat (fd, filename, linkbuf, sizeof (linkbuf)) >= 0)
+    return 1;
+  if (errno == EINVAL)
+    return 0;
+  else
+    return -1;
+}
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _ISSYMLINKAT_H */
index deba4c50f5b3e9d72c871890e494dc916da4304d..acccef629cc35f6b2c9f6e6a2aa53edfd2d93f37 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <intprops.h>
 #include "issymlink.h"
+#include "issymlinkat.h"
 
 /* Work like chmod, except when FILE is a symbolic link.
    In that case, on systems where permissions on symbolic links are unsupported
index 29c48392694dba8ee0fdc67c74a7e77b7e9ed417..ef40ad3d173a76e69d6ec9dedbecedbc1b461909 100644 (file)
@@ -30,7 +30,7 @@
 # include <sys/syscall.h>
 #endif
 
-#include "issymlink.h"
+#include "issymlinkat.h"
 
 static int
 errno_fail (int e)
index 3cf5fc5ea5a70b8b74f475acc984a1f36f7868c9..be4a8c2b6346fa951c389625f13e939bac69b67f 100644 (file)
@@ -30,7 +30,7 @@
 #include <stdlib.h>
 
 #include "filename.h"
-#include "issymlink.h"
+#include "issymlinkat.h"
 #include "openat.h"
 
 #if HAVE_UNLINKAT
index c02e4e9678ce905e9d73d9b263cde37a5f14e2a7..b4e03c22b7ea504ad710089f6debb63f57b185e8 100644 (file)
@@ -2,7 +2,7 @@ Description:
 Test whether a file is a symbolic link.
 
 Files:
-lib/issymlink.h
+lib/issymlinkat.h
 lib/issymlinkat.c
 
 Depends-on:
@@ -18,7 +18,7 @@ Makefile.am:
 lib_SOURCES += issymlinkat.c
 
 Include:
-"issymlink.h"
+"issymlinkat.h"
 
 Link:
 $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise