feat: S2 name canonicalization — sem_* prefix shm_open paths with 'sem.'
sem_open/map_named_semaphore now canonicalizes names: /mysem → sem./mysem Prevents namespace collisions with raw shm_open usage. Matches glibc's /dev/shm/sem.NAME convention.
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
diff --git a/src/header/semaphore/mod.rs b/src/header/semaphore/mod.rs
|
diff --git a/src/header/semaphore/mod.rs b/src/header/semaphore/mod.rs
|
||||||
|
index 0ca2fa9..8a1cad4 100644
|
||||||
--- a/src/header/semaphore/mod.rs
|
--- a/src/header/semaphore/mod.rs
|
||||||
+++ b/src/header/semaphore/mod.rs
|
+++ b/src/header/semaphore/mod.rs
|
||||||
@@ -2,12 +2,27 @@
|
@@ -2,12 +2,27 @@
|
||||||
@@ -30,7 +31,7 @@ diff --git a/src/header/semaphore/mod.rs b/src/header/semaphore/mod.rs
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/semaphore.h.html>.
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/semaphore.h.html>.
|
||||||
@@ -19,11 +34,86 @@
|
@@ -19,11 +34,87 @@ pub union sem_t {
|
||||||
pub align: c_long,
|
pub align: c_long,
|
||||||
}
|
}
|
||||||
pub type RlctSempahore = crate::sync::Semaphore;
|
pub type RlctSempahore = crate::sync::Semaphore;
|
||||||
@@ -67,7 +68,8 @@ diff --git a/src/header/semaphore/mod.rs b/src/header/semaphore/mod.rs
|
|||||||
+) -> *mut sem_t {
|
+) -> *mut sem_t {
|
||||||
+ let create = (oflag & O_CREAT) != 0;
|
+ let create = (oflag & O_CREAT) != 0;
|
||||||
+ let shm_flags = if create { O_CREAT | O_EXCL | O_RDWR } else { O_RDWR };
|
+ let shm_flags = if create { O_CREAT | O_EXCL | O_RDWR } else { O_RDWR };
|
||||||
+ let fd = unsafe { shm_open(name, shm_flags, mode) };
|
+ let canonical = alloc::format!("sem.{name_cstr}", name_cstr = unsafe { CStr::from_ptr(name) }.to_str().unwrap_or(""));
|
||||||
|
+ let fd = unsafe { shm_open(canonical.as_ptr() as *const c_char, shm_flags, mode) };
|
||||||
+ if fd < 0 {
|
+ if fd < 0 {
|
||||||
+ return SEM_FAILED_PTR;
|
+ return SEM_FAILED_PTR;
|
||||||
+ }
|
+ }
|
||||||
@@ -118,7 +120,7 @@ diff --git a/src/header/semaphore/mod.rs b/src/header/semaphore/mod.rs
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/sem_destroy.html>.
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/sem_destroy.html>.
|
||||||
@@ -50,13 +140,31 @@
|
@@ -50,13 +141,31 @@ pub unsafe extern "C" fn sem_init(sem: *mut sem_t, _pshared: c_int, value: c_uin
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/sem_open.html>.
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/sem_open.html>.
|
||||||
@@ -154,7 +156,7 @@ diff --git a/src/header/semaphore/mod.rs b/src/header/semaphore/mod.rs
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/sem_post.html>.
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/sem_post.html>.
|
||||||
@@ -76,9 +184,12 @@
|
@@ -76,9 +185,12 @@ pub unsafe extern "C" fn sem_trywait(sem: *mut sem_t) -> c_int {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/sem_unlink.html>.
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/sem_unlink.html>.
|
||||||
@@ -169,19 +171,3 @@ diff --git a/src/header/semaphore/mod.rs b/src/header/semaphore/mod.rs
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/sem_trywait.html>.
|
/// See <https://pubs.opengroup.org/onlinepubs/9799919799/functions/sem_trywait.html>.
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/header/semaphore/cbindgen.toml b/src/header/semaphore/cbindgen.toml
|
|
||||||
--- a/src/header/semaphore/cbindgen.toml
|
|
||||||
+++ b/src/header/semaphore/cbindgen.toml
|
|
||||||
@@ -3,6 +3,9 @@
|
|
||||||
after_includes = """
|
|
||||||
#include <bits/timespec.h> // for timespec
|
|
||||||
"""
|
|
||||||
+trailer = """
|
|
||||||
+#define SEM_FAILED ((sem_t *) -1)
|
|
||||||
+"""
|
|
||||||
language = "C"
|
|
||||||
style = "Type"
|
|
||||||
no_includes = true
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user