M board/rt1051/newlib/io_syscalls.cpp => board/rt1051/newlib/io_syscalls.cpp +17 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include <errno.h>
#include <stdio.h>
@@ 150,4 150,20 @@ extern "C"
{
utils::internal::syscalls::env_unlock(reent->_errno);
}
+ ssize_t readlink(const char *path, char *buf, size_t buflen)
+ {
+ return syscalls::readlink(_REENT->_errno, path, buf, buflen);
+ }
+ int symlink(const char *name1, const char *name2)
+ {
+ return syscalls::symlink(_REENT->_errno, name1, name2);
+ }
+ long fpathconf(int fd, int name)
+ {
+ return syscalls::fpathconf(_REENT->_errno, fd, name);
+ }
+ long pathconf(const char *path, int name)
+ {
+ return syscalls::pathconf(_REENT->_errno, path, name);
+ }
}
M module-vfs/drivers/include/purefs/fs/drivers/filesystem_littlefs.hpp => module-vfs/drivers/include/purefs/fs/drivers/filesystem_littlefs.hpp +2 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
@@ 37,6 37,7 @@ namespace purefs::fs::drivers
auto unlink(fsmount mnt, std::string_view name) noexcept -> int override;
auto rename(fsmount mnt, std::string_view oldname, std::string_view newname) noexcept -> int override;
auto mkdir(fsmount mnt, std::string_view path, int mode) noexcept -> int override;
+ auto fchmod(fsfile zfile, mode_t mode) noexcept -> int override;
/** Directory support API */
auto diropen(fsmount mnt, std::string_view path) noexcept -> fsdir override;
M module-vfs/drivers/src/purefs/fs/filesystem_littlefs.cpp => module-vfs/drivers/src/purefs/fs/filesystem_littlefs.cpp +8 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include <purefs/fs/drivers/filesystem_littlefs.hpp>
@@ 448,4 448,11 @@ namespace purefs::fs::drivers
return invoke_lfs(dirstate, ::lfs_dir_close);
}
+ auto filesystem_littlefs::fchmod(fsfile zfile, mode_t mode) noexcept -> int
+ {
+ // Littlefs doesn't support chmod() so we need that path exists
+ struct stat filestat;
+ return fstat(zfile, filestat);
+ }
+
} // namespace purefs::fs::drivers
M module-vfs/include/internal/newlib/vfs_io_syscalls.hpp => module-vfs/include/internal/newlib/vfs_io_syscalls.hpp +5 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
@@ 43,5 43,9 @@ namespace vfsn::internal::syscalls
const void *data);
int umount(int &_errno_, const char *special_file);
int statvfs(int &_errno_, const char *path, struct statvfs *buf);
+ ssize_t readlink(int &_errno_, const char *path, char *buf, size_t buflen);
+ int symlink(int &_errno_, const char *name1, const char *name2);
+ long fpathconf(int &_errno, int fd, int name);
+ long pathconf(int &_errno, const char *path, int name);
} // namespace vfsn::internal::syscalls
M module-vfs/src/newlib/vfs_io_syscalls.cpp => module-vfs/src/newlib/vfs_io_syscalls.cpp +35 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include <errno.h>
@@ 364,5 364,39 @@ namespace vfsn::internal::syscalls
data);
}
+ ssize_t readlink(int &_errno_, const char *path, char *buf, size_t buflen)
+ {
+ // Symlinks are not supported. According to man(2) symlink EINVAL when is not symlink.
+ _errno_ = EINVAL;
+ return -1;
+ }
+
+ int symlink(int &_errno_, const char *name1, const char *name2)
+ {
+ return invoke_fs(_errno_, &purefs::fs::filesystem::symlink, name1, name2);
+ }
+
+ long fpathconf(int &_errno, int fd, int name)
+ {
+ if (name == _PC_PATH_MAX) {
+ return PATH_MAX;
+ }
+ else {
+ _errno = EINVAL;
+ return -1;
+ }
+ }
+
+ long pathconf(int &_errno, const char *path, int name)
+ {
+ if (name == _PC_PATH_MAX) {
+ return PATH_MAX;
+ }
+ else {
+ _errno = EINVAL;
+ return -1;
+ }
+ }
+
} // namespace vfsn::internal::syscalls