Cygwin: fix mknod (64-bit only)

The current definition of mknod in syscalls.cc has a third argument of
type __dev16_t instead of dev_t.  Fix this on 64-bit Cygwin by making
the existing mknod 32-bit only and then exporting mknod as an alias
for mknod32.  (No fix is needed on 32-bit because mknod is redirected
to mknod32 via NEW_FUNCTIONS in Makefile.am.)

Addresses: https://cygwin.com/pipermail/cygwin-developers/2022-May/012589.html
This commit is contained in:
Ken Brown 2022-05-22 11:43:44 -04:00
parent a8629d6eaf
commit 807318b6ee
2 changed files with 7 additions and 0 deletions

View File

@ -7,3 +7,6 @@ Bug Fixes
- Fix killpg failing because the exec'ing as well as the exec'ed - Fix killpg failing because the exec'ing as well as the exec'ed
process are not in the pidlist for a brief moment. process are not in the pidlist for a brief moment.
Addresses: https://cygwin.com/pipermail/cygwin/2022-May/251479.html Addresses: https://cygwin.com/pipermail/cygwin/2022-May/251479.html
- Fix mknod (64-bit only), whose definition didn't match its prototype.
Addresses: https://cygwin.com/pipermail/cygwin-developers/2022-May/012589.html

View File

@ -3488,11 +3488,15 @@ mknod32 (const char *path, mode_t mode, dev_t dev)
return -1; return -1;
} }
#ifdef __i386__
extern "C" int extern "C" int
mknod (const char *_path, mode_t mode, __dev16_t dev) mknod (const char *_path, mode_t mode, __dev16_t dev)
{ {
return mknod32 (_path, mode, (dev_t) dev); return mknod32 (_path, mode, (dev_t) dev);
} }
#else
EXPORT_ALIAS (mknod32, mknod)
#endif
extern "C" int extern "C" int
mkfifo (const char *path, mode_t mode) mkfifo (const char *path, mode_t mode)