[Spice-devel] [PATCH spice-common v3 2/2] log: Force format in log macro to be a string

Frediano Ziglio fziglio at redhat.com
Wed Jul 5 08:07:08 UTC 2017


> 
> On Tue, Jul 04, 2017 at 10:18:52AM +0100, Frediano Ziglio wrote:
> > Make sure format is a string and not a pointer.
> > This prevents usages like:
> > 
> >   spice_debug(NULL);
> > 
> > This also prevents computed format strings too but on the other
> > hand allows the compiler to check argument types.
> 
> This is vague and misleading, the compiler should already be able to
> check that we have a format string with the right arguments. This patch
> just adds a little bit on top of that, which is ensuring the format
> string is not NULL.
> 
> Christophe
> 

How can the compiler know if 

  spice_debug(my_string, 1, 2, 3);

is correct or not? The compiler must know the value of "my_string".
In the case of computed format strings the compiler cannot check types.
Currently we don't use computed strings but just constants or NULL,
with this patch code only allows constant strings.

> > 
> > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > ---
> > Changes since v1:
> > - extent commit message rationale.
> > ---
> >  common/log.h | 10 +++++-----
> >  1 file changed, 5 insertions(+), 5 deletions(-)
> > 
> > diff --git a/common/log.h b/common/log.h
> > index 9f5fcbb..06d48d2 100644
> > --- a/common/log.h
> > +++ b/common/log.h
> > @@ -62,23 +62,23 @@ void spice_log(GLogLevelFlags log_level,
> >  } G_STMT_END
> >  
> >  #define spice_info(format, ...) G_STMT_START {                         \
> > -    spice_log(G_LOG_LEVEL_INFO, SPICE_STRLOC, __FUNCTION__, format, ##
> > __VA_ARGS__); \
> > +    spice_log(G_LOG_LEVEL_INFO, SPICE_STRLOC, __FUNCTION__, "" format, ##
> > __VA_ARGS__); \
> >  } G_STMT_END
> >  
> >  #define spice_debug(format, ...) G_STMT_START {                         \
> > -    spice_log(G_LOG_LEVEL_DEBUG, SPICE_STRLOC, __FUNCTION__, format, ##
> > __VA_ARGS__); \
> > +    spice_log(G_LOG_LEVEL_DEBUG, SPICE_STRLOC, __FUNCTION__, "" format, ##
> > __VA_ARGS__); \
> >  } G_STMT_END
> >  
> >  #define spice_warning(format, ...) G_STMT_START {                       \
> > -    spice_log(G_LOG_LEVEL_WARNING, SPICE_STRLOC, __FUNCTION__, format, ##
> > __VA_ARGS__); \
> > +    spice_log(G_LOG_LEVEL_WARNING, SPICE_STRLOC, __FUNCTION__, "" format,
> > ## __VA_ARGS__); \
> >  } G_STMT_END
> >  
> >  #define spice_critical(format, ...) G_STMT_START {
> >  \
> > -    spice_log(G_LOG_LEVEL_CRITICAL, SPICE_STRLOC, __FUNCTION__, format, ##
> > __VA_ARGS__); \
> > +    spice_log(G_LOG_LEVEL_CRITICAL, SPICE_STRLOC, __FUNCTION__, "" format,
> > ## __VA_ARGS__); \
> >  } G_STMT_END
> >  
> >  #define spice_error(format, ...) G_STMT_START {                         \
> > -    spice_log(G_LOG_LEVEL_ERROR, SPICE_STRLOC, __FUNCTION__, format, ##
> > __VA_ARGS__); \
> > +    spice_log(G_LOG_LEVEL_ERROR, SPICE_STRLOC, __FUNCTION__, "" format, ##
> > __VA_ARGS__); \
> >  } G_STMT_END
> >  
> >  #define spice_warn_if_fail(x) G_STMT_START {            \

Frediano


More information about the Spice-devel mailing list