blob: 8031cc1414e3e0840d9c9b3170983cc78f686acf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
// TODO
//
#ifndef KIT_PROCESS_H
#define KIT_PROCESS_H
#include "types.h"
#include "string_ref.h"
#if !defined(_WIN32) || defined(__CYGWIN__)
# include <unistd.h>
#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
|