fs/NarrowPath: add class FromNarrowPath
Move code from ParseCommandLine().
This commit is contained in:
parent
61d7b436a2
commit
4d453a8313
@ -33,11 +33,11 @@
|
|||||||
#include "playlist/PlaylistRegistry.hxx"
|
#include "playlist/PlaylistRegistry.hxx"
|
||||||
#include "playlist/PlaylistPlugin.hxx"
|
#include "playlist/PlaylistPlugin.hxx"
|
||||||
#include "fs/AllocatedPath.hxx"
|
#include "fs/AllocatedPath.hxx"
|
||||||
|
#include "fs/NarrowPath.hxx"
|
||||||
#include "fs/Traits.hxx"
|
#include "fs/Traits.hxx"
|
||||||
#include "fs/FileSystem.hxx"
|
#include "fs/FileSystem.hxx"
|
||||||
#include "fs/StandardDirectory.hxx"
|
#include "fs/StandardDirectory.hxx"
|
||||||
#include "system/Error.hxx"
|
#include "system/Error.hxx"
|
||||||
#include "util/Macros.hxx"
|
|
||||||
#include "util/RuntimeError.hxx"
|
#include "util/RuntimeError.hxx"
|
||||||
#include "util/Domain.hxx"
|
#include "util/Domain.hxx"
|
||||||
#include "util/OptionDef.hxx"
|
#include "util/OptionDef.hxx"
|
||||||
@ -380,17 +380,7 @@ ParseCommandLine(int argc, char **argv, struct options &options,
|
|||||||
|
|
||||||
if (config_file != nullptr) {
|
if (config_file != nullptr) {
|
||||||
/* use specified configuration file */
|
/* use specified configuration file */
|
||||||
#ifdef _UNICODE
|
ReadConfigFile(config, FromNarrowPath(config_file));
|
||||||
wchar_t buffer[MAX_PATH];
|
|
||||||
auto result = MultiByteToWideChar(CP_ACP, 0, config_file, -1,
|
|
||||||
buffer, ARRAY_SIZE(buffer));
|
|
||||||
if (result <= 0)
|
|
||||||
throw MakeLastError("MultiByteToWideChar() failed");
|
|
||||||
|
|
||||||
ReadConfigFile(config, Path::FromFS(buffer));
|
|
||||||
#else
|
|
||||||
ReadConfigFile(config, Path::FromFS(config_file));
|
|
||||||
#endif
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
#ifdef _UNICODE
|
#ifdef _UNICODE
|
||||||
|
|
||||||
#include "lib/icu/Win32.hxx"
|
#include "lib/icu/Win32.hxx"
|
||||||
|
#include "system/Error.hxx"
|
||||||
|
#include "util/Macros.hxx"
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
@ -33,4 +35,21 @@ NarrowPath::NarrowPath(Path _path) noexcept
|
|||||||
value = Value::Empty();
|
value = Value::Empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static AllocatedPath
|
||||||
|
AcpToAllocatedPath(const char *s)
|
||||||
|
{
|
||||||
|
wchar_t buffer[MAX_PATH];
|
||||||
|
auto result = MultiByteToWideChar(CP_ACP, 0, s, -1,
|
||||||
|
buffer, ARRAY_SIZE(buffer));
|
||||||
|
if (result <= 0)
|
||||||
|
throw MakeLastError("MultiByteToWideChar() failed");
|
||||||
|
|
||||||
|
return AllocatedPath::FromFS(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
FromNarrowPath::FromNarrowPath(const char *s)
|
||||||
|
:value(AcpToAllocatedPath(s))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _UNICODE */
|
#endif /* _UNICODE */
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "Path.hxx"
|
#include "Path.hxx"
|
||||||
|
|
||||||
#ifdef _UNICODE
|
#ifdef _UNICODE
|
||||||
|
#include "AllocatedPath.hxx"
|
||||||
#include "util/AllocatedString.hxx"
|
#include "util/AllocatedString.hxx"
|
||||||
#else
|
#else
|
||||||
#include "util/StringPointer.hxx"
|
#include "util/StringPointer.hxx"
|
||||||
@ -59,4 +60,38 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A path name converted from a "narrow" string. This is used to
|
||||||
|
* import an existing narrow string to a #Path.
|
||||||
|
*/
|
||||||
|
class FromNarrowPath {
|
||||||
|
#ifdef _UNICODE
|
||||||
|
using Value = AllocatedPath;
|
||||||
|
#else
|
||||||
|
using Value = Path;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Value value{nullptr};
|
||||||
|
|
||||||
|
public:
|
||||||
|
FromNarrowPath() = default;
|
||||||
|
|
||||||
|
#ifdef _UNICODE
|
||||||
|
/**
|
||||||
|
* Throws on error.
|
||||||
|
*/
|
||||||
|
FromNarrowPath(const char *s);
|
||||||
|
#else
|
||||||
|
constexpr FromNarrowPath(const char *s) noexcept
|
||||||
|
:value(Value::FromFS(s)) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _UNICODE
|
||||||
|
constexpr
|
||||||
|
#endif
|
||||||
|
operator Path() const noexcept {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user