On 31.01.2013 13:43, Christophe Fergeau wrote: > osinfo_loader.c contains a few local hacks to avoid gcc warnings > about set-but-not-read variables. While they are good to silence > gcc, they also cause warnings from the Coverity checker. > Use the ignore_value() macro from gnulib to avoid these warnings > as they don't cause Coverity warnings. > --- > osinfo/ignore-value.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++ > osinfo/osinfo_loader.c | 19 ++++++------------- > 2 files changed, 53 insertions(+), 13 deletions(-) > create mode 100644 osinfo/ignore-value.h > > diff --git a/osinfo/ignore-value.h b/osinfo/ignore-value.h > new file mode 100644 > index 0000000..6bab971 > --- /dev/null > +++ b/osinfo/ignore-value.h > @@ -0,0 +1,47 @@ > +/* ignore a function return without a compiler warning > + > + Copyright (C) 2008-2013 Free Software Foundation, Inc. > + > + This program is free software: you can redistribute it and/or modify > + it under the terms of the GNU Lesser General Public License as published by > + the Free Software Foundation; either version 2.1 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public License > + along with this program. If not, see <http://www.gnu.org/licenses/>. */ > + > +/* Written by Jim Meyering, Eric Blake and Pádraig Brady. */ > + > +/* Use "ignore_value" to avoid a warning when using a function declared with > + gcc's warn_unused_result attribute, but for which you really do want to > + ignore the result. Traditionally, people have used a "(void)" cast to > + indicate that a function's return value is deliberately unused. However, > + if the function is declared with __attribute__((warn_unused_result)), > + gcc issues a warning even with the cast. > + > + Caution: most of the time, you really should heed gcc's warning, and > + check the return value. However, in those exceptional cases in which > + you're sure you know what you're doing, use this function. > + > + For the record, here's one of the ignorable warnings: > + "copy.c:233: warning: ignoring return value of 'fchown', > + declared with attribute warn_unused_result". */ > + > +#ifndef _GL_IGNORE_VALUE_H > +# define _GL_IGNORE_VALUE_H > + > +/* The __attribute__((__warn_unused_result__)) feature > + is available in gcc versions 3.4 and newer, > + while the typeof feature has been available since 2.7 at least. */ > +# if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) > +# define ignore_value(x) ((void) (x)) > +# else > +# define ignore_value(x) (({ __typeof__ (x) __x = (x); (void) __x; })) > +# endif > + > +#endif > diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c > index d713767..76e9bc2 100644 > --- a/osinfo/osinfo_loader.c > +++ b/osinfo/osinfo_loader.c > @@ -34,6 +34,7 @@ > #include <libxml/tree.h> > #include <libxml/xpath.h> > #include <libxml/xmlreader.h> > +#include "ignore-value.h" > #include "osinfo_install_script_private.h" > #include "osinfo_device_driver_private.h" > > @@ -1486,20 +1487,15 @@ osinfo_loader_process_file_reg_ids(OsinfoLoader *loader, > WANT_ID(subvendor_id); > WANT_ID(subdevice_id); > WANT_REST(subsystem); > - > - /* Pretend we 'use' these variables to get around > - * 'gcc' warnings about set-but-not-read vars */ > - if (subvendor_id || subdevice_id || subsystem) > - subsystem = subsystem; > + ignore_value(subvendor_id); > + ignore_value(subdevice_id); > + ignore_value(subsystem); The code looks okay, but why do we have these variable if they are not used anywhere? Michal _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo