Re: [PATCH rdma-core 2/5] util: Fix check_snprintf to use __rc__ for local

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux