/**
- * virRaiseError:
+ * virRaiseErrorFull:
* @conn: the connection to the hypervisor if available
- * @dom: the domain if available
- * @net: the network if available
+ * @filename: filename where error was raised
+ * @funcname: function name where error was raised
+ * @linenr: line number where error was raised
* @domain: the virErrorDomain indicating where it's coming from
* @code: the virErrorNumber code for the error
* @level: the virErrorLevel for the error
* immediately if a callback is found and store it for later handling.
*/
void
-virRaiseError(virConnectPtr conn,
- virDomainPtr dom ATTRIBUTE_UNUSED,
- virNetworkPtr net ATTRIBUTE_UNUSED,
- int domain, int code, virErrorLevel level,
- const char *str1, const char *str2, const char *str3,
- int int1, int int2, const char *msg, ...)
+virRaiseErrorFull(virConnectPtr conn,
+ const char *filename ATTRIBUTE_UNUSED,
+ const char *funcname,
+ size_t linenr,
+ int domain,
+ int code,
+ virErrorLevel level,
+ const char *str1,
+ const char *str2,
+ const char *str3,
+ int int1,
+ int int2,
+ const char *fmt, ...)
{
virErrorPtr to;
void *userData = virUserData;
/*
* formats the message
*/
- if (msg == NULL) {
+ if (fmt == NULL) {
str = strdup(_("No error message provided"));
} else {
- VIR_GET_VAR_STR(msg, str);
+ VIR_GET_VAR_STR(fmt, str);
}
/*
* Hook up the error or warning to the logging facility
- * TODO: pass function name and lineno
+ * XXXX should we include filename as 'category' instead of domain name ?
*/
virLogMessage(virErrorDomainName(domain), virErrorLevelPriority(level),
- NULL, 0, 1, "%s", str);
+ funcname, linenr, 1, "%s", str);
/*
* Save the information about the error
* Helper function to do most of the grunt work for individual driver
* ReportError
*/
-void virReportErrorHelper(virConnectPtr conn, int domcode, int errcode,
- const char *filename ATTRIBUTE_UNUSED,
- const char *funcname ATTRIBUTE_UNUSED,
- size_t linenr ATTRIBUTE_UNUSED,
+void virReportErrorHelper(virConnectPtr conn,
+ int domcode,
+ int errcode,
+ const char *filename,
+ const char *funcname,
+ size_t linenr,
const char *fmt, ...)
{
va_list args;
}
virerr = virErrorMsg(errcode, (errorMessage[0] ? errorMessage : NULL));
- virRaiseError(conn, NULL, NULL, domcode, errcode, VIR_ERR_ERROR,
- virerr, errorMessage, NULL, -1, -1, virerr, errorMessage);
+ virRaiseErrorFull(conn, filename, funcname, linenr,
+ domcode, errcode, VIR_ERR_ERROR,
+ virerr, errorMessage, NULL,
+ -1, -1, virerr, errorMessage);
}
void virReportSystemErrorFull(virConnectPtr conn,
int domcode,
int theerrno,
- const char *filename ATTRIBUTE_UNUSED,
- const char *funcname ATTRIBUTE_UNUSED,
- size_t linenr ATTRIBUTE_UNUSED,
+ const char *filename,
+ const char *funcname,
+ size_t linenr,
const char *fmt, ...)
{
char strerror_buf[1024];
if (!msgDetail)
msgDetail = errnoDetail;
- virRaiseError(conn, NULL, NULL, domcode, VIR_ERR_SYSTEM_ERROR, VIR_ERR_ERROR,
- msg, msgDetail, NULL, -1, -1, msg, msgDetail);
+ virRaiseErrorFull(conn, filename, funcname, linenr,
+ domcode, VIR_ERR_SYSTEM_ERROR, VIR_ERR_ERROR,
+ msg, msgDetail, NULL, -1, -1, msg, msgDetail);
}
void virReportOOMErrorFull(virConnectPtr conn,
int domcode,
- const char *filename ATTRIBUTE_UNUSED,
- const char *funcname ATTRIBUTE_UNUSED,
- size_t linenr ATTRIBUTE_UNUSED)
+ const char *filename,
+ const char *funcname,
+ size_t linenr)
{
const char *virerr;
virerr = virErrorMsg(VIR_ERR_NO_MEMORY, NULL);
- virRaiseError(conn, NULL, NULL, domcode, VIR_ERR_NO_MEMORY, VIR_ERR_ERROR,
- virerr, NULL, NULL, -1, -1, virerr, NULL);
+ virRaiseErrorFull(conn, filename, funcname, linenr,
+ domcode, VIR_ERR_NO_MEMORY, VIR_ERR_ERROR,
+ virerr, NULL, NULL, -1, -1, virerr, NULL);
}
* *
************************************************************************/
int virErrorInitialize(void);
-void virRaiseError(virConnectPtr conn,
- virDomainPtr dom,
- virNetworkPtr net,
- int domain,
- int code,
- virErrorLevel level,
- const char *str1,
- const char *str2,
- const char *str3,
- int int1, int int2, const char *msg, ...)
- ATTRIBUTE_FORMAT(printf, 12, 13);
+void virRaiseErrorFull(virConnectPtr conn,
+ const char *filename,
+ const char *funcname,
+ size_t linenr,
+ int domain,
+ int code,
+ virErrorLevel level,
+ const char *str1,
+ const char *str2,
+ const char *str3,
+ int int1,
+ int int2,
+ const char *fmt, ...)
+ ATTRIBUTE_FORMAT(printf, 13, 14);
+
+/* Includes 'dom' and 'net' for compatbility, but they're ignored */
+#define virRaiseError(conn, dom, net, domain, code, level, \
+ str1, str2, str3, int1, int2, msg, ...) \
+ virRaiseErrorFull(conn, __FILE__, __FUNCTION__, __LINE__, \
+ domain, code, level, str1, str2, str3, int1, int2, \
+ msg, __VA_ARGS__)
+
const char *virErrorMsg(virErrorNumber error, const char *info);
void virReportErrorHelper(virConnectPtr conn, int domcode, int errcode,
const char *filename ATTRIBUTE_UNUSED,