storage.dll16: Simplify operations in IStream16::Seek.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
163ebdfa96
commit
3085e73392
|
@ -1185,36 +1185,25 @@ HRESULT CDECL IStream16_fnSeek(IStream16 *iface, LARGE_INTEGER offset, DWORD whe
|
||||||
TRACE_(relay)("(%p)->([%d.%d],%d,%p)\n",This,offset.u.HighPart,offset.u.LowPart,whence,newpos);
|
TRACE_(relay)("(%p)->([%d.%d],%d,%p)\n",This,offset.u.HighPart,offset.u.LowPart,whence,newpos);
|
||||||
|
|
||||||
switch (whence) {
|
switch (whence) {
|
||||||
/* unix SEEK_xx should be the same as win95 ones */
|
case STREAM_SEEK_SET:
|
||||||
case SEEK_SET:
|
This->offset.QuadPart = offset.QuadPart;
|
||||||
/* offset must be ==0 (<0 is invalid, and >0 cannot be handled
|
|
||||||
* right now.
|
|
||||||
*/
|
|
||||||
assert(offset.u.HighPart==0);
|
|
||||||
This->offset.u.HighPart = offset.u.HighPart;
|
|
||||||
This->offset.u.LowPart = offset.u.LowPart;
|
|
||||||
break;
|
break;
|
||||||
case SEEK_CUR:
|
case STREAM_SEEK_CUR:
|
||||||
if (offset.u.HighPart < 0) {
|
if ((offset.QuadPart < 0 && -offset.QuadPart > This->offset.QuadPart) ||
|
||||||
/* FIXME: is this negation correct ? */
|
(offset.QuadPart > 0 && -offset.QuadPart <= This->offset.QuadPart))
|
||||||
offset.u.HighPart = -offset.u.HighPart;
|
return STG_E_INVALIDFUNCTION;
|
||||||
offset.u.LowPart = (0xffffffff ^ offset.u.LowPart)+1;
|
This->offset.QuadPart += offset.QuadPart;
|
||||||
|
break;
|
||||||
|
case STREAM_SEEK_END:
|
||||||
|
if (-offset.QuadPart > This->stde.pps_size)
|
||||||
|
return STG_E_INVALIDFUNCTION;
|
||||||
|
|
||||||
assert(offset.u.HighPart==0);
|
This->offset.QuadPart = This->stde.pps_size + offset.QuadPart;
|
||||||
assert(This->offset.u.LowPart >= offset.u.LowPart);
|
|
||||||
This->offset.u.LowPart -= offset.u.LowPart;
|
|
||||||
} else {
|
|
||||||
assert(offset.u.HighPart==0);
|
|
||||||
This->offset.u.LowPart+= offset.u.LowPart;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SEEK_END:
|
|
||||||
assert(offset.u.HighPart==0);
|
|
||||||
This->offset.u.LowPart = This->stde.pps_size-offset.u.LowPart;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (This->offset.u.LowPart>This->stde.pps_size)
|
|
||||||
This->offset.u.LowPart=This->stde.pps_size;
|
if (This->offset.QuadPart>This->stde.pps_size)
|
||||||
|
This->offset.QuadPart=This->stde.pps_size;
|
||||||
if (newpos) *newpos = This->offset;
|
if (newpos) *newpos = This->offset;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue