mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
Fixed FormatMessage[A/W] to not suck.
We now pass this kernel32 regression test. svn path=/trunk/; revision=6720
This commit is contained in:
parent
c22bd852fd
commit
ed95d0bee5
1 changed files with 21 additions and 137 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: errormsg.c,v 1.14 2003/11/18 05:17:22 royce Exp $
|
/* $Id: errormsg.c,v 1.15 2003/11/19 22:19:17 sedwards Exp $
|
||||||
*
|
*
|
||||||
* reactos/lib/kernel32/misc/errormsg.c
|
* reactos/lib/kernel32/misc/errormsg.c
|
||||||
*
|
*
|
||||||
|
@ -24,58 +24,30 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ddk/ntddk.h>
|
#include <ddk/ntddk.h>
|
||||||
|
|
||||||
// #define NDEBUG
|
|
||||||
#include <kernel32/kernel32.h>
|
#include <kernel32/kernel32.h>
|
||||||
/*#include <kernel32/error.h>*/
|
|
||||||
|
|
||||||
#define USE_WINE_PORT
|
|
||||||
|
|
||||||
#ifdef USE_WINE_PORT
|
|
||||||
|
|
||||||
//#define NDEBUG
|
|
||||||
//#include <ntdll/ntdll.h>
|
|
||||||
|
|
||||||
//#define DPRINTF DPRINT
|
|
||||||
//#define ERR DPRINT
|
|
||||||
//#define SetLastError(x)
|
|
||||||
//#define WARN DPRINT
|
|
||||||
#define TRACE DPRINT
|
#define TRACE DPRINT
|
||||||
#define FIXME DPRINT
|
#define FIXME DPRINT
|
||||||
|
|
||||||
//#define MAKEINTRESOURCE(i) (LPTSTR) ((DWORD) ((WORD) (i)))
|
/* strdup macros */
|
||||||
//#define MAKEINTRESOURCEA(i) (LPTSTR) ((DWORD) ((WORD) (i)))
|
/* DO NOT USE IT!! it will go away soon */
|
||||||
//#define MAKEINTRESOURCEW(i) (LPTSTR) ((DWORD) ((WORD) (i)))
|
inline static LPSTR HEAP_strdupWtoA( HANDLE heap, DWORD flags, LPCWSTR str )
|
||||||
|
|
||||||
//#define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))
|
|
||||||
//#define MAKEINTRESOURCEW(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))
|
|
||||||
//#define MAKEINTRESOURCE WINELIB_NAME_AW(MAKEINTRESOURCE)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int HEAP_strdupWtoA(HANDLE hHeap, int flags, LPWSTR lpSource)
|
|
||||||
{
|
{
|
||||||
return 0;
|
LPSTR ret;
|
||||||
|
INT len;
|
||||||
|
|
||||||
|
if (!str) return NULL;
|
||||||
|
len = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL );
|
||||||
|
ret = RtlAllocateHeap(RtlGetProcessHeap(), flags, len );
|
||||||
|
if(ret) WideCharToMultiByte( CP_ACP, 0, str, -1, ret, len, NULL, NULL );
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* INTERNAL */
|
/* INTERNAL */
|
||||||
|
|
||||||
//#include "config.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
//#include "windef.h"
|
|
||||||
//#include "winbase.h"
|
|
||||||
//#include "winerror.h"
|
|
||||||
//#include "winuser.h"
|
|
||||||
//#include "winnls.h"
|
|
||||||
//#include "wine/unicode.h"
|
|
||||||
//#include "heap.h"
|
|
||||||
//#include "wine/debug.h"
|
|
||||||
|
|
||||||
//WINE_DEFAULT_DEBUG_CHANNEL(resource);
|
|
||||||
|
|
||||||
typedef struct tagMESSAGE_RESOURCE_ENTRY {
|
typedef struct tagMESSAGE_RESOURCE_ENTRY {
|
||||||
WORD Length;
|
WORD Length;
|
||||||
WORD Flags;
|
WORD Flags;
|
||||||
|
@ -182,7 +154,7 @@ static INT load_messageA( HMODULE instance, UINT id, WORD lang,
|
||||||
}
|
}
|
||||||
if (buffer) {
|
if (buffer) {
|
||||||
//TRACE("'%s' copied !\n", buffer);
|
//TRACE("'%s' copied !\n", buffer);
|
||||||
TRACE("'%s'\n", buffer);
|
//TRACE("'%s'\n", buffer);
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -215,6 +187,8 @@ static INT load_messageW( HMODULE instance, UINT id, WORD lang,
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* FormatMessageA (KERNEL32.@)
|
* FormatMessageA (KERNEL32.@)
|
||||||
* FIXME: missing wrap,
|
* FIXME: missing wrap,
|
||||||
|
*
|
||||||
|
* @implemented
|
||||||
*/
|
*/
|
||||||
DWORD WINAPI FormatMessageA(
|
DWORD WINAPI FormatMessageA(
|
||||||
DWORD dwFlags,
|
DWORD dwFlags,
|
||||||
|
@ -243,7 +217,7 @@ DWORD WINAPI FormatMessageA(
|
||||||
|| (dwFlags & FORMAT_MESSAGE_FROM_HMODULE))) return 0;
|
|| (dwFlags & FORMAT_MESSAGE_FROM_HMODULE))) return 0;
|
||||||
|
|
||||||
if (width && width != FORMAT_MESSAGE_MAX_WIDTH_MASK)
|
if (width && width != FORMAT_MESSAGE_MAX_WIDTH_MASK)
|
||||||
FIXME("line wrapping (%lu) not supported.\n", width);
|
//FIXME("line wrapping (%lu) not supported.\n", width);
|
||||||
from = NULL;
|
from = NULL;
|
||||||
if (dwFlags & FORMAT_MESSAGE_FROM_STRING)
|
if (dwFlags & FORMAT_MESSAGE_FROM_STRING)
|
||||||
{
|
{
|
||||||
|
@ -379,8 +353,8 @@ DWORD WINAPI FormatMessageA(
|
||||||
} else {
|
} else {
|
||||||
b = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, sz = 1000);
|
b = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, sz = 1000);
|
||||||
/* CMF - This makes a BIG assumption about va_list */
|
/* CMF - This makes a BIG assumption about va_list */
|
||||||
TRACE("A BIG assumption\n");
|
//TRACE("A BIG assumption\n");
|
||||||
//vsnprintf(b, sz, fmtstr, (va_list) argliststart);
|
_vsnprintf(b, sz, fmtstr, (va_list) argliststart);
|
||||||
}
|
}
|
||||||
for (x=b; *x; x++) ADD_TO_T(*x);
|
for (x=b; *x; x++) ADD_TO_T(*x);
|
||||||
|
|
||||||
|
@ -467,6 +441,8 @@ DWORD WINAPI FormatMessageA(
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* FormatMessageW (KERNEL32.@)
|
* FormatMessageW (KERNEL32.@)
|
||||||
|
*
|
||||||
|
* @implemented
|
||||||
*/
|
*/
|
||||||
DWORD WINAPI FormatMessageW(
|
DWORD WINAPI FormatMessageW(
|
||||||
DWORD dwFlags,
|
DWORD dwFlags,
|
||||||
|
@ -495,7 +471,7 @@ DWORD WINAPI FormatMessageW(
|
||||||
|| (dwFlags & FORMAT_MESSAGE_FROM_HMODULE))) return 0;
|
|| (dwFlags & FORMAT_MESSAGE_FROM_HMODULE))) return 0;
|
||||||
|
|
||||||
if (width && width != FORMAT_MESSAGE_MAX_WIDTH_MASK) {
|
if (width && width != FORMAT_MESSAGE_MAX_WIDTH_MASK) {
|
||||||
FIXME("line wrapping not supported.\n");
|
//FIXME("line wrapping not supported.\n");
|
||||||
}
|
}
|
||||||
from = NULL;
|
from = NULL;
|
||||||
if (dwFlags & FORMAT_MESSAGE_FROM_STRING) {
|
if (dwFlags & FORMAT_MESSAGE_FROM_STRING) {
|
||||||
|
@ -713,95 +689,3 @@ DWORD WINAPI FormatMessageW(
|
||||||
#endif /* __i386__ */
|
#endif /* __i386__ */
|
||||||
}
|
}
|
||||||
#undef ADD_TO_T
|
#undef ADD_TO_T
|
||||||
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* EXPORTED */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @unimplemented
|
|
||||||
*/
|
|
||||||
DWORD
|
|
||||||
STDCALL
|
|
||||||
FormatMessageW(
|
|
||||||
DWORD dwFlags,
|
|
||||||
LPCVOID lpSource,
|
|
||||||
DWORD dwMessageId,
|
|
||||||
DWORD dwLanguageId,
|
|
||||||
LPWSTR lpBuffer,
|
|
||||||
DWORD nSize,
|
|
||||||
va_list* Arguments)
|
|
||||||
{
|
|
||||||
|
|
||||||
// RtlFormatMessage
|
|
||||||
|
|
||||||
FIXME("FormatMessageW: unimplemented\n");
|
|
||||||
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @unimplemented
|
|
||||||
*/
|
|
||||||
DWORD
|
|
||||||
STDCALL
|
|
||||||
FormatMessageA(
|
|
||||||
DWORD dwFlags,
|
|
||||||
LPCVOID lpSource,
|
|
||||||
DWORD dwMessageId,
|
|
||||||
DWORD dwLanguageId,
|
|
||||||
LPSTR lpBuffer,
|
|
||||||
DWORD nSize,
|
|
||||||
va_list* Arguments)
|
|
||||||
{
|
|
||||||
HLOCAL pBuf = NULL;
|
|
||||||
//LPSTR pBuf = NULL;
|
|
||||||
|
|
||||||
#define MAX_MSG_STR_LEN 200
|
|
||||||
|
|
||||||
if (lpBuffer != NULL) {
|
|
||||||
|
|
||||||
if (dwFlags & FORMAT_MESSAGE_ALLOCATE_BUFFER) {
|
|
||||||
pBuf = LocalAlloc(LPTR, max(nSize, MAX_MSG_STR_LEN));
|
|
||||||
if (pBuf == NULL) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
*(LPSTR*)lpBuffer = pBuf;
|
|
||||||
} else {
|
|
||||||
pBuf = *(LPSTR*)lpBuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dwFlags & FORMAT_MESSAGE_FROM_STRING) {
|
|
||||||
} else {
|
|
||||||
}
|
|
||||||
|
|
||||||
//FORMAT_MESSAGE_IGNORE_INSERTS
|
|
||||||
//FORMAT_MESSAGE_FROM_STRING
|
|
||||||
//FORMAT_MESSAGE_FROM_HMODULE
|
|
||||||
//FORMAT_MESSAGE_FROM_SYSTEM
|
|
||||||
//FORMAT_MESSAGE_ARGUMENT_ARRAY
|
|
||||||
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
if (FormatMessage(
|
|
||||||
FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
|
|
||||||
0,
|
|
||||||
error,
|
|
||||||
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
|
|
||||||
(PTSTR)&msg,
|
|
||||||
0,
|
|
||||||
NULL)
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
FIXME("FormatMessageA: unimplemented\n");
|
|
||||||
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* EOF */
|
|
||||||
|
|
Loading…
Reference in a new issue