From 3aa3c215049d6fd69746c752b39436de7fca7bb1 Mon Sep 17 00:00:00 2001 From: Felipe Moura Date: Wed, 24 Jun 2026 16:50:15 -0300 Subject: [PATCH] fs/vfs: provide link fallback without softlinks Build fs_link.c unconditionally so link() remains available even when CONFIG_PSEUDOFS_SOFTLINKS is disabled. Return ENOSYS in that configuration instead of leaving applications with an undefined symbol. Signed-off-by: Felipe Moura --- fs/vfs/CMakeLists.txt | 5 +++-- fs/vfs/Make.defs | 4 ++-- fs/vfs/fs_link.c | 23 +++++++++++------------ 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/fs/vfs/CMakeLists.txt b/fs/vfs/CMakeLists.txt index f1b6b45f743..3880b2a3727 100644 --- a/fs/vfs/CMakeLists.txt +++ b/fs/vfs/CMakeLists.txt @@ -51,7 +51,8 @@ set(SRCS fs_dir.c fs_fsync.c fs_syncfs.c - fs_truncate.c) + fs_truncate.c + fs_link.c) # File notify support @@ -66,7 +67,7 @@ if(NOT "${CONFIG_FS_LOCK_BUCKET_SIZE}" STREQUAL "0") endif() if(NOT "${CONFIG_PSEUDOFS_SOFTLINKS}" STREQUAL "0") - list(APPEND SRCS fs_link.c fs_symlink.c fs_readlink.c) + list(APPEND SRCS fs_symlink.c fs_readlink.c) endif() # Pseudofile support diff --git a/fs/vfs/Make.defs b/fs/vfs/Make.defs index 75b7ad168c4..ce2a7a5f5af 100644 --- a/fs/vfs/Make.defs +++ b/fs/vfs/Make.defs @@ -27,7 +27,7 @@ CSRCS += fs_epoll.c fs_fchstat.c fs_fstat.c fs_fstatfs.c fs_ioctl.c fs_lseek.c CSRCS += fs_mkdir.c fs_open.c fs_poll.c fs_pread.c fs_pwrite.c fs_read.c CSRCS += fs_rename.c fs_rmdir.c fs_select.c fs_sendfile.c fs_stat.c CSRCS += fs_statfs.c fs_uio.c fs_unlink.c fs_write.c fs_dir.c fs_fsync.c -CSRCS += fs_syncfs.c fs_truncate.c +CSRCS += fs_syncfs.c fs_truncate.c fs_link.c ifeq ($(CONFIG_FS_NOTIFY),y) CSRCS += fs_inotify.c @@ -38,7 +38,7 @@ CSRCS += fs_lock.c endif ifneq ($(CONFIG_PSEUDOFS_SOFTLINKS),0) -CSRCS += fs_link.c fs_symlink.c fs_readlink.c +CSRCS += fs_symlink.c fs_readlink.c endif # Pseudofile support diff --git a/fs/vfs/fs_link.c b/fs/vfs/fs_link.c index ffdb193706f..e47ac41fffe 100644 --- a/fs/vfs/fs_link.c +++ b/fs/vfs/fs_link.c @@ -26,14 +26,9 @@ #include +#include #include -/**************************************************************************** - * Pre-processor Definitions - ****************************************************************************/ - -#ifdef CONFIG_PSEUDOFS_SOFTLINKS - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -42,10 +37,8 @@ * Name: link * * Description: - * The link function provides a wrapper to symlink. Solely to provide - * compatibility to posix compatibility layer. - * - * See symlink for details on limitations. + * The link function provides a wrapper to symlink when pseudo filesystem + * softlinks are enabled. Otherwise, hard links are unsupported. * * Input Parameters: * path1 - Points to a pathname naming an existing file. @@ -60,7 +53,13 @@ int link(FAR const char *path1, FAR const char *path2) { +#ifdef CONFIG_PSEUDOFS_SOFTLINKS return symlink(path1, path2); -} +#else + (void)path1; + (void)path2; -#endif /* CONFIG_PSEUDOFS_SOFTLINKS */ + set_errno(ENOSYS); + return ERROR; +#endif +}