IStream* FileStorage::WriteFileHelper(FileEntry& file, FileOpenMode openMode /*= FileOpenMode::ReadOnly*/, FileDataType dataType /*= FileDataType::Binary*/) { IStream* resultStream = OnWriteFile(file, openMode, dataType);; const CoderChain* coderChain = GetFileCoderChain(file); if (coderChain != nullptr) { if (IsWholeFileCoding()) { resultStream = new FileCodeWriteStream(*resultStream, *coderChain, file); } else { resultStream = new BlockCodeWriteStream(*resultStream, BlockSize(), *coderChain, file); } } if (Hasher() != HasherType::None) { resultStream = new HashStream(*resultStream, Hasher(), [&file](StringRef result) {file.SetSignature(result); }); } return resultStream; }
void OnFileSystemCommand( SerializerContext* cmdContext, SerializerContext* respContext, unsigned char* responseBuffer, unsigned short responseBufferSize) { nmc.cmdContext = cmdContext; nmc.respContext = respContext; nmc.responseBuffer = responseBuffer; nmc.responseBufferSize = responseBufferSize; unsigned char fsCmd = 0; Get(cmdContext, (void*)&fsCmd, sizeof(fsCmd)); switch(fsCmd){ case Mount: OnMount(&nmc); break; case UnMount: OnUnMount(&nmc); break; case OpenFile: OnOpenFile(&nmc); break; case CloseFile: OnCloseFile(&nmc); break; case ReadFile: OnReadFile(&nmc); break; case WriteFile: OnWriteFile(&nmc); break; case SeekFile: OnSeekFile(&nmc); break; case TruncateFile: OnTruncateFile(&nmc); break; case SyncFile: OnSyncFile(&nmc); break; case ReadString: OnReadString(&nmc); break; case WriteString: OnWriteString(&nmc); break; case GetFilePosition: OnGetFilePosition(&nmc); break; case GetEndOfFile: OnGetEndOfFile(&nmc); break; case GetFileSize: OnGetFileSize(&nmc); break; case GetFileError: OnGetFileError(&nmc); break; case OpenDir: OnOpenDir(&nmc); break; case CloseDir: OnCloseDir(&nmc); break; case ReadDir: OnReadDir(&nmc); break; case MakeDir: OnMakeDir(&nmc); break; case ChangeDir: OnChangeDir(&nmc); break; case GetCurrentDir: OnGetCurrentDir(&nmc); break; case GetFreeSpace: OnGetFreeSpace(&nmc); break; case Unlink: OnUnlink(&nmc); break; case ChangeAttribute: OnChangeAttribute(&nmc); break; case ChangeTime: OnChangeTime(&nmc); break; case Rename: OnRename(&nmc); break; case GetDiskStatus: OnGetDiskStatus(&nmc); break; default: vt100TextColor(VT100_Red, VT100_Black); printf("%s: invalid command: %i\r\n", __func__, (int)fsCmd); vt100TextDefault(); break; } }