root/tools/include/linux/err.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ERR_PTR
  2. PTR_ERR
  3. IS_ERR
  4. IS_ERR_OR_NULL
  5. PTR_ERR_OR_ZERO
  6. ERR_CAST

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef __TOOLS_LINUX_ERR_H
   3 #define __TOOLS_LINUX_ERR_H
   4 
   5 #include <linux/compiler.h>
   6 #include <linux/types.h>
   7 
   8 #include <asm/errno.h>
   9 
  10 /*
  11  * Original kernel header comment:
  12  *
  13  * Kernel pointers have redundant information, so we can use a
  14  * scheme where we can return either an error code or a normal
  15  * pointer with the same return value.
  16  *
  17  * This should be a per-architecture thing, to allow different
  18  * error and pointer decisions.
  19  *
  20  * Userspace note:
  21  * The same principle works for userspace, because 'error' pointers
  22  * fall down to the unused hole far from user space, as described
  23  * in Documentation/x86/x86_64/mm.rst for x86_64 arch:
  24  *
  25  * 0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm hole caused by [48:63] sign extension
  26  * ffffffffffe00000 - ffffffffffffffff (=2 MB) unused hole
  27  *
  28  * It should be the same case for other architectures, because
  29  * this code is used in generic kernel code.
  30  */
  31 #define MAX_ERRNO       4095
  32 
  33 #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)
  34 
  35 static inline void * __must_check ERR_PTR(long error_)
  36 {
  37         return (void *) error_;
  38 }
  39 
  40 static inline long __must_check PTR_ERR(__force const void *ptr)
  41 {
  42         return (long) ptr;
  43 }
  44 
  45 static inline bool __must_check IS_ERR(__force const void *ptr)
  46 {
  47         return IS_ERR_VALUE((unsigned long)ptr);
  48 }
  49 
  50 static inline bool __must_check IS_ERR_OR_NULL(__force const void *ptr)
  51 {
  52         return unlikely(!ptr) || IS_ERR_VALUE((unsigned long)ptr);
  53 }
  54 
  55 static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr)
  56 {
  57         if (IS_ERR(ptr))
  58                 return PTR_ERR(ptr);
  59         else
  60                 return 0;
  61 }
  62 
  63 /**
  64  * ERR_CAST - Explicitly cast an error-valued pointer to another pointer type
  65  * @ptr: The pointer to cast.
  66  *
  67  * Explicitly cast an error-valued pointer to another pointer type in such a
  68  * way as to make it clear that's what's going on.
  69  */
  70 static inline void * __must_check ERR_CAST(__force const void *ptr)
  71 {
  72         /* cast away the const */
  73         return (void *) ptr;
  74 }
  75 #endif /* _LINUX_ERR_H */

/* [<][>][^][v][top][bottom][index][help] */