|  | /* | 
|  | * Copyright (c) 2018 Intel Corporation. | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | #ifndef ZEPHYR_INCLUDE_SYS_ERRNO_PRIVATE_H_ | 
|  | #define ZEPHYR_INCLUDE_SYS_ERRNO_PRIVATE_H_ | 
|  |  | 
|  | #include <toolchain.h> | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | /* NOTE: located here to avoid include dependency loops between errno.h | 
|  | * and kernel.h | 
|  | */ | 
|  |  | 
|  | #ifdef CONFIG_ERRNO_IN_TLS | 
|  | extern __thread int z_errno_var; | 
|  |  | 
|  | static inline int *z_errno(void) | 
|  | { | 
|  | return &z_errno_var; | 
|  | } | 
|  | #else | 
|  | /** | 
|  | * return a pointer to a memory location containing errno | 
|  | * | 
|  | * errno is thread-specific, and can't just be a global. This pointer | 
|  | * is guaranteed to be read/writable from user mode. | 
|  | * | 
|  | * @return Memory location of errno data for current thread | 
|  | */ | 
|  | __syscall int *z_errno(void); | 
|  |  | 
|  | #endif /* CONFIG_ERRNO_IN_TLS */ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #ifndef CONFIG_ERRNO_IN_TLS | 
|  | #include <syscalls/errno_private.h> | 
|  | #endif /* CONFIG_ERRNO_IN_TLS */ | 
|  |  | 
|  | #endif /* ZEPHYR_INCLUDE_SYS_ERRNO_PRIVATE_H_ */ |