process.h revision 240116
1266733Speter/* 2266733Speter * Automated Testing Framework (atf) 3266733Speter * 4266733Speter * Copyright (c) 2008 The NetBSD Foundation, Inc. 5266733Speter * All rights reserved. 6266733Speter * 7266733Speter * Redistribution and use in source and binary forms, with or without 8266733Speter * modification, are permitted provided that the following conditions 9266733Speter * are met: 10266733Speter * 1. Redistributions of source code must retain the above copyright 11266733Speter * notice, this list of conditions and the following disclaimer. 12266733Speter * 2. Redistributions in binary form must reproduce the above copyright 13266733Speter * notice, this list of conditions and the following disclaimer in the 14266733Speter * documentation and/or other materials provided with the distribution. 15266733Speter * 16266733Speter * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17266733Speter * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18266733Speter * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19266733Speter * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20266733Speter * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21266733Speter * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22266733Speter * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23266733Speter * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24266733Speter * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25266733Speter * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26266733Speter * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27266733Speter * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28266733Speter */ 29266733Speter 30266733Speter#if !defined(ATF_C_PROCESS_H) 31266733Speter#define ATF_C_PROCESS_H 32266733Speter 33266733Speter#include <sys/types.h> 34266733Speter 35266733Speter#include <stdbool.h> 36266733Speter 37266733Speter#include <atf-c/error_fwd.h> 38266733Speter 39266733Speter#include "fs.h" 40266733Speter#include "list.h" 41266733Speter 42266733Speter/* --------------------------------------------------------------------- 43286503Speter * The "atf_process_stream" type. 44286503Speter * --------------------------------------------------------------------- */ 45286503Speter 46266733Speterstruct atf_process_stream { 47266733Speter int m_type; 48266733Speter 49266733Speter /* Valid if m_type == connect. */ 50266733Speter int m_src_fd; 51266733Speter int m_tgt_fd; 52266733Speter 53266733Speter /* Valid if m_type == redirect_fd. */ 54266733Speter int m_fd; 55266733Speter 56266733Speter /* Valid if m_type == redirect_path. */ 57266733Speter const atf_fs_path_t *m_path; 58266733Speter}; 59266733Spetertypedef struct atf_process_stream atf_process_stream_t; 60266733Speter 61266733Speterextern const int atf_process_stream_type_capture; 62266733Speterextern const int atf_process_stream_type_connect; 63266733Speterextern const int atf_process_stream_type_inherit; 64266733Speterextern const int atf_process_stream_type_redirect_fd; 65266733Speterextern const int atf_process_stream_type_redirect_path; 66266733Speter 67266733Speteratf_error_t atf_process_stream_init_capture(atf_process_stream_t *); 68266733Speteratf_error_t atf_process_stream_init_connect(atf_process_stream_t *, 69266733Speter const int, const int); 70266733Speteratf_error_t atf_process_stream_init_inherit(atf_process_stream_t *); 71266733Speteratf_error_t atf_process_stream_init_redirect_fd(atf_process_stream_t *, 72266733Speter const int fd); 73266733Speteratf_error_t atf_process_stream_init_redirect_path(atf_process_stream_t *, 74266733Speter const atf_fs_path_t *); 75266733Spetervoid atf_process_stream_fini(atf_process_stream_t *); 76266733Speter 77266733Speterint atf_process_stream_type(const atf_process_stream_t *); 78266733Speter 79266733Speter/* --------------------------------------------------------------------- 80266733Speter * The "atf_process_status" type. 81266733Speter * --------------------------------------------------------------------- */ 82266733Speter 83266733Speterstruct atf_process_status { 84266733Speter int m_status; 85266733Speter}; 86266733Spetertypedef struct atf_process_status atf_process_status_t; 87266733Speter 88266733Spetervoid atf_process_status_fini(atf_process_status_t *); 89266733Speter 90266733Speterbool atf_process_status_exited(const atf_process_status_t *); 91266733Speterint atf_process_status_exitstatus(const atf_process_status_t *); 92266733Speterbool atf_process_status_signaled(const atf_process_status_t *); 93266733Speterint atf_process_status_termsig(const atf_process_status_t *); 94266733Speterbool atf_process_status_coredump(const atf_process_status_t *); 95266733Speter 96266733Speter/* --------------------------------------------------------------------- 97266733Speter * The "atf_process_child" type. 98266733Speter * --------------------------------------------------------------------- */ 99266733Speter 100266733Speterstruct atf_process_child { 101266733Speter pid_t m_pid; 102266733Speter 103266733Speter int m_stdout; 104266733Speter int m_stderr; 105266733Speter}; 106266733Spetertypedef struct atf_process_child atf_process_child_t; 107266733Speter 108266733Speteratf_error_t atf_process_child_wait(atf_process_child_t *, 109266733Speter atf_process_status_t *); 110266733Speterpid_t atf_process_child_pid(const atf_process_child_t *); 111266733Speterint atf_process_child_stdout(atf_process_child_t *); 112266733Speterint atf_process_child_stderr(atf_process_child_t *); 113266733Speter 114266733Speter/* --------------------------------------------------------------------- 115266733Speter * Free functions. 116266733Speter * --------------------------------------------------------------------- */ 117266733Speter 118266733Speteratf_error_t atf_process_fork(atf_process_child_t *, 119266733Speter void (*)(void *), 120266733Speter const atf_process_stream_t *, 121266733Speter const atf_process_stream_t *, 122266733Speter void *); 123266733Speteratf_error_t atf_process_exec_array(atf_process_status_t *, 124266733Speter const atf_fs_path_t *, 125266733Speter const char *const *, 126266733Speter const atf_process_stream_t *, 127266733Speter const atf_process_stream_t *, 128266733Speter void (*)(void)); 129266733Speteratf_error_t atf_process_exec_list(atf_process_status_t *, 130266733Speter const atf_fs_path_t *, 131266733Speter const atf_list_t *, 132266733Speter const atf_process_stream_t *, 133266733Speter const atf_process_stream_t *, 134266733Speter void (*)(void)); 135266733Speter 136266733Speter#endif /* !defined(ATF_C_PROCESS_H) */ 137266733Speter