blob: 3dac2c4c3759d185579c4b6f2fc3f09b32ff71ce [file] [log] [blame]
Yi Jin99c248f2017-08-25 18:11:58 -07001/*
2 * Copyright (C) 2017 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 */
Yi Jinb592e3b2018-02-01 15:17:04 -080016#pragma once
Yi Jin99c248f2017-08-25 18:11:58 -070017
Yi Jinb592e3b2018-02-01 15:17:04 -080018#ifndef INCIDENTD_UTIL_H
19#define INCIDENTD_UTIL_H
Yi Jin99c248f2017-08-25 18:11:58 -070020
Yi Jin1a11fa12018-02-22 16:44:10 -080021#include <stdarg.h>
Yi Jinc36e91d2018-03-08 11:25:58 -080022#include <unistd.h>
23
24#include <android-base/unique_fd.h>
25#include <utils/Errors.h>
Yi Jin1a11fa12018-02-22 16:44:10 -080026
Yi Jinb592e3b2018-02-01 15:17:04 -080027#include "Privacy.h"
Yi Jin99c248f2017-08-25 18:11:58 -070028
Yi Jin6cacbcb2018-03-30 14:04:52 -070029namespace android {
30namespace os {
31namespace incidentd {
32
Yi Jinb592e3b2018-02-01 15:17:04 -080033using namespace android::base;
34
Yi Jin1a11fa12018-02-22 16:44:10 -080035/**
36 * Looks up Privacy of a section in the auto-gen PRIVACY_POLICY_LIST;
37 */
Yi Jinb592e3b2018-02-01 15:17:04 -080038const Privacy* get_privacy_of_section(int id);
Yi Jin99c248f2017-08-25 18:11:58 -070039
Yi Jin1a11fa12018-02-22 16:44:10 -080040/**
41 * This class wraps android::base::Pipe.
42 */
Yi Jin99c248f2017-08-25 18:11:58 -070043class Fpipe {
44public:
45 Fpipe();
46 ~Fpipe();
47
48 bool init();
49 bool close();
Yi Jin6355d2f2018-03-14 15:18:02 -070050 unique_fd& readFd();
51 unique_fd& writeFd();
Yi Jin99c248f2017-08-25 18:11:58 -070052
53private:
Yi Jinb592e3b2018-02-01 15:17:04 -080054 unique_fd mRead;
55 unique_fd mWrite;
Yi Jin99c248f2017-08-25 18:11:58 -070056};
57
Yi Jin1a11fa12018-02-22 16:44:10 -080058/**
59 * Forks and exec a command with two pipes, one connects stdin for input,
60 * one connects stdout for output. It returns the pid of the child.
Yi Jinc36e91d2018-03-08 11:25:58 -080061 * Input pipe can be NULL to indicate child process doesn't read stdin.
Yi Jin1a11fa12018-02-22 16:44:10 -080062 */
Yi Jinc36e91d2018-03-08 11:25:58 -080063pid_t fork_execute_cmd(char* const argv[], Fpipe* input, Fpipe* output);
Yi Jin1a11fa12018-02-22 16:44:10 -080064
65/**
66 * Grabs varargs from stack and stores them in heap with NULL-terminated array.
67 */
68const char** varargs(const char* first, va_list rest);
69
Kweku Adamseadd1232018-02-05 16:45:13 -080070/**
71 * Returns the current monotonic clock time in nanoseconds.
72 */
73uint64_t Nanotime();
74
Yi Jinc36e91d2018-03-08 11:25:58 -080075/**
76 * Methods to wait or kill child process, return exit status code.
77 */
78status_t kill_child(pid_t pid);
79status_t wait_child(pid_t pid);
80
Yi Jin6cacbcb2018-03-30 14:04:52 -070081} // namespace incidentd
82} // namespace os
83} // namespace android
84
Kweku Adamseadd1232018-02-05 16:45:13 -080085#endif // INCIDENTD_UTIL_H