diff --git a/dlls/ntoskrnl.exe/Makefile.in b/dlls/ntoskrnl.exe/Makefile.in index 859d53a0b8a..a75ca9768d9 100644 --- a/dlls/ntoskrnl.exe/Makefile.in +++ b/dlls/ntoskrnl.exe/Makefile.in @@ -3,6 +3,8 @@ IMPORTLIB = ntoskrnl IMPORTS = advapi32 hal DELAYIMPORTS = setupapi user32 +EXTRADLLFLAGS = -mno-cygwin + C_SRCS = \ instr.c \ ntoskrnl.c \ diff --git a/dlls/ntoskrnl.exe/instr.c b/dlls/ntoskrnl.exe/instr.c index d5d197de358..05bdd23e826 100644 --- a/dlls/ntoskrnl.exe/instr.c +++ b/dlls/ntoskrnl.exe/instr.c @@ -21,9 +21,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #define NONAMELESSUNION diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index a0812dc7c96..639e4eb1bcc 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -21,9 +21,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" -#include "wine/port.h" - #include #include @@ -44,7 +41,6 @@ #include "ddk/ntddk.h" #include "ddk/ntifs.h" #include "ddk/wdm.h" -#include "wine/unicode.h" #include "wine/server.h" #include "wine/debug.h" #include "wine/heap.h" @@ -301,7 +297,7 @@ NTSTATUS kernel_object_from_handle( HANDLE handle, POBJECT_TYPE type, void **ret for (i = 0; i < ARRAY_SIZE(known_types); i++) { type = *known_types[i]; - if (!RtlCompareUnicodeStrings( type->name, strlenW(type->name), type_info->TypeName.Buffer, + if (!RtlCompareUnicodeStrings( type->name, lstrlenW(type->name), type_info->TypeName.Buffer, type_info->TypeName.Length / sizeof(WCHAR), FALSE )) break; } @@ -312,7 +308,7 @@ NTSTATUS kernel_object_from_handle( HANDLE handle, POBJECT_TYPE type, void **ret return STATUS_INVALID_HANDLE; } } - else if (RtlCompareUnicodeStrings( type->name, strlenW(type->name), type_info->TypeName.Buffer, + else if (RtlCompareUnicodeStrings( type->name, lstrlenW(type->name), type_info->TypeName.Buffer, type_info->TypeName.Length / sizeof(WCHAR), FALSE) ) { LeaveCriticalSection( &handle_map_cs ); @@ -1337,18 +1333,18 @@ static void build_driver_keypath( const WCHAR *name, UNICODE_STRING *keypath ) WCHAR *str; /* Check what prefix is present */ - if (strncmpW( name, servicesW, strlenW(servicesW) ) == 0) + if (wcsncmp( name, servicesW, lstrlenW(servicesW) ) == 0) { FIXME( "Driver name %s is malformed as the keypath\n", debugstr_w(name) ); RtlCreateUnicodeString( keypath, name ); return; } - if (strncmpW( name, driverW, strlenW(driverW) ) == 0) - name += strlenW(driverW); + if (wcsncmp( name, driverW, lstrlenW(driverW) ) == 0) + name += lstrlenW(driverW); else FIXME( "Driver name %s does not properly begin with \\Driver\\\n", debugstr_w(name) ); - str = HeapAlloc( GetProcessHeap(), 0, sizeof(servicesW) + strlenW(name)*sizeof(WCHAR)); + str = HeapAlloc( GetProcessHeap(), 0, sizeof(servicesW) + lstrlenW(name)*sizeof(WCHAR)); lstrcpyW( str, servicesW ); lstrcatW( str, name ); RtlInitUnicodeString( keypath, str ); @@ -1488,13 +1484,13 @@ NTSTATUS WINAPI IoCreateDevice( DRIVER_OBJECT *driver, ULONG ext_size, { do { - sprintfW( autoW, auto_format, auto_idx++ ); + swprintf( autoW, ARRAY_SIZE(autoW), auto_format, auto_idx++ ); SERVER_START_REQ( create_device ) { req->rootdir = 0; req->manager = wine_server_obj_handle( manager ); req->user_ptr = wine_server_client_ptr( device ); - wine_server_add_data( req, autoW, strlenW(autoW) * sizeof(WCHAR) ); + wine_server_add_data( req, autoW, lstrlenW(autoW) * sizeof(WCHAR) ); status = wine_server_call( req ); } SERVER_END_REQ; @@ -2793,7 +2789,7 @@ BOOLEAN WINAPI PsGetVersion(ULONG *major, ULONG *minor, ULONG *build, UNICODE_ST if (version) { #if 0 /* FIXME: GameGuard passes an uninitialized pointer in version->Buffer */ - size_t len = min( strlenW(info.szCSDVersion)*sizeof(WCHAR), version->MaximumLength ); + size_t len = min( lstrlenW(info.szCSDVersion)*sizeof(WCHAR), version->MaximumLength ); memcpy( version->Buffer, info.szCSDVersion, len ); if (len < version->MaximumLength) version->Buffer[len / sizeof(WCHAR)] = 0; version->Length = len; @@ -3220,7 +3216,7 @@ static NTSTATUS open_driver( const UNICODE_STRING *service_name, SC_HANDLE *serv memcpy( name, service_name->Buffer, service_name->Length ); name[ service_name->Length / sizeof(WCHAR) ] = 0; - if (strncmpW( name, servicesW, strlenW(servicesW) )) + if (wcsncmp( name, servicesW, lstrlenW(servicesW) )) { FIXME( "service name %s is not a keypath\n", debugstr_us(service_name) ); RtlFreeHeap( GetProcessHeap(), 0, name ); @@ -3234,7 +3230,7 @@ static NTSTATUS open_driver( const UNICODE_STRING *service_name, SC_HANDLE *serv return STATUS_NOT_SUPPORTED; } - *service = OpenServiceW( manager_handle, name + strlenW(servicesW), + *service = OpenServiceW( manager_handle, name + lstrlenW(servicesW), SERVICE_QUERY_CONFIG | SERVICE_SET_STATUS ); RtlFreeHeap( GetProcessHeap(), 0, name ); CloseServiceHandle( manager_handle ); @@ -3467,20 +3463,20 @@ static HMODULE load_driver( const WCHAR *driver_name, const UNICODE_STRING *keyn return NULL; } - if (!strncmpiW( path, systemrootW, 12 )) + if (!wcsnicmp( path, systemrootW, 12 )) { WCHAR buffer[MAX_PATH]; GetWindowsDirectoryW(buffer, MAX_PATH); - str = HeapAlloc(GetProcessHeap(), 0, (size -11 + strlenW(buffer)) + str = HeapAlloc(GetProcessHeap(), 0, (size -11 + lstrlenW(buffer)) * sizeof(WCHAR)); lstrcpyW(str, buffer); lstrcatW(str, path + 11); HeapFree( GetProcessHeap(), 0, path ); path = str; } - else if (!strncmpW( path, ntprefixW, 4 )) + else if (!wcsncmp( path, ntprefixW, 4 )) str = path + 4; else str = path; @@ -3491,7 +3487,7 @@ static HMODULE load_driver( const WCHAR *driver_name, const UNICODE_STRING *keyn WCHAR buffer[MAX_PATH]; GetSystemDirectoryW(buffer, MAX_PATH); path = HeapAlloc(GetProcessHeap(),0, - (strlenW(buffer) + strlenW(driversW) + strlenW(driver_name) + strlenW(postfixW) + 1) + (lstrlenW(buffer) + lstrlenW(driversW) + lstrlenW(driver_name) + lstrlenW(postfixW) + 1) *sizeof(WCHAR)); lstrcpyW(path, buffer); lstrcatW(path, driversW); @@ -3518,7 +3514,7 @@ static NTSTATUS WINAPI init_driver( DRIVER_OBJECT *driver_object, UNICODE_STRING HMODULE module; /* Retrieve driver name from the keyname */ - driver_name = strrchrW( keyname->Buffer, '\\' ); + driver_name = wcsrchr( keyname->Buffer, '\\' ); driver_name++; module = load_driver( driver_name, keyname ); @@ -3554,12 +3550,12 @@ static BOOLEAN get_drv_name( UNICODE_STRING *drv_name, const UNICODE_STRING *ser static const WCHAR driverW[] = {'\\','D','r','i','v','e','r','\\',0}; WCHAR *str; - if (!(str = heap_alloc( sizeof(driverW) + service_name->Length - strlenW(servicesW)*sizeof(WCHAR) ))) + if (!(str = heap_alloc( sizeof(driverW) + service_name->Length - lstrlenW(servicesW)*sizeof(WCHAR) ))) return FALSE; lstrcpyW( str, driverW ); - lstrcpynW( str + strlenW(driverW), service_name->Buffer + strlenW(servicesW), - service_name->Length/sizeof(WCHAR) - strlenW(servicesW) + 1 ); + lstrcpynW( str + lstrlenW(driverW), service_name->Buffer + lstrlenW(servicesW), + service_name->Length/sizeof(WCHAR) - lstrlenW(servicesW) + 1 ); RtlInitUnicodeString( drv_name, str ); return TRUE; } @@ -3666,58 +3662,6 @@ PKEVENT WINAPI IoCreateNotificationEvent(UNICODE_STRING *name, HANDLE *handle) } -/********************************************************************* - * memcpy (NTOSKRNL.@) - * - * NOTES - * Behaves like memmove. - */ -void * __cdecl NTOSKRNL_memcpy( void *dst, const void *src, size_t n ) -{ - return memmove( dst, src, n ); -} - -/********************************************************************* - * memset (NTOSKRNL.@) - */ -void * __cdecl NTOSKRNL_memset( void *dst, int c, size_t n ) -{ - return memset( dst, c, n ); -} - -/********************************************************************* - * _stricmp (NTOSKRNL.@) - */ -int __cdecl NTOSKRNL__stricmp( LPCSTR str1, LPCSTR str2 ) -{ - return _strnicmp( str1, str2, -1 ); -} - -/********************************************************************* - * _strnicmp (NTOSKRNL.@) - */ -int __cdecl NTOSKRNL__strnicmp( LPCSTR str1, LPCSTR str2, size_t n ) -{ - return _strnicmp( str1, str2, n ); -} - -/********************************************************************* - * _wcsnicmp (NTOSKRNL.@) - */ -INT __cdecl NTOSKRNL__wcsnicmp( LPCWSTR str1, LPCWSTR str2, INT n ) -{ - return strncmpiW( str1, str2, n ); -} - -/********************************************************************* - * wcsncmp (NTOSKRNL.@) - */ -INT __cdecl NTOSKRNL_wcsncmp( LPCWSTR str1, LPCWSTR str2, INT n ) -{ - return strncmpW( str1, str2, n ); -} - - #ifdef __x86_64__ /************************************************************************** * __chkstk (NTOSKRNL.@) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index d75446a58f4..5edd8dfca6b 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -1422,10 +1422,10 @@ @ stdcall -private ZwYieldExecution() NtYieldExecution @ stdcall -arch=x86_64 __C_specific_handler(ptr long ptr ptr) @ stdcall -private -arch=arm,x86_64 -norelay __chkstk() -@ cdecl -private -arch=i386 _CIcos() msvcrt._CIcos -@ cdecl -private -arch=i386 _CIsin() msvcrt._CIsin -@ cdecl -private -arch=i386 _CIsqrt() msvcrt._CIsqrt -@ cdecl -private _abnormal_termination() msvcrt._abnormal_termination +@ cdecl -private -arch=i386 _CIcos() +@ cdecl -private -arch=i386 _CIsin() +@ cdecl -private -arch=i386 _CIsqrt() +@ cdecl -private _abnormal_termination() @ stdcall -arch=i386 -ret64 _alldiv(int64 int64) @ stdcall -arch=i386 -norelay _alldvrm(int64 int64) @ stdcall -arch=i386 -ret64 _allmul(int64 int64) @@ -1438,82 +1438,82 @@ @ stdcall -arch=i386 -ret64 _aullrem(int64 int64) @ stdcall -arch=i386 -ret64 _aullshr(int64 long) @ stdcall -arch=i386 -norelay _chkstk() -@ cdecl -arch=i386 _except_handler2(ptr ptr ptr ptr) msvcrt._except_handler2 -@ cdecl -arch=i386 _except_handler3(ptr ptr ptr ptr) msvcrt._except_handler3 -@ cdecl -arch=i386 _global_unwind2(ptr) msvcrt._global_unwind2 -@ cdecl _itoa(long ptr long) msvcrt._itoa -@ cdecl _itow(long ptr long) msvcrt._itow -@ cdecl -arch=x86_64 _local_unwind(ptr ptr) msvcrt._local_unwind -@ cdecl -arch=i386 _local_unwind2(ptr long) msvcrt._local_unwind2 -@ cdecl _purecall() msvcrt._purecall -@ varargs _snprintf(ptr long str) msvcrt._snprintf -@ varargs _snwprintf(ptr long wstr) msvcrt._snwprintf -@ cdecl _stricmp(str str) NTOSKRNL__stricmp -@ cdecl _strlwr(str) msvcrt._strlwr -@ cdecl _strnicmp(str str long) NTOSKRNL__strnicmp -@ cdecl _strnset(str long long) msvcrt._strnset -@ cdecl _strrev(str) msvcrt._strrev -@ cdecl _strset(str long) msvcrt._strset -@ cdecl _strupr(str) msvcrt._strupr -@ cdecl _vsnprintf(ptr long str ptr) msvcrt._vsnprintf -@ cdecl _vsnwprintf(ptr long wstr ptr) msvcrt._vsnwprintf -@ cdecl _wcsicmp(wstr wstr) msvcrt._wcsicmp -@ cdecl _wcslwr(wstr) msvcrt._wcslwr -@ cdecl _wcsnicmp(wstr wstr long) NTOSKRNL__wcsnicmp -@ cdecl _wcsnset(wstr long long) msvcrt._wcsnset -@ cdecl _wcsrev(wstr) msvcrt._wcsrev -@ cdecl _wcsupr(wstr) msvcrt._wcsupr -@ cdecl atoi(str) msvcrt.atoi -@ cdecl atol(str) msvcrt.atol -@ cdecl isdigit(long) msvcrt.isdigit -@ cdecl islower(long) msvcrt.islower -@ cdecl isprint(long) msvcrt.isprint -@ cdecl isspace(long) msvcrt.isspace -@ cdecl isupper(long) msvcrt.isupper -@ cdecl isxdigit(long) msvcrt.isxdigit -@ cdecl mbstowcs(ptr str long) msvcrt.mbstowcs -@ cdecl mbtowc(ptr str long) msvcrt.mbtowc -@ cdecl memchr(ptr long long) msvcrt.memchr -@ cdecl memcpy(ptr ptr long) NTOSKRNL_memcpy -@ cdecl memmove(ptr ptr long) msvcrt.memmove -@ cdecl memset(ptr long long) NTOSKRNL_memset -@ cdecl qsort(ptr long long ptr) msvcrt.qsort -@ cdecl rand() msvcrt.rand -@ varargs sprintf(ptr str) msvcrt.sprintf -@ cdecl srand(long) msvcrt.srand -@ cdecl strcat(str str) msvcrt.strcat -@ cdecl strchr(str long) msvcrt.strchr -@ cdecl strcmp(str str) msvcrt.strcmp -@ cdecl strcpy(ptr str) msvcrt.strcpy -@ cdecl strlen(str) msvcrt.strlen -@ cdecl strncat(str str long) msvcrt.strncat -@ cdecl strncmp(str str long) msvcrt.strncmp -@ cdecl strncpy(ptr str long) msvcrt.strncpy -@ cdecl strrchr(str long) msvcrt.strrchr -@ cdecl strspn(str str) msvcrt.strspn -@ cdecl strstr(str str) msvcrt.strstr -@ varargs swprintf(ptr wstr) msvcrt.swprintf -@ cdecl tolower(long) msvcrt.tolower -@ cdecl toupper(long) msvcrt.toupper -@ cdecl towlower(long) msvcrt.towlower -@ cdecl towupper(long) msvcrt.towupper +@ cdecl -arch=i386 _except_handler2(ptr ptr ptr ptr) +@ cdecl -arch=i386 _except_handler3(ptr ptr ptr ptr) +@ cdecl -arch=i386 _global_unwind2(ptr) +@ cdecl _itoa(long ptr long) +@ cdecl _itow(long ptr long) +@ cdecl -arch=x86_64 _local_unwind(ptr ptr) +@ cdecl -arch=i386 _local_unwind2(ptr long) +@ cdecl _purecall() +@ varargs _snprintf(ptr long str) +@ varargs _snwprintf(ptr long wstr) +@ cdecl _stricmp(str str) +@ cdecl _strlwr(str) +@ cdecl _strnicmp(str str long) +@ cdecl _strnset(str long long) +@ cdecl _strrev(str) +@ cdecl _strset(str long) +@ cdecl _strupr(str) +@ cdecl _vsnprintf(ptr long str ptr) +@ cdecl _vsnwprintf(ptr long wstr ptr) +@ cdecl _wcsicmp(wstr wstr) +@ cdecl _wcslwr(wstr) +@ cdecl _wcsnicmp(wstr wstr long) +@ cdecl _wcsnset(wstr long long) +@ cdecl _wcsrev(wstr) +@ cdecl _wcsupr(wstr) +@ cdecl atoi(str) +@ cdecl atol(str) +@ cdecl isdigit(long) +@ cdecl islower(long) +@ cdecl isprint(long) +@ cdecl isspace(long) +@ cdecl isupper(long) +@ cdecl isxdigit(long) +@ cdecl mbstowcs(ptr str long) +@ cdecl mbtowc(ptr str long) +@ cdecl memchr(ptr long long) +@ cdecl memcpy(ptr ptr long) +@ cdecl memmove(ptr ptr long) +@ cdecl memset(ptr long long) +@ cdecl qsort(ptr long long ptr) +@ cdecl rand() +@ varargs sprintf(ptr str) +@ cdecl srand(long) +@ cdecl strcat(str str) +@ cdecl strchr(str long) +@ cdecl strcmp(str str) +@ cdecl strcpy(ptr str) +@ cdecl strlen(str) +@ cdecl strncat(str str long) +@ cdecl strncmp(str str long) +@ cdecl strncpy(ptr str long) +@ cdecl strrchr(str long) +@ cdecl strspn(str str) +@ cdecl strstr(str str) +@ varargs swprintf(ptr wstr) +@ cdecl tolower(long) +@ cdecl toupper(long) +@ cdecl towlower(long) +@ cdecl towupper(long) @ stdcall vDbgPrintEx(long long str ptr) @ stdcall vDbgPrintExWithPrefix(str long long str ptr) -@ cdecl vsprintf(ptr str ptr) msvcrt.vsprintf -@ cdecl wcscat(wstr wstr) msvcrt.wcscat -@ cdecl wcschr(wstr long) msvcrt.wcschr -@ cdecl wcscmp(wstr wstr) msvcrt.wcscmp -@ cdecl wcscpy(ptr wstr) msvcrt.wcscpy -@ cdecl wcscspn(wstr wstr) msvcrt.wcscspn -@ cdecl wcslen(wstr) msvcrt.wcslen -@ cdecl wcsncat(wstr wstr long) msvcrt.wcsncat -@ cdecl wcsncmp(wstr wstr long) NTOSKRNL_wcsncmp -@ cdecl wcsncpy(ptr wstr long) msvcrt.wcsncpy -@ cdecl wcsrchr(wstr long) msvcrt.wcsrchr -@ cdecl wcsspn(wstr wstr) msvcrt.wcsspn -@ cdecl wcsstr(wstr wstr) msvcrt.wcsstr -@ cdecl wcstombs(ptr ptr long) msvcrt.wcstombs -@ cdecl wctomb(ptr long) msvcrt.wctomb +@ cdecl vsprintf(ptr str ptr) +@ cdecl wcscat(wstr wstr) +@ cdecl wcschr(wstr long) +@ cdecl wcscmp(wstr wstr) +@ cdecl wcscpy(ptr wstr) +@ cdecl wcscspn(wstr wstr) +@ cdecl wcslen(wstr) +@ cdecl wcsncat(wstr wstr long) +@ cdecl wcsncmp(wstr wstr long) +@ cdecl wcsncpy(ptr wstr long) +@ cdecl wcsrchr(wstr long) +@ cdecl wcsspn(wstr wstr) +@ cdecl wcsstr(wstr wstr) +@ cdecl wcstombs(ptr ptr long) +@ cdecl wctomb(ptr long) ################################################################ # Wine internal extensions diff --git a/dlls/ntoskrnl.exe/pnp.c b/dlls/ntoskrnl.exe/pnp.c index b8bdf93e54b..e1b348b82e3 100644 --- a/dlls/ntoskrnl.exe/pnp.c +++ b/dlls/ntoskrnl.exe/pnp.c @@ -40,7 +40,6 @@ #include "wine/debug.h" #include "wine/heap.h" #include "wine/rbtree.h" -#include "wine/unicode.h" #include "ntoskrnl_private.h" @@ -223,7 +222,7 @@ static NTSTATUS get_device_instance_id( DEVICE_OBJECT *device, WCHAR *buffer ) return status; } - strcpyW( buffer, id ); + lstrcpyW( buffer, id ); ExFreePool( id ); if ((status = get_device_id( device, BusQueryInstanceID, &id ))) @@ -232,8 +231,8 @@ static NTSTATUS get_device_instance_id( DEVICE_OBJECT *device, WCHAR *buffer ) return status; } - strcatW( buffer, backslashW ); - strcatW( buffer, id ); + lstrcatW( buffer, backslashW ); + lstrcatW( buffer, id ); ExFreePool( id ); TRACE("Returning ID %s.\n", debugstr_w(buffer)); @@ -277,8 +276,8 @@ static void load_function_driver( DEVICE_OBJECT *device, HDEVINFO set, SP_DEVINF return; } - strcpyW( buffer, servicesW ); - strcatW( buffer, driver ); + lstrcpyW( buffer, servicesW ); + lstrcatW( buffer, driver ); RtlInitUnicodeString( &string, buffer ); status = ZwLoadDriver( &string ); if (status != STATUS_SUCCESS && status != STATUS_IMAGE_ALREADY_LOADED) @@ -287,8 +286,8 @@ static void load_function_driver( DEVICE_OBJECT *device, HDEVINFO set, SP_DEVINF return; } - strcpyW( buffer, driverW ); - strcatW( buffer, driver ); + lstrcpyW( buffer, driverW ); + lstrcatW( buffer, driver ); RtlInitUnicodeString( &string, buffer ); if (ObReferenceObjectByName( &string, OBJ_CASE_INSENSITIVE, NULL, 0, NULL, KernelMode, NULL, (void **)&driver_obj ) != STATUS_SUCCESS) @@ -313,7 +312,7 @@ static void load_function_driver( DEVICE_OBJECT *device, HDEVINFO set, SP_DEVINF static size_t sizeof_multiszW( const WCHAR *str ) { const WCHAR *p; - for (p = str; *p; p += strlenW(p) + 1); + for (p = str; *p; p += lstrlenW(p) + 1); return p + 1 - str; } @@ -483,11 +482,11 @@ NTSTATUS WINAPI IoGetDeviceProperty( DEVICE_OBJECT *device, DEVICE_REGISTRY_PROP break; } - struprW( id ); - ptr = strchrW( id, '\\' ); + wcsupr( id ); + ptr = wcschr( id, '\\' ); if (ptr) *ptr = 0; - *needed = sizeof(WCHAR) * (strlenW(id) + 1); + *needed = sizeof(WCHAR) * (lstrlenW(id) + 1); if (length >= *needed) memcpy( buffer, id, *needed ); else @@ -604,26 +603,28 @@ NTSTATUS WINAPI IoSetDeviceInterfaceState( UNICODE_STRING *name, BOOLEAN enable if (enable && iface->enabled) return STATUS_OBJECT_NAME_EXISTS; - refstr = memrchrW(name->Buffer + 4, '\\', namelen - 4); + for (p = name->Buffer + 4, refstr = NULL; p < name->Buffer + namelen; p++) + if (*p == '\\') refstr = p; + if (!refstr) refstr = p; - if (!guid_from_string( (refstr ? refstr : name->Buffer + namelen) - 38, &class )) + if (!guid_from_string( refstr - 38, &class )) return STATUS_INVALID_PARAMETER; - len = strlenW(DeviceClassesW) + 38 + 1 + namelen + 2 + 1; + len = lstrlenW(DeviceClassesW) + 38 + 1 + namelen + 2 + 1; if (!(path = heap_alloc( len * sizeof(WCHAR) ))) return STATUS_NO_MEMORY; - strcpyW( path, DeviceClassesW ); - lstrcpynW( path + strlenW( path ), (refstr ? refstr : name->Buffer + namelen) - 38, 39 ); - strcatW( path, slashW ); - p = path + strlenW( path ); - lstrcpynW( path + strlenW( path ), name->Buffer, (refstr ? (refstr - name->Buffer) : namelen) + 1 ); + lstrcpyW( path, DeviceClassesW ); + lstrcpynW( path + lstrlenW( path ), refstr - 38, 39 ); + lstrcatW( path, slashW ); + p = path + lstrlenW( path ); + lstrcpynW( path + lstrlenW( path ), name->Buffer, (refstr - name->Buffer) + 1 ); p[0] = p[1] = p[3] = '#'; - strcatW( path, slashW ); - strcatW( path, hashW ); - if (refstr) - lstrcpynW( path + strlenW( path ), refstr, name->Buffer + namelen - refstr + 1 ); + lstrcatW( path, slashW ); + lstrcatW( path, hashW ); + if (refstr < name->Buffer + namelen) + lstrcpynW( path + lstrlenW( path ), refstr, name->Buffer + namelen - refstr + 1 ); attr.Length = sizeof(attr); attr.ObjectName = &string; diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index 8b711265c6e..ea4165cda65 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -18,7 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" #include #include