fs/FileSystem: RenameFile() throws exception on error
This commit is contained in:
parent
dee6e498d9
commit
6caf53d1c2
@ -122,24 +122,6 @@ spl_map_to_fs(const char *name_utf8)
|
|||||||
return path_fs;
|
return path_fs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Throw an exception for the current errno.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
ThrowPlaylistErrno()
|
|
||||||
{
|
|
||||||
switch (errno) {
|
|
||||||
case ENOENT:
|
|
||||||
throw PlaylistError(PlaylistResult::NO_SUCH_LIST,
|
|
||||||
"No such playlist");
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw std::system_error(std::error_code(errno,
|
|
||||||
std::system_category()),
|
|
||||||
"Error");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
LoadPlaylistFileInfo(PlaylistInfo &info,
|
LoadPlaylistFileInfo(PlaylistInfo &info,
|
||||||
const Path parent_path_fs,
|
const Path parent_path_fs,
|
||||||
@ -392,8 +374,15 @@ spl_rename_internal(Path from_path_fs, Path to_path_fs)
|
|||||||
throw PlaylistError(PlaylistResult::LIST_EXISTS,
|
throw PlaylistError(PlaylistResult::LIST_EXISTS,
|
||||||
"Playlist exists already");
|
"Playlist exists already");
|
||||||
|
|
||||||
if (!RenameFile(from_path_fs, to_path_fs))
|
try {
|
||||||
ThrowPlaylistErrno();
|
RenameFile(from_path_fs, to_path_fs);
|
||||||
|
} catch (const std::system_error &e) {
|
||||||
|
if (IsPathNotFound(e))
|
||||||
|
throw PlaylistError(PlaylistResult::NO_SUCH_LIST,
|
||||||
|
"No such playlist");
|
||||||
|
else
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
idle_add(IDLE_STORED_PLAYLIST);
|
idle_add(IDLE_STORED_PLAYLIST);
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,19 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
RenameFile(Path oldpath, Path newpath)
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
if (!MoveFileEx(oldpath.c_str(), newpath.c_str(),
|
||||||
|
MOVEFILE_REPLACE_EXISTING))
|
||||||
|
throw MakeLastError("Failed to rename file");
|
||||||
|
#else
|
||||||
|
if (rename(oldpath.c_str(), newpath.c_str()) < 0)
|
||||||
|
throw MakeErrno("Failed to rename file");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
AllocatedPath
|
AllocatedPath
|
||||||
ReadLink(Path path)
|
ReadLink(Path path)
|
||||||
{
|
{
|
||||||
|
@ -63,18 +63,13 @@ OpenFile(Path file, int flags, int mode)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Wrapper for rename() that uses #Path names.
|
* Wrapper for rename() that uses #Path names.
|
||||||
|
*
|
||||||
|
* Throws std::system_error on error.
|
||||||
*/
|
*/
|
||||||
static inline bool
|
void
|
||||||
RenameFile(Path oldpath, Path newpath)
|
RenameFile(Path oldpath, Path newpath);
|
||||||
{
|
|
||||||
#ifdef WIN32
|
|
||||||
return _trename(oldpath.c_str(), newpath.c_str()) == 0;
|
|
||||||
#else
|
|
||||||
return rename(oldpath.c_str(), newpath.c_str()) == 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user