]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
include: fix IS_ERR on Windows 48016/head
authorLucian Petrut <lpetrut@cloudbasesolutions.com>
Fri, 26 Aug 2022 12:54:10 +0000 (12:54 +0000)
committerIlya Dryomov <idryomov@gmail.com>
Thu, 8 Sep 2022 17:32:10 +0000 (19:32 +0200)
The "long" type uses 32b on x64 Windows platforms, which means
it's not large enough to store a pointer. intptr_t or uintptr_t
should be used instead.

This change fixes include/err.h, using the right types. There was
a previous patch on this topic but unfortunately it didn't address
all the type casts.

This issue was brought up by the unittest_crush test, which recently
started to fail as the CrushWrapper methods use IS_ERR.

Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
(cherry picked from commit c95b6b6c774da05e989cd09e23eee1eeaa9e6ec2)

src/include/err.h

index 2c63b69909bbf6d1ae779eb366f5c498e66bc200..c188e97532f4838dc8f6113c623b12953eb825b6 100644 (file)
@@ -5,10 +5,11 @@
  * adapted from linux 2.6.24 include/linux/err.h
  */
 #define MAX_ERRNO 4095
-#define IS_ERR_VALUE(x) ((x) >= (unsigned long)-MAX_ERRNO)
+#define IS_ERR_VALUE(x) ((x) >= (uintptr_t)-MAX_ERRNO)
 
 #include <errno.h>
 #include <stdint.h>
+#include <stdbool.h>
 
 /* this generates a warning in c++; caller can do the cast manually
 static inline void *ERR_PTR(long error)
@@ -17,12 +18,12 @@ static inline void *ERR_PTR(long error)
 }
 */
 
-static inline long PTR_ERR(const void *ptr)
+static inline intptr_t PTR_ERR(const void *ptr)
 {
-  return (uintptr_t) ptr;
+  return (intptr_t) ptr;
 }
 
-static inline long IS_ERR(const void *ptr)
+static inline bool IS_ERR(const void *ptr)
 {
   return IS_ERR_VALUE((uintptr_t)ptr);
 }