| 414 | } |
| 415 | |
| 416 | U32 MemFile::write(const void* src, U32 size) |
| 417 | { |
| 418 | if ((mStatus != Open && mStatus != EndOfFile) || !size) |
| 419 | return 0; |
| 420 | |
| 421 | if (mFileData->mFileSize + size > mFileData->mBufferSize) |
| 422 | { |
| 423 | // Keep doubling our buffer size until we're big enough. |
| 424 | while (mFileData->mFileSize + size > mFileData->mBufferSize) |
| 425 | mFileData->mBufferSize *= 2; |
| 426 | mFileData->mBuffer = dRealloc(mFileData->mBuffer, mFileData->mBufferSize); |
| 427 | if (!mFileData->mBuffer) |
| 428 | { |
| 429 | mStatus = FileSystemFull; |
| 430 | return 0; |
| 431 | } |
| 432 | } |
| 433 | |
| 434 | dMemcpy((U8*)mFileData->mBuffer + mCurrentPos, src, size); |
| 435 | mCurrentPos += size; |
| 436 | mFileData->mFileSize = getMax(mFileData->mFileSize, mCurrentPos); |
| 437 | mFileData->mLastAccess = Time::getCurrentTime(); |
| 438 | mFileData->mModified = mFileData->mLastAccess; |
| 439 | |
| 440 | return size; |
| 441 | } |
| 442 | |
| 443 | //----------------------------------------------------------------------------- |
| 444 |
no test coverage detected