From bde7a5ff59e26ed86e098d2e4a75f7f1c7e40e00 Mon Sep 17 00:00:00 2001
From: mpc <mpc>
Date: Fri, 25 Jun 2004 22:19:18 +0000
Subject: [PATCH] Mutex code (untested)

---
 apps/enclave/Makefile         |  3 ++-
 apps/enclave/src/logger.cpp   | 17 +++++++++++++++++
 apps/enclave/src/logger.hpp   |  4 ++++
 apps/enclave/src/platform.hpp | 10 ++++++++++
 4 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/apps/enclave/Makefile b/apps/enclave/Makefile
index 3805927028..c3e5b5527b 100644
--- a/apps/enclave/Makefile
+++ b/apps/enclave/Makefile
@@ -34,7 +34,7 @@ CFLAGS = -g -march=i486 -pipe -Wall
 
 CFLAGS += -I$(SAMINCDIR) -I$(TOMCRYPTDIR)
 LDFLAGS = -L$(SAMLIBDIR) -L$(TOMCRYPTDIR)
-LIBS = -lsam -ltomcrypt
+LIBS = -lsam -ltomcrypt -lpthread
 
 #
 # Object files
@@ -45,6 +45,7 @@ OBJS =	$(OBJDIR)/bigint.o \
 		$(OBJDIR)/config.o \
 		$(OBJDIR)/logger.o \
 		$(OBJDIR)/main.o \
+		$(OBJDIR)/mutex.o \
 		$(OBJDIR)/peers.o \
 		$(OBJDIR)/random.o \
 		$(OBJDIR)/rpc.o \
diff --git a/apps/enclave/src/logger.cpp b/apps/enclave/src/logger.cpp
index 1458459950..a0491f18c6 100644
--- a/apps/enclave/src/logger.cpp
+++ b/apps/enclave/src/logger.cpp
@@ -42,3 +42,20 @@ Logger::Logger(const string& file)
 		throw runtime_error("Error opening log file");
 	}
 }
+
+#ifdef WIN_STRERROR
+/*
+ * strerror() for primitive operating systems
+ */
+TCHAR* win_strerror(TCHAR* str, size_t size)
+{ 
+	LPVOID lpMsgBuf;
+	DWORD dw = GetLastError();
+	FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+		NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf,
+		0, NULL);
+	snprintf(str, size, "%s", lpMsgBuf);
+	LocalFree(lpMsgBuf);
+	return str;
+}
+#endif
diff --git a/apps/enclave/src/logger.hpp b/apps/enclave/src/logger.hpp
index 75a5c28922..9ed809241f 100644
--- a/apps/enclave/src/logger.hpp
+++ b/apps/enclave/src/logger.hpp
@@ -81,4 +81,8 @@ class Logger {
 		ofstream logf;
 };
 
+#ifdef WIN_STRERROR
+TCHAR* win_strerror(TCHAR* str, size_t size);
+#endif
+
 #endif  // LOGGER_HPP
diff --git a/apps/enclave/src/platform.hpp b/apps/enclave/src/platform.hpp
index bfdf40ae59..d4a8a201ae 100644
--- a/apps/enclave/src/platform.hpp
+++ b/apps/enclave/src/platform.hpp
@@ -39,6 +39,11 @@
 #define LINUX   2  // Linux
 #define CYGWIN  3  // Cygwin
 
+#if OS == MINGW
+	#define WIN_STRERROR
+	#define WINTHREADS
+#endif
+
 /*
  * System includes
  */
@@ -49,6 +54,11 @@
 #include <iostream>
 #include <list>
 #include <map>
+#ifdef WINTHREADS
+	#include <windows.h>
+#else
+	#include <pthread.h>
+#endif
 #include <stdexcept>
 #include <stdint.h>
 #include <string>
-- 
GitLab