blob: 3bf3e85431cce16b919ec9293c16ae77602343f0 (
plain) (
blame)
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
|
#include <stdbool.h>
#include <pland/syscall.h>
#include <knob/file.h>
#include <knob/heap.h>
#include <knob/block.h>
_task_handle_t run_command(const char *path, _task_handle_t stdio_task) {
uint8_t dn;
path = remove_prefix(path, &dn);
for (const char *ptr = path; *ptr; ++ptr)
if (*ptr == ' ') {
char *new_path = get_block(ptr - path + 1);
blockcpy(new_path, path, ptr - path);
new_path[ptr - path] = '\0';
bool succeded = _start_task(dn, new_path, ptr + 1, stdio_task);
free_block(new_path);
return succeded;
}
return _start_task(dn, path, "", stdio_task);
}
bool try_run_command_blocking(const char *path, _task_handle_t stdio_task) {
_task_handle_t handle = run_command(path, stdio_task);
if (!handle)
return false;
while (_is_task_running(handle)) {
_wait_for_task(handle);
_yield_task();
}
return true;
}
|