aboutsummaryrefslogtreecommitdiff
path: root/libcxx/src/experimental/log_hardening_failure.cpp
blob: f836c154522495568300a06f8622f278858bf0d0 (plain)
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
29
30
31
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include <__config>
#include <__log_hardening_failure>
#include <cstdio>

#ifdef __BIONIC__
#  include <syslog.h>
#endif // __BIONIC__

_LIBCPP_BEGIN_NAMESPACE_STD

void __log_hardening_failure(const char* message) noexcept {
  // Always log the message to `stderr` in case the platform-specific system calls fail.
  std::fputs(message, stderr);

#if defined(__BIONIC__)
  // Show error in logcat. The latter two arguments are ignored on Android.
  openlog("libc++", 0, 0);
  syslog(LOG_CRIT, "%s", message);
  closelog();
#endif
}

_LIBCPP_END_NAMESPACE_STD