96a2cca360c5660fb8e72c684dc4c25e96ba0546
1#ifndef SUBPROCESS_H
2#define SUBPROCESS_H
3
4#include "git-compat-util.h"
5#include "hashmap.h"
6#include "run-command.h"
7
8/*
9 * Generic implementation of background process infrastructure.
10 * See: Documentation/technical/api-sub-process.txt
11 */
12
13 /* data structures */
14
15struct subprocess_entry {
16 struct hashmap_entry ent; /* must be the first member! */
17 const char *cmd;
18 struct child_process process;
19};
20
21/* subprocess functions */
22
23extern int cmd2process_cmp(const void *unused_cmp_data,
24 const struct subprocess_entry *e1,
25 const struct subprocess_entry *e2,
26 const void *unused_keydata);
27
28typedef int(*subprocess_start_fn)(struct subprocess_entry *entry);
29int subprocess_start(struct hashmap *hashmap, struct subprocess_entry *entry, const char *cmd,
30 subprocess_start_fn startfn);
31
32void subprocess_stop(struct hashmap *hashmap, struct subprocess_entry *entry);
33
34struct subprocess_entry *subprocess_find_entry(struct hashmap *hashmap, const char *cmd);
35
36/* subprocess helper functions */
37
38static inline struct child_process *subprocess_get_child_process(
39 struct subprocess_entry *entry)
40{
41 return &entry->process;
42}
43
44/*
45 * Helper function that will read packets looking for "status=<foo>"
46 * key/value pairs and return the value from the last "status" packet
47 */
48
49int subprocess_read_status(int fd, struct strbuf *status);
50
51#endif