diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index dabd6fc97..0b73f6733 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2004-06-03 Christopher Faylor + + * winbase.h (ilockincr): More changes from the inexplicable world of + gcc asm magic. + (ilockdecr): Ditto. + 2004-06-03 Christopher Faylor * winbase.h (ilockincr): YA correction to ensure correct operation with diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc index 7fe19fd7a..f2d46d1b3 100644 --- a/winsup/cygwin/autoload.cc +++ b/winsup/cygwin/autoload.cc @@ -389,6 +389,7 @@ LoadDLLfuncEx (NtSetSecurityObject, 12, ntdll, 1) LoadDLLfuncEx (NtUnmapViewOfSection, 8, ntdll, 1) LoadDLLfuncEx (RtlInitUnicodeString, 8, ntdll, 1) LoadDLLfuncEx (RtlNtStatusToDosError, 4, ntdll, 1) +LoadDLLfuncEx (RtlIsDosDeviceName_U, 4, ntdll, 1) LoadDLLfuncEx (GetProcessMemoryInfo, 12, psapi, 1) diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index c481bde29..c90acb24d 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -531,7 +531,9 @@ done: int 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); int res = 0; @@ -542,8 +544,6 @@ fhandler_base::open (int flags, mode_t mode) ULONG create_options; SECURITY_ATTRIBUTES sa = sec_none; security_descriptor sd; - UNICODE_STRING upath; - WCHAR wpath[CYG_MAX_PATH + 10]; OBJECT_ATTRIBUTES attr; IO_STATUS_BLOCK io; NTSTATUS status; @@ -555,8 +555,7 @@ fhandler_base::open (int flags, mode_t mode) goto done; } - InitializeObjectAttributes (&attr, pc.get_nt_native_path (upath, wpath), - OBJ_CASE_INSENSITIVE | OBJ_INHERIT, + InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE | OBJ_INHERIT, sa.lpSecurityDescriptor, NULL); switch (query_open ()) diff --git a/winsup/cygwin/ntdll.h b/winsup/cygwin/ntdll.h index 0fb7c0e5a..8e829f5ed 100644 --- a/winsup/cygwin/ntdll.h +++ b/winsup/cygwin/ntdll.h @@ -420,4 +420,5 @@ extern "C" NTSTATUS NTAPI NtUnmapViewOfSection (HANDLE, PVOID); VOID NTAPI RtlInitUnicodeString (PUNICODE_STRING, PCWSTR); ULONG NTAPI RtlNtStatusToDosError (NTSTATUS); + ULONG WINAPI RtlIsDosDeviceName_U (PCWSTR); } diff --git a/winsup/cygwin/winbase.h b/winsup/cygwin/winbase.h index 0411afd7b..6f9228efc 100644 --- a/winsup/cygwin/winbase.h +++ b/winsup/cygwin/winbase.h @@ -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" #ifndef _WINBASE2_H @@ -9,7 +17,7 @@ ilockincr (long *m) register int __res; __asm__ __volatile__ ("\n\ movl $1,%0\n\ - lock xadd %0,%2\n\ + lock xadd %0,%1\n\ inc %0\n\ ": "=a" (__res), "=m" (*m): "m" (m): "cc"); return __res; @@ -21,7 +29,7 @@ ilockdecr (long *m) register int __res; __asm__ __volatile__ ("\n\ movl $0xffffffff,%0\n\ - lock xadd %0,%2\n\ + lock xadd %0,%1\n\ dec %0\n\ ": "=a" (__res), "=m" (*m): "m" (m): "cc"); return __res;