/* system/core/include/logwrap/logwrap.h * * Copyright 2013, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once /* * Run a command while logging its stdout and stderr * * Arguments: * argc: the number of elements in argv * argv: an array of strings containing the command to be executed and its * arguments as separate strings. argv does not need to be * NULL-terminated * status: the equivalent child status as populated by wait(status). This * value is only valid when logwrap successfully completes. If NULL * the return value of the child will be the function's return value. * forward_signals: set to true if you want to forward SIGINT, SIGQUIT, and * SIGHUP to the child process, while it is running. You likely do * not need to use this; it is primarily for the logwrapper * executable itself. * log_target: Specify where to log the output of the child, either LOG_NONE, * LOG_ALOG (for the Android system log), LOG_KLOG (for the kernel * log), or LOG_FILE (and you need to specify a pathname in the * file_path argument, otherwise pass NULL). These are bit fields, * and can be OR'ed together to log to multiple places. * abbreviated: If true, capture up to the first 100 lines and last 4K of * output from the child. The abbreviated output is not dumped to * the specified log until the child has exited. * file_path: if log_target has the LOG_FILE bit set, then this parameter * must be set to the pathname of the file to log to. * * Return value: * 0 when logwrap successfully run the child process and captured its status * -1 when an internal error occurred * -ECHILD if status is NULL and the child didn't exit properly * the return value of the child if it exited properly and status is NULL * */ /* Values for the log_target parameter logwrap_fork_execvp() */ #define LOG_NONE 0 #define LOG_ALOG 1 #define LOG_KLOG 2 #define LOG_FILE 4 int logwrap_fork_execvp(int argc, const char* const* argv, int* status, bool forward_signals, int log_target, bool abbreviated, const char* file_path);