diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2017-04-12 22:48:52 -0700 |
|---|---|---|
| committer | Robert Schumacher <roschuma@microsoft.com> | 2017-04-12 22:48:52 -0700 |
| commit | 7069fbbebc750a7c8a64adc8c30269527cbec9bd (patch) | |
| tree | 94d08f8fd3f04be1167f274c7aab37d0100a693b /toolsrc/src | |
| parent | 7326b6c64dc6b04b6d8512f13dddf67bf7498bf1 (diff) | |
| download | vcpkg-7069fbbebc750a7c8a64adc8c30269527cbec9bd.tar.gz vcpkg-7069fbbebc750a7c8a64adc8c30269527cbec9bd.zip | |
[vcpkg] Remove+indirect nearly all uses of iostreams
Diffstat (limited to 'toolsrc/src')
| -rw-r--r-- | toolsrc/src/BinaryParagraph.cpp | 34 | ||||
| -rw-r--r-- | toolsrc/src/SourceParagraph.cpp | 5 | ||||
| -rw-r--r-- | toolsrc/src/StatusParagraph.cpp | 7 | ||||
| -rw-r--r-- | toolsrc/src/StatusParagraphs.cpp | 9 | ||||
| -rw-r--r-- | toolsrc/src/commands_build.cpp | 2 | ||||
| -rw-r--r-- | toolsrc/src/commands_import.cpp | 5 | ||||
| -rw-r--r-- | toolsrc/src/commands_integrate.cpp | 10 | ||||
| -rw-r--r-- | toolsrc/src/metrics.cpp | 2 | ||||
| -rw-r--r-- | toolsrc/src/tests_paragraph.cpp | 36 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg.cpp | 10 | ||||
| -rw-r--r-- | toolsrc/src/vcpkg_Files.cpp | 10 | ||||
| -rw-r--r-- | toolsrc/src/vcpkglib.cpp | 11 |
12 files changed, 73 insertions, 68 deletions
diff --git a/toolsrc/src/BinaryParagraph.cpp b/toolsrc/src/BinaryParagraph.cpp index 499ef54f7..99d7d230b 100644 --- a/toolsrc/src/BinaryParagraph.cpp +++ b/toolsrc/src/BinaryParagraph.cpp @@ -68,29 +68,23 @@ namespace vcpkg return Strings::format("%s_%s_%s", this->spec.name(), this->version, this->spec.triplet()); } - std::ostream& operator<<(std::ostream& os, const BinaryParagraph& p) + void serialize(const BinaryParagraph& pgh, std::string& out_str) { - os << "Package: " << p.spec.name() << "\n"; - os << "Version: " << p.version << "\n"; - if (!p.depends.empty()) + out_str.append("Package: ").append(pgh.spec.name()).push_back('\n'); + out_str.append("Version: ").append(pgh.version).push_back('\n'); + if (!pgh.depends.empty()) { - os << "Depends: " << p.depends.front(); + out_str.append("Depends: "); + out_str.append(Strings::join(", ", pgh.depends)); + out_str.push_back('\n'); + } - auto b = p.depends.begin() + 1; - auto e = p.depends.end(); - for (; b != e; ++b) - { - os << ", " << *b; - } + out_str.append("Architecture: ").append(pgh.spec.triplet().to_string()).push_back('\n'); + out_str.append("Multi-Arch: same\n"); - os << "\n"; - } - os << "Architecture: " << p.spec.triplet().to_string() << "\n"; - os << "Multi-Arch: same\n"; - if (!p.maintainer.empty()) - os << "Maintainer: " << p.maintainer << "\n"; - if (!p.description.empty()) - os << "Description: " << p.description << "\n"; - return os; + if (!pgh.maintainer.empty()) + out_str.append("Maintainer: ").append(pgh.maintainer).push_back('\n'); + if (!pgh.description.empty()) + out_str.append("Description: ").append(pgh.description).push_back('\n'); } } diff --git a/toolsrc/src/SourceParagraph.cpp b/toolsrc/src/SourceParagraph.cpp index c23e220d7..11b83aedf 100644 --- a/toolsrc/src/SourceParagraph.cpp +++ b/toolsrc/src/SourceParagraph.cpp @@ -138,9 +138,8 @@ namespace vcpkg return ret; } - std::ostream & operator<<(std::ostream & os, const Dependency & p) + const std::string& to_string(const Dependency& dep) { - os << p.name; - return os; + return dep.name; } } diff --git a/toolsrc/src/StatusParagraph.cpp b/toolsrc/src/StatusParagraph.cpp index 88b4fb854..63bfb2f9b 100644 --- a/toolsrc/src/StatusParagraph.cpp +++ b/toolsrc/src/StatusParagraph.cpp @@ -16,11 +16,10 @@ namespace vcpkg { } - std::ostream& operator<<(std::ostream& os, const StatusParagraph& p) + void serialize(const StatusParagraph& pgh, std::string& out_str) { - os << p.package; - os << "Status: " << to_string(p.want) << " ok " << to_string(p.state) << "\n"; - return os; + serialize(pgh.package, out_str); + out_str.append("Status: ").append(to_string(pgh.want)).append(" ok ").append(to_string(pgh.state)).push_back('\n'); } StatusParagraph::StatusParagraph(const std::unordered_map<std::string, std::string>& fields) diff --git a/toolsrc/src/StatusParagraphs.cpp b/toolsrc/src/StatusParagraphs.cpp index 59e6ee331..132b7d5d4 100644 --- a/toolsrc/src/StatusParagraphs.cpp +++ b/toolsrc/src/StatusParagraphs.cpp @@ -59,13 +59,12 @@ namespace vcpkg return ptr; } - std::ostream& vcpkg::operator<<(std::ostream& os, const StatusParagraphs& l) + void serialize(const StatusParagraphs& pghs, std::string& out_str) { - for (auto& pgh : l.paragraphs) + for (auto& pgh : pghs.paragraphs) { - os << *pgh; - os << "\n"; + serialize(*pgh, out_str); + out_str.push_back('\n'); } - return os; } } diff --git a/toolsrc/src/commands_build.cpp b/toolsrc/src/commands_build.cpp index 9af1e8e78..8d91ce813 100644 --- a/toolsrc/src/commands_build.cpp +++ b/toolsrc/src/commands_build.cpp @@ -22,7 +22,7 @@ namespace vcpkg::Commands::Build { const BinaryParagraph bpgh = BinaryParagraph(source_paragraph, triplet); const fs::path binary_control_file = paths.packages / bpgh.dir() / "CONTROL"; - std::ofstream(binary_control_file) << bpgh; + paths.get_filesystem().write_contents(binary_control_file, Strings::serialize(bpgh)); } std::wstring make_build_env_cmd(const Triplet& triplet, const Toolset& toolset) diff --git a/toolsrc/src/commands_import.cpp b/toolsrc/src/commands_import.cpp index 1fcc3b3a8..b65f636eb 100644 --- a/toolsrc/src/commands_import.cpp +++ b/toolsrc/src/commands_import.cpp @@ -72,13 +72,14 @@ namespace vcpkg::Commands::Import static void do_import(const VcpkgPaths& paths, const fs::path& include_directory, const fs::path& project_directory, const BinaryParagraph& control_file_data) { + auto& fs = paths.get_filesystem(); fs::path library_destination_path = paths.package_dir(control_file_data.spec); std::error_code ec; - paths.get_filesystem().create_directory(library_destination_path, ec); + fs.create_directory(library_destination_path, ec); place_library_files_in(paths.get_filesystem(), include_directory, project_directory, library_destination_path); fs::path control_file_path = library_destination_path / "CONTROL"; - std::ofstream(control_file_path) << control_file_data; + fs.write_contents(control_file_path, Strings::serialize(control_file_data)); } void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths) diff --git a/toolsrc/src/commands_integrate.cpp b/toolsrc/src/commands_integrate.cpp index 60c6b0613..8569fdd79 100644 --- a/toolsrc/src/commands_integrate.cpp +++ b/toolsrc/src/commands_integrate.cpp @@ -186,7 +186,7 @@ namespace vcpkg::Commands::Integrate if (should_install_system) { const fs::path sys_src_path = tmp_dir / "vcpkg.system.targets"; - std::ofstream(sys_src_path) << create_system_targets_shortcut(); + fs.write_contents(sys_src_path, create_system_targets_shortcut()); const std::string param = Strings::format(R"(/c mkdir "%s" & copy "%s" "%s" /Y > nul)", system_wide_targets_file.parent_path().string(), sys_src_path.string(), system_wide_targets_file.string()); ElevationPromptChoice user_choice = elevated_cmd_execute(param); @@ -205,7 +205,7 @@ namespace vcpkg::Commands::Integrate } const fs::path appdata_src_path = tmp_dir / "vcpkg.user.targets"; - std::ofstream(appdata_src_path) << create_appdata_targets_shortcut(paths.buildsystems_msbuild_targets.string()); + fs.write_contents(appdata_src_path, create_appdata_targets_shortcut(paths.buildsystems_msbuild_targets.string())); auto appdata_dst_path = get_appdata_targets_path(); auto rc = fs.copy_file(appdata_src_path, appdata_dst_path, fs::copy_options::overwrite_existing, ec); @@ -266,9 +266,9 @@ namespace vcpkg::Commands::Integrate const std::string nuget_id = get_nuget_id(paths.root); const std::string nupkg_version = "1.0.0"; - std::ofstream(targets_file_path) << create_nuget_targets_file(paths.buildsystems_msbuild_targets); - std::ofstream(props_file_path) << create_nuget_props_file(); - std::ofstream(nuspec_file_path) << create_nuspec_file(paths.root, nuget_id, nupkg_version); + fs.write_contents(targets_file_path, create_nuget_targets_file(paths.buildsystems_msbuild_targets)); + fs.write_contents(props_file_path, create_nuget_props_file()); + fs.write_contents(nuspec_file_path, create_nuspec_file(paths.root, nuget_id, nupkg_version)); // Using all forward slashes for the command line const std::wstring cmd_line = Strings::wformat(LR"("%s" pack -OutputDirectory "%s" "%s" > nul)", nuget_exe.native(), buildsystems_dir.native(), nuspec_file_path.native()); diff --git a/toolsrc/src/metrics.cpp b/toolsrc/src/metrics.cpp index cfdd418c3..baefc3c35 100644 --- a/toolsrc/src/metrics.cpp +++ b/toolsrc/src/metrics.cpp @@ -411,7 +411,7 @@ true } const fs::path vcpkg_metrics_txt_path = temp_folder_path / ("vcpkg" + generate_random_UUID() + ".txt"); - std::ofstream(vcpkg_metrics_txt_path) << payload; + fs.write_contents(vcpkg_metrics_txt_path, payload); const std::wstring cmdLine = Strings::wformat(L"start %s %s", temp_folder_path_exe.native(), vcpkg_metrics_txt_path.native()); System::cmd_execute_clean(cmdLine); diff --git a/toolsrc/src/tests_paragraph.cpp b/toolsrc/src/tests_paragraph.cpp index 58e4121a8..20bacf170 100644 --- a/toolsrc/src/tests_paragraph.cpp +++ b/toolsrc/src/tests_paragraph.cpp @@ -1,6 +1,7 @@ #include "CppUnitTest.h" #include "Paragraphs.h" #include "BinaryParagraph.h" +#include "vcpkg_Strings.h" #pragma comment(lib,"version") #pragma comment(lib,"winhttp") @@ -16,6 +17,8 @@ namespace Microsoft::VisualStudio::CppUnitTestFramework } } +namespace Strings = vcpkg::Strings; + namespace UnitTest1 { TEST_CLASS(ControlParsing) @@ -289,27 +292,26 @@ namespace UnitTest1 Assert::AreEqual("v4", pghs[1]["f4"].c_str()); } - TEST_METHOD(parse_comment_before_single_slashN) - { - const char* str = - "f1: v1\r\n" - "#comment\n"; - auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO); - Assert::AreEqual(size_t(1), pghs[0].size()); - Assert::AreEqual("v1", pghs[0]["f1"].c_str()); - } + TEST_METHOD(parse_comment_before_single_slashN) + { + const char* str = + "f1: v1\r\n" + "#comment\n"; + auto pghs = vcpkg::Paragraphs::parse_paragraphs(str).value_or_exit(VCPKG_LINE_INFO); + Assert::AreEqual(size_t(1), pghs[0].size()); + Assert::AreEqual("v1", pghs[0]["f1"].c_str()); + } TEST_METHOD(BinaryParagraph_serialize_min) { - std::stringstream ss; vcpkg::BinaryParagraph pgh({ { "Package", "zlib" }, { "Version", "1.2.8" }, { "Architecture", "x86-windows" }, { "Multi-Arch", "same" }, }); - ss << pgh; - auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss.str()).value_or_exit(VCPKG_LINE_INFO); + std::string ss = Strings::serialize(pgh); + auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss).value_or_exit(VCPKG_LINE_INFO); Assert::AreEqual(size_t(1), pghs.size()); Assert::AreEqual(size_t(4), pghs[0].size()); Assert::AreEqual("zlib", pghs[0]["Package"].c_str()); @@ -320,7 +322,6 @@ namespace UnitTest1 TEST_METHOD(BinaryParagraph_serialize_max) { - std::stringstream ss; vcpkg::BinaryParagraph pgh({ { "Package", "zlib" }, { "Version", "1.2.8" }, @@ -330,8 +331,8 @@ namespace UnitTest1 { "Depends", "dep" }, { "Multi-Arch", "same" }, }); - ss << pgh; - auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss.str()).value_or_exit(VCPKG_LINE_INFO); + std::string ss = Strings::serialize(pgh); + auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss).value_or_exit(VCPKG_LINE_INFO); Assert::AreEqual(size_t(1), pghs.size()); Assert::AreEqual(size_t(7), pghs[0].size()); Assert::AreEqual("zlib", pghs[0]["Package"].c_str()); @@ -344,7 +345,6 @@ namespace UnitTest1 TEST_METHOD(BinaryParagraph_serialize_multiple_deps) { - std::stringstream ss; vcpkg::BinaryParagraph pgh({ { "Package", "zlib" }, { "Version", "1.2.8" }, @@ -352,8 +352,8 @@ namespace UnitTest1 { "Multi-Arch", "same" }, { "Depends", "a, b, c" }, }); - ss << pgh; - auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss.str()).value_or_exit(VCPKG_LINE_INFO); + std::string ss = Strings::serialize(pgh); + auto pghs = vcpkg::Paragraphs::parse_paragraphs(ss).value_or_exit(VCPKG_LINE_INFO); Assert::AreEqual(size_t(1), pghs.size()); Assert::AreEqual("a, b, c", pghs[0]["Depends"].c_str()); } diff --git a/toolsrc/src/vcpkg.cpp b/toolsrc/src/vcpkg.cpp index 33b9fbe83..cb7c3f76d 100644 --- a/toolsrc/src/vcpkg.cpp +++ b/toolsrc/src/vcpkg.cpp @@ -144,10 +144,12 @@ static void loadConfig() try { std::error_code ec; - Files::get_real_filesystem().create_directory(localappdata / "vcpkg", ec); - std::ofstream(localappdata / "vcpkg" / "config", std::ios_base::out | std::ios_base::trunc) - << "User-Id: " << user_id << "\n" - << "User-Since: " << user_time << "\n"; + auto& fs = Files::get_real_filesystem(); + fs.create_directory(localappdata / "vcpkg", ec); + fs.write_contents(localappdata / "vcpkg" / "config", + Strings::format( + "User-Id: %s\n" + "User-Since: %s\n", user_id, user_time)); } catch (...) { } } diff --git a/toolsrc/src/vcpkg_Files.cpp b/toolsrc/src/vcpkg_Files.cpp index a4a637b78..f4fb1bb61 100644 --- a/toolsrc/src/vcpkg_Files.cpp +++ b/toolsrc/src/vcpkg_Files.cpp @@ -149,6 +149,16 @@ namespace vcpkg::Files { return fs::stdfs::status(path, ec); } + virtual void write_contents(const fs::path& file_path, const std::string& data) override + { + FILE* f = nullptr; + auto ec = _wfopen_s(&f, file_path.native().c_str(), L"wb"); + Checks::check_exit(VCPKG_LINE_INFO, ec == 0); + auto count = fwrite(data.data(), sizeof(data[0]), data.size(), f); + fclose(f); + + Checks::check_exit(VCPKG_LINE_INFO, count == data.size()); + } }; Filesystem & get_real_filesystem() diff --git a/toolsrc/src/vcpkglib.cpp b/toolsrc/src/vcpkglib.cpp index ad359612e..cc70b86b0 100644 --- a/toolsrc/src/vcpkglib.cpp +++ b/toolsrc/src/vcpkglib.cpp @@ -72,7 +72,7 @@ namespace vcpkg } } - std::fstream(status_file_new, std::ios_base::out | std::ios_base::binary | std::ios_base::trunc) << current_status_db; + fs.write_contents(status_file_new, Strings::serialize(current_status_db)); fs.rename(status_file_new, status_file); @@ -90,13 +90,14 @@ namespace vcpkg void write_update(const VcpkgPaths& paths, const StatusParagraph& p) { static int update_id = 0; + auto& fs = paths.get_filesystem(); + auto my_update_id = update_id++; auto tmp_update_filename = paths.vcpkg_dir_updates / "incomplete"; auto update_filename = paths.vcpkg_dir_updates / std::to_string(my_update_id); - std::fstream file(tmp_update_filename, std::ios_base::out | std::ios_base::binary | std::ios_base::trunc); - file << p; - file.close(); - paths.get_filesystem().rename(tmp_update_filename, update_filename); + + fs.write_contents(tmp_update_filename, Strings::serialize(p)); + fs.rename(tmp_update_filename, update_filename); } static void upgrade_to_slash_terminated_sorted_format(Files::Filesystem& fs, std::vector<std::string>* lines, const fs::path& listfile_path) |
