aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Bright <dab@FreeBSD.org>2019-09-26 15:32:28 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-07-11 11:52:46 +0200
commit53648039c4efa32941bf567f9d0ab2f4c012cc4d (patch)
tree696e7560316ed7faa9c6028fd1cdad2ba3971b49
parent9243caa8d3723e808f4679fe5bb3b97ebfa1b4fe (diff)
downloadnewlib-53648039c4efa32941bf567f9d0ab2f4c012cc4d.tar.gz
newlib-53648039c4efa32941bf567f9d0ab2f4c012cc4d.tar.bz2
newlib-53648039c4efa32941bf567f9d0ab2f4c012cc4d.zip
Add an shm_rename syscall
Add an atomic shm rename operation, similar in spirit to a file rename. Atomically unlink an shm from a source path and link it to a destination path. If an existing shm is linked at the destination path, unlink it as part of the same atomic operation. The caller needs the same permissions as shm_unlink to the shm being renamed, and the same permissions for the shm at the destination which is being unlinked, if it exists. If those fail, EACCES is returned, as with the other shm_* syscalls. truss support is included; audit support will come later. This commit includes only the implementation; the sysent-generated bits will come in a follow-on commit. Submitted by: Matthew Bryan <matthew.bryan@isilon.com> Reviewed by: jilles (earlier revision) Reviewed by: brueffer (manpages, earlier revision) Relnotes: yes Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D21423
-rw-r--r--newlib/libc/sys/rtems/include/sys/mman.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/newlib/libc/sys/rtems/include/sys/mman.h b/newlib/libc/sys/rtems/include/sys/mman.h
index 867b68647..89cc4d699 100644
--- a/newlib/libc/sys/rtems/include/sys/mman.h
+++ b/newlib/libc/sys/rtems/include/sys/mman.h
@@ -134,6 +134,14 @@
#define MAP_FAILED ((void *)-1)
/*
+ * Flags provided to shm_rename
+ */
+/* Don't overwrite dest, if it exists */
+#define SHM_RENAME_NOREPLACE (1 << 0)
+/* Atomically swap src and dest */
+#define SHM_RENAME_EXCHANGE (1 << 1)
+
+/*
* msync() flags
*/
#define MS_SYNC 0x0000 /* msync synchronously */
@@ -264,6 +272,7 @@ int posix_madvise(void *, size_t, int);
int mlockall(int);
int munlockall(void);
int shm_open(const char *, int, mode_t);
+int shm_rename(const char *, const char *, int);
int shm_unlink(const char *);
#endif
#if __BSD_VISIBLE