* 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>
+
+ 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.
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.
#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
#endif
#include <errno.h>
-#include <unistd.h> /* for readlink, readlinkat */
+#include <unistd.h> /* for readlink */
_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.
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
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
#include <config.h>
#define _GL_ISSYMLINKAT_INLINE _GL_EXTERN_INLINE
-#include "issymlink.h"
+#include "issymlinkat.h"
--- /dev/null
+/* 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 */
#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
# include <sys/syscall.h>
#endif
-#include "issymlink.h"
+#include "issymlinkat.h"
static int
errno_fail (int e)
#include <stdlib.h>
#include "filename.h"
-#include "issymlink.h"
+#include "issymlinkat.h"
#include "openat.h"
#if HAVE_UNLINKAT
Test whether a file is a symbolic link.
Files:
-lib/issymlink.h
+lib/issymlinkat.h
lib/issymlinkat.c
Depends-on:
lib_SOURCES += issymlinkat.c
Include:
-"issymlink.h"
+"issymlinkat.h"
Link:
$(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise