On Fri, 2017-09-01 at 09:00 -0600, Jason Gunthorpe wrote: > On Fri, Sep 01, 2017 at 07:56:32AM +0300, Leon Romanovsky wrote: > > On Thu, Aug 31, 2017 at 02:50:56PM -0600, Jason Gunthorpe wrote: > > > To avoid clashing with user variables. > > > > > > Signed-off-by: Jason Gunthorpe <jgunthorpe@xxxxxxxxxxxxxxxxxxxx> > > > util/util.h | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > diff --git a/util/util.h b/util/util.h > > > index cbf0deca2dde7b..30d32ee6b51e24 100644 > > > +++ b/util/util.h > > > @@ -8,8 +8,8 @@ > > > * error */ > > > #define check_snprintf(buf, len, fmt, ...) \ > > > ({ \ > > > - int rc = snprintf(buf, len, fmt, ##__VA_ARGS__); \ > > > - (rc < len && rc >= 0); \ > > > + int __rc__ = snprintf(buf, len, fmt, ##__VA_ARGS__); \ > > > > It can't clash, because it is declared in the scope {..} of that define and > > it is local to check_snprintf macro. > > This triggers a -Wshadow warning: > > int rc; > check_snprinf(str, sizeof(str), ..) > > And rc is commonly used in callers, so it shouldn't. > > Perhaps this addresses all the concerns: > > /* Return true if the snprintf succeeded, false if there was truncation or > * error */ > static inline bool __good_snprintf(size_t len, int rc) > { > return (rc < len && rc >= 0); > } > > #define check_snprintf(buf, len, fmt, ...) \ > __good_snprintf(len, snprintf(buf, len, fmt, ##__VA_ARGS__)) If an inline function will be introduced anyway, why not to make check_snprintf() itself an inline function and use vsnprintf() instead of snprintf()? Bart.��.n��������+%������w��{.n�����{���fk��ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f