author | Michael Krelin <hacker@klever.net> | 2008-06-27 18:32:31 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2008-06-27 18:32:31 (UTC) |
commit | a344edbdddeac51524001faa10d06f85cfdb041c (patch) (side-by-side diff) | |
tree | bca2afabf4fdc53324fc48e101fc9de068404e47 /lib | |
parent | 9737a1eb0f01cdc805c4a28f0a86734eb3bb4d31 (diff) | |
download | libopkele-a344edbdddeac51524001faa10d06f85cfdb041c.zip libopkele-a344edbdddeac51524001faa10d06f85cfdb041c.tar.gz libopkele-a344edbdddeac51524001faa10d06f85cfdb041c.tar.bz2 |
Fix for gcc 4.3
Thanks to Oden Eriksson of Mandriva for report and patch
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | lib/fields.cc | 2 | ||||
-rw-r--r-- | lib/message.cc | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/lib/fields.cc b/lib/fields.cc index d494098..91fbc41 100644 --- a/lib/fields.cc +++ b/lib/fields.cc @@ -1,69 +1,71 @@ #include <opkele/types.h> #include <opkele/exception.h> #include <opkele/util.h> +#include <algorithm> namespace opkele { + using std::for_each; using std::unary_function; struct __om_copier : public unary_function<const string&,void> { public: const basic_fields& from; basic_fields& to; __om_copier(basic_fields& t,const basic_fields& f) : from(f), to(t) { } result_type operator()(argument_type f) { to.set_field(f,from.get_field(f)); } }; basic_fields::basic_fields(const basic_fields& x) { x.copy_to(*this); } void basic_fields::copy_to(basic_fields& x) const { x.reset_fields(); for_each(fields_begin(),fields_end(), __om_copier(x,*this) ); } void basic_fields::append_to(basic_fields& x) const { for_each(fields_begin(),fields_end(), __om_copier(x,*this) ); } struct __om_query_builder : public unary_function<const string&,void> { public: const basic_fields& om; bool first; string& rv; const char *pfx; __om_query_builder(const char *p,string& r,const basic_fields& m) : om(m), first(true), rv(r), pfx(p) { for_each(om.fields_begin(),om.fields_end(),*this); } __om_query_builder(const char *p,string& r,const basic_fields& m,const string& u) : om(m), first(true), rv(r), pfx(p) { rv = u; if(rv.find('?')==string::npos) rv += '?'; else first = false; for_each(om.fields_begin(),om.fields_end(),*this); } result_type operator()(argument_type f) { if(first) first = false; else rv += '&'; if(pfx) rv += pfx; rv+= f; rv += '='; rv += util::url_encode(om.get_field(f)); } }; string basic_fields::append_query(const string& url,const char *pfx) const { string rv; return __om_query_builder(pfx,rv,*this,url).rv; } diff --git a/lib/message.cc b/lib/message.cc index b2324b7..524946a 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -1,65 +1,67 @@ #include <cassert> +#include <algorithm> + #include <opkele/types.h> #include <opkele/exception.h> #include <opkele/util.h> #include <opkele/debug.h> #include "config.h" namespace opkele { using std::input_iterator_tag; using std::unary_function; struct __om_ns_finder : public unary_function<const string&,bool> { public: const basic_openid_message& om; const string& uri; __om_ns_finder(const basic_openid_message& m, const string& u) : om(m), uri(u) { } result_type operator()(argument_type f) { return (!strncmp(f.c_str(),"ns.",sizeof("ns.")-1)) && om.get_field(f)==uri ; } }; bool basic_openid_message::has_ns(const string& uri) const { fields_iterator ei = fields_end(); fields_iterator i = find_if(fields_begin(),fields_end(), __om_ns_finder(*this,uri)); return !(i==ei); } string basic_openid_message::get_ns(const string& uri) const { fields_iterator ei = fields_end(); fields_iterator i = find_if(fields_begin(),fields_end(), __om_ns_finder(*this,uri)); if(i==ei) throw failed_lookup(OPKELE_CP_ string("failed to find namespace ")+uri); return i->substr(3); } void basic_openid_message::from_keyvalues(const string& kv) { reset_fields(); string::size_type p = 0; while(true) { string::size_type co = kv.find(':',p); if(co==string::npos) break; #ifndef POSTELS_LAW string::size_type nl = kv.find('\n',co+1); if(nl==string::npos) throw bad_input(OPKELE_CP_ "malformed input"); if(nl>co) set_field(kv.substr(p,co-p),kv.substr(co+1,nl-co-1)); p = nl+1; #else /* POSTELS_LAW */ string::size_type lb = kv.find_first_of("\r\n",co+1); if(lb==string::npos) { set_field(kv.substr(p,co-p),kv.substr(co+1)); break; } if(lb>co) set_field(kv.substr(p,co-p),kv.substr(co+1,lb-co-1)); |