diff options
-rw-r--r-- | hurd/sysvshm.c | 27 | ||||
-rw-r--r-- | hurd/sysvshm.h | 25 | ||||
-rw-r--r-- | sysdeps/mach/hurd/ftok.c | 14 | ||||
-rw-r--r-- | sysdeps/mach/hurd/shmat.c | 11 | ||||
-rw-r--r-- | sysdeps/mach/hurd/shmctl.c | 10 | ||||
-rw-r--r-- | sysdeps/mach/hurd/shmdt.c | 3 | ||||
-rw-r--r-- | sysdeps/mach/hurd/shmget.c | 10 |
7 files changed, 55 insertions, 45 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 */ diff --git a/sysdeps/mach/hurd/ftok.c b/sysdeps/mach/hurd/ftok.c index 87dcf71073..a6aba15c86 100644 --- a/sysdeps/mach/hurd/ftok.c +++ b/sysdeps/mach/hurd/ftok.c @@ -1,6 +1,6 @@ -/* Copyright (C) 1995-2015 Free Software Foundation, Inc. +/* SysV ftok for Hurd. + Copyright (C) 1995-2015 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -13,17 +13,17 @@ 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 <sys/ipc.h> #include <sys/stat.h> /* In the Hurd, we use the second-to-most-significant bit as flag for - private keys. We use a different order of the components so that - the biggest one---the inode number---is affected by this. */ + private keys. We use an order of the components different from the generic + code in sysvipc/ftok.c so that the biggest one--the inode number--is + affected by this. */ key_t ftok (pathname, proj_id) diff --git a/sysdeps/mach/hurd/shmat.c b/sysdeps/mach/hurd/shmat.c index 89db806e25..6bc88705b8 100644 --- a/sysdeps/mach/hurd/shmat.c +++ b/sysdeps/mach/hurd/shmat.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2005-2015 Free Software Foundation, Inc. +/* SysV shmat 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 <errno.h> #include <utime.h> @@ -54,7 +54,9 @@ __shmat (int shmid, const void *shmaddr, int shmflg) res = __fstat (fd, &statbuf); if (res < 0) { + err = errno; __close (fd); + errno = err; return (void *) -1; } @@ -69,6 +71,7 @@ __shmat (int shmid, const void *shmaddr, int shmflg) if (err) { munmap (addr, statbuf.st_size); + errno = err; return (void *) -1; } diff --git a/sysdeps/mach/hurd/shmctl.c b/sysdeps/mach/hurd/shmctl.c index 192e567b7a..a991a0c8de 100644 --- a/sysdeps/mach/hurd/shmctl.c +++ b/sysdeps/mach/hurd/shmctl.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2005-2015 Free Software Foundation, Inc. +/* SysV shmctl 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 <errno.h> #include <stdio.h> @@ -27,7 +27,7 @@ #include "sysvshm.h" -/* Provide operations to control over shared memory segments. */ +/* Provide operations to control shared memory segments. */ int __shmctl (int id, int cmd, struct shmid_ds *buf) { diff --git a/sysdeps/mach/hurd/shmdt.c b/sysdeps/mach/hurd/shmdt.c index 245fd55a89..988fab8ee6 100644 --- a/sysdeps/mach/hurd/shmdt.c +++ b/sysdeps/mach/hurd/shmdt.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2005-2015 Free Software Foundation, Inc. +/* SysV shmdt 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 diff --git a/sysdeps/mach/hurd/shmget.c b/sysdeps/mach/hurd/shmget.c index b536b3a701..2065b41989 100644 --- a/sysdeps/mach/hurd/shmget.c +++ b/sysdeps/mach/hurd/shmget.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2005-2015 Free Software Foundation, Inc. +/* SysV shmget 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 <stdbool.h> #include <stdlib.h> @@ -95,7 +95,7 @@ get_exclusive (int shmflags, size_t size, key_t *r_key, int *r_fd) key = SHM_PRIV_KEY_START; /* Try to link the shared memory segment into the filesystem - (exclusively). Private segments have negative keys. */ + (exclusively). */ do { sprintf (filename, SHM_NAMEPRI, key); |