void MessageStorePlugin::providerAvailable(const std::string name, StorageProvider *be) { ProviderMap::value_type newSp(name, be); std::pair<ProviderMap::iterator, bool> inserted = providers.insert(newSp); if (inserted.second == false) QPID_LOG(warning, "Storage provider " << name << " duplicate; ignored."); }
int FilesystemManager::renameHelper(string& oldPath, string& newPath) { //Do everything while keeping the mutex locked to prevent someone to //concurrently mount a filesystem on the directory we're renaming Lock<FastMutex> l(mutex); ResolvedPath oldOpenData=resolvePath(oldPath,true); if(oldOpenData.result<0) return oldOpenData.result; ResolvedPath newOpenData=resolvePath(newPath,true); if(newOpenData.result<0) return newOpenData.result; if(oldOpenData.fs!=newOpenData.fs) return -EXDEV; //Can't rename across fs //After resolvePath() so path is in canonical form and symlinks are followed if(filesystems.find(StringPart(oldPath))!=filesystems.end()) return -EBUSY; if(filesystems.find(StringPart(newPath))!=filesystems.end()) return -EBUSY; StringPart oldSp(oldPath,string::npos,oldOpenData.off); StringPart newSp(newPath,string::npos,newOpenData.off); //Can't rename a directory into a subdirectory of itself if(newSp.startsWith(oldSp)) return -EINVAL; return oldOpenData.fs->rename(oldSp,newSp); }
A* release(std::shared_ptr<A> sp) { std::shared_ptr<A> newSp(nullptr, Deleter()); sp.swap(newSp); return newSp.get(); }