fs/AllocatedPath: make the nullptr_t constructor public

This commit is contained in:
Max Kellermann 2018-01-17 12:17:41 +01:00
parent c4f7740b80
commit bbc5212436
24 changed files with 58 additions and 62 deletions

View File

@ -67,7 +67,7 @@ struct LocatedUri {
AllocatedPath path;
LocatedUri(Type _type, const char *_uri,
AllocatedPath &&_path=AllocatedPath::Null())
AllocatedPath &&_path=nullptr)
:type(_type), canonical_uri(_uri), path(std::move(_path)) {}
};

View File

@ -46,7 +46,7 @@ static constexpr Domain log_domain("log");
#ifndef ANDROID
static int out_fd = -1;
static AllocatedPath out_path = AllocatedPath::Null();
static AllocatedPath out_path = nullptr;
static void redirect_logs(int fd)
{
@ -169,7 +169,7 @@ log_deinit(void)
{
#ifndef ANDROID
close_log_files();
out_path = AllocatedPath::Null();
out_path = nullptr;
#endif
}

View File

@ -39,7 +39,7 @@
* The absolute path of the playlist directory encoded in the
* filesystem character set.
*/
static AllocatedPath playlist_dir_fs = AllocatedPath::Null();
static AllocatedPath playlist_dir_fs = nullptr;
static void
mapper_set_playlist_dir(AllocatedPath &&path)
@ -72,15 +72,15 @@ map_uri_fs(const char *uri) noexcept
assert(*uri != '/');
if (instance->storage == nullptr)
return AllocatedPath::Null();
return nullptr;
const auto music_dir_fs = instance->storage->MapFS("");
if (music_dir_fs.IsNull())
return AllocatedPath::Null();
return nullptr;
const auto uri_fs = AllocatedPath::FromUTF8(uri);
if (uri_fs.IsNull())
return AllocatedPath::Null();
return nullptr;
return AllocatedPath::Build(music_dir_fs, uri_fs);
}
@ -118,7 +118,7 @@ AllocatedPath
map_spl_utf8_to_fs(const char *name) noexcept
{
if (playlist_dir_fs.IsNull())
return AllocatedPath::Null();
return nullptr;
std::string filename_utf8 = name;
filename_utf8.append(PLAYLIST_FILE_SUFFIX);
@ -126,7 +126,7 @@ map_spl_utf8_to_fs(const char *name) noexcept
const auto filename_fs =
AllocatedPath::FromUTF8(filename_utf8.c_str());
if (filename_fs.IsNull())
return AllocatedPath::Null();
return nullptr;
return AllocatedPath::Build(playlist_dir_fs, filename_fs);
}

View File

@ -36,7 +36,7 @@ Context::GetCacheDir(JNIEnv *env) const
jobject file = env->CallObjectMethod(Get(), method);
if (file == nullptr) {
env->ExceptionClear();
return AllocatedPath::Null();
return nullptr;
}
return Java::File::ToAbsolutePath(env, file);

View File

@ -60,7 +60,7 @@ Environment::getExternalStorageDirectory()
env->CallStaticObjectMethod(cls,
getExternalStorageDirectory_method);
if (file == nullptr)
return AllocatedPath::Null();
return nullptr;
return Java::File::ToAbsolutePath(env, file);
}
@ -70,7 +70,7 @@ Environment::getExternalStoragePublicDirectory(const char *type)
{
if (getExternalStoragePublicDirectory_method == nullptr)
/* needs API level 8 */
return AllocatedPath::Null();
return nullptr;
JNIEnv *env = Java::GetEnv();
@ -79,7 +79,7 @@ Environment::getExternalStoragePublicDirectory(const char *type)
Environment::getExternalStoragePublicDirectory_method,
type2.Get());
if (file == nullptr)
return AllocatedPath::Null();
return nullptr;
return Java::File::ToAbsolutePath(env, file);
}

View File

@ -118,7 +118,7 @@ ConfigBlock::GetPath(const char *name, const char *default_value) const
s = bp->value.c_str();
} else {
if (default_value == nullptr)
return AllocatedPath::Null();
return nullptr;
s = default_value;
}

View File

@ -125,7 +125,7 @@ config_get_path(ConfigOption option)
{
const auto *param = config_get_param(option);
if (param == nullptr)
return AllocatedPath::Null();
return nullptr;
return param->GetPath();
}

View File

@ -71,7 +71,7 @@ config_get_string(enum ConfigOption option,
/**
* Returns an optional configuration variable which contains an
* absolute path. If there is a tilde prefix, it is expanded.
* Returns AllocatedPath::Null() if the value is not present.
* Returns nullptr if the value is not present.
*
* Throws #std::runtime_error on error.
*/

View File

@ -86,7 +86,7 @@ ParsePath(const char *path)
if (*path == '\0')
return GetConfiguredHome();
AllocatedPath home = AllocatedPath::Null();
AllocatedPath home = nullptr;
if (*path == '/') {
home = GetConfiguredHome();
@ -107,11 +107,11 @@ ParsePath(const char *path)
}
if (home.IsNull())
return AllocatedPath::Null();
return nullptr;
AllocatedPath path2 = AllocatedPath::FromUTF8Throw(path);
if (path2.IsNull())
return AllocatedPath::Null();
return nullptr;
return AllocatedPath::Build(home, path2);
} else if (!PathTraitsUTF8::IsAbsolute(path)) {

View File

@ -79,7 +79,7 @@ inline SimpleDatabase::SimpleDatabase(AllocatedPath &&_path,
#ifdef ENABLE_ZLIB
compress(_compress),
#endif
cache_path(AllocatedPath::Null()),
cache_path(nullptr),
prefixed_light_song(nullptr) {
}

View File

@ -135,7 +135,7 @@ AllocatedPath
WatchDirectory::GetUriFS() const noexcept
{
if (parent == nullptr)
return AllocatedPath::Null();
return nullptr;
const auto uri = parent->GetUriFS();
if (uri.IsNull())

View File

@ -499,7 +499,7 @@ try {
const char *const uri_utf8 = song.GetRealURI();
Path path_fs = nullptr;
AllocatedPath path_buffer = AllocatedPath::Null();
AllocatedPath path_buffer = nullptr;
if (PathTraitsUTF8::IsAbsolute(uri_utf8)) {
path_buffer = AllocatedPath::FromUTF8Throw(uri_utf8);
path_fs = path_buffer;

View File

@ -71,7 +71,7 @@ public:
:SocketMonitor(_loop),
parent(_parent), serial(_serial),
#ifdef HAVE_UN
path(AllocatedPath::Null()),
path(nullptr),
#endif
address(std::forward<A>(_address))
{

View File

@ -43,7 +43,6 @@ class AllocatedPath {
string value;
AllocatedPath(std::nullptr_t):value() {}
explicit AllocatedPath(const_pointer_type _value):value(_value) {}
AllocatedPath(const_pointer_type _begin, const_pointer_type _end)
@ -56,6 +55,14 @@ class AllocatedPath {
return AllocatedPath(PathTraitsFS::Build(a, a_size, b, b_size));
}
public:
/**
* Construct a "nulled" instance. Its IsNull() method will
* return true. Such an object must not be used.
*
* @see IsNull()
*/
AllocatedPath(std::nullptr_t):value() {}
/**
* Copy an #AllocatedPath object.
*/
@ -70,17 +77,6 @@ public:
~AllocatedPath();
/**
* Return a "nulled" instance. Its IsNull() method will
* return true. Such an object must not be used.
*
* @see IsNull()
*/
gcc_const
static AllocatedPath Null() noexcept {
return AllocatedPath(nullptr);
}
gcc_pure
operator Path() const noexcept {
return Path::FromFS(c_str());

View File

@ -45,15 +45,15 @@ ReadLink(Path path)
#ifdef _WIN32
(void)path;
errno = EINVAL;
return AllocatedPath::Null();
return nullptr;
#else
char buffer[MPD_PATH_MAX];
ssize_t size = readlink(path.c_str(), buffer, MPD_PATH_MAX);
if (size < 0)
return AllocatedPath::Null();
return nullptr;
if (size_t(size) >= MPD_PATH_MAX) {
errno = ENOMEM;
return AllocatedPath::Null();
return nullptr;
}
buffer[size] = '\0';
return AllocatedPath::FromFS(buffer);

View File

@ -109,7 +109,7 @@ SafePathFromFS(PathTraitsFS::const_pointer_type dir)
{
if (IsValidPathString(dir) && IsValidDir(dir))
return AllocatedPath::FromFS(dir);
return AllocatedPath::Null();
return nullptr;
}
#endif
@ -120,7 +120,7 @@ static AllocatedPath GetStandardDir(int folder_id)
auto ret = SHGetFolderPath(nullptr, folder_id | CSIDL_FLAG_DONT_VERIFY,
nullptr, SHGFP_TYPE_CURRENT, dir.data());
if (FAILED(ret))
return AllocatedPath::Null();
return nullptr;
return SafePathFromFS(dir.data());
}
#endif
@ -185,7 +185,7 @@ ParseConfigLine(char *line, const char *dir_name, AllocatedPath &result_dir)
// build the result path
const char *path = line;
auto result = AllocatedPath::Null();
AllocatedPath result = nullptr;
if (home_relative) {
auto home = GetHomeDir();
if (home.IsNull())
@ -205,7 +205,7 @@ ParseConfigLine(char *line, const char *dir_name, AllocatedPath &result_dir)
static AllocatedPath
GetUserDir(const char *name) noexcept
try {
auto result = AllocatedPath::Null();
AllocatedPath result = nullptr;
auto config_dir = GetUserConfigDir();
if (config_dir.IsNull())
return result;
@ -218,7 +218,7 @@ try {
return result;
return result;
} catch (const std::exception &e) {
return AllocatedPath::Null();
return nullptr;
}
#endif
@ -242,9 +242,9 @@ GetUserConfigDir() noexcept
return fallback;
}
return AllocatedPath::Null();
return nullptr;
#else
return AllocatedPath::Null();
return nullptr;
#endif
}
@ -258,7 +258,7 @@ GetUserMusicDir() noexcept
#elif defined(ANDROID)
return Environment::getExternalStoragePublicDirectory("Music");
#else
return AllocatedPath::Null();
return nullptr;
#endif
}
@ -279,11 +279,11 @@ GetUserCacheDir() noexcept
return fallback;
}
return AllocatedPath::Null();
return nullptr;
#elif defined(ANDROID)
return context->GetCacheDir(Java::GetEnv());
#else
return AllocatedPath::Null();
return nullptr;
#endif
}
@ -303,11 +303,11 @@ GetAppBaseDir() noexcept
// Check for error
if (ret == 0)
return AllocatedPath::Null();
return nullptr;
// Check for truncation
if (ret == app.size() && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
return AllocatedPath::Null();
return nullptr;
auto app_path = AllocatedPath::FromFS(app.data());
return app_path.GetDirectoryName().GetDirectoryName();
@ -326,7 +326,7 @@ GetHomeDir() noexcept
if (pw.ReadByUid(getuid()))
return SafePathFromFS(pw->pw_dir);
#endif
return AllocatedPath::Null();
return nullptr;
}
AllocatedPath
@ -340,7 +340,7 @@ GetHomeDir(const char *user_name) noexcept
if (pw.ReadByName(user_name))
return SafePathFromFS(pw->pw_dir);
#endif
return AllocatedPath::Null();
return nullptr;
}
#endif

View File

@ -175,7 +175,7 @@ cdio_detect_device(void)
char **devices = cdio_get_devices_with_cap(nullptr, CDIO_FS_AUDIO,
false);
if (devices == nullptr)
return AllocatedPath::Null();
return nullptr;
AllocatedPath path = AllocatedPath::FromFS(devices[0]);
cdio_free_device_list(devices);

View File

@ -57,7 +57,7 @@ Java::File::ToAbsolutePath(JNIEnv *env, jobject _file)
const jstring path = getAbsolutePath(env, file);
if (path == nullptr) {
env->ExceptionClear();
return AllocatedPath::Null();
return nullptr;
}
Java::String path2(env, path);

View File

@ -50,7 +50,7 @@ class RecorderOutput final : AudioOutput {
/**
* The destination file name.
*/
AllocatedPath path = AllocatedPath::Null();
AllocatedPath path = nullptr;
/**
* A string that will be used with FormatTag() to build the
@ -298,7 +298,7 @@ RecorderOutput::SendTag(const Tag &tag)
AtScopeExit(p) { free(p); };
AllocatedPath new_path = AllocatedPath::Null();
AllocatedPath new_path = nullptr;
try {
new_path = ParsePath(p);

View File

@ -316,7 +316,7 @@ CompositeStorage::MapFS(const char *uri) const noexcept
auto f = FindStorage(uri);
if (f.directory->storage == nullptr)
return AllocatedPath::Null();
return nullptr;
return f.directory->storage->MapFS(f.uri);
}

View File

@ -25,7 +25,7 @@
AllocatedPath
Storage::MapFS(gcc_unused const char *uri_utf8) const noexcept
{
return AllocatedPath::Null();
return nullptr;
}
AllocatedPath

View File

@ -66,7 +66,7 @@ public:
/**
* Map the given relative URI to a local file path. Returns
* AllocatedPath::Null() on error or if this storage does not
* nullptr on error or if this storage does not
* support local files.
*/
gcc_pure

View File

@ -124,7 +124,7 @@ LocalStorage::MapFS(const char *uri_utf8) const noexcept
try {
return MapFSOrThrow(uri_utf8);
} catch (...) {
return AllocatedPath::Null();
return nullptr;
}
}

View File

@ -54,7 +54,7 @@ static uid_t user_uid = (uid_t)-1;
static gid_t user_gid = (gid_t)-1;
/** the absolute path of the pidfile */
static AllocatedPath pidfile = AllocatedPath::Null();
static AllocatedPath pidfile = nullptr;
/* whether "group" conf. option was given */
static bool had_group = false;
@ -251,7 +251,7 @@ daemonize_finish(void)
{
if (!pidfile.IsNull()) {
unlink(pidfile.c_str());
pidfile = AllocatedPath::Null();
pidfile = nullptr;
}
free(user_name);