mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-09 04:19:10 -04:00
chore: add another *_main overload that always accepts utf8 args
This is mostly for convenient use from within the test suite.
This commit is contained in:
parent
67a4de0d52
commit
676e46dd60
@ -24,12 +24,15 @@
|
||||
#include <chrono>
|
||||
#include <cstddef>
|
||||
#include <filesystem>
|
||||
#include <span>
|
||||
#include <string>
|
||||
|
||||
#include "dwarfs/types.h"
|
||||
|
||||
namespace dwarfs {
|
||||
|
||||
struct iolayer;
|
||||
|
||||
std::string time_with_unit(double sec);
|
||||
std::string size_with_unit(size_t size);
|
||||
size_t parse_size_with_unit(std::string const& str);
|
||||
@ -44,6 +47,10 @@ inline std::string u8string_to_string(std::u8string const& in) {
|
||||
}
|
||||
|
||||
std::string sys_string_to_string(sys_string const& in);
|
||||
sys_string string_to_sys_string(std::string const& in);
|
||||
|
||||
int call_sys_main_iolayer(std::span<char const*> args, iolayer const& iol,
|
||||
int (*main)(int, sys_char**, iolayer const&));
|
||||
|
||||
size_t utf8_display_width(char const* p, size_t len);
|
||||
size_t utf8_display_width(std::string const& str);
|
||||
|
@ -22,6 +22,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <iosfwd>
|
||||
#include <span>
|
||||
|
||||
#include "dwarfs/types.h"
|
||||
|
||||
@ -35,18 +36,23 @@ namespace dwarfs {
|
||||
|
||||
struct iolayer;
|
||||
|
||||
int mkdwarfs_main(std::span<char const*> args, iolayer const& iol);
|
||||
int mkdwarfs_main(int argc, sys_char** argv, iolayer const& iol);
|
||||
int mkdwarfs_main(int argc, sys_char** argv);
|
||||
|
||||
int dwarfsck_main(std::span<char const*> args, iolayer const& iol);
|
||||
int dwarfsck_main(int argc, sys_char** argv, iolayer const& iol);
|
||||
int dwarfsck_main(int argc, sys_char** argv);
|
||||
|
||||
int dwarfsextract_main(std::span<char const*> args, iolayer const& iol);
|
||||
int dwarfsextract_main(int argc, sys_char** argv, iolayer const& iol);
|
||||
int dwarfsextract_main(int argc, sys_char** argv);
|
||||
|
||||
int dwarfsbench_main(std::span<char const*> args, iolayer const& iol);
|
||||
int dwarfsbench_main(int argc, sys_char** argv, iolayer const& iol);
|
||||
int dwarfsbench_main(int argc, sys_char** argv);
|
||||
|
||||
int dwarfs_main(std::span<char const*> args, iolayer const& iol);
|
||||
int dwarfs_main(int argc, sys_char** argv, iolayer const& iol);
|
||||
int dwarfs_main(int argc, sys_char** argv);
|
||||
|
||||
|
@ -136,6 +136,31 @@ std::string sys_string_to_string(sys_string const& in) {
|
||||
#endif
|
||||
}
|
||||
|
||||
sys_string string_to_sys_string(std::string const& in) {
|
||||
#ifdef _WIN32
|
||||
auto tmp = utf8::utf8to16(in);
|
||||
sys_string rv(tmp.size(), 0);
|
||||
std::transform(tmp.begin(), tmp.end(), rv.begin(),
|
||||
[](char16_t c) { return static_cast<sys_char>(c); });
|
||||
return rv;
|
||||
#else
|
||||
return in;
|
||||
#endif
|
||||
}
|
||||
|
||||
int call_sys_main_iolayer(std::span<char const*> args, iolayer const& iol,
|
||||
int (*main)(int, sys_char**, iolayer const&)) {
|
||||
std::vector<sys_string> argv;
|
||||
std::vector<sys_char*> argv_ptrs;
|
||||
argv.reserve(args.size());
|
||||
argv_ptrs.reserve(args.size());
|
||||
for (auto const& arg : args) {
|
||||
argv.emplace_back(string_to_sys_string(arg));
|
||||
argv_ptrs.emplace_back(argv.back().data());
|
||||
}
|
||||
return main(argv_ptrs.size(), argv_ptrs.data(), iol);
|
||||
}
|
||||
|
||||
size_t utf8_display_width(char const* p, size_t len) {
|
||||
char const* const e = p + len;
|
||||
size_t rv = 0;
|
||||
|
@ -1389,4 +1389,8 @@ int dwarfs_main(int argc, sys_char** argv) {
|
||||
return dwarfs_main(argc, argv, iolayer::system_default());
|
||||
}
|
||||
|
||||
int dwarfs_main(std::span<char const*> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfs_main);
|
||||
}
|
||||
|
||||
} // namespace dwarfs
|
||||
|
@ -141,4 +141,8 @@ int dwarfsbench_main(int argc, sys_char** argv) {
|
||||
return dwarfsbench_main(argc, argv, iolayer::system_default());
|
||||
}
|
||||
|
||||
int dwarfsbench_main(std::span<char const*> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfsbench_main);
|
||||
}
|
||||
|
||||
} // namespace dwarfs
|
||||
|
@ -208,4 +208,8 @@ int dwarfsck_main(int argc, sys_char** argv) {
|
||||
return dwarfsck_main(argc, argv, iolayer::system_default());
|
||||
}
|
||||
|
||||
int dwarfsck_main(std::span<char const*> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfsck_main);
|
||||
}
|
||||
|
||||
} // namespace dwarfs
|
||||
|
@ -201,4 +201,8 @@ int dwarfsextract_main(int argc, sys_char** argv) {
|
||||
return dwarfsextract_main(argc, argv, iolayer::system_default());
|
||||
}
|
||||
|
||||
int dwarfsextract_main(std::span<char const*> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfsextract_main);
|
||||
}
|
||||
|
||||
} // namespace dwarfs
|
||||
|
@ -1289,4 +1289,8 @@ int mkdwarfs_main(int argc, sys_char** argv) {
|
||||
return mkdwarfs_main(argc, argv, iolayer::system_default());
|
||||
}
|
||||
|
||||
int mkdwarfs_main(std::span<char const*> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, mkdwarfs_main);
|
||||
}
|
||||
|
||||
} // namespace dwarfs
|
||||
|
Loading…
x
Reference in New Issue
Block a user