BCopyEngine: Add base class BEntryOperationEngineBase
It contains a helper class Entry, which allows to generalize the BCopyEngine::CopyEntry() parameters.
This commit is contained in:
@@ -20,7 +20,6 @@
|
||||
#include <File.h>
|
||||
#include <fs_attr.h>
|
||||
#include <Path.h>
|
||||
#include <String.h>
|
||||
#include <SymLink.h>
|
||||
#include <TypeConstants.h>
|
||||
|
||||
@@ -97,7 +96,7 @@ BCopyEngine::RemoveFlags(uint32 flags)
|
||||
|
||||
|
||||
status_t
|
||||
BCopyEngine::CopyEntry(const char* sourcePath, const char* destPath)
|
||||
BCopyEngine::CopyEntry(const Entry& sourceEntry, const Entry& destEntry)
|
||||
{
|
||||
if (fBuffer == NULL) {
|
||||
fBuffer = new(std::nothrow) char[kDefaultBufferSize];
|
||||
@@ -112,6 +111,18 @@ BCopyEngine::CopyEntry(const char* sourcePath, const char* destPath)
|
||||
fBufferSize = kDefaultBufferSize;
|
||||
}
|
||||
|
||||
BPath sourcePathBuffer;
|
||||
const char* sourcePath;
|
||||
status_t error = sourceEntry.GetPath(sourcePathBuffer, sourcePath);
|
||||
if (error != B_OK)
|
||||
return error;
|
||||
|
||||
BPath destPathBuffer;
|
||||
const char* destPath;
|
||||
error = destEntry.GetPath(destPathBuffer, destPath);
|
||||
if (error != B_OK)
|
||||
return error;
|
||||
|
||||
return _CopyEntry(sourcePath, destPath);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright 2013, Ingo Weinhold, [email protected].
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
|
||||
#include <EntryOperationEngineBase.h>
|
||||
|
||||
#include <Directory.h>
|
||||
#include <Entry.h>
|
||||
#include <Path.h>
|
||||
|
||||
|
||||
namespace BPrivate {
|
||||
|
||||
|
||||
BEntryOperationEngineBase::Entry::Entry(const char* path)
|
||||
:
|
||||
fDirectory(NULL),
|
||||
fPath(path),
|
||||
fEntry(NULL),
|
||||
fEntryRef(NULL)
|
||||
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BEntryOperationEngineBase::Entry::Entry(const BDirectory& directory, const char* path)
|
||||
:
|
||||
fDirectory(&directory),
|
||||
fPath(path),
|
||||
fEntry(NULL),
|
||||
fEntryRef(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BEntryOperationEngineBase::Entry::Entry(const BEntry& entry)
|
||||
:
|
||||
fDirectory(NULL),
|
||||
fPath(NULL),
|
||||
fEntry(&entry),
|
||||
fEntryRef(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BEntryOperationEngineBase::Entry::Entry(const entry_ref& entryRef)
|
||||
:
|
||||
fDirectory(NULL),
|
||||
fPath(NULL),
|
||||
fEntry(NULL),
|
||||
fEntryRef(&entryRef)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BEntryOperationEngineBase::Entry::~Entry()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
BEntryOperationEngineBase::Entry::GetPath(BPath& buffer, const char*& _path)
|
||||
const
|
||||
{
|
||||
status_t error;
|
||||
|
||||
if (fEntry != NULL) {
|
||||
error = buffer.SetTo(fEntry);
|
||||
} else if (fDirectory != NULL) {
|
||||
error = buffer.SetTo(fDirectory, fPath);
|
||||
} else if (fEntryRef != NULL) {
|
||||
error = buffer.SetTo(fEntryRef);
|
||||
} else if (fPath != NULL) {
|
||||
_path = fPath;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
if (error != B_OK)
|
||||
return error;
|
||||
|
||||
_path = buffer.Path();
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
BString
|
||||
BEntryOperationEngineBase::Entry::Path() const
|
||||
{
|
||||
BPath pathBuffer;
|
||||
const char* path;
|
||||
if (GetPath(pathBuffer, path) == B_OK)
|
||||
return BString(path);
|
||||
return BString();
|
||||
}
|
||||
|
||||
|
||||
} // namespace BPrivate
|
||||
@@ -26,6 +26,7 @@ for architectureObject in [ MultiArchSubDirSetup ] {
|
||||
DriverSettings.cpp
|
||||
Entry.cpp
|
||||
EntryList.cpp
|
||||
EntryOperationEngineBase.cpp
|
||||
File.cpp
|
||||
FileDescriptorIO.cpp
|
||||
FileIO.cpp
|
||||
|
||||
Reference in New Issue
Block a user