Changed Options Check in remaining File Impl Classes

This commit is contained in:
KevDi
2019-11-30 13:38:03 +01:00
parent f6f8ef8681
commit fa20e056dd
6 changed files with 32 additions and 11 deletions

View File

@@ -27,6 +27,11 @@ namespace Poco {
class FileImpl class FileImpl
{ {
protected: protected:
enum Options {
OPT_FAIL_ON_OVERWRITE_IMPL = 0x01
};
typedef UInt64 FileSizeImpl; typedef UInt64 FileSizeImpl;
FileImpl(); FileImpl();

View File

@@ -28,6 +28,11 @@ namespace Poco {
class Foundation_API FileImpl class Foundation_API FileImpl
{ {
protected: protected:
enum Options {
OPT_FAIL_ON_OVERWRITE_IMPL = 0x01
};
typedef UInt64 FileSizeImpl; typedef UInt64 FileSizeImpl;
FileImpl(); FileImpl();

View File

@@ -28,6 +28,11 @@ namespace Poco {
class Foundation_API FileImpl class Foundation_API FileImpl
{ {
protected: protected:
enum Options {
OPT_FAIL_ON_OVERWRITE_IMPL = 0x01
};
typedef UInt64 FileSizeImpl; typedef UInt64 FileSizeImpl;
FileImpl(); FileImpl();
@@ -52,8 +57,8 @@ protected:
void setSizeImpl(FileSizeImpl size); void setSizeImpl(FileSizeImpl size);
void setWriteableImpl(bool flag = true); void setWriteableImpl(bool flag = true);
void setExecutableImpl(bool flag = true); void setExecutableImpl(bool flag = true);
void copyToImpl(const std::string& path, bool failOnOverwrite = false) const; void copyToImpl(const std::string& path, int options = 0) const;
void renameToImpl(const std::string& path, bool failOnOverwrite = false); void renameToImpl(const std::string& path, int options = 0);
void linkToImpl(const std::string& path, int type) const; void linkToImpl(const std::string& path, int type) const;
void removeImpl(); void removeImpl();
bool createFileImpl(); bool createFileImpl();

View File

@@ -248,7 +248,7 @@ void FileImpl::copyToImpl(const std::string& path, int options) const
const long blockSize = st.st_blksize; const long blockSize = st.st_blksize;
int dd; int dd;
if (options == 1) { if (options & OPT_FAIL_ON_OVERWRITE_IMPL) {
dd = open(path.c_str(), O_CREAT | O_TRUNC | O_EXCL | O_WRONLY, st.st_mode & S_IRWXU); dd = open(path.c_str(), O_CREAT | O_TRUNC | O_EXCL | O_WRONLY, st.st_mode & S_IRWXU);
} else { } else {
dd = open(path.c_str(), O_CREAT | O_TRUNC | O_WRONLY, st.st_mode & S_IRWXU); dd = open(path.c_str(), O_CREAT | O_TRUNC | O_WRONLY, st.st_mode & S_IRWXU);
@@ -288,7 +288,7 @@ void FileImpl::renameToImpl(const std::string& path, int options)
struct stat st; struct stat st;
if (stat(path.c_str(), &st) == 0 && options == 1) if (stat(path.c_str(), &st) == 0 && (options &OPT_FAIL_ON_OVERWRITE_IMPL))
throw FileExistsException(path, EEXIST); throw FileExistsException(path, EEXIST);
if (rename(_path.c_str(), path.c_str()) != 0) if (rename(_path.c_str(), path.c_str()) != 0)

View File

@@ -292,7 +292,7 @@ void FileImpl::copyToImpl(const std::string& path, int options) const
{ {
poco_assert (!_path.empty()); poco_assert (!_path.empty());
if (CopyFileA(_path.c_str(), path.c_str(), options == 1) == 0) if (CopyFileA(_path.c_str(), path.c_str(), (options & OPT_FAIL_ON_OVERWRITE_IMPL) != 0) == 0)
handleLastErrorImpl(_path); handleLastErrorImpl(_path);
} }
@@ -301,7 +301,7 @@ void FileImpl::renameToImpl(const std::string& path, int options)
{ {
poco_assert (!_path.empty()); poco_assert (!_path.empty());
if (options == 1) { if (options & OPT_FAIL_ON_OVERWRITE_IMPL) {
if (MoveFileExA(_path.c_str(), path.c_str(), NULL) == 0) if (MoveFileExA(_path.c_str(), path.c_str(), NULL) == 0)
handleLastErrorImpl(_path); handleLastErrorImpl(_path);
} else { } else {

View File

@@ -277,25 +277,31 @@ void FileImpl::setExecutableImpl(bool flag)
} }
void FileImpl::copyToImpl(const std::string& path, bool failOnOverwrite) const void FileImpl::copyToImpl(const std::string& path, int options) const
{ {
poco_assert (!_path.empty()); poco_assert (!_path.empty());
std::wstring upath; std::wstring upath;
convertPath(path, upath); convertPath(path, upath);
if (CopyFileW(_upath.c_str(), upath.c_str(), failOnOverwrite) == 0) if (CopyFileW(_upath.c_str(), upath.c_str(), (options & OPT_FAIL_ON_OVERWRITE_IMPL) != 0) == 0)
handleLastErrorImpl(_path); handleLastErrorImpl(_path);
} }
void FileImpl::renameToImpl(const std::string& path, bool failOnOverwrite) void FileImpl::renameToImpl(const std::string& path, int options)
{ {
poco_assert (!_path.empty()); poco_assert (!_path.empty());
std::wstring upath; std::wstring upath;
convertPath(path, upath); convertPath(path, upath);
if (MoveFileW(_upath.c_str(), upath.c_str()) == 0) if (options & OPT_FAIL_ON_OVERWRITE_IMPL) {
handleLastErrorImpl(_path); if (MoveFileW(_upath.c_str(), upath.c_str()) == 0)
handleLastErrorImpl(_path);
} else {
if (MoveFileW(_upath.c_str(), upath.c_str(), MOVEFILE_REPLACE_EXISTING) == 0)
handleLastErrorImpl(_path);
}
} }