Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b94cef1 authored by Yusuke Sato's avatar Yusuke Sato Committed by Gerrit Code Review
Browse files

Merge "Add FORK_EXECVP_OPTION_CAPTURE_OUTPUT to logwrap.h"

parents 34d0e782 7980426a
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ LOCAL_SRC_FILES := logwrap.c
LOCAL_SHARED_LIBRARIES := libcutils liblog
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_CFLAGS := -Werror
LOCAL_CFLAGS := -Werror -std=gnu99
include $(BUILD_STATIC_LIBRARY)

# ========================================================
@@ -23,7 +23,7 @@ LOCAL_SHARED_LIBRARIES := libcutils liblog
LOCAL_WHOLE_STATIC_LIBRARIES := liblogwrap
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_CFLAGS := -Werror
LOCAL_CFLAGS := -Werror -std=gnu99
include $(BUILD_SHARED_LIBRARY)

# ========================================================
@@ -33,5 +33,5 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES:= logwrapper.c
LOCAL_MODULE := logwrapper
LOCAL_STATIC_LIBRARIES := liblog liblogwrap libcutils
LOCAL_CFLAGS := -Werror
LOCAL_CFLAGS := -Werror -std=gnu99
include $(BUILD_EXECUTABLE)
+9 −1
Original line number Diff line number Diff line
@@ -74,6 +74,8 @@ __BEGIN_DECLS

/* Write data to child's stdin. */
#define FORK_EXECVP_OPTION_INPUT             0
/* Capture data from child's stdout and stderr. */
#define FORK_EXECVP_OPTION_CAPTURE_OUTPUT    1

struct AndroidForkExecvpOption {
    int opt_type;
@@ -82,6 +84,12 @@ struct AndroidForkExecvpOption {
            const uint8_t* input;
            size_t input_len;
        } opt_input;
        struct {
            void (*on_output)(const uint8_t* /*output*/,
                              size_t /*output_len*/,
                              void* /* user_pointer */);
            void* user_pointer;
        } opt_capture_output;
    };
};

+12 −5
Original line number Diff line number Diff line
@@ -291,7 +291,8 @@ static void print_abbr_buf(struct log_info *log_info) {
}

static int parent(const char *tag, int parent_read, pid_t pid,
        int *chld_sts, int log_target, bool abbreviated, char *file_path) {
        int *chld_sts, int log_target, bool abbreviated, char *file_path,
        const struct AndroidForkExecvpOption* opts, size_t opts_len) {
    int status = 0;
    char buffer[4096];
    struct pollfd poll_fds[] = {
@@ -358,6 +359,13 @@ static int parent(const char *tag, int parent_read, pid_t pid,
            sz = TEMP_FAILURE_RETRY(
                read(parent_read, &buffer[b], sizeof(buffer) - 1 - b));

            for (size_t i = 0; sz > 0 && i < opts_len; ++i) {
                if (opts[i].opt_type == FORK_EXECVP_OPTION_CAPTURE_OUTPUT) {
                  opts[i].opt_capture_output.on_output(
                      (uint8_t*)&buffer[b], sz, opts[i].opt_capture_output.user_pointer);
                }
            }

            sz += b;
            // Log one line at a time
            for (b = 0; b < sz; b++) {
@@ -484,7 +492,6 @@ int android_fork_execvp_ext(int argc, char* argv[], int *status, bool ignore_int
    sigset_t blockset;
    sigset_t oldset;
    int rc = 0;
    size_t i;

    rc = pthread_mutex_lock(&fd_mutex);
    if (rc) {
@@ -532,7 +539,7 @@ int android_fork_execvp_ext(int argc, char* argv[], int *status, bool ignore_int
        close(parent_ptty);

        // redirect stdin, stdout and stderr
        for (i = 0; i < opts_len; ++i) {
        for (size_t i = 0; i < opts_len; ++i) {
            if (opts[i].opt_type == FORK_EXECVP_OPTION_INPUT) {
                dup2(child_ptty, 0);
                break;
@@ -554,7 +561,7 @@ int android_fork_execvp_ext(int argc, char* argv[], int *status, bool ignore_int
            sigaction(SIGQUIT, &ignact, &quitact);
        }

        for (i = 0; i < opts_len; ++i) {
        for (size_t i = 0; i < opts_len; ++i) {
            if (opts[i].opt_type == FORK_EXECVP_OPTION_INPUT) {
                size_t left = opts[i].opt_input.input_len;
                const uint8_t* input = opts[i].opt_input.input;
@@ -571,7 +578,7 @@ int android_fork_execvp_ext(int argc, char* argv[], int *status, bool ignore_int
        }

        rc = parent(argv[0], parent_ptty, pid, status, log_target,
                    abbreviated, file_path);
                    abbreviated, file_path, opts, opts_len);
    }

    if (ignore_int_quit) {