Example #1
0
bool SimpleFileStore::onWriteComplete(const std::string& name, KeyMetadata& md)
{
	if (md.version.isDeleted())
		return onDeleteComplete(name, md);

	FilePaths paths = filepath(name);
	if ( !testIfVersionGreater(md.version, paths.deleted()) )
	{
		File::remove(paths.inprogress());
		return false;
	}

	File::rename(paths.current(), paths.reserve());
	if ( !File::set_modified_time(paths.inprogress(), timeFromVersion(md.version)) || !File::rename(paths.inprogress(), paths.current()) )
	{
		File::rename(paths.reserve(), paths.current());
		File::remove(paths.inprogress());
		return false;
	}

	md.digest ^= removeIfExists(paths.reserve());
	md.digest ^= removeIfExists(paths.deleted(), true);
	return true;
}