More users will be added in an upcoming commit.

Signed-off-by: Gurucharan Shetty <gshe...@nicira.com>
---
 lib/entropy.c |   13 ++-----------
 lib/util.c    |   13 +++++++++++++
 lib/util.h    |    5 +++++
 3 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/lib/entropy.c b/lib/entropy.c
index fd73566..f397259 100644
--- a/lib/entropy.c
+++ b/lib/entropy.c
@@ -56,22 +56,13 @@ get_entropy(void *buffer, size_t n)
 #else
     int error = 0;
     HCRYPTPROV   crypt_prov = 0;
-    LPVOID msg_buf;
+    char *msg_buf;
 
     CryptAcquireContext(&crypt_prov, NULL, NULL,
                         PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
     if (!CryptGenRandom(crypt_prov, n, buffer)) {
         error = EINVAL;
-        FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
-                      | FORMAT_MESSAGE_FROM_SYSTEM
-                      | FORMAT_MESSAGE_IGNORE_INSERTS,
-                      NULL,
-                      GetLastError(),
-                      0,
-                      (LPTSTR)&msg_buf,
-                      0,
-                      NULL
-            );
+        ovs_lasterror_to_string(&msg_buf);
         VLOG_ERR("CryptGenRandom: read error (%s)", msg_buf);
         LocalFree(msg_buf);
     }
diff --git a/lib/util.c b/lib/util.c
index 0ebf085..04cd51a 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -1649,3 +1649,16 @@ exit:
     return ok;
 }
 
+#ifdef _WIN32
+
+/* Calls FormatMessage() with GetLastError() as an argument and stores the
+ * output in '*buffer'. The caller is responsible for freeing the memory
+ * pointed to by '*buffer' using LocalFree(). */
+void
+ovs_lasterror_to_string(char **buffer)
+{
+    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM
+                  | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), 0,
+                  (char *)buffer, 0, NULL);
+}
+#endif
diff --git a/lib/util.h b/lib/util.h
index 8886a54..e51f35b 100644
--- a/lib/util.h
+++ b/lib/util.h
@@ -490,6 +490,11 @@ void bitwise_put(uint64_t value,
 uint64_t bitwise_get(const void *src, unsigned int src_len,
                      unsigned int src_ofs, unsigned int n_bits);
 
+#ifdef _WIN32
+
+void ovs_lasterror_to_string(char **buffer);
+#endif
+
 #ifdef  __cplusplus
 }
 #endif
-- 
1.7.9.5

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to