X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/76abe9a5aad69eb7e67295588c6825cdae0341af..eb1000f6e5fa7035c764d0e7aa9ca71c7aa8d52d:/apt-pkg/contrib/srvrec.cc diff --git a/apt-pkg/contrib/srvrec.cc b/apt-pkg/contrib/srvrec.cc index 174668274..be159bad9 100644 --- a/apt-pkg/contrib/srvrec.cc +++ b/apt-pkg/contrib/srvrec.cc @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -25,11 +26,22 @@ #include "srvrec.h" +bool SrvRec::operator==(SrvRec const &other) const +{ + return (std::tie(target, priority, weight, port) == + std::tie(other.target, other.priority, other.weight, other.port)); +} + bool GetSrvRecords(std::string host, int port, std::vector &Result) { std::string target; - struct servent *s_ent = getservbyport(htons(port), "tcp"); - if (s_ent == NULL) + int res; + struct servent s_ent_buf; + struct servent *s_ent = nullptr; + std::vector buf(1024); + + res = getservbyport_r(htons(port), "tcp", &s_ent_buf, buf.data(), buf.size(), &s_ent); + if (res != 0 || s_ent == nullptr) return false; strprintf(target, "_%s._tcp.%s", s_ent->s_name, host.c_str()); @@ -168,8 +180,8 @@ SrvRec PopFromSrvRecs(std::vector &Recs) #endif // shuffle in a very simplistic way for now (equal weights) - std::vector::const_iterator I = Recs.begin(); - std::vector::const_iterator const J = std::find_if(Recs.cbegin(), Recs.cend(), + std::vector::iterator I = Recs.begin(); + std::vector::iterator const J = std::find_if(Recs.begin(), Recs.end(), [&I](SrvRec const &J) { return I->priority != J.priority; }); // clock seems random enough.