fs/FileSystem: RemoveFile() throws exception on error
This commit is contained in:
parent
14d3da0e18
commit
ea0e6d9824
@ -321,8 +321,15 @@ spl_delete(const char *name_utf8)
|
|||||||
const auto path_fs = spl_map_to_fs(name_utf8);
|
const auto path_fs = spl_map_to_fs(name_utf8);
|
||||||
assert(!path_fs.IsNull());
|
assert(!path_fs.IsNull());
|
||||||
|
|
||||||
if (!RemoveFile(path_fs))
|
try {
|
||||||
ThrowPlaylistErrno();
|
RemoveFile(path_fs);
|
||||||
|
} catch (const std::system_error &e) {
|
||||||
|
if (IsFileNotFound(e))
|
||||||
|
throw PlaylistError(PlaylistResult::NO_SUCH_LIST,
|
||||||
|
"No such playlist");
|
||||||
|
else
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
idle_add(IDLE_STORED_PLAYLIST);
|
idle_add(IDLE_STORED_PLAYLIST);
|
||||||
}
|
}
|
||||||
|
@ -426,7 +426,7 @@ ServerSocket::AddPath(AllocatedPath &&path, Error &error)
|
|||||||
#ifdef HAVE_UN
|
#ifdef HAVE_UN
|
||||||
(void)error;
|
(void)error;
|
||||||
|
|
||||||
RemoveFile(path);
|
unlink(path.c_str());
|
||||||
|
|
||||||
AllocatedSocketAddress address;
|
AllocatedSocketAddress address;
|
||||||
address.SetLocal(path.c_str());
|
address.SetLocal(path.c_str());
|
||||||
|
@ -66,3 +66,15 @@ TruncateFile(Path path)
|
|||||||
close(fd);
|
close(fd);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
RemoveFile(Path path)
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
if (!DeleteFile(path.c_str()))
|
||||||
|
throw FormatLastError("Failed to delete %s", path.c_str());
|
||||||
|
#else
|
||||||
|
if (unlink(path.c_str()) < 0)
|
||||||
|
throw FormatErrno("Failed to delete %s", path.c_str());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -100,17 +100,11 @@ void
|
|||||||
TruncateFile(Path path);
|
TruncateFile(Path path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper for unlink() that uses #Path names.
|
* Wrapper for unlink() that uses #Path names. Throws
|
||||||
|
* std::system_error on error.
|
||||||
*/
|
*/
|
||||||
static inline bool
|
void
|
||||||
RemoveFile(Path file)
|
RemoveFile(Path path);
|
||||||
{
|
|
||||||
#ifdef WIN32
|
|
||||||
return _tunlink(file.c_str()) == 0;
|
|
||||||
#else
|
|
||||||
return unlink(file.c_str()) == 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper for readlink() that uses #Path names.
|
* Wrapper for readlink() that uses #Path names.
|
||||||
|
@ -76,7 +76,11 @@ FileOutputStream::Cancel()
|
|||||||
assert(IsDefined());
|
assert(IsDefined());
|
||||||
|
|
||||||
Close();
|
Close();
|
||||||
RemoveFile(GetPath());
|
|
||||||
|
try {
|
||||||
|
RemoveFile(GetPath());
|
||||||
|
} catch (std::runtime_error) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@ -153,7 +157,10 @@ FileOutputStream::Commit()
|
|||||||
|
|
||||||
#if HAVE_LINKAT
|
#if HAVE_LINKAT
|
||||||
if (is_tmpfile) {
|
if (is_tmpfile) {
|
||||||
RemoveFile(GetPath());
|
try {
|
||||||
|
RemoveFile(GetPath());
|
||||||
|
} catch (std::runtime_error) {
|
||||||
|
}
|
||||||
|
|
||||||
/* hard-link the temporary file to the final path */
|
/* hard-link the temporary file to the final path */
|
||||||
char fd_path[64];
|
char fd_path[64];
|
||||||
@ -186,7 +193,10 @@ FileOutputStream::Cancel()
|
|||||||
#ifdef HAVE_LINKAT
|
#ifdef HAVE_LINKAT
|
||||||
if (!is_tmpfile)
|
if (!is_tmpfile)
|
||||||
#endif
|
#endif
|
||||||
RemoveFile(GetPath());
|
try {
|
||||||
|
RemoveFile(GetPath());
|
||||||
|
} catch (std::runtime_error) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -87,10 +87,10 @@ FifoOutput::Delete()
|
|||||||
FormatDebug(fifo_output_domain,
|
FormatDebug(fifo_output_domain,
|
||||||
"Removing FIFO \"%s\"", path_utf8.c_str());
|
"Removing FIFO \"%s\"", path_utf8.c_str());
|
||||||
|
|
||||||
if (!RemoveFile(path)) {
|
try {
|
||||||
FormatErrno(fifo_output_domain,
|
RemoveFile(path);
|
||||||
"Could not remove FIFO \"%s\"",
|
} catch (const std::runtime_error &e) {
|
||||||
path_utf8.c_str());
|
LogError(e, "Could not remove FIFO");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,10 @@
|
|||||||
#include "system/FatalError.hxx"
|
#include "system/FatalError.hxx"
|
||||||
#include "fs/AllocatedPath.hxx"
|
#include "fs/AllocatedPath.hxx"
|
||||||
#include "fs/FileSystem.hxx"
|
#include "fs/FileSystem.hxx"
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
#include "PidFile.hxx"
|
#include "PidFile.hxx"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@ -247,7 +250,7 @@ void
|
|||||||
daemonize_finish(void)
|
daemonize_finish(void)
|
||||||
{
|
{
|
||||||
if (!pidfile.IsNull()) {
|
if (!pidfile.IsNull()) {
|
||||||
RemoveFile(pidfile);
|
unlink(pidfile.c_str());
|
||||||
pidfile = AllocatedPath::Null();
|
pidfile = AllocatedPath::Null();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public:
|
|||||||
assert(!path.IsNull());
|
assert(!path.IsNull());
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
RemoveFile(path);
|
unlink(path.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Write(pid_t pid) {
|
void Write(pid_t pid) {
|
||||||
|
Loading…
Reference in New Issue
Block a user