VError XLinuxFileDesc::SetSize(sLONG8 inSize) const { if(!IsValid()) return VE_INVALID_PARAMETER; //Shall fail if fFd is not in write-mode. Although we could check that, I prefer to report the system error. ResizeHelper rszHlp; return rszHlp.Resize(fFd, inSize); }
VError CopyHelper::DoCopy() { ResizeHelper dstRszHlp; VError verr=dstRszHlp.Resize(fDstFd, fSrcSize); if(verr!=VE_OK) return verr; MapHelper srcMapHlp; verr=srcMapHlp.Map(fSrcFd, fSrcSize); if(verr!=VE_OK) return verr; void* srcAddr=srcMapHlp.GetAddr(); MapHelper dstMapHlp; verr=dstMapHlp.SetProtection(MapHelper::WRITE).Map(fDstFd, fSrcSize); if(verr!=VE_OK) { srcMapHlp.UnMap(); return verr; } void* dstAddr=dstMapHlp.GetAddr(); memcpy(dstAddr, srcAddr, fSrcSize); srcMapHlp.UnMap(); dstMapHlp.UnMap(); return verr; }