summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-01-05 20:11:01 +0100
committerwm4 <wm4@nowhere>2014-01-06 20:23:03 +0100
commit0c36f655e19502faf95b8eab0caf7c334ad4d11c (patch)
tree111839faa4c88927af9c0a1ea265df6c48a682b2
parentcd31697dd8bca3a1e7aa06a7ac3fc8b6db56a2ad (diff)
downloadmpv-0c36f655e19502faf95b8eab0caf7c334ad4d11c.tar.bz2
mpv-0c36f655e19502faf95b8eab0caf7c334ad4d11c.tar.xz
player: print an error message if run command fails
Note that we can't use mp_msg, because it's not async-signal safe (we might be running other threads while forking, so only functions specified to be async-signal safe can be called, and this doesn't include stdio; mp_msg acquires a mutex too). Also, always print a \n before running the program to flush the status line. The effect is that a program running successfully as well as the error message will effectively start on a new line.
-rw-r--r--player/command.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/player/command.c b/player/command.c
index e59a2d50e8..0275babee6 100644
--- a/player/command.c
+++ b/player/command.c
@@ -3052,6 +3052,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
case MP_CMD_RUN: {
#ifndef __MINGW32__
+ mp_msg(mpctx->statusline, MSGL_STATUS, "\n");
char *args[MP_CMD_MAX_ARGS + 1] = {0};
for (int n = 0; n < cmd->nargs; n++)
args[n] = cmd->args[n].v.s;
@@ -3062,7 +3063,10 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
// about having to wait for the second process to terminate.
if (fork() == 0) {
execvp(args[0], args);
- _exit(0);
+ // mp_msg() is not safe to be called from a forked process.
+ char s[] = "Executing program failed.\n";
+ write(2, s, sizeof(s) - 1);
+ _exit(1);
}
_exit(0);
}