Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
bf42021e
Commit
bf42021e
authored
Dec 23, 2004
by
Bill Medland
Committed by
Alexandre Julliard
Dec 23, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented DceErrorInqText.
parent
6533efb6
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
101 additions
and
2 deletions
+101
-2
rpcrt4.spec
dlls/rpcrt4/rpcrt4.spec
+2
-2
rpcrt4_main.c
dlls/rpcrt4/rpcrt4_main.c
+50
-0
rpc.c
dlls/rpcrt4/tests/rpc.c
+45
-0
rpcdce.h
include/rpcdce.h
+4
-0
No files found.
dlls/rpcrt4/rpcrt4.spec
View file @
bf42021e
@ st
ub DceErrorInqTextA
@ st
ub DceErrorInqTextW
@ st
dcall DceErrorInqTextA (long ptr)
@ st
dcall DceErrorInqTextW (long ptr)
@ stdcall -private DllRegisterServer() RPCRT4_DllRegisterServer
@ stub MesBufferHandleReset
...
...
dlls/rpcrt4/rpcrt4_main.c
View file @
bf42021e
...
...
@@ -748,3 +748,53 @@ BOOL RPCRT4_RPCSSOnDemandCall(PRPCSS_NP_MESSAGE msg, char *vardata_payload, PRPC
return
TRUE
;
}
/* DceErrorInqText
*
* Notes
* 1. On passing a NULL pointer the code does bomb out.
* 2. The size of the required buffer is not defined in the documentation.
* It appears to be 256.
* 3. The function is defined to return RPC_S_INVALID_ARG but I don't know
* of any value for which it does.
* 4. The MSDN documentation currently declares that the second argument is
* unsigned char *, even for the W version. I don't believe it.
*/
#define MAX_RPC_ERROR_TEXT 256
RPC_STATUS
RPC_ENTRY
DceErrorInqTextW
(
unsigned
long
e
,
unsigned
short
*
buffer
)
{
DWORD
count
;
count
=
FormatMessageW
(
FORMAT_MESSAGE_FROM_SYSTEM
|
FORMAT_MESSAGE_IGNORE_INSERTS
,
NULL
,
e
,
0
,
buffer
,
MAX_RPC_ERROR_TEXT
,
NULL
);
if
(
!
count
)
{
count
=
FormatMessageW
(
FORMAT_MESSAGE_FROM_SYSTEM
|
FORMAT_MESSAGE_IGNORE_INSERTS
,
NULL
,
RPC_S_NOT_RPC_ERROR
,
0
,
buffer
,
MAX_RPC_ERROR_TEXT
,
NULL
);
if
(
!
count
)
{
ERR
(
"Failed to translate error"
);
return
RPC_S_INVALID_ARG
;
}
}
return
RPC_S_OK
;
}
RPC_STATUS
RPC_ENTRY
DceErrorInqTextA
(
unsigned
long
e
,
unsigned
char
*
buffer
)
{
RPC_STATUS
status
;
WCHAR
bufferW
[
MAX_RPC_ERROR_TEXT
];
if
((
status
=
DceErrorInqTextW
(
e
,
bufferW
))
==
RPC_S_OK
)
{
if
(
!
WideCharToMultiByte
(
CP_ACP
,
0
,
bufferW
,
-
1
,
buffer
,
MAX_RPC_ERROR_TEXT
,
NULL
,
NULL
))
{
ERR
(
"Failed to translate error"
);
status
=
RPC_S_INVALID_ARG
;
}
}
return
status
;
}
dlls/rpcrt4/tests/rpc.c
View file @
bf42021e
...
...
@@ -28,6 +28,7 @@
#include "wine/unicode.h"
#include "rpc.h"
#include "rpcdce.h"
static
UUID
Uuid_Table
[
10
]
=
{
{
0x00000000
,
0x0000
,
0x0000
,
{
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
}
},
/* 0 (null) */
...
...
@@ -122,8 +123,52 @@ void UuidConversionAndComparison(void) {
}
}
void
TestDceErrorInqText
(
void
)
{
char
bufferInvalid
[
1024
];
char
buffer
[
1024
];
/* The required size is not documented but would
* appear to be 256.
*/
DWORD
dwCount
;
dwCount
=
FormatMessageA
(
FORMAT_MESSAGE_FROM_SYSTEM
|
FORMAT_MESSAGE_IGNORE_INSERTS
,
NULL
,
RPC_S_NOT_RPC_ERROR
,
0
,
bufferInvalid
,
sizeof
(
bufferInvalid
)
/
sizeof
(
bufferInvalid
[
0
]),
NULL
);
/* A random sample of DceErrorInqText */
/* 0 is success */
ok
((
DceErrorInqTextA
(
0
,
buffer
)
==
RPC_S_OK
),
"DceErrorInqTextA(0...)
\n
"
);
/* A real RPC_S error */
ok
((
DceErrorInqTextA
(
RPC_S_INVALID_STRING_UUID
,
buffer
)
==
RPC_S_OK
),
"DceErrorInqTextA(valid...)
\n
"
);
if
(
dwCount
)
{
/* A message for which FormatMessage should fail
* which should return RPC_S_OK and the
* fixed "not valid" message
*/
ok
((
DceErrorInqTextA
(
35
,
buffer
)
==
RPC_S_OK
&&
strcmp
(
buffer
,
bufferInvalid
)
==
0
),
"DceErrorInqTextA(unformattable...)
\n
"
);
/* One for which FormatMessage should succeed but
* DceErrorInqText should "fail"
* 3814 is generally quite a long message
*/
ok
((
DceErrorInqTextA
(
3814
,
buffer
)
==
RPC_S_OK
&&
strcmp
(
buffer
,
bufferInvalid
)
==
0
),
"DceErrorInqTextA(deviation...)
\n
"
);
}
else
ok
(
0
,
"Cannot set up for DceErrorInqText
\n
"
);
}
START_TEST
(
rpc
)
{
trace
(
" ** Uuid Conversion and Comparison Tests **
\n
"
);
UuidConversionAndComparison
();
trace
(
" ** DceErrorInqText **
\n
"
);
TestDceErrorInqText
();
}
include/rpcdce.h
View file @
bf42021e
...
...
@@ -109,6 +109,10 @@ typedef struct _RPC_POLICY
#define RPC_IF_ALLOW_UNKNOWN_AUTHORITY 0x4
#define RPC_IF_ALLOW_SECURE_ONLY 0x8
RPC_STATUS
RPC_ENTRY
DceErrorInqTextA
(
unsigned
long
e
,
unsigned
char
*
buffer
);
RPC_STATUS
RPC_ENTRY
DceErrorInqTextW
(
unsigned
long
e
,
unsigned
short
*
buffer
);
#define DceErrorInqText WINELIB_NAME_AW(DceErrorInqText)
RPCRTAPI
void
RPC_ENTRY
RpcRaiseException
(
RPC_STATUS
exception
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment