BAN: Errors.h can be included from userspace
This commit is contained in:
		
							parent
							
								
									27147790fd
								
							
						
					
					
						commit
						03c64b950b
					
				|  | @ -1,12 +1,13 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <BAN/Formatter.h> | #include <BAN/Formatter.h> | ||||||
|  | #include <BAN/StringView.h> | ||||||
| #include <BAN/Variant.h> | #include <BAN/Variant.h> | ||||||
| 
 | 
 | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| 
 | 
 | ||||||
| #if defined(__is_kernel) | #ifdef __is_kernel | ||||||
| 	#include <kernel/Panic.h> | 	#include <kernel/Panic.h> | ||||||
| 	#include <kernel/Errors.h> | 	#include <kernel/Errors.h> | ||||||
| 	#define MUST(expr)		 ({ auto&& e = expr; if (e.is_error()) Kernel::panic("{}", e.error()); e.release_value(); }) | 	#define MUST(expr)		 ({ auto&& e = expr; if (e.is_error()) Kernel::panic("{}", e.error()); e.release_value(); }) | ||||||
|  | @ -24,29 +25,37 @@ namespace BAN | ||||||
| 
 | 
 | ||||||
| 	class Error | 	class Error | ||||||
| 	{ | 	{ | ||||||
|  | #ifdef __is_kernel | ||||||
| 	private: | 	private: | ||||||
| 		static constexpr uint64_t kernel_error_mask = uint64_t(1) << 63; | 		static constexpr uint64_t kernel_error_mask = uint64_t(1) << 63; | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 	public: | 	public: | ||||||
|  | #ifdef __is_kernel | ||||||
| 		static Error from_error_code(Kernel::ErrorCode error) | 		static Error from_error_code(Kernel::ErrorCode error) | ||||||
| 		{ | 		{ | ||||||
| 			return Error((uint64_t)error | kernel_error_mask); | 			return Error((uint64_t)error | kernel_error_mask); | ||||||
| 		} | 		} | ||||||
|  | #endif | ||||||
| 		static Error from_errno(int error) | 		static Error from_errno(int error) | ||||||
| 		{ | 		{ | ||||||
| 			return Error(error); | 			return Error(error); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | #ifdef __is_kernel | ||||||
| 		Kernel::ErrorCode kernel_error() const | 		Kernel::ErrorCode kernel_error() const | ||||||
| 		{ | 		{ | ||||||
| 			return (Kernel::ErrorCode)(m_error_code & ~kernel_error_mask); | 			return (Kernel::ErrorCode)(m_error_code & ~kernel_error_mask); | ||||||
| 		} | 		} | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 		uint64_t get_error_code() const { return m_error_code; } | 		uint64_t get_error_code() const { return m_error_code; } | ||||||
| 		BAN::StringView get_message() const | 		BAN::StringView get_message() const | ||||||
| 		{ | 		{ | ||||||
|  | #ifdef __is_kernel | ||||||
| 			if (m_error_code & kernel_error_mask) | 			if (m_error_code & kernel_error_mask) | ||||||
| 				return Kernel::error_string(kernel_error()); | 				return Kernel::error_string(kernel_error()); | ||||||
|  | #endif | ||||||
| 			return strerror(m_error_code); | 			return strerror(m_error_code); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -132,7 +141,7 @@ namespace BAN | ||||||
| 		void release_value()			{ } | 		void release_value()			{ } | ||||||
| 
 | 
 | ||||||
| 	private: | 	private: | ||||||
| 		Error m_data { Error::from_error_code(Kernel::ErrorCode::None) }; | 		Error m_data { Error::from_errno(0) }; | ||||||
| 		bool m_has_error { false }; | 		bool m_has_error { false }; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue