13cab2bb3Spatrick //===-- sanitizer_errno.h ---------------------------------------*- C++ -*-===// 23cab2bb3Spatrick // 33cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 43cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information. 53cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 63cab2bb3Spatrick // 73cab2bb3Spatrick //===----------------------------------------------------------------------===// 83cab2bb3Spatrick // 93cab2bb3Spatrick // This file is shared between sanitizers run-time libraries. 103cab2bb3Spatrick // 113cab2bb3Spatrick // Defines errno to avoid including errno.h and its dependencies into sensitive 123cab2bb3Spatrick // files (e.g. interceptors are not supposed to include any system headers). 133cab2bb3Spatrick // It's ok to use errno.h directly when your file already depend on other system 143cab2bb3Spatrick // includes though. 153cab2bb3Spatrick // 163cab2bb3Spatrick //===----------------------------------------------------------------------===// 173cab2bb3Spatrick 183cab2bb3Spatrick #ifndef SANITIZER_ERRNO_H 193cab2bb3Spatrick #define SANITIZER_ERRNO_H 203cab2bb3Spatrick 213cab2bb3Spatrick #include "sanitizer_errno_codes.h" 223cab2bb3Spatrick #include "sanitizer_platform.h" 233cab2bb3Spatrick 24*810390e3Srobert #if SANITIZER_FREEBSD || SANITIZER_APPLE 253cab2bb3Spatrick # define __errno_location __error 26d89ec533Spatrick #elif SANITIZER_ANDROID || SANITIZER_NETBSD 273cab2bb3Spatrick # define __errno_location __errno 283cab2bb3Spatrick #elif SANITIZER_SOLARIS 293cab2bb3Spatrick # define __errno_location ___errno 303cab2bb3Spatrick #elif SANITIZER_WINDOWS 313cab2bb3Spatrick # define __errno_location _errno 323cab2bb3Spatrick #endif 333cab2bb3Spatrick 343cab2bb3Spatrick extern "C" int *__errno_location(); 353cab2bb3Spatrick 363cab2bb3Spatrick #define errno (*__errno_location()) 373cab2bb3Spatrick 383cab2bb3Spatrick #endif // SANITIZER_ERRNO_H 39