From b02d37bc0ae0b7af6077637f855be8579c768c22 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Tue, 1 Feb 2022 13:37:31 -0500 Subject: Make QPDFArgParser accept const argv This makes it much more convention to use the initializeFromArgv functions since you can use string literals. --- libtests/main_from_wmain.cc | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'libtests/main_from_wmain.cc') diff --git a/libtests/main_from_wmain.cc b/libtests/main_from_wmain.cc index c3e2a716..6b8a9c05 100644 --- a/libtests/main_from_wmain.cc +++ b/libtests/main_from_wmain.cc @@ -4,17 +4,37 @@ #ifndef QPDF_NO_WCHAR_T void wmain_test() { + // writable args and function args auto realmain = [](int argc, char* argv[]) { - for (int i = 0; i < argc; ++i) { - std::cout << argv[i] << std::endl; - } return 0; - }; + for (int i = 0; i < argc; ++i) { + std::cout << argv[i] << std::endl; + } return 0; + }; wchar_t* argv[3]; + // This works because call_main_from_wmain doesn't actually write + // to the arguments and neither does our function. Otherwise, this + // cast would be unsafe. argv[0] = const_cast(L"ascii"); argv[1] = const_cast(L"10 \xf7 2 = 5"); argv[2] = const_cast(L"qwww\xf7\x03c0"); QUtil::call_main_from_wmain(3, argv, realmain); } + +void cwmain_test() +{ + // const args and function args + auto realmain = [](int argc, char const* const argv[]) { + for (int i = 0; i < argc; ++i) { + std::cout << "const " << argv[i] << std::endl; + } return 0; + }; + wchar_t const* argv[3] = { + L"ascii", + L"10 \xf7 2 = 5", + L"qwww\xf7\x03c0", + }; + QUtil::call_main_from_wmain(3, argv, realmain); +} #endif // QPDF_NO_WCHAR_T int main(int argc, char* argv[]) @@ -23,6 +43,7 @@ int main(int argc, char* argv[]) try { wmain_test(); + cwmain_test(); } catch (std::exception& e) { -- cgit v1.2.3-54-g00ecf