Add mxs_strerror
Thread-safe version of strerror; thread local buffer used for storing the message. The performance penalty of a thread local buffer is not likely to be significant, since this is only called in an error situation that anyway is likely to interrupt the normal processing.
This commit is contained in:
parent
405b944abb
commit
82247f9143
@ -196,4 +196,21 @@ enum
|
||||
trailing NULL. If longer, it will be cut. */
|
||||
};
|
||||
|
||||
/**
|
||||
* Return a thread specific pointer to a string describing the error
|
||||
* code passed as argument. The string is obtained using strerror_r.
|
||||
*
|
||||
* @param error One of the errno error codes.
|
||||
*
|
||||
* @return Thread specific pointer to string describing the error code.
|
||||
*
|
||||
* @attention The function is thread safe, but not re-entrant. That is,
|
||||
* calling it twice with different error codes between two sequence points
|
||||
* will not work. E.g:
|
||||
*
|
||||
* printf("EINVAL = %s, EACCESS = %s",
|
||||
* mxs_strerror(EINVAL), mxs_strerror(EACCESS));
|
||||
*/
|
||||
const char* mxs_strerror(int error);
|
||||
|
||||
MXS_END_DECLS
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <errno.h>
|
||||
#include <syslog.h>
|
||||
#include <maxscale/atomic.h>
|
||||
#include <maxscale/platform.h>
|
||||
|
||||
#include <maxscale/hashtable.h>
|
||||
#include <maxscale/spinlock.h>
|
||||
@ -3011,3 +3012,10 @@ int mxs_log_message(int priority,
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
const char* mxs_strerror(int error)
|
||||
{
|
||||
static thread_local char errbuf[MXS_STRERROR_BUFLEN];
|
||||
|
||||
return strerror_r(error, errbuf, sizeof(errbuf));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user