diff options
author | Roland McGrath <roland@hack.frob.com> | 2014-12-11 14:15:51 -0800 |
---|---|---|
committer | Roland McGrath <roland@hack.frob.com> | 2014-12-11 16:19:11 -0800 |
commit | 78e21c5df674e037d06e86c5d4cb95818c8f6b8c (patch) | |
tree | 41b2d0b9e5fcb5cb2709a24a93364e172306740a /sysdeps/posix/shm_unlink.c | |
parent | f82c43af8aebc5a270c8be06055ee5a38063bac3 (diff) | |
download | glibc-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.c | 31 |
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 |