When using ccache, we get a harmless warning about the fact that
we use the result of a multiplication as a condition:

drivers/infiniband/core/uverbs_main.c: In function 'ib_uverbs_write':
drivers/infiniband/core/uverbs_main.c:787:40: error: '*' in boolean context, 
suggest '&&' instead [-Werror=int-in-bool-context]
drivers/infiniband/core/uverbs_main.c:787:117: error: '*' in boolean context, 
suggest '&&' instead [-Werror=int-in-bool-context]
drivers/infiniband/core/uverbs_main.c:790:50: error: '*' in boolean context, 
suggest '&&' instead [-Werror=int-in-bool-context]
drivers/infiniband/core/uverbs_main.c:790:151: error: '*' in boolean context, 
suggest '&&' instead [-Werror=int-in-bool-context]

This changes the macro to explicitly check the number for a positive
length, which avoids the warning.

Fixes: a96e4e2ffe43 ("IB/uverbs: New macro to set pointers to NULL if length is 
0 in INIT_UDATA()")
Signed-off-by: Arnd Bergmann <a...@arndb.de>
---
 drivers/infiniband/core/uverbs.h | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/infiniband/core/uverbs.h b/drivers/infiniband/core/uverbs.h
index 64d494a64daf..364d7de05721 100644
--- a/drivers/infiniband/core/uverbs.h
+++ b/drivers/infiniband/core/uverbs.h
@@ -55,12 +55,14 @@
                (udata)->outlen = (olen);                               \
        } while (0)
 
-#define INIT_UDATA_BUF_OR_NULL(udata, ibuf, obuf, ilen, olen)                  
\
-       do {                                                                    
\
-               (udata)->inbuf  = (ilen) ? (const void __user *) (ibuf) : NULL; 
\
-               (udata)->outbuf = (olen) ? (void __user *) (obuf) : NULL;       
\
-               (udata)->inlen  = (ilen);                                       
\
-               (udata)->outlen = (olen);                                       
\
+#define INIT_UDATA_BUF_OR_NULL(udata, ibuf, obuf, ilen, olen)          \
+       do {                                                            \
+               (udata)->inbuf  = (ilen) > 0 ?                          \
+                                 (const void __user *) (ibuf) : NULL;  \
+               (udata)->outbuf = (olen) > 0 ?                          \
+                                 (void __user *) (obuf) : NULL;        \
+               (udata)->inlen  = (ilen);                               \
+               (udata)->outlen = (olen);                               \
        } while (0)
 
 /*
-- 
2.9.0

Reply via email to