提交 f5384eed 编写于 作者: D Daniel P. Berrange

Add helpers for dealing with system errors

Add virErrorSetErrnoFromLastError and virLastErrorIsSystemErrno
to simplify code which wants to handle system errors in a more
graceful fashion.
Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
上级 dff93f8c
......@@ -1318,6 +1318,8 @@ ebtablesRemoveForwardAllowIn;
# util/virerror.h
virDispatchError;
virErrorInitialize;
virErrorSetErrnoFromLastError;
virLastErrorIsSystemErrno;
virRaiseErrorFull;
virReportErrorHelper;
virReportOOMErrorFull;
......
......@@ -1404,3 +1404,51 @@ void virSetErrorLogPriorityFunc(virErrorLogPriorityFunc func)
{
virErrorLogPriorityFilter = func;
}
/**
* virErrorSetErrnoFromLastError:
*
* If the last error had a code of VIR_ERR_SYSTEM_ERROR
* then set errno to the value saved in the error object.
*
* If the last error had a code of VIR_ERR_NO_MEMORY
* then set errno to ENOMEM
*
* Otherwise set errno to EIO.
*/
void virErrorSetErrnoFromLastError(void)
{
virErrorPtr err = virGetLastError();
if (err && err->code == VIR_ERR_SYSTEM_ERROR) {
errno = err->int1;
} else if (err && err->code == VIR_ERR_NO_MEMORY) {
errno = ENOMEM;
} else {
errno = EIO;
}
}
/**
* virLastErrorIsSystemErrno:
* @errnum: the errno value
*
* Check if the last error reported is a system
* error with the specific errno value.
*
* If @errnum is zero, any system error will pass.
*
* Returns true if the last error was a system error with errno == @errnum
*/
bool virLastErrorIsSystemErrno(int errnum)
{
virErrorPtr err = virGetLastError();
if (!err)
return false;
if (err->code != VIR_ERR_SYSTEM_ERROR)
return false;
if (errnum != 0 && err->int1 != errnum)
return false;
return true;
}
......@@ -175,4 +175,8 @@ const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen);
typedef int (*virErrorLogPriorityFunc)(virErrorPtr, int);
void virSetErrorLogPriorityFunc(virErrorLogPriorityFunc func);
void virErrorSetErrnoFromLastError(void);
bool virLastErrorIsSystemErrno(int errnum);
#endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册