From ec5920ac2ed11b29135acb834ce6d633259aad75 Mon Sep 17 00:00:00 2001 From: Timo Weingärtner Date: Tue, 15 Apr 2014 20:09:21 +0200 Subject: rfc4251: move remaining non-inline functions to impl file --- Makefile | 2 +- rfc4251.C | 32 ++++++++++++++++++++++++++++++++ rfc4251.h | 31 ------------------------------- 3 files changed, 33 insertions(+), 32 deletions(-) create mode 100644 rfc4251.C 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 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::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 () const { + std::vector 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 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::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 () const { - std::vector 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; -- cgit v1.2.3