Use wmain() on Windows

This commit is contained in:
Marcus Holland-Moritz 2023-06-26 22:47:20 +02:00
parent 83ab473add
commit 1dcab5996e
10 changed files with 35 additions and 17 deletions

View File

@ -27,4 +27,12 @@ namespace dwarfs {
using file_off_t = int64_t;
#ifdef _WIN32
using sys_char = wchar_t;
using sys_string = std::wstring;
#else
using sys_char = char;
using sys_string = std::string;
#endif
} // namespace dwarfs

View File

@ -21,12 +21,20 @@
#pragma once
#include "dwarfs/types.h"
#ifdef _WIN32
#define SYS_MAIN wmain
#else
#define SYS_MAIN main
#endif
namespace dwarfs {
int mkdwarfs_main(int argc, char** argv);
int dwarfsck_main(int argc, char** argv);
int dwarfsextract_main(int argc, char** argv);
int dwarfsbench_main(int argc, char** argv);
int mkdwarfs_main(int argc, sys_char** argv);
int dwarfsck_main(int argc, sys_char** argv);
int dwarfsextract_main(int argc, sys_char** argv);
int dwarfsbench_main(int argc, sys_char** argv);
int dwarfs_main(int argc, char** argv);
} // namespace dwarfs

View File

@ -22,7 +22,7 @@
#include "dwarfs/error.h"
#include "dwarfs_tool_main.h"
int main(int argc, char** argv) {
int SYS_MAIN(int argc, dwarfs::sys_char** argv) {
return dwarfs::safe_main(
[&] { return dwarfs::dwarfsbench_main(argc, argv); });
}

View File

@ -41,7 +41,7 @@ namespace po = boost::program_options;
namespace dwarfs {
int dwarfsbench_main(int argc, char** argv) {
int dwarfsbench_main(int argc, sys_char** argv) {
std::string filesystem, cache_size_str, lock_mode_str, decompress_ratio_str,
log_level;
size_t num_workers;

View File

@ -22,6 +22,6 @@
#include "dwarfs/error.h"
#include "dwarfs_tool_main.h"
int main(int argc, char** argv) {
int SYS_MAIN(int argc, dwarfs::sys_char** argv) {
return dwarfs::safe_main([&] { return dwarfs::dwarfsck_main(argc, argv); });
}

View File

@ -43,7 +43,7 @@ namespace dwarfs {
namespace po = boost::program_options;
int dwarfsck_main(int argc, char** argv) {
int dwarfsck_main(int argc, sys_char** argv) {
const size_t num_cpu = std::max(folly::hardware_concurrency(), 1u);
std::string log_level, input, export_metadata, image_offset;
@ -93,9 +93,11 @@ int dwarfsck_main(int argc, char** argv) {
po::variables_map vm;
try {
po::store(
po::command_line_parser(argc, argv).options(opts).positional(pos).run(),
vm);
po::store(po::basic_command_line_parser<sys_char>(argc, argv)
.options(opts)
.positional(pos)
.run(),
vm);
po::notify(vm);
} catch (po::error const& e) {
std::cerr << "error: " << e.what() << std::endl;

View File

@ -22,7 +22,7 @@
#include "dwarfs/error.h"
#include "dwarfs_tool_main.h"
int main(int argc, char** argv) {
int SYS_MAIN(int argc, dwarfs::sys_char** argv) {
return dwarfs::safe_main(
[&] { return dwarfs::dwarfsextract_main(argc, argv); });
}

View File

@ -40,7 +40,7 @@ namespace po = boost::program_options;
namespace dwarfs {
int dwarfsextract_main(int argc, char** argv) {
int dwarfsextract_main(int argc, sys_char** argv) {
std::string filesystem, output, format, cache_size_str, log_level,
image_offset;
size_t num_workers;

View File

@ -22,6 +22,6 @@
#include "dwarfs/error.h"
#include "dwarfs_tool_main.h"
int main(int argc, char** argv) {
int SYS_MAIN(int argc, dwarfs::sys_char** argv) {
return dwarfs::safe_main([&] { return dwarfs::mkdwarfs_main(argc, argv); });
}

View File

@ -372,7 +372,7 @@ class script_options : public options_interface {
} // namespace
int mkdwarfs_main(int argc, char** argv) {
int mkdwarfs_main(int argc, sys_char** argv) {
using namespace folly::gen;
const size_t num_cpu = std::max(folly::hardware_concurrency(), 1u);
@ -559,8 +559,8 @@ int mkdwarfs_main(int argc, char** argv) {
po::collect_unrecognized(parsed.options, po::include_positional);
if (!unrecognized.empty()) {
std::cerr << "error: unrecognized argument(s) '"
<< boost::join(unrecognized, " ") << "'" << std::endl;
std::wcerr << "error: unrecognized argument(s) '"
<< boost::join(unrecognized, " ") << "'" << std::endl;
return 1;
}
} catch (po::error const& e) {