aboutsummaryrefslogtreecommitdiff
path: root/src/system.c
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2023-11-20 17:07:11 -0500
committerJoseph Hunkeler <jhunkeler@gmail.com>2023-11-20 17:07:11 -0500
commit43bcd36bb31c1ab117b54f21746b119db2448449 (patch)
tree12e69ecb6c84a8b99ae8df3bbf65642152d21bcc /src/system.c
parent8b3f862c59f7866f67f1da349efd5e3d931e1eae (diff)
downloadstasis-43bcd36bb31c1ab117b54f21746b119db2448449.tar.gz
Use TMPDIR, and fail when script cannot be executed within that filesystem
Diffstat (limited to 'src/system.c')
-rw-r--r--src/system.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/system.c b/src/system.c
index b819615..52e354a 100644
--- a/src/system.c
+++ b/src/system.c
@@ -204,16 +204,24 @@ int shell_safe(struct Process *proc, char *args[]) {
return result;
}
-char *shell_output(const char *command) {
+char *shell_output(const char *command, int *status) {
const size_t initial_size = OMC_BUFSIZ;
size_t current_size = initial_size;
char *result = NULL;
char line[OMC_BUFSIZ];
FILE *pp;
+
+ errno = 0;
+ *status = 0;
pp = popen(command, "r");
if (!pp) {
+ *status = -1;
return NULL;
}
+
+ if (errno) {
+ *status = 1;
+ }
result = calloc(initial_size, sizeof(result));
while (fgets(line, sizeof(line) - 1, pp) != NULL) {
size_t result_len = strlen(result);