summaryrefslogtreecommitdiff
path: root/src/mman
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-09-30 19:35:40 -0400
committerRich Felker <dalias@aerifal.cx>2012-09-30 19:35:40 -0400
commitbf258341b71711461ce19891674d43c135827d0e (patch)
tree29b3526a1039a2b5cce1eb73a67a99a2f6fcf0cd /src/mman
parent6e2372a86c7e862ed931910f8a5f4b908639d689 (diff)
downloadmusl-bf258341b71711461ce19891674d43c135827d0e.tar.gz
overhaul sem_open
this function was overly complicated and not even obviously correct. avoid using openat/linkat just like in shm_open, and instead expand pathname using code shared with shm_open. remove bogus (and dangerous, with priorities) use of spinlocks. this commit also heavily streamlines the code and ensures there are no failure cases that can happen after a new semaphore has been created in the filesystem, since that case is unreportable.
Diffstat (limited to 'src/mman')
-rw-r--r--src/mman/shm_open.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/mman/shm_open.c b/src/mman/shm_open.c
index a9be899b..b23eac7f 100644
--- a/src/mman/shm_open.c
+++ b/src/mman/shm_open.c
@@ -7,7 +7,7 @@
char *__strchrnul(const char *, int);
-static const char *mapname(const char *name, char *buf)
+char *__shm_mapname(const char *name, char *buf)
{
char *p;
while (*name == '/') name++;
@@ -28,13 +28,13 @@ static const char *mapname(const char *name, char *buf)
int shm_open(const char *name, int flag, mode_t mode)
{
char buf[NAME_MAX+10];
- if (!(name = mapname(name, buf))) return -1;
+ if (!(name = __shm_mapname(name, buf))) return -1;
return open(name, flag|O_NOFOLLOW|O_CLOEXEC|O_NONBLOCK, mode);
}
int shm_unlink(const char *name)
{
char buf[NAME_MAX+10];
- if (!(name = mapname(name, buf))) return -1;
+ if (!(name = __shm_mapname(name, buf))) return -1;
return unlink(name);
}