client API: be more lenient about mpv_suspend/resume mismatches

Before this commit, this was defined to trigger undefined behavior. This
was nice because it required less code; but on the other hand, Lua as
well as IPC support had to check these things manually. Do it directly
in the API to avoid code duplication, and to make the API more robust.
(The total code size still grows, though...)

Since all of the failure cases were originally meant to ruin things
forever, there is no way to return error codes. So just print the
errors.
This commit is contained in:
wm4
2014-12-15 14:44:25 +01:00
parent a40df83bae
commit 756adee999
4 changed files with 57 additions and 45 deletions

View File

@@ -61,8 +61,6 @@ struct client_arg {
bool close_client_fd;
bool writable;
int suspend_counter;
};
static mpv_node *mpv_node_map_get(mpv_node *src, const char *key)
@@ -420,21 +418,11 @@ static char *json_execute_command(struct client_arg *arg, void *ta_parent,
rc = mpv_request_log_messages(arg->client,
cmd_node->u.list->values[1].u.string);
} else if (!strcmp("suspend", cmd)) {
if (arg->suspend_counter < INT_MAX) {
mpv_suspend(arg->client);
arg->suspend_counter++;
rc = MPV_ERROR_SUCCESS;
} else {
rc = MPV_ERROR_INVALID_PARAMETER;
}
mpv_suspend(arg->client);
rc = MPV_ERROR_SUCCESS;
} else if (!strcmp("resume", cmd)) {
if (arg->suspend_counter > 0) {
mpv_resume(arg->client);
arg->suspend_counter--;
rc = MPV_ERROR_SUCCESS;
} else {
rc = MPV_ERROR_INVALID_PARAMETER;
}
mpv_resume(arg->client);
rc = MPV_ERROR_SUCCESS;
} else {
mpv_node result_node;