Implement DceErrorInqText
Bill Medland
billmedland at mercuryspeed.com
Wed Dec 22 08:35:07 CST 2004
On December 21, 2004 10:50 pm, Dmitry Timoshkov wrote:
Thanks for the feedback
> "Bill Medland" <billmedland at mercuryspeed.com> wrote:
> > +RPC_STATUS RPC_ENTRY DceErrorInqTextW (unsigned long e, unsigned short
> > *b) +{
> > + DWORD count;
> > + if (acceptable_rpc_code (e))
>
> It would be much more natural to make FormatMessageW to decide whether a
> passed error code is valid or not, i.e. if it exists in the system message
> table.
My comments are probably not clear enough. That function isn't asking if the
error code is a valid error code (which is relevant to FormatMessage).
Actually !acceptable_rpc_code is the list of error codes for which
FormatMessage will return a valid string but that is not the string that
DceErrorInqText returns; it returns the "not a valid rpc code" message.
I'll reword the comments and rename the function.
The model has been tested for error codes 0 to 0x10000000 against rpcrt4
5.0.2195.6904.
I considered two models:
a.
If (valid_rpc_code)
if (FormatMessage)
return the message
else
return error
else
return the invalid message
b.
if (FormatMessage)
if (valid rpc code)
return the message
else
return the invalid one
else
return the invalid one.
The second model requires a much smaller list of deviations; messages for
which FormatMessage returns a value but that value is not returned by
DceErrorInqText.
>
> > + {
> > + count = FormatMessageW (FORMAT_MESSAGE_FROM_SYSTEM |
> > + FORMAT_MESSAGE_IGNORE_INSERTS,
> > + NULL, e, 0, b, /* I don't know!!! */ 65535, NULL);
>
> 256 (or 1024) is a reasonable margin I believe, at least messages in Wine
> are much shorter of even 256.
And there was me considering ULONG_MAX!!!. Basically I am not putting in a
limit; it isn't my place to say. If the documentation gave a limit I'd use
it, but since it doesn't I assume that the caller provided a sufficient
buffer.
>
> > + }
> > + else
> > + count = 0;
> > + if (!count)
> > + {
> > + MultiByteToWideChar(CP_ACP, 0, cszInvalidCode, -1, b, 65535 /*
> > ??? */);
>
> A message about invalid code should be localizable as well, so it should be
> either loaded by LoadString or even by FormatMessage for consistency IMO.
> winerror.h from PlatformSDK has the following definition which matches your
> error text ("The error specified is not a valid Windows RPC error
> code.\r\n"):
>
> //
> // MessageId: RPC_S_NOT_RPC_ERROR
> //
> // MessageText:
> //
> // The error specified is not a valid Windows RPC error code.
> //
> #define RPC_S_NOT_RPC_ERROR 1823L
Aha; there it is. Thanks. I'll fix it up.
(And that shortens the list of deviations by 1 too)
--
Bill Medland
mailto:billmedland at mercuryspeed.com
http://webhome.idirect.com/~kbmed
More information about the wine-devel
mailing list