LibCore+ImageViewer: Add unlink() wrapper, use it

This commit is contained in:
Junior Rantila 2021-12-29 21:47:38 +01:00 committed by Andreas Kling
parent 080c3164c7
commit 9a38d1de07
3 changed files with 20 additions and 3 deletions

View file

@ -131,10 +131,10 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
if (msgbox_result == GUI::MessageBox::ExecCancel)
return;
if (unlink(widget.path().characters()) < 0) {
int saved_errno = errno;
auto unlinked_or_error = Core::System::unlink(widget.path());
if (unlinked_or_error.is_error()) {
GUI::MessageBox::show(window,
String::formatted("unlink({}) failed: {}", path, strerror(saved_errno)),
String::formatted("unlink({}) failed: {}", path, unlinked_or_error.error()),
"Delete failed",
GUI::MessageBox::Type::Error);

View file

@ -644,6 +644,22 @@ ErrorOr<void> rename(StringView old_path, StringView new_path)
#endif
}
ErrorOr<void> unlink(StringView path)
{
if (path.is_null())
return Error::from_errno(EFAULT);
#ifdef __serenity__
int rc = syscall(SC_unlink, path.characters_without_null_termination(), path.length());
HANDLE_SYSCALL_RETURN_VALUE("unlink"sv, rc, {});
#else
String path_string = path;
if (::unlink(path_string.characters()) < 0)
return Error::from_syscall("unlink"sv, -errno);
return {};
#endif
}
ErrorOr<void> utime(StringView path, Optional<struct utimbuf> maybe_buf)
{
if (path.is_null())

View file

@ -98,6 +98,7 @@ ErrorOr<pid_t> fork();
ErrorOr<int> mkstemp(Span<char> pattern);
ErrorOr<void> fchmod(int fd, mode_t mode);
ErrorOr<void> rename(StringView old_path, StringView new_path);
ErrorOr<void> unlink(StringView path);
ErrorOr<void> utime(StringView path, Optional<struct utimbuf>);
ErrorOr<struct utsname> uname();
ErrorOr<Array<int, 2>> pipe2(int flags);