void BlockStream::SetSize(int64 size) { if(IsError() || !IsOpen()) return; int64 pos = GetPos(); Flush(); Seek(0); SetStreamSize(size); streamsize = size; Seek(pos < size ? pos : size); }
void BlockStream::Seek(int64 apos) { if(IsError()) return; LLOG("Seek " << apos); if(style & STRM_WRITE) { SetPos(apos); if(apos > streamsize) { SetStreamSize(apos); streamsize = apos; } } else { if(apos > streamsize) apos = streamsize; SetPos(apos); } }
BOOL DecodeUCI(MEMORY_STREAM *pStream) { UCIInfo uci; PBYTE pbBuffer, pbRaw; Int32 Stride; Large_Integer NewSize; SBitMapHeader header; if ((*(PULONG)pStream->pbBuffer & 0xFFFFFF) != TAG3('UCI')) return False; if (UCIDecodeEx(pStream->lpBuffer, pStream->Size, &uci, False) < 0) return False; InitBitmapHeader(&header, uci.Width, uci.Height, uci.BitsPerPixel, &Stride); NewSize.QuadPart = header.dwFileSize; SetStreamSize(pStream, NewSize); pbBuffer = pStream->pbBuffer; *(SBitMapHeader *)pbBuffer = header; pbBuffer += sizeof(header); pbBuffer += (uci.Height - 1) * Stride; pbRaw = uci.pbBuffer; for (LONG h = 0; h != uci.Height; ++h) { CopyMemory(pbBuffer, pbRaw, uci.Stride); pbBuffer -= Stride; pbRaw += uci.Stride; } UCIFreeEx(&uci); return True; }