| Index: fusl/src/mman/shm_open.c
|
| diff --git a/fusl/src/mman/shm_open.c b/fusl/src/mman/shm_open.c
|
| index d042a5a882bd347dd937bceb8f851bb98cb418b8..e8bdf21e40ddf6e4565bab611c27cd60a0958c6d 100644
|
| --- a/fusl/src/mman/shm_open.c
|
| +++ b/fusl/src/mman/shm_open.c
|
| @@ -6,40 +6,40 @@
|
| #include <limits.h>
|
| #include <pthread.h>
|
|
|
| -char *__strchrnul(const char *, int);
|
| +char* __strchrnul(const char*, int);
|
|
|
| -char *__shm_mapname(const char *name, char *buf)
|
| -{
|
| - char *p;
|
| - while (*name == '/') name++;
|
| - if (*(p = __strchrnul(name, '/')) || p==name ||
|
| - (p-name <= 2 && name[0]=='.' && p[-1]=='.')) {
|
| - errno = EINVAL;
|
| - return 0;
|
| - }
|
| - if (p-name > NAME_MAX) {
|
| - errno = ENAMETOOLONG;
|
| - return 0;
|
| - }
|
| - memcpy(buf, "/dev/shm/", 9);
|
| - memcpy(buf+9, name, p-name+1);
|
| - return buf;
|
| +char* __shm_mapname(const char* name, char* buf) {
|
| + char* p;
|
| + while (*name == '/')
|
| + name++;
|
| + if (*(p = __strchrnul(name, '/')) || p == name ||
|
| + (p - name <= 2 && name[0] == '.' && p[-1] == '.')) {
|
| + errno = EINVAL;
|
| + return 0;
|
| + }
|
| + if (p - name > NAME_MAX) {
|
| + errno = ENAMETOOLONG;
|
| + return 0;
|
| + }
|
| + memcpy(buf, "/dev/shm/", 9);
|
| + memcpy(buf + 9, name, p - name + 1);
|
| + return buf;
|
| }
|
|
|
| -int shm_open(const char *name, int flag, mode_t mode)
|
| -{
|
| - int cs;
|
| - char buf[NAME_MAX+10];
|
| - if (!(name = __shm_mapname(name, buf))) return -1;
|
| - pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
|
| - int fd = open(name, flag|O_NOFOLLOW|O_CLOEXEC|O_NONBLOCK, mode);
|
| - pthread_setcancelstate(cs, 0);
|
| - return fd;
|
| +int shm_open(const char* name, int flag, mode_t mode) {
|
| + int cs;
|
| + char buf[NAME_MAX + 10];
|
| + if (!(name = __shm_mapname(name, buf)))
|
| + return -1;
|
| + pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
|
| + int fd = open(name, flag | O_NOFOLLOW | O_CLOEXEC | O_NONBLOCK, mode);
|
| + pthread_setcancelstate(cs, 0);
|
| + return fd;
|
| }
|
|
|
| -int shm_unlink(const char *name)
|
| -{
|
| - char buf[NAME_MAX+10];
|
| - if (!(name = __shm_mapname(name, buf))) return -1;
|
| - return unlink(name);
|
| +int shm_unlink(const char* name) {
|
| + char buf[NAME_MAX + 10];
|
| + if (!(name = __shm_mapname(name, buf)))
|
| + return -1;
|
| + return unlink(name);
|
| }
|
|
|