aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--rfc4251.C32
-rw-r--r--rfc4251.h31
3 files changed, 33 insertions, 32 deletions
diff --git a/Makefile b/Makefile
index 1ed7804..fcecbaa 100644
--- a/Makefile
+++ b/Makefile
@@ -33,7 +33,7 @@ ssh-agent-filter.1: ssh-agent-filter
ssh-agent-filter: ssh-agent-filter.o
ssh-agent-filter.o: ssh-agent-filter.C rfc4251.h ssh-agent.h version.h
-
+rfc4251.o: rfc4251.C rfc4251.h
rfc4251_gmp.o: rfc4251_gmp.C rfc4251.h
version.h:
diff --git a/rfc4251.C b/rfc4251.C
new file mode 100644
index 0000000..0d59420
--- /dev/null
+++ b/rfc4251.C
@@ -0,0 +1,32 @@
+#include "rfc4251.h"
+
+rfc4251string::rfc4251string (std::vector<std::string> const & v) {
+ for (auto it = v.begin(); it != v.end();) {
+ if (it->size() == 0)
+ throw std::length_error{"name of zero length"};
+ if (value.size() + it->size() > std::numeric_limits<uint32_t>::max())
+ throw std::length_error{"32-bit limit for rfc4251string exceeded"};
+ value.insert(value.end(), it->data(), it->data() + it->size());
+ ++it;
+ if (it == v.end())
+ break;
+ value.push_back(',');
+ }
+}
+
+rfc4251string::operator std::vector<std::string> () const {
+ std::vector<std::string> ret;
+ auto name_start = value.begin();
+ if (name_start != value.end())
+ for (auto it = name_start; ; ++it) {
+ if (it == value.end() or *it == ',') {
+ if (it == name_start)
+ throw std::length_error{"name of zero length"};
+ ret.emplace_back(name_start, it);
+ name_start = it + 1;
+ }
+ if (it == value.end())
+ break;
+ }
+ return ret;
+}
diff --git a/rfc4251.h b/rfc4251.h
index 2d01215..e9b94f2 100644
--- a/rfc4251.h
+++ b/rfc4251.h
@@ -181,37 +181,6 @@ inline rfc4251string::rfc4251string (char const * s, size_t l) {
value.insert(value.end(), s, s + l);
}
-rfc4251string::rfc4251string (std::vector<std::string> const & v) {
- for (auto it = v.begin(); it != v.end();) {
- if (it->size() == 0)
- throw std::length_error{"name of zero length"};
- if (value.size() + it->size() > std::numeric_limits<uint32_t>::max())
- throw std::length_error{"32-bit limit for rfc4251string exceeded"};
- value.insert(value.end(), it->data(), it->data() + it->size());
- ++it;
- if (it == v.end())
- break;
- value.push_back(',');
- }
-}
-
-rfc4251string::operator std::vector<std::string> () const {
- std::vector<std::string> ret;
- auto name_start = value.begin();
- if (name_start != value.end())
- for (auto it = name_start; ; ++it) {
- if (it == value.end() or *it == ',') {
- if (it == name_start)
- throw std::length_error{"name of zero length"};
- ret.emplace_back(name_start, it);
- name_start = it + 1;
- }
- if (it == value.end())
- break;
- }
- return ret;
-}
-
inline std::istream & operator>> (std::istream & is, rfc4251string & s) {
s.value.clear();
rfc4251uint32 len;