mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
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: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
dff93f8cab
commit
f5384eed3f
@ -1318,6 +1318,8 @@ ebtablesRemoveForwardAllowIn;
|
|||||||
# util/virerror.h
|
# util/virerror.h
|
||||||
virDispatchError;
|
virDispatchError;
|
||||||
virErrorInitialize;
|
virErrorInitialize;
|
||||||
|
virErrorSetErrnoFromLastError;
|
||||||
|
virLastErrorIsSystemErrno;
|
||||||
virRaiseErrorFull;
|
virRaiseErrorFull;
|
||||||
virReportErrorHelper;
|
virReportErrorHelper;
|
||||||
virReportOOMErrorFull;
|
virReportOOMErrorFull;
|
||||||
|
@ -1404,3 +1404,51 @@ void virSetErrorLogPriorityFunc(virErrorLogPriorityFunc func)
|
|||||||
{
|
{
|
||||||
virErrorLogPriorityFilter = 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);
|
typedef int (*virErrorLogPriorityFunc)(virErrorPtr, int);
|
||||||
void virSetErrorLogPriorityFunc(virErrorLogPriorityFunc func);
|
void virSetErrorLogPriorityFunc(virErrorLogPriorityFunc func);
|
||||||
|
|
||||||
|
void virErrorSetErrnoFromLastError(void);
|
||||||
|
|
||||||
|
bool virLastErrorIsSystemErrno(int errnum);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user