Skip to content

Commit

Permalink
util: A generic function to convert error to string for windows.
Browse files Browse the repository at this point in the history
More users will be added in an upcoming commit.

Signed-off-by: Gurucharan Shetty <[email protected]>
Acked-by: Ben Pfaff <[email protected]>
  • Loading branch information
shettyg committed Jan 28, 2014
1 parent 9d0581f commit 06f14c9
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 11 deletions.
12 changes: 1 addition & 11 deletions lib/entropy.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
16 changes: 16 additions & 0 deletions lib/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -1649,3 +1649,19 @@ ovs_scan(const char *s, const char *format, ...)
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
5 changes: 5 additions & 0 deletions lib/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 06f14c9

Please sign in to comment.