blob: 35b19d7a78db503c51832a912ce82578b493e1b2 [file] [log] [blame]
Mathias Agopian7922fa22009-05-18 15:08:03 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17// All static variables go here, to control initialization and
18// destruction order in the library.
19
Martijn Coenene01f4f22016-05-12 12:33:28 +020020#include <hwbinder/Static.h>
Mathias Agopian7922fa22009-05-18 15:08:03 -070021
Martijn Coenen4080edc2016-05-04 14:17:02 +020022#include <hwbinder/BufferedTextOutput.h>
23#include <hwbinder/IPCThreadState.h>
Mathias Agopian7922fa22009-05-18 15:08:03 -070024#include <utils/Log.h>
25
26namespace android {
Martijn Coenenf75a23d2016-08-01 11:55:17 +020027namespace hardware {
Mathias Agopian7922fa22009-05-18 15:08:03 -070028
Mathias Agopian4ea13dc2013-05-06 20:20:50 -070029// ------------ Text output streams
30
31Vector<int32_t> gTextBuffers;
32
33class LogTextOutput : public BufferedTextOutput
34{
35public:
36 LogTextOutput() : BufferedTextOutput(MULTITHREADED) { }
37 virtual ~LogTextOutput() { };
38
39protected:
40 virtual status_t writeLines(const struct iovec& vec, size_t N)
41 {
42 //android_writevLog(&vec, N); <-- this is now a no-op
43 if (N != 1) ALOGI("WARNING: writeLines N=%zu\n", N);
44 ALOGI("%.*s", (int)vec.iov_len, (const char*) vec.iov_base);
45 return NO_ERROR;
46 }
47};
48
49class FdTextOutput : public BufferedTextOutput
50{
51public:
Chih-Hung Hsieh1f555e92016-04-25 15:41:05 -070052 explicit FdTextOutput(int fd) : BufferedTextOutput(MULTITHREADED), mFD(fd) { }
Mathias Agopian4ea13dc2013-05-06 20:20:50 -070053 virtual ~FdTextOutput() { };
54
55protected:
56 virtual status_t writeLines(const struct iovec& vec, size_t N)
57 {
Steven Morelandd9bdb652019-09-17 15:42:45 -070058 ssize_t ret = writev(mFD, &vec, N);
59 if (ret == -1) return -errno;
60 if (static_cast<size_t>(ret) != N) return UNKNOWN_ERROR;
Mathias Agopian4ea13dc2013-05-06 20:20:50 -070061 return NO_ERROR;
62 }
63
64private:
65 int mFD;
66};
67
68static LogTextOutput gLogTextOutput;
69static FdTextOutput gStdoutTextOutput(STDOUT_FILENO);
70static FdTextOutput gStderrTextOutput(STDERR_FILENO);
71
72TextOutput& alog(gLogTextOutput);
73TextOutput& aout(gStdoutTextOutput);
74TextOutput& aerr(gStderrTextOutput);
75
Mathias Agopian7922fa22009-05-18 15:08:03 -070076// ------------ ProcessState.cpp
77
Yabin Cui0695b992018-06-05 15:36:42 -070078Mutex& gProcessMutex = *new Mutex;
Mathias Agopian7922fa22009-05-18 15:08:03 -070079sp<ProcessState> gProcess;
80
Martijn Coenenf75a23d2016-08-01 11:55:17 +020081} // namespace hardware
Mathias Agopian7922fa22009-05-18 15:08:03 -070082} // namespace android