You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.1 KiB
C++
46 lines
1.1 KiB
C++
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
// Copyright The Music Player Daemon Project
|
|
|
|
#include "CheckFile.hxx"
|
|
#include "Log.hxx"
|
|
#include "lib/fmt/PathFormatter.hxx"
|
|
#include "config/Domain.hxx"
|
|
#include "fs/FileInfo.hxx"
|
|
#include "fs/Path.hxx"
|
|
#include "fs/AllocatedPath.hxx"
|
|
#include "fs/DirectoryReader.hxx"
|
|
#include "system/Error.hxx"
|
|
|
|
void
|
|
CheckDirectoryReadable(Path path_fs)
|
|
try {
|
|
const FileInfo fi(path_fs);
|
|
if (!fi.IsDirectory()) {
|
|
FmtError(config_domain, "Not a directory: {}", path_fs);
|
|
return;
|
|
}
|
|
|
|
#ifndef _WIN32
|
|
try {
|
|
const auto x = path_fs / Path::FromFS(PathTraitsFS::CURRENT_DIRECTORY);
|
|
const FileInfo fi2(x);
|
|
} catch (const std::system_error &e) {
|
|
if (IsAccessDenied(e))
|
|
FmtError(config_domain,
|
|
"No permission to traverse (\"execute\") directory: {}",
|
|
path_fs);
|
|
}
|
|
#endif
|
|
|
|
try {
|
|
const DirectoryReader reader(path_fs);
|
|
} catch (const std::system_error &e) {
|
|
if (IsAccessDenied(e))
|
|
FmtError(config_domain,
|
|
"No permission to read directory: {}",
|
|
path_fs);
|
|
}
|
|
} catch (...) {
|
|
LogError(std::current_exception());
|
|
}
|