// TODO // #ifndef KIT_PROCESS_H #define KIT_PROCESS_H #include "types.h" #include "string_ref.h" #if !defined(_WIN32) || defined(__CYGWIN__) # include #else #endif #ifdef __cplusplus extern "C" { #endif enum { KIT_PROCESS_NO_ARGUMENTS = 1, KIT_PROCESS_NO_ENVIRONMENT = (1 << 1), KIT_PROCESS_NO_PIPES = (1 << 2), KIT_PROCESS_FORK = (1 << 3), }; typedef struct { s32 status; u8 exit_code; b8 current_is_forked; #if !defined(_WIN32) || defined(__CYGWIN__) b8 _ready; b8 _running; pid_t _id; i32 _stdin; i32 _stdout; i32 _stderr; #else #endif } kit_process_t; typedef struct { kit_str_t name; kit_str_t value; } kit_process_env_var_t; typedef KIT_AR(kit_str_t) kit_process_args_t; typedef KIT_AR(kit_process_env_var_t) kit_process_env_t; typedef struct { u32 flags; kit_str_t file_name; kit_process_args_t command_line; kit_process_env_t environment; kit_str_t working_directory; } kit_process_info_t; s32 kit_process_init(kit_process_t *p, kit_process_info_t info); void kit_process_cleanup(kit_process_t *p); i64 kit_process_write_stdin(kit_process_t *p, kit_str_t in_data); i64 kit_process_read_stdout(kit_process_t *p, kit_str_t out_data); i64 kit_process_read_stderr(kit_process_t *p, kit_str_t out_data); s32 kit_process_terminate(kit_process_t *p); b8 kit_process_alive(kit_process_t *p); s32 kit_process_wait(kit_process_t *p); #ifdef __cplusplus } #endif #endif