* 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.
This commit is contained in:
parent
2118eee1ce
commit
7a1dc2a940
|
@ -1,3 +1,12 @@
|
||||||
|
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>
|
2013-10-25 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* devices.in (dev_storage): Map /dev/clipboard to \Device\Null.
|
* devices.in (dev_storage): Map /dev/clipboard to \Device\Null.
|
||||||
|
|
|
@ -927,15 +927,21 @@ fhandler_base::lock (int a_op, struct flock *fl)
|
||||||
short a_flags = fl->l_type & (F_POSIX | F_FLOCK);
|
short a_flags = fl->l_type & (F_POSIX | F_FLOCK);
|
||||||
short type = fl->l_type & (F_RDLCK | F_WRLCK | F_UNLCK);
|
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);
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!a_flags)
|
|
||||||
a_flags = F_POSIX; /* default */
|
|
||||||
if (a_op == F_SETLKW)
|
if (a_op == F_SETLKW)
|
||||||
{
|
{
|
||||||
a_op = F_SETLK;
|
a_op = F_SETLK;
|
||||||
|
|
|
@ -1116,12 +1116,12 @@ typedef enum _SEMAPHORE_INFORMATION_CLASS
|
||||||
SemaphoreBasicInformation = 0
|
SemaphoreBasicInformation = 0
|
||||||
} SEMAPHORE_INFORMATION_CLASS, *PSEMAPHORE_INFORMATION_CLASS;
|
} SEMAPHORE_INFORMATION_CLASS, *PSEMAPHORE_INFORMATION_CLASS;
|
||||||
|
|
||||||
typedef enum _THREAD_INFORMATION_CLASS
|
typedef enum _THREADINFOCLASS
|
||||||
{
|
{
|
||||||
ThreadBasicInformation = 0,
|
ThreadBasicInformation = 0,
|
||||||
ThreadTimes = 1,
|
ThreadTimes = 1,
|
||||||
ThreadImpersonationToken = 5
|
ThreadImpersonationToken = 5
|
||||||
} THREAD_INFORMATION_CLASS, *PTHREAD_INFORMATION_CLASS;
|
} THREADINFOCLASS, *PTHREADINFOCLASS;
|
||||||
|
|
||||||
/* Checked on 64 bit. */
|
/* Checked on 64 bit. */
|
||||||
typedef struct _THREAD_BASIC_INFORMATION
|
typedef struct _THREAD_BASIC_INFORMATION
|
||||||
|
@ -1283,8 +1283,8 @@ extern "C"
|
||||||
ULONG, FILE_INFORMATION_CLASS);
|
ULONG, FILE_INFORMATION_CLASS);
|
||||||
NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS,
|
NTSTATUS NTAPI NtQueryInformationProcess (HANDLE, PROCESSINFOCLASS,
|
||||||
PVOID, ULONG, PULONG);
|
PVOID, ULONG, PULONG);
|
||||||
NTSTATUS NTAPI NtQueryInformationThread (HANDLE, THREAD_INFORMATION_CLASS,
|
NTSTATUS NTAPI NtQueryInformationThread (HANDLE, THREADINFOCLASS, PVOID,
|
||||||
PVOID, ULONG, PULONG);
|
ULONG, PULONG);
|
||||||
NTSTATUS NTAPI NtQueryInformationToken (HANDLE, TOKEN_INFORMATION_CLASS,
|
NTSTATUS NTAPI NtQueryInformationToken (HANDLE, TOKEN_INFORMATION_CLASS,
|
||||||
PVOID, ULONG, PULONG);
|
PVOID, ULONG, PULONG);
|
||||||
NTSTATUS NTAPI NtQueryObject (HANDLE, OBJECT_INFORMATION_CLASS, VOID *,
|
NTSTATUS NTAPI NtQueryObject (HANDLE, OBJECT_INFORMATION_CLASS, VOID *,
|
||||||
|
@ -1316,8 +1316,7 @@ extern "C"
|
||||||
NTSTATUS NTAPI NtSetEvent (HANDLE, PULONG);
|
NTSTATUS NTAPI NtSetEvent (HANDLE, PULONG);
|
||||||
NTSTATUS NTAPI NtSetInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
|
NTSTATUS NTAPI NtSetInformationFile (HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG,
|
||||||
FILE_INFORMATION_CLASS);
|
FILE_INFORMATION_CLASS);
|
||||||
NTSTATUS NTAPI NtSetInformationThread (HANDLE, THREAD_INFORMATION_CLASS,
|
NTSTATUS NTAPI NtSetInformationThread (HANDLE, THREADINFOCLASS, PVOID, ULONG);
|
||||||
PVOID, ULONG);
|
|
||||||
NTSTATUS NTAPI NtSetInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, PVOID,
|
NTSTATUS NTAPI NtSetInformationToken (HANDLE, TOKEN_INFORMATION_CLASS, PVOID,
|
||||||
ULONG);
|
ULONG);
|
||||||
NTSTATUS NTAPI NtSetSecurityObject (HANDLE, SECURITY_INFORMATION,
|
NTSTATUS NTAPI NtSetSecurityObject (HANDLE, SECURITY_INFORMATION,
|
||||||
|
|
|
@ -8,8 +8,8 @@ What changed:
|
||||||
- Slightly improve randomness of /dev/random emulation.
|
- Slightly improve randomness of /dev/random emulation.
|
||||||
|
|
||||||
- Allow to use advisory locking on any device which is backed by an OS handle.
|
- 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
|
Right now this excludes /dev/dsp, console windows on pre Windows 8, as well
|
||||||
/proc.
|
as almost all virtual files under /proc.
|
||||||
|
|
||||||
|
|
||||||
Bug fixes:
|
Bug fixes:
|
||||||
|
|
Loading…
Reference in New Issue