summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2018-02-09 06:35:01 +0000
committerAdam Ierymenko <adam.ierymenko@gmail.com>2018-02-09 06:35:01 +0000
commit51aadcf9017c9c4b1c86302fa3bb65cc67dcc05b (patch)
tree0af3a3889ff4aa3e6c234f916a736e20d5f575e5
parentf049740ae567fd4f4c855766869beb905b226a9b (diff)
downloadinfinitytier-51aadcf9017c9c4b1c86302fa3bb65cc67dcc05b.tar.gz
infinitytier-51aadcf9017c9c4b1c86302fa3bb65cc67dcc05b.zip
A few fixes dicatated by valgrind.
-rw-r--r--node/Dictionary.hpp53
-rw-r--r--node/Switch.cpp1
2 files changed, 21 insertions, 33 deletions
diff --git a/node/Dictionary.hpp b/node/Dictionary.hpp
index 59afb7c6..f89b6ffc 100644
--- a/node/Dictionary.hpp
+++ b/node/Dictionary.hpp
@@ -62,40 +62,24 @@ template<unsigned int C>
class Dictionary
{
public:
- Dictionary()
- {
- _d[0] = (char)0;
- }
-
- Dictionary(const char *s)
- {
- if (s) {
- Utils::scopy(_d,sizeof(_d),s);
- } else {
- _d[0] = (char)0;
- }
- }
-
+ Dictionary() { memset(_d,0,sizeof(_d)); }
+ Dictionary(const char *s) { this->load(s); }
Dictionary(const char *s,unsigned int len)
{
- if (s) {
- if (len > (C-1))
- len = C-1;
- ZT_FAST_MEMCPY(_d,s,len);
- _d[len] = (char)0;
- } else {
- _d[0] = (char)0;
+ for(unsigned int i=0;i<C;++i) {
+ if ((s)&&(i < len)) {
+ if (!(_d[i] = *s))
+ s = (const char *)0;
+ else ++s;
+ } else _d[i] = (char)0;
}
+ _d[C - 1] = (char)0;
}
-
- Dictionary(const Dictionary &d)
- {
- Utils::scopy(_d,sizeof(_d),d._d);
- }
+ Dictionary(const Dictionary &d) { memcpy(_d,d._d,C); }
inline Dictionary &operator=(const Dictionary &d)
{
- Utils::scopy(_d,sizeof(_d),d._d);
+ memcpy(_d,d._d,C);
return *this;
}
@@ -109,12 +93,15 @@ public:
*/
inline bool load(const char *s)
{
- if (s) {
- return Utils::scopy(_d,sizeof(_d),s);
- } else {
- _d[0] = (char)0;
- return true;
+ for(unsigned int i=0;i<C;++i) {
+ if (s) {
+ if (!(_d[i] = *s))
+ s = (const char *)0;
+ else ++s;
+ } else _d[i] = (char)0;
}
+ _d[C - 1] = (char)0;
+ return (!s);
}
/**
@@ -122,7 +109,7 @@ public:
*/
inline void clear()
{
- _d[0] = (char)0;
+ memset(_d,0,sizeof(_d));
}
/**
diff --git a/node/Switch.cpp b/node/Switch.cpp
index 5c5130f4..eb1ebadb 100644
--- a/node/Switch.cpp
+++ b/node/Switch.cpp
@@ -50,6 +50,7 @@ namespace ZeroTier {
Switch::Switch(const RuntimeEnvironment *renv) :
RR(renv),
_lastBeaconResponse(0),
+ _lastCheckedQueues(0),
_lastUniteAttempt(8) // only really used on root servers and upstreams, and it'll grow there just fine
{
}