[libvirt] [PATCH] Convert virSecurityReportError into a macro
Matthias Bolte
matthias.bolte at googlemail.com
Mon Feb 15 09:43:26 UTC 2010
2010/2/15 Daniel Veillard <veillard at redhat.com>:
> On Sun, Feb 14, 2010 at 11:29:20PM +0100, Matthias Bolte wrote:
>> ---
>> src/security/security_driver.c | 18 ------------------
>> src/security/security_driver.h | 6 +++---
>> 2 files changed, 3 insertions(+), 21 deletions(-)
>>
>> diff --git a/src/security/security_driver.c b/src/security/security_driver.c
>> index 27945a6..4c98190 100644
>> --- a/src/security/security_driver.c
>> +++ b/src/security/security_driver.c
>> @@ -90,24 +90,6 @@ virSecurityDriverStartup(virSecurityDriverPtr *drv,
>> return -2;
>> }
>>
>> -void
>> -virSecurityReportError(int code, const char *fmt, ...)
>> -{
>> - va_list args;
>> - char errorMessage[1024];
>> -
>> - if (fmt) {
>> - va_start(args, fmt);
>> - vsnprintf(errorMessage, sizeof(errorMessage) - 1, fmt, args);
>> - va_end(args);
>> - } else
>> - errorMessage[0] = '\0';
>> -
>> - virRaiseError(NULL, NULL, NULL, VIR_FROM_SECURITY, code,
>> - VIR_ERR_ERROR, NULL, NULL, NULL, -1, -1, "%s",
>> - errorMessage);
>> -}
>> -
>> /*
>> * Helpers
>> */
>> diff --git a/src/security/security_driver.h b/src/security/security_driver.h
>> index 8860d81..15671b3 100644
>> --- a/src/security/security_driver.h
>> +++ b/src/security/security_driver.h
>> @@ -88,9 +88,9 @@ int virSecurityDriverStartup(virSecurityDriverPtr *drv,
>> int
>> virSecurityDriverVerify(virDomainDefPtr def);
>>
>> -void
>> -virSecurityReportError(int code, const char *fmt, ...)
>> - ATTRIBUTE_FMT_PRINTF(2, 3);
>> +#define virSecurityReportError(code, fmt...) \
>> + virReportErrorHelper(NULL, VIR_FROM_SECURITY, code, __FILE__, \
>> + __FUNCTION__, __LINE__, fmt)
>>
>> /* Helpers */
>> void virSecurityDriverInit(virSecurityDriverPtr drv);
>
> ACK, but ultimately a macro end up inflating generated code, which
> might not be ideal especially for something which is very unfrequently
> used at runtime. So I'm wondering a bit about the goal here
>
> Daniel
>
The goal here is to unify and improve the error reporting. The typical
pattern is a macro that includes the error domain and the __FILE__,
__FUNCTION__ and __LINE__ stuff.
Basically the new macro does the same as the old function, but via
virReportErrorHelper. Having __FILE__, __FUNCTION__ and __LINE__ in
the virSecurityReportError macro results in correct values for those.
With the old function virRaiseError expanded to virRaiseErrorFull and
included the __FILE__, __FUNCTION__ and __LINE__ info from within the
virSecurityReportError function, rendering this information useless,
because they were always the same for every call to
virSecurityReportError.
I should have included this into the commit message. I'll do that
before pushing it.
Matthias
More information about the libvir-list
mailing list