mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-10 04:50:31 -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 <chrono>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
#include <span>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "dwarfs/types.h"
|
#include "dwarfs/types.h"
|
||||||
|
|
||||||
namespace dwarfs {
|
namespace dwarfs {
|
||||||
|
|
||||||
|
struct iolayer;
|
||||||
|
|
||||||
std::string time_with_unit(double sec);
|
std::string time_with_unit(double sec);
|
||||||
std::string size_with_unit(size_t size);
|
std::string size_with_unit(size_t size);
|
||||||
size_t parse_size_with_unit(std::string const& str);
|
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);
|
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(char const* p, size_t len);
|
||||||
size_t utf8_display_width(std::string const& str);
|
size_t utf8_display_width(std::string const& str);
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <iosfwd>
|
#include <iosfwd>
|
||||||
|
#include <span>
|
||||||
|
|
||||||
#include "dwarfs/types.h"
|
#include "dwarfs/types.h"
|
||||||
|
|
||||||
@ -35,18 +36,23 @@ namespace dwarfs {
|
|||||||
|
|
||||||
struct iolayer;
|
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, iolayer const& iol);
|
||||||
int mkdwarfs_main(int argc, sys_char** argv);
|
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, iolayer const& iol);
|
||||||
int dwarfsck_main(int argc, sys_char** argv);
|
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, iolayer const& iol);
|
||||||
int dwarfsextract_main(int argc, sys_char** argv);
|
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, iolayer const& iol);
|
||||||
int dwarfsbench_main(int argc, sys_char** argv);
|
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, iolayer const& iol);
|
||||||
int dwarfs_main(int argc, sys_char** argv);
|
int dwarfs_main(int argc, sys_char** argv);
|
||||||
|
|
||||||
|
@ -136,6 +136,31 @@ std::string sys_string_to_string(sys_string const& in) {
|
|||||||
#endif
|
#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) {
|
size_t utf8_display_width(char const* p, size_t len) {
|
||||||
char const* const e = p + len;
|
char const* const e = p + len;
|
||||||
size_t rv = 0;
|
size_t rv = 0;
|
||||||
|
@ -1389,4 +1389,8 @@ int dwarfs_main(int argc, sys_char** argv) {
|
|||||||
return dwarfs_main(argc, argv, iolayer::system_default());
|
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
|
} // namespace dwarfs
|
||||||
|
@ -141,4 +141,8 @@ int dwarfsbench_main(int argc, sys_char** argv) {
|
|||||||
return dwarfsbench_main(argc, argv, iolayer::system_default());
|
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
|
} // namespace dwarfs
|
||||||
|
@ -208,4 +208,8 @@ int dwarfsck_main(int argc, sys_char** argv) {
|
|||||||
return dwarfsck_main(argc, argv, iolayer::system_default());
|
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
|
} // namespace dwarfs
|
||||||
|
@ -201,4 +201,8 @@ int dwarfsextract_main(int argc, sys_char** argv) {
|
|||||||
return dwarfsextract_main(argc, argv, iolayer::system_default());
|
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
|
} // namespace dwarfs
|
||||||
|
@ -1289,4 +1289,8 @@ int mkdwarfs_main(int argc, sys_char** argv) {
|
|||||||
return mkdwarfs_main(argc, argv, iolayer::system_default());
|
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
|
} // namespace dwarfs
|
||||||
|
Loading…
x
Reference in New Issue
Block a user