diff --git a/Documentation/NuttxUserGuide.html b/Documentation/NuttxUserGuide.html index 5f1b35ca94..35032cc820 100644 --- a/Documentation/NuttxUserGuide.html +++ b/Documentation/NuttxUserGuide.html @@ -479,14 +479,14 @@ int task_delete(pid_t pid);
Description:
This function causes a specified task to cease to exist.
- Its stack and TCB will be deallocated.
+ Its stack and TCB will be deallocated.
This function is the companion to task_create()
.
This is the version of the function exposed to the user;
it is simply a wrapper around the internal, task_terminate()
function.
The logic in this function only deletes non-running tasks.
- If the pid
parameter refers to to the currently runing task, then processing is redirected to exit()
.
+ If the pid
parameter refers to to the currently runing task, then processing is redirected to exit()
.
This can only happen if a task calls task_delete()
in order to delete itself.
@@ -6223,7 +6223,7 @@ interface of the same name. Description:
The pthread_cancel()
function will request that thread be canceled.
-The target thread's cancelability state, enabled, or disabled, determines when the cancellation takes effect: When the cancellation is acted on, thread will be terminated.
+The target thread's cancelability state, enabled, or disabled, determines when the cancellation takes effect: When the cancellation is acted on, thread will be terminated.
When cancelability is disabled, all cancellations are held pending in the target thread until the thread re-enables cancelability.
The target thread's cancelability state determines how the cancellation is acted on: @@ -6592,16 +6592,16 @@ interface of the same name.
sched_ss_low_priority
- Low scheduling priority for sporadic server.
+ Low scheduling priority for sporadic server.
sched_ss_repl_period
- Replenishment period for sporadic server.
+ Replenishment period for sporadic server.
sched_ss_init_budget
- Initial budget for sporadic server.
+ Initial budget for sporadic server.
sched_ss_max_repl
- Maximum pending replenishments for sporadic server.
+ Maximum pending replenishments for sporadic server.
@@ -8584,6 +8584,8 @@ int telldir(FAR DIR *dirp);
#include <unistd.h> +/* Task Control Interfaces */ + pid_t vfork(void); pid_t getpid(void); void _exit(int status) noreturn_function; @@ -8591,6 +8593,8 @@ unsigned int sleep(unsigned int seconds); void usleep(unsigned long usec); int pause(void); +/* File descriptor operations */ + int close(int fd); int dup(int fd); int dup2(int fd1, int fd2); @@ -8598,21 +8602,58 @@ int fsync(int fd); off_t lseek(int fd, off_t offset, int whence); ssize_t read(int fd, FAR void *buf, size_t nbytes); ssize_t write(int fd, FAR const void *buf, size_t nbytes); +ssize_t pread(int fd, FAR void *buf, size_t nbytes, off_t offset); +ssize_t pwrite(int fd, FAR const void *buf, size_t nbytes, off_t offset); + +/* Check if a file descriptor corresponds to a terminal I/O file */ + +int isatty(int fd); + +/* Memory management */ + +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_MM_PGALLOC) && \ + defined(CONFIG_ARCH_USE_MMU) +FAR void *sbrk(intptr_t incr); +#endif + +/* Special devices */ int pipe(int fd[2]); +/* Working directory operations */ + int chdir(FAR const char *path); FAR char *getcwd(FAR char *buf, size_t size); -int unlink(FAR const char *pathname); +/* File path operations */ + +int access(FAR const char *path, int amode); int rmdir(FAR const char *pathname); +int unlink(FAR const char *pathname); + +#ifdef CONFIG_PSEUDOFS_SOFTLINKS +int link(FAR const char *path1, FAR const char *path2); +ssize_t readlink(FAR const char *path, FAR char *buf, size_t bufsize); +#endif + +/* Execution of programs from files */ #ifdef CONFIG_LIBC_EXECFUNCS int execl(FAR const char *path, ...); int execv(FAR const char *path, FAR char *const argv[]); #endif +/* Networking */ + +#ifdef CONFIG_NET +int gethostname(FAR char *name, size_t size); +int sethostname(FAR const char *name, size_t size); +#endif + +/* Other */ + int getopt(int argc, FAR char *const argv[], FAR const char *optstring); +diff --git a/fs/Kconfig b/fs/Kconfig index 1bd8d5f945..05ab5daea9 100644 --- a/fs/Kconfig +++ b/fs/Kconfig @@ -43,7 +43,7 @@ config DISABLE_PSEUDOFS_OPERATIONS config PSEUDOFS_SOFTLINKS bool "Pseudo-filesystem soft links" default n - depends on !DISABLE_PSEUDOFS_OPERATIONSi && EXPERIMENTAL + depends on !DISABLE_PSEUDOFS_OPERATIONS ---help--- Enable support for soft links in the pseudeo file system. Soft links are not supported within mounted volumes by any NuttX file diff --git a/fs/inode/fs_inodesearch.c b/fs/inode/fs_inodesearch.c index 0fb22b4164..82ebafd8b4 100644 --- a/fs/inode/fs_inodesearch.c +++ b/fs/inode/fs_inodesearch.c @@ -515,6 +515,8 @@ int inode_search(FAR struct inode_search_s *desc) if (desc->linktgt != NULL && INODE_IS_MOUNTPT(node)) { + FAR char *buffer; + /* There would be no problem in this case if the link was to * either to the root directory of the MOUNTPOINT or to a * regular file within the the mounted volume. However, @@ -530,19 +532,28 @@ int inode_search(FAR struct inode_search_s *desc) if (desc->relpath != NULL && *desc->relpath != '\0') { - snprintf(desc->fullpath, PATH_MAX, "%s/%s", - desc->linktgt, desc->relpath); + (void)asprintf(&buffer, "%s/%s", + desc->linktgt, desc->relpath); } else { - strncpy(desc->fullpath, desc->linktgt, PATH_MAX); + buffer = strdup(desc->linktgt); } - /* Reset the search description and perform the search again. */ + if (buffer == NULL) + { + ret = -ENOMEM; + } + else + { + /* Reset the search description and perform the search again. */ - RELEASE_SEARCH(desc); - SETUP_SEARCH(desc, desc->fullpath, false); - ret = _inode_search(desc); + RELEASE_SEARCH(desc); + SETUP_SEARCH(desc, buffer, false); + desc->buffer = buffer; + + ret = _inode_search(desc); + } } } #endif diff --git a/fs/inode/inode.h b/fs/inode/inode.h index 7dbd90e126..4e2f6aa150 100644 --- a/fs/inode/inode.h +++ b/fs/inode/inode.h @@ -48,6 +48,7 @@ #include