int32 CFile::Write(CMemoryStream& oStream, int32 nWriteSize) { if(nWriteSize <= 0) return 0; uint32 nRest = oStream.GetSize() - oStream.GetPosition(); if(nRest < (uint32)nWriteSize) nWriteSize = nRest; int32 nRet, nOldCopySize = nWriteSize; while(nWriteSize) { uint32 nBlockSize; char* pBuf = oStream.GetBuf(nBlockSize); if(nBlockSize > (uint32)nWriteSize) nBlockSize = nWriteSize; nRet = Write(pBuf, nBlockSize); if(nRet < 0) { if(nWriteSize == nOldCopySize) return nRet; break; } if(nRet == 0) break; nWriteSize -= nRet; oStream.Seek(nRet); } return nOldCopySize - nWriteSize; }
int32 CFile::Read(CMemoryStream& oStream, int32 nReadSize, uint32 nTimeOut) { if(nReadSize <= 0) return 0; if(oStream.GetSize() == oStream.GetPosition()) { if(!oStream.ExtendSize(nReadSize)) return 0; } uint32 nBlockSize; char* pBuf = oStream.GetBuf(nBlockSize); if(nBlockSize > (uint32)nReadSize) nBlockSize = nReadSize; int32 nRet = Read(pBuf, nBlockSize, nTimeOut);//??????? if(nRet > 0) oStream.Seek(nRet); return nRet; }
void _ms_pos(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info) { CMemoryStream* pNative = unwrap_memorystream(info.Holder()); info.GetReturnValue().Set(v8::Integer::New(v8::Isolate::GetCurrent(), pNative->GetSize())); }