예제 #1
0
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;
}
예제 #2
0
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;
  }
}