From 7cee5e2bdce49f9daedd0cb159828f334ebe4ec1 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 17 Jun 2019 09:25:06 +0200 Subject: [PATCH] ntoskrnl: Make the standard C functions available for importing. Signed-off-by: Alexandre Julliard --- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 170 ++++++++++++++-------------- dlls/ntoskrnl.exe/tests/driver.c | 37 ++---- 2 files changed, 92 insertions(+), 115 deletions(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 7c9370579dd..d75446a58f4 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -1426,94 +1426,94 @@ @ cdecl -private -arch=i386 _CIsin() msvcrt._CIsin @ cdecl -private -arch=i386 _CIsqrt() msvcrt._CIsqrt @ cdecl -private _abnormal_termination() msvcrt._abnormal_termination -@ stdcall -private -arch=i386 -ret64 _alldiv(int64 int64) -@ stdcall -private -arch=i386 -norelay _alldvrm(int64 int64) -@ stdcall -private -arch=i386 -ret64 _allmul(int64 int64) -@ stdcall -private -arch=i386 -norelay _alloca_probe() -@ stdcall -private -arch=i386 -ret64 _allrem(int64 int64) -@ stdcall -private -arch=i386 -ret64 _allshl(int64 long) -@ stdcall -private -arch=i386 -ret64 _allshr(int64 long) -@ stdcall -private -arch=i386 -ret64 _aulldiv(int64 int64) -@ stdcall -private -arch=i386 -norelay _aulldvrm(int64 int64) -@ stdcall -private -arch=i386 -ret64 _aullrem(int64 int64) -@ stdcall -private -arch=i386 -ret64 _aullshr(int64 long) -@ stdcall -private -arch=i386 -norelay _chkstk() -@ cdecl -private -arch=i386 _except_handler2(ptr ptr ptr ptr) msvcrt._except_handler2 -@ cdecl -private -arch=i386 _except_handler3(ptr ptr ptr ptr) msvcrt._except_handler3 -@ cdecl -private -arch=i386 _global_unwind2(ptr) msvcrt._global_unwind2 -@ cdecl -private _itoa(long ptr long) msvcrt._itoa -@ cdecl -private _itow(long ptr long) msvcrt._itow -@ cdecl -private -arch=x86_64 _local_unwind(ptr ptr) msvcrt._local_unwind -@ cdecl -private -arch=i386 _local_unwind2(ptr long) msvcrt._local_unwind2 -@ cdecl -private _purecall() msvcrt._purecall -@ varargs -private _snprintf(ptr long str) msvcrt._snprintf -@ varargs -private _snwprintf(ptr long wstr) msvcrt._snwprintf -@ cdecl -private _stricmp(str str) NTOSKRNL__stricmp -@ cdecl -private _strlwr(str) msvcrt._strlwr -@ cdecl -private _strnicmp(str str long) NTOSKRNL__strnicmp -@ cdecl -private _strnset(str long long) msvcrt._strnset -@ cdecl -private _strrev(str) msvcrt._strrev -@ cdecl -private _strset(str long) msvcrt._strset -@ cdecl -private _strupr(str) msvcrt._strupr +@ stdcall -arch=i386 -ret64 _alldiv(int64 int64) +@ stdcall -arch=i386 -norelay _alldvrm(int64 int64) +@ stdcall -arch=i386 -ret64 _allmul(int64 int64) +@ stdcall -arch=i386 -norelay _alloca_probe() +@ stdcall -arch=i386 -ret64 _allrem(int64 int64) +@ stdcall -arch=i386 -ret64 _allshl(int64 long) +@ stdcall -arch=i386 -ret64 _allshr(int64 long) +@ stdcall -arch=i386 -ret64 _aulldiv(int64 int64) +@ stdcall -arch=i386 -norelay _aulldvrm(int64 int64) +@ 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 -private _vsnwprintf(ptr long wstr ptr) msvcrt._vsnwprintf -@ cdecl -private _wcsicmp(wstr wstr) msvcrt._wcsicmp -@ cdecl -private _wcslwr(wstr) msvcrt._wcslwr -@ cdecl -private _wcsnicmp(wstr wstr long) NTOSKRNL__wcsnicmp -@ cdecl -private _wcsnset(wstr long long) msvcrt._wcsnset -@ cdecl -private _wcsrev(wstr) msvcrt._wcsrev -@ cdecl -private _wcsupr(wstr) msvcrt._wcsupr -@ cdecl -private atoi(str) msvcrt.atoi -@ cdecl -private atol(str) msvcrt.atol -@ cdecl -private isdigit(long) msvcrt.isdigit -@ cdecl -private islower(long) msvcrt.islower -@ cdecl -private isprint(long) msvcrt.isprint -@ cdecl -private isspace(long) msvcrt.isspace -@ cdecl -private isupper(long) msvcrt.isupper -@ cdecl -private isxdigit(long) msvcrt.isxdigit -@ cdecl -private mbstowcs(ptr str long) msvcrt.mbstowcs -@ cdecl -private mbtowc(ptr str long) msvcrt.mbtowc -@ cdecl -private memchr(ptr long long) msvcrt.memchr -@ cdecl -private memcpy(ptr ptr long) NTOSKRNL_memcpy -@ cdecl -private memmove(ptr ptr long) msvcrt.memmove -@ cdecl -private memset(ptr long long) NTOSKRNL_memset -@ cdecl -private qsort(ptr long long ptr) msvcrt.qsort -@ cdecl -private rand() msvcrt.rand -@ varargs -private sprintf(ptr str) msvcrt.sprintf -@ cdecl -private srand(long) msvcrt.srand -@ cdecl -private strcat(str str) msvcrt.strcat -@ cdecl -private strchr(str long) msvcrt.strchr -@ cdecl -private strcmp(str str) msvcrt.strcmp -@ cdecl -private strcpy(ptr str) msvcrt.strcpy -@ cdecl -private strlen(str) msvcrt.strlen -@ cdecl -private strncat(str str long) msvcrt.strncat -@ cdecl -private strncmp(str str long) msvcrt.strncmp -@ cdecl -private strncpy(ptr str long) msvcrt.strncpy -@ cdecl -private strrchr(str long) msvcrt.strrchr -@ cdecl -private strspn(str str) msvcrt.strspn -@ cdecl -private strstr(str str) msvcrt.strstr -@ varargs -private swprintf(ptr wstr) msvcrt.swprintf -@ cdecl -private tolower(long) msvcrt.tolower -@ cdecl -private toupper(long) msvcrt.toupper -@ cdecl -private towlower(long) msvcrt.towlower -@ cdecl -private towupper(long) msvcrt.towupper +@ 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 @ stdcall vDbgPrintEx(long long str ptr) @ stdcall vDbgPrintExWithPrefix(str long long str ptr) -@ cdecl -private vsprintf(ptr str ptr) msvcrt.vsprintf -@ cdecl -private wcscat(wstr wstr) msvcrt.wcscat -@ cdecl -private wcschr(wstr long) msvcrt.wcschr -@ cdecl -private wcscmp(wstr wstr) msvcrt.wcscmp -@ cdecl -private wcscpy(ptr wstr) msvcrt.wcscpy -@ cdecl -private wcscspn(wstr wstr) msvcrt.wcscspn -@ cdecl -private wcslen(wstr) msvcrt.wcslen -@ cdecl -private wcsncat(wstr wstr long) msvcrt.wcsncat -@ cdecl -private wcsncmp(wstr wstr long) NTOSKRNL_wcsncmp -@ cdecl -private wcsncpy(ptr wstr long) msvcrt.wcsncpy -@ cdecl -private wcsrchr(wstr long) msvcrt.wcsrchr -@ cdecl -private wcsspn(wstr wstr) msvcrt.wcsspn -@ cdecl -private wcsstr(wstr wstr) msvcrt.wcsstr -@ cdecl -private wcstombs(ptr ptr long) msvcrt.wcstombs -@ cdecl -private wctomb(ptr long) msvcrt.wctomb +@ 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 ################################################################ # Wine internal extensions diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c index f5801a51620..dbe189da812 100644 --- a/dlls/ntoskrnl.exe/tests/driver.c +++ b/dlls/ntoskrnl.exe/tests/driver.c @@ -21,6 +21,7 @@ */ #include +#include #include "ntstatus.h" #define WIN32_NO_STATUS @@ -63,13 +64,11 @@ void WINAPI ObfReferenceObject( void *obj ); NTSTATUS WINAPI ZwQueryInformationProcess(HANDLE,PROCESSINFOCLASS,void*,ULONG,ULONG*); -extern int CDECL _vsnprintf(char *str, size_t len, const char *format, __ms_va_list argptr); - static void kvprintf(const char *format, __ms_va_list ap) { static char buffer[512]; IO_STATUS_BLOCK io; - int len = _vsnprintf(buffer, sizeof(buffer), format, ap); + int len = vsnprintf(buffer, sizeof(buffer), format, ap); ZwWriteFile(okfile, NULL, NULL, NULL, &io, buffer, len, NULL, NULL); } @@ -192,28 +191,6 @@ static int broken(int condition) #define todo_wine_if(is_todo) todo_if((is_todo) && running_under_wine) #define win_skip(...) win_skip_(__FILE__, __LINE__, __VA_ARGS__) -static unsigned int strlenW( const WCHAR *str ) -{ - const WCHAR *s = str; - while (*s) s++; - return s - str; -} - -static void *kmemcpy(void *dest, const void *src, SIZE_T n) -{ - const char *s = src; - char *d = dest; - while (n--) *d++ = *s++; - return dest; -} - -static void *kmemset(void *dest, int c, SIZE_T n) -{ - unsigned char *d = dest; - while (n--) *d++ = (unsigned char)c; - return dest; -} - static void *get_proc_address(const char *name) { UNICODE_STRING name_u; @@ -1041,10 +1018,10 @@ static void test_ob_reference(const WCHAR *test_path) status = ZwCreateEvent(&event_handle, SYNCHRONIZE, &attr, NotificationEvent, TRUE); ok(!status, "ZwCreateEvent failed: %#x\n", status); - len = strlenW(test_path); + len = wcslen(test_path); tmp_path = ExAllocatePool(PagedPool, len * sizeof(WCHAR) + sizeof(tmpW)); - kmemcpy(tmp_path, test_path, len * sizeof(WCHAR)); - kmemcpy(tmp_path + len, tmpW, sizeof(tmpW)); + memcpy(tmp_path, test_path, len * sizeof(WCHAR)); + memcpy(tmp_path + len, tmpW, sizeof(tmpW)); RtlInitUnicodeString(&pathU, tmp_path); attr.ObjectName = &pathU; @@ -1226,7 +1203,7 @@ static void test_resource(void) BOOLEAN ret; HANDLE thread, thread2; - kmemset(&resource, 0xcc, sizeof(resource)); + memset(&resource, 0xcc, sizeof(resource)); status = ExInitializeResourceLite(&resource); ok(status == STATUS_SUCCESS, "got status %#x\n", status); @@ -1613,7 +1590,7 @@ static NTSTATUS test_basic_ioctl(IRP *irp, IO_STACK_LOCATION *stack, ULONG_PTR * if (length < sizeof(teststr)) return STATUS_BUFFER_TOO_SMALL; - kmemcpy(buffer, teststr, sizeof(teststr)); + memcpy(buffer, teststr, sizeof(teststr)); *info = sizeof(teststr); return STATUS_SUCCESS;