diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2015-03-25 02:36:31 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2015-03-25 02:36:31 +0100 |
commit | afd6ce081d51f1f92f4522f586b5bb385e055b67 (patch) | |
tree | 3ad95105298736b4f3ce63a31d45f3e64be08b77 /hurd | |
parent | fc80c27620b9bf7c4c182cf33c84380b4a82fa4c (diff) | |
parent | 5d8ef852fce5c86756bfd05cbbc5b05351dd9ced (diff) |
Merge branch 't/sysvshm' into refs/top-bases/tschwinge/Roger_Whittaker
Diffstat (limited to 'hurd')
-rw-r--r-- | hurd/sysvshm.c | 27 | ||||
-rw-r--r-- | hurd/sysvshm.h | 25 |
2 files changed, 29 insertions, 23 deletions
diff --git a/hurd/sysvshm.c b/hurd/sysvshm.c index 18d27d6c44..5d538a6373 100644 --- a/hurd/sysvshm.c +++ b/hurd/sysvshm.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2005-2015 Free Software Foundation, Inc. +/* SysV shared memory for Hurd. + Copyright (C) 2005-2015 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -12,9 +13,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include <string.h> #include <stdlib.h> @@ -42,7 +42,7 @@ struct sysvshm_attach }; /* List of attachments. */ -static struct sysvshm_attach *attach_list; +static struct sysvshm_attach *sysvshm_list; /* A lock to protect the linked list of shared memory attachments. */ static struct mutex sysvshm_lock = MUTEX_INITIALIZER; @@ -55,30 +55,30 @@ __sysvshm_add (void *addr, size_t size) struct sysvshm_attach *shm; shm = malloc (sizeof (*shm)); - if (!shm) + if (shm == NULL) return errno; __mutex_lock (&sysvshm_lock); shm->addr = addr; shm->size = size; - shm->next = attach_list; - attach_list = shm; + shm->next = sysvshm_list; + sysvshm_list = shm; __mutex_unlock (&sysvshm_lock); return 0; } -/* Removes a segment attachment. Returns its size if found, or EINVAL - otherwise. */ +/* Removes a segment attachment. On success, returns 0 and sets *SIZE to its + size. Returns EINVAL if not found. */ error_t __sysvshm_remove (void *addr, size_t *size) { struct sysvshm_attach *shm; - struct sysvshm_attach **pshm = &attach_list; + struct sysvshm_attach **pshm = &sysvshm_list; __mutex_lock (&sysvshm_lock); - shm = attach_list; - while (shm) + shm = sysvshm_list; + while (shm != NULL) { shm = *pshm; if (shm->addr == addr) @@ -86,6 +86,7 @@ __sysvshm_remove (void *addr, size_t *size) *pshm = shm->next; *size = shm->size; __mutex_unlock (&sysvshm_lock); + free (shm); return 0; } pshm = &shm->next; diff --git a/hurd/sysvshm.h b/hurd/sysvshm.h index 138a8faba8..8b9c29ff46 100644 --- a/hurd/sysvshm.h +++ b/hurd/sysvshm.h @@ -1,4 +1,5 @@ -/* Copyright (C) 2005-2015 Free Software Foundation, Inc. +/* SysV shared memory for Hurd. + Copyright (C) 2005-2015 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -12,20 +13,22 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _HURD_SYSVSHM_H +#define _HURD_SYSVSHM_H #include <paths.h> #include <hurd.h> /* The area (from top to bottom) that is used for private keys. These are all keys that have the second highest bit set. */ -#define SHM_PRIV_KEY_START INT_MAX -#define SHM_PRIV_KEY_END ((INT_MAX / 2) + 1) +#define SHM_PRIV_KEY_START INT_MAX +#define SHM_PRIV_KEY_END ((INT_MAX / 2) + 1) -#define SHM_PREFIX "shm-" -#define SHM_DIR _PATH_DEV "shm/" +#define SHM_PREFIX "sysvshm-" +#define SHM_DIR _PATH_DEV "shm/" /* The maximum number of characters in a shared memory segment file name. 32 is the max number of characters in a 128 bit number in hex. */ @@ -42,6 +45,8 @@ /* Adds a segment attachment. */ error_t __sysvshm_add (void *addr, size_t size); -/* Removes a segment attachment. Returns its size if found, or EINVAL - otherwise. */ +/* Removes a segment attachment. On success, returns 0 and sets *SIZE to its + size. Returns EINVAL if not found. */ error_t __sysvshm_remove (void *addr, size_t *size); + +#endif /* sysvshm.h */ |