File: err.h

package info (click to toggle)
linux 6.19.4-1~exp1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 1,759,672 kB
  • sloc: ansic: 27,007,359; asm: 273,393; sh: 151,330; python: 81,278; makefile: 58,557; perl: 34,311; xml: 21,064; cpp: 5,986; yacc: 4,841; lex: 2,901; awk: 1,707; sed: 30; ruby: 25
file content (28 lines) | stat: -rw-r--r-- 592 bytes parent folder | download | duplicates (29)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* 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__ */