9 char *__shm_mapname(const char *name
, char *buf
)
12 while (*name
== '/') name
++;
13 if (*(p
= __strchrnul(name
, '/')) || p
==name
||
14 (p
-name
<= 2 && name
[0]=='.' && p
[-1]=='.')) {
18 if (p
-name
> NAME_MAX
) {
22 memcpy(buf
, "/dev/shm/", 9);
23 memcpy(buf
+9, name
, p
-name
+1);
27 int shm_open(const char *name
, int flag
, mode_t mode
)
30 char buf
[NAME_MAX
+10];
31 if (!(name
= __shm_mapname(name
, buf
))) return -1;
32 pthread_setcancelstate(PTHREAD_CANCEL_DISABLE
, &cs
);
33 int fd
= open(name
, flag
|O_NOFOLLOW
|O_CLOEXEC
|O_NONBLOCK
, mode
);
34 pthread_setcancelstate(cs
, 0);
38 int shm_unlink(const char *name
)
40 char buf
[NAME_MAX
+10];
41 if (!(name
= __shm_mapname(name
, buf
))) return -1;