root/tools/testing/selftests/bpf/progs/err.h
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __ERR_H__
#define __ERR_H__

#define MAX_ERRNO 4095
#define IS_ERR_VALUE(x) (unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO

#define __STR(x) #x

#define set_if_not_errno_or_zero(x, y)                  \
({                                                      \
        asm volatile ("if %0 s< -4095 goto +1\n"        \
                      "if %0 s<= 0 goto +1\n"           \
                      "%0 = " __STR(y) "\n"             \
                      : "+r"(x));                       \
})

static inline int IS_ERR_OR_NULL(const void *ptr)
{
        return !ptr || IS_ERR_VALUE((unsigned long)ptr);
}

static inline long PTR_ERR(const void *ptr)
{
        return (long) ptr;
}

#endif /* __ERR_H__ */