Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2022-01-12 13:57:35 +0300
committerCorinna Vinschen <corinna@vinschen.de>2022-01-12 13:57:35 +0300
commit935c33877d5b17c1335d91f20252333b0e54bf5f (patch)
tree33f3c99e44864f913648b72632794fd036c9be03 /newlib/libc/posix
parentf574c30857aa10debf5dbb93a4fa0309226c5795 (diff)
posix_spawn: fix get/set uid/gid calls for 32 bit Cygwin
32 bit Cygwin still exports function calls to support old applications. E. g., when switching from 16 to 32 bit uid/gid values, new function like getuid32 have been added and the old getuid function still only provides 16 bit values. Newly built applications using getuid are actually calling getuid32. However, this link magic isn't performed inside Cygwin itself, so if newlib functions call getuid, they actually call the old getuid, not the new getuid32. This leads to truncated uid/gid values. https://cygwin.com/pipermail/cygwin/2022-January/250453.html reports how this leads to problems in posix_spawn. Fix this temporarily. i686 support will go away soon in Cygwin and the fix can be dropped. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'newlib/libc/posix')
-rw-r--r--newlib/libc/posix/posix_spawn.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/newlib/libc/posix/posix_spawn.c b/newlib/libc/posix/posix_spawn.c
index 85bfa6477..fe912a8b7 100644
--- a/newlib/libc/posix/posix_spawn.c
+++ b/newlib/libc/posix/posix_spawn.c
@@ -146,6 +146,17 @@ typedef struct __posix_spawn_file_actions_entry {
* Spawn routines
*/
+#if defined (__CYGWIN__) && defined (__i386__)
+extern int getgid32 (void);
+extern int getuid32 (void);
+extern int setegid32 (gid_t egid);
+extern int seteuid32 (uid_t euid);
+#define setegid setegid32
+#define seteuid seteuid32
+#define getgid getgid32
+#define getuid getuid32
+#endif
+
static int
process_spawnattr(const posix_spawnattr_t sa)
{