diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 90716e9a0..a02489ddb 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,12 @@ +2013-10-25 Corinna Vinschen + + * flock.cc (fhandler_base::lock): Only refuse to lock nohandle and + old-style console devices when called to perform BSD flock locking. + Add a FIXME to comment and align description. + + * ntdll.h (THREADINFOCLASS): Following MSDN, rename throughout from + THREAD_INFORMATION_CLASS. + 2013-10-25 Corinna Vinschen * devices.in (dev_storage): Map /dev/clipboard to \Device\Null. diff --git a/winsup/cygwin/flock.cc b/winsup/cygwin/flock.cc index 0cb2274d0..53069694d 100644 --- a/winsup/cygwin/flock.cc +++ b/winsup/cygwin/flock.cc @@ -927,15 +927,21 @@ fhandler_base::lock (int a_op, struct flock *fl) short a_flags = fl->l_type & (F_POSIX | F_FLOCK); short type = fl->l_type & (F_RDLCK | F_WRLCK | F_UNLCK); - if (nohandle ()) + if (!a_flags) + a_flags = F_POSIX; /* default */ + + /* FIXME: For BSD flock(2) we need a valid, per file table entry OS handle. + Therefore we can't allow using flock(2) on nohandle devices and + pre-Windows 8 console handles (recognized by their odd handle value). */ + if ((a_flags & F_FLOCK) + && (nohandle () || (((uintptr_t) get_handle () & 0x3) == 0x3))) { set_errno (EINVAL); - debug_printf ("Locking on nohandle device, return EINVAL."); + debug_printf ("BSD locking on nohandle and old-style console devices " + "not supported"); return -1; } - if (!a_flags) - a_flags = F_POSIX; /* default */ if (a_op == F_SETLKW) { a_op = F_SETLK; diff --git a/winsup/cygwin/ntdll.h b/winsup/cygwin/ntdll.h index 0ba907a83..9c8e94b08 100644 --- a/winsup/cygwin/ntdll.h +++ b/winsup/cygwin/ntdll.h @@ -1116,12 +1116,12 @@ typedef enum _SEMAPHORE_INFORMATION_CLASS SemaphoreBasicInformation = 0 } SEMAPHORE_INFORMATION_CLASS, *PSEMAPHORE_INFORMATION_CLASS; -typedef enum _THREAD_INFORMATION_CLASS +typedef enum _THREADINFOCLASS { ThreadBasicInformation = 0, ThreadTimes = 1, ThreadImpersonationToken = 5 -} THREAD_INFORMATION_CLASS, *PTHREAD_INFORMATION_CLASS; +} THREADINFOCLASS, *PTHREADINFOCLASS; /* Checked on 64 bit. */ typedef struct _THREAD_BASIC_INFORMATION @@ -1283,8 +1283,8 @@ extern "C" ULONG, FILE_INFORMATION_CLASS); NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG); - NTSTATUS NTAPI NtQueryInformationThread (HANDLE, THREAD_INFORMATION_CLASS, - PVOID, ULONG, PULONG); + NTSTATUS NTAPI NtQueryInformationThread (HANDLE, THREADINFOCLASS, PVOID, + ULONG, PULONG); NTSTATUS NTAPI NtQueryInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, PVOID, ULONG, PULONG); NTSTATUS NTAPI NtQueryObject (HANDLE, OBJECT_INFORMATION_CLASS, VOID *, @@ -1316,8 +1316,7 @@ extern "C" NTSTATUS NTAPI NtSetEvent (HANDLE, PULONG); NTSTATUS NTAPI NtSetInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, FILE_INFORMATION_CLASS); - NTSTATUS NTAPI NtSetInformationThread (HANDLE, THREAD_INFORMATION_CLASS, - PVOID, ULONG); + NTSTATUS NTAPI NtSetInformationThread (HANDLE, THREADINFOCLASS, PVOID, ULONG); NTSTATUS NTAPI NtSetInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, PVOID, ULONG); NTSTATUS NTAPI NtSetSecurityObject (HANDLE, SECURITY_INFORMATION, diff --git a/winsup/cygwin/release/1.7.26 b/winsup/cygwin/release/1.7.26 index 58994053f..f3965b848 100644 --- a/winsup/cygwin/release/1.7.26 +++ b/winsup/cygwin/release/1.7.26 @@ -8,8 +8,8 @@ What changed: - Slightly improve randomness of /dev/random emulation. - Allow to use advisory locking on any device which is backed by an OS handle. - Right now this excludes /dev/dsp as well as almost all virtual files under - /proc. + Right now this excludes /dev/dsp, console windows on pre Windows 8, as well + as almost all virtual files under /proc. Bug fixes: