* winbase.h (ilockincr): More changes from the inexplicable world of gcc asm

magic.
(ilockdecr): Ditto.
This commit is contained in:
Christopher Faylor 2004-06-03 21:29:43 +00:00
parent ee94df3ecc
commit 604ca5fa17
5 changed files with 22 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2004-06-03 Christopher Faylor <cgf@alum.bu.edu>
* winbase.h (ilockincr): More changes from the inexplicable world of
gcc asm magic.
(ilockdecr): Ditto.
2004-06-03 Christopher Faylor <me@cgf.cx> 2004-06-03 Christopher Faylor <me@cgf.cx>
* winbase.h (ilockincr): YA correction to ensure correct operation with * winbase.h (ilockincr): YA correction to ensure correct operation with

View File

@ -389,6 +389,7 @@ LoadDLLfuncEx (NtSetSecurityObject, 12, ntdll, 1)
LoadDLLfuncEx (NtUnmapViewOfSection, 8, ntdll, 1) LoadDLLfuncEx (NtUnmapViewOfSection, 8, ntdll, 1)
LoadDLLfuncEx (RtlInitUnicodeString, 8, ntdll, 1) LoadDLLfuncEx (RtlInitUnicodeString, 8, ntdll, 1)
LoadDLLfuncEx (RtlNtStatusToDosError, 4, ntdll, 1) LoadDLLfuncEx (RtlNtStatusToDosError, 4, ntdll, 1)
LoadDLLfuncEx (RtlIsDosDeviceName_U, 4, ntdll, 1)
LoadDLLfuncEx (GetProcessMemoryInfo, 12, psapi, 1) LoadDLLfuncEx (GetProcessMemoryInfo, 12, psapi, 1)

View File

@ -531,7 +531,9 @@ done:
int int
fhandler_base::open (int flags, mode_t mode) fhandler_base::open (int flags, mode_t mode)
{ {
if (!wincap.is_winnt ()) UNICODE_STRING upath;
WCHAR wpath[CYG_MAX_PATH + 10];
if (!wincap.is_winnt () || RtlIsDosDeviceName_U(wpath))
return fhandler_base::open_9x (flags, mode); return fhandler_base::open_9x (flags, mode);
int res = 0; int res = 0;
@ -542,8 +544,6 @@ fhandler_base::open (int flags, mode_t mode)
ULONG create_options; ULONG create_options;
SECURITY_ATTRIBUTES sa = sec_none; SECURITY_ATTRIBUTES sa = sec_none;
security_descriptor sd; security_descriptor sd;
UNICODE_STRING upath;
WCHAR wpath[CYG_MAX_PATH + 10];
OBJECT_ATTRIBUTES attr; OBJECT_ATTRIBUTES attr;
IO_STATUS_BLOCK io; IO_STATUS_BLOCK io;
NTSTATUS status; NTSTATUS status;
@ -555,8 +555,7 @@ fhandler_base::open (int flags, mode_t mode)
goto done; goto done;
} }
InitializeObjectAttributes (&attr, pc.get_nt_native_path (upath, wpath), InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
sa.lpSecurityDescriptor, NULL); sa.lpSecurityDescriptor, NULL);
switch (query_open ()) switch (query_open ())

View File

@ -420,4 +420,5 @@ extern "C"
NTSTATUS NTAPI NtUnmapViewOfSection (HANDLE, PVOID); NTSTATUS NTAPI NtUnmapViewOfSection (HANDLE, PVOID);
VOID NTAPI RtlInitUnicodeString (PUNICODE_STRING, PCWSTR); VOID NTAPI RtlInitUnicodeString (PUNICODE_STRING, PCWSTR);
ULONG NTAPI RtlNtStatusToDosError (NTSTATUS); ULONG NTAPI RtlNtStatusToDosError (NTSTATUS);
ULONG WINAPI RtlIsDosDeviceName_U (PCWSTR);
} }

View File

@ -1,3 +1,11 @@
/* winbase.h
Copyright 2002, 2003, 2004 Red Hat, Inc.
This software is a copyrighted work licensed under the terms of the
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
#include_next "winbase.h" #include_next "winbase.h"
#ifndef _WINBASE2_H #ifndef _WINBASE2_H
@ -9,7 +17,7 @@ ilockincr (long *m)
register int __res; register int __res;
__asm__ __volatile__ ("\n\ __asm__ __volatile__ ("\n\
movl $1,%0\n\ movl $1,%0\n\
lock xadd %0,%2\n\ lock xadd %0,%1\n\
inc %0\n\ inc %0\n\
": "=a" (__res), "=m" (*m): "m" (m): "cc"); ": "=a" (__res), "=m" (*m): "m" (m): "cc");
return __res; return __res;
@ -21,7 +29,7 @@ ilockdecr (long *m)
register int __res; register int __res;
__asm__ __volatile__ ("\n\ __asm__ __volatile__ ("\n\
movl $0xffffffff,%0\n\ movl $0xffffffff,%0\n\
lock xadd %0,%2\n\ lock xadd %0,%1\n\
dec %0\n\ dec %0\n\
": "=a" (__res), "=m" (*m): "m" (m): "cc"); ": "=a" (__res), "=m" (*m): "m" (m): "cc");
return __res; return __res;