diff options
Diffstat (limited to 'common.c')
| -rw-r--r-- | common.c | 24 | 
1 files changed, 24 insertions, 0 deletions
| @@ -50,6 +50,30 @@ init_openssl (void)  // --- To be moved to liberty -------------------------------------------------- +// FIXME: in xssl_get_error() we rely on error reasons never being NULL (i.e., +//   all loaded), which isn't very robust. +// TODO: check all places where this is used and see if we couldn't gain better +//   information by piecing together some other subset of data from the error +//   stack.  Most often, this is used in an error_set() context, which would +//   allow us to allocate memory instead of returning static strings. +static const char * +xerr_describe_error (void) +{ +	unsigned long err = ERR_get_error (); +	if (!err) +		return "undefined error"; + +	const char *reason = ERR_reason_error_string (err); +	do +		// Not thread-safe, not a concern right now--need a buffer +		print_debug ("%s", ERR_error_string (err, NULL)); +	while ((err = ERR_get_error ())); + +	if (!reason) +		return "cannot retrieve error description"; +	return reason; +} +  static ssize_t  strv_find (const struct strv *v, const char *s)  { | 
