msdos/int21 CREAT special cases
Ferenc Wagner
wferi at tba.elte.hu
Tue Jun 3 05:06:24 CDT 2003
Eric Pouech <pouech-eric at wanadoo.fr> writes:
> _lcreat16 (and al.) is in fact a 16 bit function, implemented in
> krnl386. so, normally it wouldn't be accessible from 32 bit DLLs (we
> can do it in some cases, but the least we do, the better it is).
> So, if the same behavior (as _lcreat16) can be obtained with other 32
> bit APIs (like _lcreat or CreateFile), that'd be better. Beware, that
> _lcreat16 is different from _lcreat (search path order for example is
> not the same).
Thanks for the clarification! Given the definitions
HFILE16 WINAPI _lcreat16( LPCSTR path, INT16 attr )
{
return Win32HandleToDosFileHandle( (HANDLE)_lcreat( path, attr ) );
}
HFILE WINAPI _lcreat( LPCSTR path, INT attr )
{
/* Mask off all flags not explicitly allowed by the doc */
attr &= FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM;
TRACE("%s %02x\n", path, attr );
return (HFILE)CreateFileA( path, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
CREATE_ALWAYS, attr, 0 );
}
I could easily change my patch to call _lcreat() or
CreateFileA() instead of _lcreat16(), but I am not sure if
that would be right, since the differences you mention do
not seem to be implemented, and I could not find any
documentation on them. In sight of this, what do you
recommend? The conformance tests do not show any anomaly in
the behaviour of _lcreat(), but it may be only that these
aspects simply are not tested.
Well, the above has not much to do with my original patch,
but given some pointers I am willing to investigate this
anyway.
Feri.
More information about the wine-devel
mailing list