Implemented the new profiler
[akaros.git] / kern / include / error.h
1 /* See COPYRIGHT for copyright information. */
2
3 #pragma once
4
5 #include <ros/errno.h>
6
7 typedef int error_t;
8 extern const char *const errno_strings[];
9 extern const int MAX_ERRNO;
10
11 #define ERR_PTR(err)  ((void *)((uintptr_t)(err)))
12 #define PTR_ERR(ptr)  ((uintptr_t)(ptr))
13 #define IS_ERR(ptr)   ((uintptr_t)-(uintptr_t)(ptr) <= MAX_ERRNO)
14
15 /* Plan9 wants to return non-const char* all over the place, so even if a const
16  * char* would have made much more sense, unless we want to refactor a huge
17  * amount of code, we need to return a char*.
18  */
19 static inline char *errno_to_string(int error)
20 {
21         extern const char *const errno_strings[];
22
23         return error >= 0 && error < MAX_ERRNO && errno_strings[error] != NULL ?
24                 (char *) errno_strings[error]: (char *) "Unknown error";
25 }