Andreas Mohr wrote:
Does Win9x GetCurrentDirectoryA() really use an IsBadWritePtr to protect against invalid output buffers? Somehow I slightly doubt it... (IsBadWritePtr isn't the fastest thing in the world...)
Well, no. Looking at the disassembly it does about this:
static WINE_EXCEPTION_FILTER(foo) { if(GetExceptionCode() & 6) return EXCEPTION_EXECUTE_HANDLER; else return EXCEPTION_CONTINUE_SEARCH; }
UINT WINAPI GetCurrentDirectoryA( UINT buflen, LPSTR buf ) { if(buflen > 0) { __TRY { buf[0] += 0; buf[buflen] += 0; } __EXCEPT(foo) { SetLastError(ERROR_INVALID_PARAMETER); return 0; } }
... }
But does the speed-difference really matter for GetCurrentDirectoryA()?
Aren't you covering up a previous bug with buffer allocation or so?
No. WaveMix v1.72 tries to do:
CHAR buf[MAX_PATH]; lstrcpyA(buf + GetCurrentDirectoryA(buf, sizeof(buf)), "\WAVEMIX.INI"); /* sic, they got the argument order wrong */
and since GetCurrentDirectoryA() returns 0 on failure (on Win9x) they end up with "\WAVEMIX.INI"...
On WinXP it crashes just as in Wine but since we strive for bug-compatibility...
-flx