From 06f14c92f666e03708ffa8731223611943bc28bd Mon Sep 17 00:00:00 2001 From: Gurucharan Shetty Date: Thu, 16 Jan 2014 13:49:38 -0800 Subject: [PATCH] util: A generic function to convert error to string for windows. More users will be added in an upcoming commit. Signed-off-by: Gurucharan Shetty Acked-by: Ben Pfaff --- lib/entropy.c | 12 +----------- lib/util.c | 16 ++++++++++++++++ lib/util.h | 5 +++++ 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/lib/entropy.c b/lib/entropy.c index fd7356652..53f7e72a6 100644 --- a/lib/entropy.c +++ b/lib/entropy.c @@ -56,22 +56,12 @@ get_entropy(void *buffer, size_t n) #else int error = 0; HCRYPTPROV crypt_prov = 0; - LPVOID msg_buf; CryptAcquireContext(&crypt_prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); if (!CryptGenRandom(crypt_prov, n, buffer)) { + char *msg_buf = ovs_lasterror_to_string(); error = EINVAL; - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER - | FORMAT_MESSAGE_FROM_SYSTEM - | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - GetLastError(), - 0, - (LPTSTR)&msg_buf, - 0, - NULL - ); VLOG_ERR("CryptGenRandom: read error (%s)", msg_buf); LocalFree(msg_buf); } diff --git a/lib/util.c b/lib/util.c index 0ebf0852f..87cc11295 100644 --- a/lib/util.c +++ b/lib/util.c @@ -1649,3 +1649,19 @@ exit: return ok; } +#ifdef _WIN32 + +/* Calls FormatMessage() with GetLastError() as an argument. Returns + * pointer to a buffer that receives the null-terminated string that specifies + * the formatted message and that has to be freed by the caller with + * LocalFree(). */ +char * +ovs_lasterror_to_string(void) +{ + char *buffer; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), 0, + (char *)&buffer, 0, NULL); + return buffer; +} +#endif diff --git a/lib/util.h b/lib/util.h index 8886a5490..2e3d1dac7 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 + +char *ovs_lasterror_to_string(void); +#endif + #ifdef __cplusplus } #endif -- 2.47.0