Browse Source

Generalize unlink to OS-dep code in Utils, just a little prep for Windows port.

Adam Ierymenko 12 years ago
parent
commit
86056fdbd9
3 changed files with 33 additions and 6 deletions
  1. 4 4
      node/Network.cpp
  2. 2 2
      node/Node.cpp
  3. 27 0
      node/Utils.hpp

+ 4 - 4
node/Network.cpp

@@ -111,8 +111,8 @@ Network::~Network()
 	if (_destroyOnDelete) {
 		std::string confPath(_r->homePath + ZT_PATH_SEPARATOR_S + "networks.d" + ZT_PATH_SEPARATOR_S + toString() + ".conf");
 		std::string mcdbPath(_r->homePath + ZT_PATH_SEPARATOR_S + "networks.d" + ZT_PATH_SEPARATOR_S + toString() + ".mcerts");
-		unlink(confPath.c_str());
-		unlink(mcdbPath.c_str());
+		Utils::rm(confPath);
+		Utils::rm(mcdbPath);
 	} else {
 		// Causes flush of membership certs to disk
 		clean();
@@ -204,7 +204,7 @@ void Network::clean()
 	Mutex::Lock _l(_lock);
 	if (_configuration.isOpen()) {
 		_membershipCertificates.clear();
-		unlink(mcdbPath.c_str());
+		Utils::rm(mcdbPath);
 	} else {
 		FILE *mcdb = fopen(mcdbPath.c_str(),"wb");
 		bool writeError = false;
@@ -236,7 +236,7 @@ void Network::clean()
 		if (mcdb)
 			fclose(mcdb);
 		if (writeError) {
-			unlink(mcdbPath.c_str());
+			Utils::rm(mcdbPath);
 			LOG("error: unable to write to membership cert database at: %s",mcdbPath.c_str());
 		}
 	}

+ 2 - 2
node/Node.cpp

@@ -339,8 +339,8 @@ Node::ReasonForTermination Node::run()
 		Utils::lockDownFile(identitySecretPath.c_str(),false);
 
 		// Clean up some obsolete files if present -- this will be removed later
-		unlink((_r->homePath + ZT_PATH_SEPARATOR_S + "status").c_str());
-		unlink((_r->homePath + ZT_PATH_SEPARATOR_S + "thisdeviceismine").c_str());
+		Utils::rm((_r->homePath + ZT_PATH_SEPARATOR_S + "status"));
+		Utils::rm((_r->homePath + ZT_PATH_SEPARATOR_S + "thisdeviceismine"));
 
 		// Make sure networks.d exists
 		mkdir((_r->homePath + ZT_PATH_SEPARATOR_S + "networks.d").c_str(),0700);

+ 27 - 0
node/Utils.hpp

@@ -43,6 +43,12 @@
 #include "../ext/lz4/lz4.h"
 #include "../ext/lz4/lz4hc.h"
 
+#ifdef __WINDOWS__
+#include <windows.h>
+#else
+#include <unistd.h>
+#endif
+
 #include "Constants.hpp"
 
 /**
@@ -58,6 +64,27 @@ namespace ZeroTier {
 class Utils
 {
 public:
+	/**
+	 * Delete a file
+	 *
+	 * @param path Path to delete
+	 * @return True if delete was successful
+	 */
+	static inline bool rm(const char *path)
+		throw()
+	{
+#ifdef __WINDOWS__
+		foo;
+#else
+		return (unlink(path) == 0);
+#endif
+	}
+	static inline bool rm(const std::string &path)
+		throw()
+	{
+		return rm(path.c_str());
+	}
+
 	/**
 	 * List a directory's contents
 	 *