diff --git a/node/Node.cpp b/node/Node.cpp index fe3407bed..23ec01dec 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -461,6 +461,7 @@ Node::ReasonForTermination Node::run() #ifdef ZT_AUTO_UPDATE if (ZT_DEFAULTS.updateLatestNfoURL.length()) { _r->updater = new SoftwareUpdater(_r); + _r->updater->cleanOldUpdates(); // clean out updates.d on startup } else { LOG("WARNING: unable to enable software updates: latest .nfo URL from ZT_DEFAULTS is empty (does this platform actually support software updates?)"); } diff --git a/node/SoftwareUpdater.cpp b/node/SoftwareUpdater.cpp index 0ce946ad2..4d11afa94 100644 --- a/node/SoftwareUpdater.cpp +++ b/node/SoftwareUpdater.cpp @@ -41,6 +41,7 @@ #include "RuntimeEnvironment.hpp" #include "Thread.hpp" #include "Node.hpp" +#include "Utils.hpp" #ifdef __UNIX_LIKE__ #include @@ -74,6 +75,16 @@ SoftwareUpdater::~SoftwareUpdater() } } +void SoftwareUpdater::cleanOldUpdates() +{ + std::string updatesDir(_r->homePath + ZT_PATH_SEPARATOR_S + "updates.d"); + std::map dl(Utils::listDirectory(updatesDir.c_str())); + for(std::map::iterator i(dl.begin());i!=dl.end();++i) { + if (!i->second) + Utils::rm(i->first.c_str()); + } +} + const char *SoftwareUpdater::parseNfo( const char *nfoText, unsigned int &vMajor, diff --git a/node/SoftwareUpdater.hpp b/node/SoftwareUpdater.hpp index ead3eb1f8..aed5382c8 100644 --- a/node/SoftwareUpdater.hpp +++ b/node/SoftwareUpdater.hpp @@ -52,6 +52,11 @@ public: SoftwareUpdater(const RuntimeEnvironment *renv); ~SoftwareUpdater(); + /** + * Remove old updates in updates.d + */ + void cleanOldUpdates(); + /** * Called on each version message from a peer *