ntoskrnl: Build with msvcrt.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
921e0457c5
commit
a1cdcc5290
|
@ -3,6 +3,8 @@ IMPORTLIB = ntoskrnl
|
|||
IMPORTS = advapi32 hal
|
||||
DELAYIMPORTS = setupapi user32
|
||||
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
C_SRCS = \
|
||||
instr.c \
|
||||
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 <stdarg.h>
|
||||
|
||||
#define NONAMELESSUNION
|
||||
|
|
|
@ -21,9 +21,6 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "wine/port.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <assert.h>
|
||||
|
||||
|
@ -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.@)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <limits.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
|
|
Loading…
Reference in New Issue