blob: 228d7762fc81f6ce7cd9e8e6d2cf58c24d9ab07d [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 Jinb592e3b2018-02-01 15:17:04 -080021#include <android-base/unique_fd.h>
Yi Jin99c248f2017-08-25 18:11:58 -070022
Yi Jin1a11fa12018-02-22 16:44:10 -080023#include <stdarg.h>
24
Yi Jinb592e3b2018-02-01 15:17:04 -080025#include "Privacy.h"
Yi Jin99c248f2017-08-25 18:11:58 -070026
Yi Jinb592e3b2018-02-01 15:17:04 -080027using namespace android::base;
28
Yi Jin1a11fa12018-02-22 16:44:10 -080029/**
30 * Looks up Privacy of a section in the auto-gen PRIVACY_POLICY_LIST;
31 */
Yi Jinb592e3b2018-02-01 15:17:04 -080032const Privacy* get_privacy_of_section(int id);
Yi Jin99c248f2017-08-25 18:11:58 -070033
Yi Jin1a11fa12018-02-22 16:44:10 -080034/**
35 * This class wraps android::base::Pipe.
36 */
Yi Jin99c248f2017-08-25 18:11:58 -070037class Fpipe {
38public:
39 Fpipe();
40 ~Fpipe();
41
42 bool init();
43 bool close();
Yi Jin6355d2f2018-03-14 15:18:02 -070044 unique_fd& readFd();
45 unique_fd& writeFd();
Yi Jin99c248f2017-08-25 18:11:58 -070046
47private:
Yi Jinb592e3b2018-02-01 15:17:04 -080048 unique_fd mRead;
49 unique_fd mWrite;
Yi Jin99c248f2017-08-25 18:11:58 -070050};
51
Yi Jin1a11fa12018-02-22 16:44:10 -080052/**
53 * Forks and exec a command with two pipes, one connects stdin for input,
54 * one connects stdout for output. It returns the pid of the child.
55 */
56pid_t fork_execute_cmd(const char* cmd, char* const argv[], Fpipe* input, Fpipe* output);
57
58/**
59 * Grabs varargs from stack and stores them in heap with NULL-terminated array.
60 */
61const char** varargs(const char* first, va_list rest);
62
Kweku Adamseadd1232018-02-05 16:45:13 -080063/**
64 * Returns the current monotonic clock time in nanoseconds.
65 */
66uint64_t Nanotime();
67
68#endif // INCIDENTD_UTIL_H