- supporting large offsets (needed for negative offset) - supporting negative offsets --- juergen.schmied@debitel.net
Index: wine/dlls/ole32/ifs.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/ifs.c,v retrieving revision 1.20 diff -d -u -r1.20 ifs.c --- wine/dlls/ole32/ifs.c 31 May 2002 23:25:50 -0000 1.20 +++ wine/dlls/ole32/ifs.c 27 Jun 2002 09:51:04 -0000 @@ -260,14 +260,14 @@ static HRESULT WINAPI IMalloc_fnQueryInterface(LPMALLOC iface,REFIID refiid,LPVOID *obj) { ICOM_THIS(IMalloc32Impl,iface); - TRACE("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(refiid),obj); - if ( !memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown)) || - !memcmp(&IID_IMalloc,refiid,sizeof(IID_IMalloc)) - ) { + TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(refiid),obj); + + if (IsEqualIID(&IID_IUnknown,refiid) || + IsEqualIID(&IID_IMalloc,refiid)) { *obj = This; return S_OK; } - return OLE_E_ENUM_NOMORE; + return E_NOINTERFACE; } /****************************************************************************** @@ -390,3 +390,4 @@ IsBadCodePtr((FARPROC)ICOM_VTBL(punk)->QueryInterface) ); } + Index: wine/dlls/ole32/hglobalstream.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/hglobalstream.c,v retrieving revision 1.11 diff -d -u -r1.11 hglobalstream.c --- wine/dlls/ole32/hglobalstream.c 31 May 2002 23:25:50 -0000 1.11 +++ wine/dlls/ole32/hglobalstream.c 27 Jun 2002 09:51:04 -0000 @@ -33,6 +33,7 @@ #include "ole2.h" #include "winbase.h" #include "winerror.h" +#include "ntddk.h" #include "wine/debug.h" @@ -573,59 +574,35 @@ dlibMove.s.LowPart, dwOrigin, plibNewPosition); /* - * The caller is allowed to pass in NULL as the new position return value. - * If it happens, we assign it to a dynamic variable to avoid special cases - * in the code below. - */ - if (plibNewPosition == 0) - { - plibNewPosition = &newPosition; - } - - /* * The file pointer is moved depending on the given "function" * parameter. */ switch (dwOrigin) { case STREAM_SEEK_SET: - plibNewPosition->s.HighPart = 0; - plibNewPosition->s.LowPart = 0; + newPosition.s.HighPart = 0; + newPosition.s.LowPart = 0; break; case STREAM_SEEK_CUR: - *plibNewPosition = This->currentPosition; + newPosition = This->currentPosition; break; case STREAM_SEEK_END: - *plibNewPosition = This->streamSize; + newPosition = This->streamSize; break; default: return STG_E_INVALIDFUNCTION; } /* - * We don't support files with offsets of 64 bits. - */ - assert(dlibMove.s.HighPart == 0); - - /* - * Check if we end-up before the beginning of the file. That should trigger an - * error. - */ - if ( (dlibMove.s.LowPart<0) && (plibNewPosition->s.LowPart < (ULONG)(-dlibMove.s.LowPart)) ) - { - /* - * I don't know what error to send there. - */ - return E_FAIL; - } - - /* * Move the actual file pointer * If the file pointer ends-up after the end of the stream, the next Write operation will * make the file larger. This is how it is documented. */ - plibNewPosition->s.LowPart += dlibMove.s.LowPart; - This->currentPosition = *plibNewPosition; + newPosition.QuadPart = RtlLargeIntegerAdd(newPosition.QuadPart, dlibMove.QuadPart); + if (newPosition.QuadPart < 0) return STG_E_INVALIDFUNCTION; + + if (plibNewPosition) *plibNewPosition = newPosition; + This->currentPosition = newPosition; return S_OK; } @@ -846,3 +823,4 @@ FIXME("not implemented!\n"); return E_NOTIMPL; } +