mirror of https://github.com/mpv-player/mpv
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.
This commit is contained in:
parent
cd31697dd8
commit
0c36f655e1
|
@ -3052,6 +3052,7 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
|
||||||
|
|
||||||
case MP_CMD_RUN: {
|
case MP_CMD_RUN: {
|
||||||
#ifndef __MINGW32__
|
#ifndef __MINGW32__
|
||||||
|
mp_msg(mpctx->statusline, MSGL_STATUS, "\n");
|
||||||
char *args[MP_CMD_MAX_ARGS + 1] = {0};
|
char *args[MP_CMD_MAX_ARGS + 1] = {0};
|
||||||
for (int n = 0; n < cmd->nargs; n++)
|
for (int n = 0; n < cmd->nargs; n++)
|
||||||
args[n] = cmd->args[n].v.s;
|
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.
|
// about having to wait for the second process to terminate.
|
||||||
if (fork() == 0) {
|
if (fork() == 0) {
|
||||||
execvp(args[0], args);
|
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);
|
_exit(0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue