blob: dd00eb62aed269c587e4efe49ec1d4b489ef2d43 [file] [log] [blame]
David Reveman74e99bb2019-02-15 18:47:25 -05001// Copyright 2018 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <stdlib.h>
6
7#include <atomic>
8#include <cassert>
9#include <cstdarg>
10#include <cstdint>
11#include <cstdio>
12#include <thread>
13
14#include "cutils/log.h"
15#include "cutils/properties.h"
16#include "cutils/threads.h"
17
18extern "C" {
19
20int property_get(const char* key, char* value, const char* default_value) {
21 return 0;
22}
23
24int __android_log_print(int priority, const char* tag, const char* format,
25 ...) {
26 if (priority == ANDROID_LOG_VERBOSE || priority == ANDROID_LOG_DEBUG) {
27 return 1;
28 }
29 const char* local_tag = tag;
30 if (!local_tag) {
31 local_tag = "<NO_TAG>";
32 }
33 printf("%d %s ", priority, local_tag);
34 va_list ap;
35 va_start(ap, format);
36 vprintf(format, ap);
37 va_end(ap);
38 printf("\n");
39 return 1;
40}
41
42void __android_log_assert(const char* condition, const char* tag,
43 const char* format, ...) {
44 const char* local_tag = tag;
45 if (!local_tag) {
46 local_tag = "<NO_TAG>";
47 }
48 printf("__android_log_assert: condition: %s tag: %s ", condition, local_tag);
49 if (format) {
50 va_list ap;
51 va_start(ap, format);
52 vprintf(format, ap);
53 va_end(ap);
54 }
55 printf("\n");
56
57 assert(0);
58 exit(-1);
59}
60
61int sync_wait(int fd, int timeout) {
62 return -1;
63}
64
65void* thread_store_get(thread_store_t* store) {
66 return store->has_tls ? pthread_getspecific(store->tls) : nullptr;
67}
68
69void thread_store_set(thread_store_t* store,
70 void* value,
71 thread_store_destruct_t destroy) {
72 pthread_mutex_lock(&store->lock);
73 if (!store->has_tls) {
74 if (pthread_key_create(&store->tls, destroy) != 0) {
75 pthread_mutex_unlock(&store->lock);
76 return;
77 }
78 store->has_tls = 1;
79 }
80 pthread_mutex_unlock(&store->lock);
81 pthread_setspecific(store->tls, value);
82}
83
84pid_t gettid() {
85 static thread_local pid_t id = 0;
86 if (!id) {
87 static std::atomic<pid_t> next_thread_id{1};
88 id = next_thread_id++;
89 }
90 return id;
91}
92
93}