summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2013-10-25 18:40:57 +0000
committerCorinna Vinschen <corinna@vinschen.de>2013-10-25 18:40:57 +0000
commit7a1dc2a940f927c76af423a97867ab12094487be (patch)
tree020459d2ee54122d21d466f33a118606906ac626
parent2118eee1ced45667230c654fc53de0b4ed87a017 (diff)
downloadcygnal-7a1dc2a940f927c76af423a97867ab12094487be.tar.gz
cygnal-7a1dc2a940f927c76af423a97867ab12094487be.tar.bz2
cygnal-7a1dc2a940f927c76af423a97867ab12094487be.zip
* 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.
-rw-r--r--winsup/cygwin/ChangeLog9
-rw-r--r--winsup/cygwin/flock.cc14
-rw-r--r--winsup/cygwin/ntdll.h11
-rw-r--r--winsup/cygwin/release/1.7.264
4 files changed, 26 insertions, 12 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 90716e9a0..a02489ddb 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,14 @@
2013-10-25 Corinna Vinschen <corinna@vinschen.de>
+ * 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 <corinna@vinschen.de>
+
* devices.in (dev_storage): Map /dev/clipboard to \Device\Null.
* devices.cc: Regenerate.
* fhandler.h (fhandler_dev_clipboard::open): Drop declaration.
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: