From 6cc29c1f84ae61fabfd3a60200c2ef1fabb50eac Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Fri, 23 Sep 2016 16:39:07 -0700 Subject: Change vcpkg::parse() to vcpkg::package_spec::from_string() --- toolsrc/src/package_spec.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'toolsrc/src/package_spec.cpp') diff --git a/toolsrc/src/package_spec.cpp b/toolsrc/src/package_spec.cpp index ece5f91e9..efa54734e 100644 --- a/toolsrc/src/package_spec.cpp +++ b/toolsrc/src/package_spec.cpp @@ -2,7 +2,7 @@ namespace vcpkg { - expected parse(const std::string& spec, const triplet& default_target_triplet) + expected package_spec::from_string(const std::string& spec, const triplet& default_target_triplet) { auto pos = spec.find(':'); if (pos == std::string::npos) -- cgit v1.2.3 From 330b411cd2f4aa25632b2ae5ea2fef396fb13d12 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Mon, 3 Oct 2016 17:20:52 -0700 Subject: [triplet] Force using the factory that does sanity checks --- toolsrc/src/package_spec.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'toolsrc/src/package_spec.cpp') diff --git a/toolsrc/src/package_spec.cpp b/toolsrc/src/package_spec.cpp index efa54734e..444ec8459 100644 --- a/toolsrc/src/package_spec.cpp +++ b/toolsrc/src/package_spec.cpp @@ -16,7 +16,7 @@ namespace vcpkg return std::error_code(package_spec_parse_result::too_many_colons); } - return package_spec{spec.substr(0, pos), spec.substr(pos + 1)}; + return package_spec{spec.substr(0, pos), triplet::from_canonical_name(spec.substr(pos + 1))}; } std::string package_spec::dir() const -- cgit v1.2.3 From 2f8c115777cb5f1d407d8a9a05c2cd3c4cad918d Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Mon, 3 Oct 2016 17:24:42 -0700 Subject: [package_spec] Static factory now lowercases all chars --- toolsrc/src/package_spec.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'toolsrc/src/package_spec.cpp') diff --git a/toolsrc/src/package_spec.cpp b/toolsrc/src/package_spec.cpp index 444ec8459..3da0757fd 100644 --- a/toolsrc/src/package_spec.cpp +++ b/toolsrc/src/package_spec.cpp @@ -1,22 +1,26 @@ #include "package_spec.h" +#include namespace vcpkg { expected package_spec::from_string(const std::string& spec, const triplet& default_target_triplet) { - auto pos = spec.find(':'); + std::string s(spec); + std::transform(s.begin(), s.end(), s.begin(), ::tolower); + + auto pos = s.find(':'); if (pos == std::string::npos) { - return package_spec{spec, default_target_triplet}; + return package_spec{s, default_target_triplet}; } - auto pos2 = spec.find(':', pos + 1); + auto pos2 = s.find(':', pos + 1); if (pos2 != std::string::npos) { return std::error_code(package_spec_parse_result::too_many_colons); } - return package_spec{spec.substr(0, pos), triplet::from_canonical_name(spec.substr(pos + 1))}; + return package_spec{s.substr(0, pos), triplet::from_canonical_name(s.substr(pos + 1))}; } std::string package_spec::dir() const -- cgit v1.2.3 From 5d58eb29cc9ae584335e3380c2645baf05b21222 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Mon, 3 Oct 2016 17:45:01 -0700 Subject: [package_spec] Force using the factories that do sanity checks --- toolsrc/src/package_spec.cpp | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) (limited to 'toolsrc/src/package_spec.cpp') diff --git a/toolsrc/src/package_spec.cpp b/toolsrc/src/package_spec.cpp index 3da0757fd..57f6179bf 100644 --- a/toolsrc/src/package_spec.cpp +++ b/toolsrc/src/package_spec.cpp @@ -3,15 +3,15 @@ namespace vcpkg { - expected package_spec::from_string(const std::string& spec, const triplet& default_target_triplet) + expected package_spec::from_string(const std::string& spec_as_string, const triplet& default_target_triplet) { - std::string s(spec); + std::string s(spec_as_string); std::transform(s.begin(), s.end(), s.begin(), ::tolower); auto pos = s.find(':'); if (pos == std::string::npos) { - return package_spec{s, default_target_triplet}; + return from_name_and_triplet(s, default_target_triplet); } auto pos2 = s.find(':', pos + 1); @@ -20,17 +20,40 @@ namespace vcpkg return std::error_code(package_spec_parse_result::too_many_colons); } - return package_spec{s.substr(0, pos), triplet::from_canonical_name(s.substr(pos + 1))}; + const std::string name = s.substr(0, pos); + const triplet target_triplet = triplet::from_canonical_name(s.substr(pos + 1)); + return from_name_and_triplet(name, target_triplet); + } + + package_spec package_spec::from_name_and_triplet(const std::string& name, const triplet& target_triplet) + { + std::string n(name); + std::transform(n.begin(), n.end(), n.begin(), ::tolower); + + package_spec p; + p.m_name = n; + p.m_target_triplet = target_triplet; + return p; + } + + const std::string& package_spec::name() const + { + return this->m_name; + } + + const triplet& package_spec::target_triplet() const + { + return this->m_target_triplet; } std::string package_spec::dir() const { - return Strings::format("%s_%s", this->name, this->target_triplet); + return Strings::format("%s_%s", this->m_name, this->m_target_triplet); } std::string to_string(const package_spec& spec) { - return Strings::format("%s:%s", spec.name, spec.target_triplet); + return Strings::format("%s:%s", spec.name(), spec.target_triplet()); } std::string to_printf_arg(const package_spec& spec) @@ -40,7 +63,7 @@ namespace vcpkg bool operator==(const package_spec& left, const package_spec& right) { - return left.name == right.name && left.target_triplet == right.target_triplet; + return left.name() == right.name() && left.target_triplet() == right.target_triplet(); } std::ostream& operator<<(std::ostream& os, const package_spec& spec) -- cgit v1.2.3 From bf323e8cc6f3edd245e3f5661cab6c8b7f335da9 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Tue, 4 Oct 2016 14:47:42 -0700 Subject: [package_spec]User input gets lowercased; other input is checked --- toolsrc/src/package_spec.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'toolsrc/src/package_spec.cpp') diff --git a/toolsrc/src/package_spec.cpp b/toolsrc/src/package_spec.cpp index 57f6179bf..a578787c9 100644 --- a/toolsrc/src/package_spec.cpp +++ b/toolsrc/src/package_spec.cpp @@ -3,35 +3,39 @@ namespace vcpkg { - expected package_spec::from_string(const std::string& spec_as_string, const triplet& default_target_triplet) + static bool is_valid_package_spec_char(char c) { - std::string s(spec_as_string); - std::transform(s.begin(), s.end(), s.begin(), ::tolower); + return (c == '-') || (isalnum(c) && islower(c)); + } - auto pos = s.find(':'); + expected package_spec::from_string(const std::string& spec_as_string, const triplet& default_target_triplet) + { + auto pos = spec_as_string.find(':'); if (pos == std::string::npos) { - return from_name_and_triplet(s, default_target_triplet); + return from_name_and_triplet(spec_as_string, default_target_triplet); } - auto pos2 = s.find(':', pos + 1); + auto pos2 = spec_as_string.find(':', pos + 1); if (pos2 != std::string::npos) { return std::error_code(package_spec_parse_result::too_many_colons); } - const std::string name = s.substr(0, pos); - const triplet target_triplet = triplet::from_canonical_name(s.substr(pos + 1)); + const std::string name = spec_as_string.substr(0, pos); + const triplet target_triplet = triplet::from_canonical_name(spec_as_string.substr(pos + 1)); return from_name_and_triplet(name, target_triplet); } - package_spec package_spec::from_name_and_triplet(const std::string& name, const triplet& target_triplet) + expected package_spec::from_name_and_triplet(const std::string& name, const triplet& target_triplet) { - std::string n(name); - std::transform(n.begin(), n.end(), n.begin(), ::tolower); + if (std::find_if_not(name.cbegin(), name.cend(), is_valid_package_spec_char) != name.end()) + { + return std::error_code(package_spec_parse_result::invalid_characters); + } package_spec p; - p.m_name = n; + p.m_name = name; p.m_target_triplet = target_triplet; return p; } -- cgit v1.2.3 From 7d13495cf90af06bad4351a91a5d7cb868abd2de Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Tue, 4 Oct 2016 14:48:39 -0700 Subject: All-CAPS for enum members --- toolsrc/src/package_spec.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'toolsrc/src/package_spec.cpp') diff --git a/toolsrc/src/package_spec.cpp b/toolsrc/src/package_spec.cpp index a578787c9..b9f6f54fe 100644 --- a/toolsrc/src/package_spec.cpp +++ b/toolsrc/src/package_spec.cpp @@ -19,7 +19,7 @@ namespace vcpkg auto pos2 = spec_as_string.find(':', pos + 1); if (pos2 != std::string::npos) { - return std::error_code(package_spec_parse_result::too_many_colons); + return std::error_code(package_spec_parse_result::TOO_MANY_COLONS); } const std::string name = spec_as_string.substr(0, pos); @@ -31,7 +31,7 @@ namespace vcpkg { if (std::find_if_not(name.cbegin(), name.cend(), is_valid_package_spec_char) != name.end()) { - return std::error_code(package_spec_parse_result::invalid_characters); + return std::error_code(package_spec_parse_result::INVALID_CHARACTERS); } package_spec p; -- cgit v1.2.3 From 5adf575879d60fca0b7824365b030a38145b6c4b Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Wed, 5 Oct 2016 13:20:33 -0700 Subject: Fix #119 [regression]: cannot use numbers in library names --- toolsrc/src/package_spec.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'toolsrc/src/package_spec.cpp') diff --git a/toolsrc/src/package_spec.cpp b/toolsrc/src/package_spec.cpp index b9f6f54fe..86d4393bd 100644 --- a/toolsrc/src/package_spec.cpp +++ b/toolsrc/src/package_spec.cpp @@ -5,7 +5,7 @@ namespace vcpkg { static bool is_valid_package_spec_char(char c) { - return (c == '-') || (isalnum(c) && islower(c)); + return (c == '-') || isdigit(c) || (isalpha(c) && islower(c)); } expected package_spec::from_string(const std::string& spec_as_string, const triplet& default_target_triplet) -- cgit v1.2.3