diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-05-01 14:40:12 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-05-01 15:05:09 +0200 |
commit | e3a3616dbf620fa9f260a4c1a779efbb15b4a506 (patch) | |
tree | c9c1ac3316eedbf765df9414b4e1398f3fbe600c /sysdeps/gnu | |
parent | d5e2f9eaf7384ebf8f09831eb9fa15dad2ecf2c3 (diff) | |
download | glibc-e3a3616dbf620fa9f260a4c1a779efbb15b4a506.zip glibc-e3a3616dbf620fa9f260a4c1a779efbb15b4a506.tar.gz glibc-e3a3616dbf620fa9f260a4c1a779efbb15b4a506.tar.bz2 |
hurd 64bit: Fix ipc_perm fields types
The standards want uid/cuid to be uid_t, gid/cgid to be gid_t and mode to be
mode_t, see BZ 23082.
We can leave them short ints on i386 for ABI compatibility, but avoid
hitting the issue on 64bit.
bits/ipc.h ends up being exactly the same in sysdeps/gnu/ and
sysdeps/unix/sysv/linux/, so remove the latter.
Diffstat (limited to 'sysdeps/gnu')
-rw-r--r-- | sysdeps/gnu/Makefile | 4 | ||||
-rw-r--r-- | sysdeps/gnu/bits/ipc-perm.h | 33 | ||||
-rw-r--r-- | sysdeps/gnu/bits/ipc.h | 13 |
3 files changed, 38 insertions, 12 deletions
diff --git a/sysdeps/gnu/Makefile b/sysdeps/gnu/Makefile index e3ba3d0..4798ff6 100644 --- a/sysdeps/gnu/Makefile +++ b/sysdeps/gnu/Makefile @@ -44,3 +44,7 @@ librt-sysdep_routines += rt-unwind-resume librt-shared-only-routines += rt-unwind-resume CFLAGS-rt-unwind-resume.c += -fexceptions -fasynchronous-unwind-tables endif + +ifeq ($(subdir),sysvipc) +sysdep_headers += bits/ipc-perm.h +endif diff --git a/sysdeps/gnu/bits/ipc-perm.h b/sysdeps/gnu/bits/ipc-perm.h new file mode 100644 index 0000000..f5a7d7b --- /dev/null +++ b/sysdeps/gnu/bits/ipc-perm.h @@ -0,0 +1,33 @@ +/* struct ipc_perm definition. + Copyright (C) 1995-2023 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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + 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, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _SYS_IPC_H +# error "Never use <bits/ipc-perm.h> directly; include <sys/ipc.h> instead." +#endif + +/* Data structure used to pass permission information to IPC operations. */ +struct ipc_perm + { + __key_t __key; /* Key. */ + __uid_t uid; /* Owner's user ID. */ + __gid_t gid; /* Owner's group ID. */ + __uid_t cuid; /* Creator's user ID. */ + __gid_t cgid; /* Creator's group ID. */ + __mode_t mode; /* Read/write permission. */ + unsigned short int __seq; /* Sequence number. */ + }; diff --git a/sysdeps/gnu/bits/ipc.h b/sysdeps/gnu/bits/ipc.h index e41c11c..b62beb1 100644 --- a/sysdeps/gnu/bits/ipc.h +++ b/sysdeps/gnu/bits/ipc.h @@ -37,15 +37,4 @@ /* Special key values. */ #define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - unsigned short int uid; /* Owner's user ID. */ - unsigned short int gid; /* Owner's group ID. */ - unsigned short int cuid; /* Creator's user ID. */ - unsigned short int cgid; /* Creator's group ID. */ - unsigned short int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ - }; +#include <bits/ipc-perm.h> |