diff options
Diffstat (limited to 'osdep')
-rw-r--r-- | osdep/subprocess-dummy.c | 8 | ||||
-rw-r--r-- | osdep/subprocess.c | 102 | ||||
-rw-r--r-- | osdep/subprocess.h | 9 |
3 files changed, 3 insertions, 116 deletions
diff --git a/osdep/subprocess-dummy.c b/osdep/subprocess-dummy.c index 791c90e566..df74538e71 100644 --- a/osdep/subprocess-dummy.c +++ b/osdep/subprocess-dummy.c @@ -1,9 +1,7 @@ #include "subprocess.h" -int mp_subprocess(char **args, struct mp_cancel *cancel, void *ctx, - subprocess_read_cb on_stdout, subprocess_read_cb on_stderr, - char **error) +void mp_subprocess2(struct mp_subprocess_opts *opts, + struct mp_subprocess_result *res) { - *error = "unsupported"; - return -1; + *res = (struct mp_subprocess_result){.error = MP_SUBPROCESS_EUNSUPPORTED}; } diff --git a/osdep/subprocess.c b/osdep/subprocess.c index 4b5770bf5c..6d91b361ef 100644 --- a/osdep/subprocess.c +++ b/osdep/subprocess.c @@ -29,108 +29,6 @@ void mp_devnull(void *ctx, char *data, size_t size) { } -#if HAVE_POSIX - -int mp_subprocess(char **args, struct mp_cancel *cancel, void *ctx, - subprocess_read_cb on_stdout, subprocess_read_cb on_stderr, - char **error) -{ - struct mp_subprocess_opts opts = { - .exe = args[0], - .args = args, - .cancel = cancel, - }; - opts.fds[opts.num_fds++] = (struct mp_subprocess_fd){ - .fd = 0, // stdin - .src_fd = 0, - }; - opts.fds[opts.num_fds++] = (struct mp_subprocess_fd){ - .fd = 1, // stdout - .on_read = on_stdout, - .on_read_ctx = ctx, - .src_fd = on_stdout ? -1 : 1, - }; - opts.fds[opts.num_fds++] = (struct mp_subprocess_fd){ - .fd = 2, // stderr - .on_read = on_stderr, - .on_read_ctx = ctx, - .src_fd = on_stderr ? -1 : 2, - }; - struct mp_subprocess_result res; - mp_subprocess2(&opts, &res); - if (res.error < 0) { - *error = (char *)mp_subprocess_err_str(res.error); - return res.error; - } - return res.exit_status; -} - -void mp_subprocess_detached(struct mp_log *log, char **args) -{ - mp_msg_flush_status_line(log); - - struct mp_subprocess_opts opts = { - .exe = args[0], - .args = args, - .fds = { - {.fd = 0, .src_fd = 0,}, - {.fd = 1, .src_fd = 1,}, - {.fd = 2, .src_fd = 2,}, - }, - .num_fds = 3, - .detach = true, - }; - struct mp_subprocess_result res; - mp_subprocess2(&opts, &res); - if (res.error < 0) { - mp_err(log, "Starting subprocess failed: %s\n", - mp_subprocess_err_str(res.error)); - } -} - -#else - -struct subprocess_args { - struct mp_log *log; - char **args; -}; - -static void *run_subprocess(void *ptr) -{ - struct subprocess_args *p = ptr; - pthread_detach(pthread_self()); - - mp_msg_flush_status_line(p->log); - - char *err = NULL; - if (mp_subprocess(p->args, NULL, NULL, NULL, NULL, &err) < 0) - mp_err(p->log, "Running subprocess failed: %s\n", err); - - talloc_free(p); - return NULL; -} - -void mp_subprocess_detached(struct mp_log *log, char **args) -{ - struct subprocess_args *p = talloc_zero(NULL, struct subprocess_args); - p->log = mp_log_new(p, log, NULL); - int num_args = 0; - for (int n = 0; args[n]; n++) - MP_TARRAY_APPEND(p, p->args, num_args, talloc_strdup(p, args[n])); - MP_TARRAY_APPEND(p, p->args, num_args, NULL); - pthread_t thread; - if (pthread_create(&thread, NULL, run_subprocess, p)) - talloc_free(p); -} - -void mp_subprocess2(struct mp_subprocess_opts *opts, - struct mp_subprocess_result *res) -{ - *res = (struct mp_subprocess_result){.error = MP_SUBPROCESS_EUNSUPPORTED}; -} - -#endif - const char *mp_subprocess_err_str(int num) { // Note: these are visible to the public client API diff --git a/osdep/subprocess.h b/osdep/subprocess.h index ea9c43ba34..14d4896c58 100644 --- a/osdep/subprocess.h +++ b/osdep/subprocess.h @@ -73,13 +73,4 @@ const char *mp_subprocess_err_str(int num); void mp_subprocess2(struct mp_subprocess_opts *opts, struct mp_subprocess_result *res); -// Start a subprocess. Uses callbacks to read from stdout and stderr. -// Returns any of MP_SUBPROCESS_*, or a value >=0 for the process exir -int mp_subprocess(char **args, struct mp_cancel *cancel, void *ctx, - subprocess_read_cb on_stdout, subprocess_read_cb on_stderr, - char **error); - -struct mp_log; -void mp_subprocess_detached(struct mp_log *log, char **args); - #endif |