2021-01-03 21:55:15 +08:00
|
|
|
#include "process.h"
|
|
|
|
|
2021-10-23 00:51:20 +08:00
|
|
|
#include <libgen.h>
|
2021-01-03 21:55:15 +08:00
|
|
|
#include "log.h"
|
|
|
|
|
2021-11-12 00:48:41 +08:00
|
|
|
enum sc_process_result
|
|
|
|
sc_process_execute(const char *const argv[], sc_pid *pid) {
|
|
|
|
return sc_process_execute_p(argv, pid, NULL, NULL, NULL);
|
2021-11-12 00:49:47 +08:00
|
|
|
}
|
|
|
|
|
2021-01-03 21:55:15 +08:00
|
|
|
bool
|
2021-11-12 00:48:41 +08:00
|
|
|
sc_process_check_success(sc_pid pid, const char *name, bool close) {
|
|
|
|
if (pid == SC_PROCESS_NONE) {
|
2021-01-03 21:55:15 +08:00
|
|
|
LOGE("Could not execute \"%s\"", name);
|
|
|
|
return false;
|
|
|
|
}
|
2021-11-12 00:48:41 +08:00
|
|
|
sc_exit_code exit_code = sc_process_wait(pid, close);
|
2021-01-23 01:29:21 +08:00
|
|
|
if (exit_code) {
|
2021-11-12 00:48:41 +08:00
|
|
|
if (exit_code != SC_EXIT_CODE_NONE) {
|
|
|
|
LOGE("\"%s\" returned with value %" SC_PRIexitcode, name,
|
|
|
|
exit_code);
|
2021-01-03 21:55:15 +08:00
|
|
|
} else {
|
|
|
|
LOGE("\"%s\" exited unexpectedly", name);
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
2021-10-23 00:51:20 +08:00
|
|
|
|
2021-10-17 22:20:46 +08:00
|
|
|
ssize_t
|
2021-11-12 00:48:41 +08:00
|
|
|
sc_pipe_read_all(sc_pipe pipe, char *data, size_t len) {
|
2021-10-17 22:20:46 +08:00
|
|
|
size_t copied = 0;
|
|
|
|
while (len > 0) {
|
2021-11-12 00:48:41 +08:00
|
|
|
ssize_t r = sc_pipe_read(pipe, data, len);
|
2021-10-17 22:20:46 +08:00
|
|
|
if (r <= 0) {
|
|
|
|
return copied ? (ssize_t) copied : r;
|
|
|
|
}
|
|
|
|
len -= r;
|
|
|
|
data += r;
|
|
|
|
copied += r;
|
|
|
|
}
|
|
|
|
return copied;
|
|
|
|
}
|