summaryrefslogtreecommitdiff
path: root/sysdeps/posix/shm_unlink.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@hack.frob.com>2014-12-11 14:15:51 -0800
committerRoland McGrath <roland@hack.frob.com>2014-12-11 16:19:11 -0800
commit78e21c5df674e037d06e86c5d4cb95818c8f6b8c (patch)
tree41b2d0b9e5fcb5cb2709a24a93364e172306740a /sysdeps/posix/shm_unlink.c
parentf82c43af8aebc5a270c8be06055ee5a38063bac3 (diff)
downloadglibc-78e21c5df674e037d06e86c5d4cb95818c8f6b8c.tar.gz
Refactor shm_{open,unlink} code to separate Linux-specific directory choice from POSIX-generic code.
Diffstat (limited to 'sysdeps/posix/shm_unlink.c')
-rw-r--r--sysdeps/posix/shm_unlink.c31
1 files changed, 7 insertions, 24 deletions
diff --git a/sysdeps/posix/shm_unlink.c b/sysdeps/posix/shm_unlink.c
index dc94e1692b..81c3a02642 100644
--- a/sysdeps/posix/shm_unlink.c
+++ b/sysdeps/posix/shm_unlink.c
@@ -24,37 +24,20 @@
#else
#include <errno.h>
-#include <sys/mman.h>
#include <string.h>
-#include <stdlib.h>
-#include <paths.h>
+#include "shm-directory.h"
-#define SHMDIR (_PATH_DEV "shm/")
/* Remove shared memory object. */
int
shm_unlink (const char *name)
{
- size_t namelen;
- char *fname;
-
- /* Construct the filename. */
- while (name[0] == '/')
- ++name;
-
- if (name[0] == '\0')
- {
- /* The name "/" is not supported. */
- __set_errno (EINVAL);
- return -1;
- }
-
- namelen = strlen (name);
- fname = (char *) __alloca (sizeof SHMDIR - 1 + namelen + 1);
- __mempcpy (__mempcpy (fname, SHMDIR, sizeof SHMDIR - 1),
- name, namelen + 1);
-
- return unlink (name);
+ SHM_GET_NAME (ENOENT, -1);
+
+ int result = unlink (shm_name);
+ if (result < 0 && errno == EPERM)
+ __set_errno (EACCES);
+ return result;
}
#endif