Update copyright notices with scripts/update-copyrights.
[jlayton/glibc.git] / sysdeps / posix / shm_unlink.c
1 /* shm_unlink -- remove a POSIX shared memory object.  Generic POSIX version.
2    Copyright (C) 2001-2013 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
18
19 #include <unistd.h>
20
21 #if ! _POSIX_MAPPED_FILES
22 #include <rt/shm_unlink.c>
23
24 #else
25
26 #include <errno.h>
27 #include <sys/mman.h>
28 #include <string.h>
29 #include <stdlib.h>
30 #include <paths.h>
31
32 #define SHMDIR  (_PATH_DEV "shm/")
33
34 /* Remove shared memory object.  */
35 int
36 shm_unlink (const char *name)
37 {
38   size_t namelen;
39   char *fname;
40
41   /* Construct the filename.  */
42   while (name[0] == '/')
43     ++name;
44
45   if (name[0] == '\0')
46     {
47       /* The name "/" is not supported.  */
48       __set_errno (EINVAL);
49       return -1;
50     }
51
52   namelen = strlen (name);
53   fname = (char *) __alloca (sizeof SHMDIR - 1 + namelen + 1);
54   __mempcpy (__mempcpy (fname, SHMDIR, sizeof SHMDIR - 1),
55              name, namelen + 1);
56
57   return unlink (name);
58 }
59
60 #endif