1
0
Fork 0
mirror of https://github.com/albfan/miraclecast.git synced 2025-03-09 23:38:56 +00:00

miracle-dispd: replace assert() with assert_?ret?()

for capturing more information about buggy behaviours, more
    validations and loggings are added

Change-Id: I57e11d201324ed10b2218c9e72627759aae619c9
This commit is contained in:
Derek Dai 2017-04-22 15:40:55 +08:00
parent 875fa86f6b
commit d8d85c1b97
5 changed files with 145 additions and 89 deletions

View file

@ -20,7 +20,6 @@
#include <systemd/sd-bus.h> #include <systemd/sd-bus.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <assert.h>
#include <errno.h> #include <errno.h>
#include <stdarg.h> #include <stdarg.h>
#include "dispd-encoder.h" #include "dispd-encoder.h"
@ -77,7 +76,7 @@ static int dispd_encoder_exec(const char *cmd, int fd, struct wfd_session *s)
*/ */
r = dup2(fd, 3); r = dup2(fd, 3);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
if(fd != 3) { if(fd != 3) {
@ -132,7 +131,7 @@ static int dispd_encoder_kill_child(struct dispd_encoder *e)
static void dispd_encoder_notify_state_change(struct dispd_encoder *e, static void dispd_encoder_notify_state_change(struct dispd_encoder *e,
enum dispd_encoder_state state) enum dispd_encoder_state state)
{ {
assert(e); assert_vret(e);
if(!e->handler) { if(!e->handler) {
return; return;
@ -187,8 +186,8 @@ int dispd_encoder_spawn(struct dispd_encoder **out, struct wfd_session *s)
int fds[2] = { -1, -1 }; int fds[2] = { -1, -1 };
int r; int r;
assert(out); assert_ret(out);
assert(s); assert_ret(s);
r = dispd_encoder_new(&e); r = dispd_encoder_new(&e);
if(0 > r) { if(0 > r) {
@ -238,7 +237,7 @@ int dispd_encoder_spawn(struct dispd_encoder **out, struct wfd_session *s)
close(fds[1]); close(fds[1]);
*out = dispd_encoder_ref(e); *out = dispd_encoder_ref(e);
goto end; return 0;
close_pipe: close_pipe:
close(fds[0]); close(fds[0]);
@ -247,18 +246,18 @@ kill_encoder:
// dispd will do the cleanup // dispd will do the cleanup
kill(pid, SIGKILL); kill(pid, SIGKILL);
end: end:
return r; return log_ERRNO();
} }
static int dispd_encoder_new(struct dispd_encoder **out) static int dispd_encoder_new(struct dispd_encoder **out)
{ {
_shl_free_ struct dispd_encoder *e = NULL; _shl_free_ struct dispd_encoder *e = NULL;
assert(out); assert_ret(out);
e = calloc(1, sizeof(struct dispd_encoder)); e = calloc(1, sizeof(struct dispd_encoder));
if(!e) { if(!e) {
return -ENOMEM; return log_ENOMEM();
} }
e->ref = 1; e->ref = 1;
@ -270,8 +269,8 @@ static int dispd_encoder_new(struct dispd_encoder **out)
struct dispd_encoder * dispd_encoder_ref(struct dispd_encoder *e) struct dispd_encoder * dispd_encoder_ref(struct dispd_encoder *e)
{ {
assert(e); assert_retv(e, NULL);
assert(0 < e->ref); assert_retv(0 < e->ref, NULL);
++ e->ref; ++ e->ref;
@ -287,8 +286,8 @@ void dispd_encoder_unrefp(struct dispd_encoder **e)
void dispd_encoder_unref(struct dispd_encoder *e) void dispd_encoder_unref(struct dispd_encoder *e)
{ {
assert(e); assert_vret(e);
assert(0 < e->ref); assert_vret(0 < e->ref);
--e->ref; --e->ref;
if(e->ref) { if(e->ref) {
@ -312,7 +311,7 @@ void dispd_encoder_set_handler(struct dispd_encoder *e,
dispd_encoder_state_change_handler handler, dispd_encoder_state_change_handler handler,
void *userdata) void *userdata)
{ {
assert(e); assert_vret(e);
e->handler = handler; e->handler = handler;
e->userdata = userdata; e->userdata = userdata;
@ -320,14 +319,14 @@ void dispd_encoder_set_handler(struct dispd_encoder *e,
dispd_encoder_state_change_handler dispd_encoder_get_handler(struct dispd_encoder *e) dispd_encoder_state_change_handler dispd_encoder_get_handler(struct dispd_encoder *e)
{ {
assert(e); assert_retv(e, NULL);
return e->handler; return e->handler;
} }
enum dispd_encoder_state dispd_encoder_get_state(struct dispd_encoder *e) enum dispd_encoder_state dispd_encoder_get_state(struct dispd_encoder *e)
{ {
assert(e); assert_retv(e, DISPD_ENCODER_STATE_NULL);
return e->state; return e->state;
} }
@ -354,7 +353,7 @@ static const char * state_to_name(enum dispd_encoder_state s)
static void dispd_encoder_set_state(struct dispd_encoder *e, static void dispd_encoder_set_state(struct dispd_encoder *e,
enum dispd_encoder_state state) enum dispd_encoder_state state)
{ {
assert(e); assert_vret(e);
if(e->state == state) { if(e->state == state) {
return; return;
@ -440,7 +439,7 @@ static int on_encoder_disappeared(sd_bus_message *m,
r = dispd_encoder_kill_child(e); r = dispd_encoder_kill_child(e);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
else if(r) { else if(r) {
return 0; return 0;
@ -525,6 +524,7 @@ static int dispd_encoder_on_unique_name(sd_event_source *source,
goto end; goto end;
error: error:
log_vERRNO();
dispd_encoder_kill_child(e); dispd_encoder_kill_child(e);
end: end:
dispd_encoder_close_pipe(e); dispd_encoder_close_pipe(e);
@ -540,22 +540,22 @@ static int config_append(sd_bus_message *m,
int r; int r;
va_list argv; va_list argv;
assert(m); assert_ret(m);
assert(t); assert_ret(t);
r = sd_bus_message_open_container(m, 'e', "iv"); r = sd_bus_message_open_container(m, 'e', "iv");
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
r = sd_bus_message_append(m, "i", k); r = sd_bus_message_append(m, "i", k);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
r = sd_bus_message_open_container(m, 'v', t); r = sd_bus_message_open_container(m, 'v', t);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
va_start(argv, t); va_start(argv, t);
@ -572,15 +572,20 @@ static int config_append(sd_bus_message *m,
va_end(argv); va_end(argv);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
r = sd_bus_message_close_container(m); r = sd_bus_message_close_container(m);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
return sd_bus_message_close_container(m); r = sd_bus_message_close_container(m);
if(0 > r) {
return log_ERRNO();
}
return 0;
} }
int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s) int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
@ -592,9 +597,10 @@ int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
struct wfd_sink *sink; struct wfd_sink *sink;
int r; int r;
assert(e); assert_ret(e);
assert(s); assert_ret(e->bus);
assert(wfd_is_out_session(s)); assert_ret(s);
assert_ret(wfd_is_out_session(s));
r = sd_bus_message_new_method_call(e->bus, r = sd_bus_message_new_method_call(e->bus,
&call, &call,
@ -603,12 +609,12 @@ int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
"org.freedesktop.miracle.encoder", "org.freedesktop.miracle.encoder",
"Configure"); "Configure");
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
r = sd_bus_message_open_container(call, 'a', "{iv}"); r = sd_bus_message_open_container(call, 'a', "{iv}");
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
sink = wfd_out_session_get_sink(s); sink = wfd_out_session_get_sink(s);
@ -617,7 +623,7 @@ int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
"s", "s",
sink->peer->remote_address); sink->peer->remote_address);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
r = config_append(call, r = config_append(call,
@ -625,7 +631,7 @@ int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
"u", "u",
s->stream.rtp_port); s->stream.rtp_port);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
if(s->stream.rtcp_port) { if(s->stream.rtcp_port) {
@ -634,7 +640,7 @@ int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
"u", "u",
s->stream.rtcp_port); s->stream.rtcp_port);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
} }
@ -643,7 +649,7 @@ int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
"s", "s",
sink->peer->local_address); sink->peer->local_address);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
if(s->stream.rtcp_port) { if(s->stream.rtcp_port) {
@ -652,7 +658,7 @@ int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
"u", "u",
s->stream.rtcp_port); s->stream.rtcp_port);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
} }
@ -663,7 +669,7 @@ int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
"u", "u",
rect->x); rect->x);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
r = config_append(call, r = config_append(call,
@ -671,7 +677,7 @@ int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
"u", "u",
rect->y); rect->y);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
r = config_append(call, r = config_append(call,
@ -679,7 +685,7 @@ int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
"u", "u",
rect->width); rect->width);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
r = config_append(call, r = config_append(call,
@ -687,22 +693,23 @@ int dispd_encoder_configure(struct dispd_encoder *e, struct wfd_session *s)
"u", "u",
rect->height); rect->height);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
} }
r = sd_bus_message_close_container(call); r = sd_bus_message_close_container(call);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
r = sd_bus_call(e->bus, call, 0, &error, &reply); r = sd_bus_call(e->bus, call, 0, &error, &reply);
if(0 > r) { if(0 > r) {
log_warning("%s: %s", error.name, error.message); log_warning("%s: %s", error.name, error.message);
sd_bus_error_free(&error); sd_bus_error_free(&error);
return log_ERRNO();
} }
return r; return 0;
} }
static int dispd_encoder_call(struct dispd_encoder *e, const char *method) static int dispd_encoder_call(struct dispd_encoder *e, const char *method)
@ -712,9 +719,9 @@ static int dispd_encoder_call(struct dispd_encoder *e, const char *method)
_cleanup_sd_bus_error_ sd_bus_error error = SD_BUS_ERROR_NULL; _cleanup_sd_bus_error_ sd_bus_error error = SD_BUS_ERROR_NULL;
int r; int r;
assert(e); assert_ret(e);
assert(method); assert_ret(method);
assert(e->bus); assert_ret(e->bus);
r = sd_bus_message_new_method_call(e->bus, r = sd_bus_message_new_method_call(e->bus,
&call, &call,

View file

@ -588,7 +588,7 @@ static int wfd_out_session_handle_play_request(struct wfd_session *s,
*out_rep = (rtsp_message_ref(m), m); *out_rep = (rtsp_message_ref(m), m);
return r; return 0;
} }
static void on_encoder_state_changed(struct dispd_encoder *e, static void on_encoder_state_changed(struct dispd_encoder *e,

View file

@ -22,6 +22,7 @@
#include "wfd-dbus.h" #include "wfd-dbus.h"
#include "wfd-session.h" #include "wfd-session.h"
#include "shl_macro.h" #include "shl_macro.h"
#include "shl_log.h"
#define rtsp_message_id_is_valid(_id) ( \ #define rtsp_message_id_is_valid(_id) ( \
(_id) >= RTSP_M1_REQUEST_SINK_OPTIONS && \ (_id) >= RTSP_M1_REQUEST_SINK_OPTIONS && \
@ -65,12 +66,12 @@ static int wfd_session_do_request(struct wfd_session *s,
const struct wfd_arg_list *args, const struct wfd_arg_list *args,
struct rtsp_message **out) struct rtsp_message **out)
{ {
if(!rtsp_message_id_is_valid(id)) { assert_ret(s);
return -EINVAL; assert_ret(rtsp_message_id_is_valid(id));
} assert_ret(out);
if(!s->rtsp_disp_tbl[id].request) { if(!s->rtsp_disp_tbl[id].request) {
log_warning("!!! request not implemented !!!"); log_warning("!!! request %d not implemented !!!", id);
return -ENOTSUP; return -ENOTSUP;
} }
@ -80,8 +81,13 @@ static int wfd_session_do_request(struct wfd_session *s,
static int wfd_session_do_handle_request(struct wfd_session *s, static int wfd_session_do_handle_request(struct wfd_session *s,
enum rtsp_message_id id, enum rtsp_message_id id,
struct rtsp_message *req, struct rtsp_message *req,
struct rtsp_message **out_rep) struct rtsp_message **rep)
{ {
assert_ret(s);
assert_ret(rtsp_message_id_is_valid(id));
assert_ret(req);
assert_ret(rep);
if(!rtsp_message_id_is_valid(id)) { if(!rtsp_message_id_is_valid(id)) {
return -EINVAL; return -EINVAL;
} }
@ -93,13 +99,17 @@ static int wfd_session_do_handle_request(struct wfd_session *s,
return (*s->rtsp_disp_tbl[id].handle_request)(s, return (*s->rtsp_disp_tbl[id].handle_request)(s,
req, req,
out_rep); rep);
} }
static int wfd_session_do_handle_reply(struct wfd_session *s, static int wfd_session_do_handle_reply(struct wfd_session *s,
enum rtsp_message_id id, enum rtsp_message_id id,
struct rtsp_message *m) struct rtsp_message *rep)
{ {
assert_ret(s);
assert_ret(rtsp_message_id_is_valid(id));
assert_ret(rep);
if(!rtsp_message_id_is_valid(id)) { if(!rtsp_message_id_is_valid(id)) {
return -EINVAL; return -EINVAL;
} }
@ -108,22 +118,28 @@ static int wfd_session_do_handle_reply(struct wfd_session *s,
return 0; return 0;
} }
return (*s->rtsp_disp_tbl[id].handle_reply)(s, m); return (*s->rtsp_disp_tbl[id].handle_reply)(s, rep);
} }
unsigned int wfd_session_get_id(struct wfd_session *s) unsigned int wfd_session_get_id(struct wfd_session *s)
{ {
assert_retv(s, (unsigned int) -1);
return s->id; return s->id;
} }
enum wfd_session_state wfd_session_get_state(struct wfd_session *s) enum wfd_session_state wfd_session_get_state(struct wfd_session *s)
{ {
assert_retv(s, WFD_SESSION_STATE_NULL);
return s->state; return s->state;
} }
void wfd_session_set_state(struct wfd_session *s, void wfd_session_set_state(struct wfd_session *s,
enum wfd_session_state state) enum wfd_session_state state)
{ {
assert_vret(wfd_is_session(s));
if(state == s->state) { if(state == s->state) {
return; return;
} }
@ -133,16 +149,16 @@ void wfd_session_set_state(struct wfd_session *s,
wfd_fn_session_properties_changed(s, "State"); wfd_fn_session_properties_changed(s, "State");
} }
int wfd_session_is_established(struct wfd_session *s) bool wfd_session_is_established(struct wfd_session *s)
{ {
assert(wfd_is_session(s)); assert_retv(wfd_is_session(s), false);
return WFD_SESSION_STATE_ESTABLISHED <= s->state; return WFD_SESSION_STATE_ESTABLISHED <= s->state;
} }
int wfd_session_resume(struct wfd_session *s) int wfd_session_resume(struct wfd_session *s)
{ {
assert(wfd_is_session(s)); assert_ret(wfd_is_session(s));
if(WFD_SESSION_STATE_PLAYING == s->state) { if(WFD_SESSION_STATE_PLAYING == s->state) {
return 0; return 0;
@ -160,7 +176,7 @@ int wfd_session_resume(struct wfd_session *s)
int wfd_session_pause(struct wfd_session *s) int wfd_session_pause(struct wfd_session *s)
{ {
assert(wfd_is_session(s)); assert_ret(wfd_is_session(s));
if(WFD_SESSION_STATE_PAUSED == s->state) { if(WFD_SESSION_STATE_PAUSED == s->state) {
return 0; return 0;
@ -178,7 +194,7 @@ int wfd_session_pause(struct wfd_session *s)
int wfd_session_teardown(struct wfd_session *s) int wfd_session_teardown(struct wfd_session *s)
{ {
assert(wfd_is_session(s)); assert_ret(wfd_is_session(s));
if(wfd_session_is_established(s)) { if(wfd_session_is_established(s)) {
if(!session_vtbl[s->dir].teardown) { if(!session_vtbl[s->dir].teardown) {
@ -198,9 +214,7 @@ int wfd_session_teardown(struct wfd_session *s)
int wfd_session_terminate(struct wfd_session *s) int wfd_session_terminate(struct wfd_session *s)
{ {
if(!s) { assert_ret(wfd_is_session(s));
return 0;
}
if(session_vtbl[s->dir].destroy) { if(session_vtbl[s->dir].destroy) {
(*session_vtbl[s->dir].destroy)(s); (*session_vtbl[s->dir].destroy)(s);
@ -267,7 +281,7 @@ void wfd_session_unref(struct wfd_session *s)
return; return;
} }
assert(1 <= s->ref); assert_vret(1 <= s->ref);
-- s->ref; -- s->ref;
if(s->ref) { if(s->ref) {
@ -281,21 +295,29 @@ void wfd_session_unref(struct wfd_session *s)
enum wfd_session_dir wfd_session_get_dir(struct wfd_session *s) enum wfd_session_dir wfd_session_get_dir(struct wfd_session *s)
{ {
assert_retv(s, WFD_SESSION_DIR_OUT);
return s->dir; return s->dir;
} }
unsigned int * wfd_session_to_htable(struct wfd_session *s) unsigned int * wfd_session_to_htable(struct wfd_session *s)
{ {
assert_retv(s, NULL);
return &s->id; return &s->id;
} }
struct wfd_session * wfd_session_from_htable(unsigned int *e) struct wfd_session * wfd_session_from_htable(unsigned int *e)
{ {
assert_retv(e, NULL);
return shl_htable_entry(e, struct wfd_session, id); return shl_htable_entry(e, struct wfd_session, id);
} }
const char * wfd_session_get_stream_url(struct wfd_session *s) const char * wfd_session_get_stream_url(struct wfd_session *s)
{ {
assert_retv(wfd_is_session(s), NULL);
return s->stream.url; return s->stream.url;
} }
@ -306,25 +328,30 @@ int wfd_session_gen_stream_url(struct wfd_session *s,
char *url; char *url;
int r; int r;
if(!wfd_stream_id_is_valid(id)) { assert_ret(wfd_is_session(s));
return -EINVAL; assert_ret(local_addr);
} assert_ret(wfd_stream_id_is_valid(id));
r = asprintf(&url, "rtsp://%s/wfd1.0/streamid=%d", local_addr, id); r = asprintf(&url, "rtsp://%s/wfd1.0/streamid=%d", local_addr, id);
if(0 <= r) { if(0 > r) {
free(s->stream.url); return log_ERRNO();
s->stream.url = url;
url = NULL;
} }
return r; free(s->stream.url);
s->stream.url = url;
return 0;
} }
static enum rtsp_message_id wfd_session_message_to_id(struct wfd_session *s, static enum rtsp_message_id wfd_session_message_to_id(struct wfd_session *s,
struct rtsp_message *m) struct rtsp_message *m)
{ {
const char *method = m ? rtsp_message_get_method(m) : NULL; const char *method;
assert_retv(wfd_is_session(s), RTSP_M_UNKNOWN);
method = m ? rtsp_message_get_method(m) : NULL;
if(!method) { if(!method) {
return RTSP_M_UNKNOWN; return RTSP_M_UNKNOWN;
} }
@ -400,13 +427,17 @@ static enum rtsp_message_id wfd_session_message_to_id(struct wfd_session *s,
static int wfd_session_post_handle_request_n_reply(struct wfd_session *s, static int wfd_session_post_handle_request_n_reply(struct wfd_session *s,
enum rtsp_message_id ror) enum rtsp_message_id ror)
{ {
const struct wfd_arg_list *args = &s->rtsp_disp_tbl[ror].rule; const struct wfd_arg_list *args;
enum rtsp_message_id next_request = RTSP_M_UNKNOWN; enum rtsp_message_id next_request = RTSP_M_UNKNOWN;
enum wfd_session_arg_id arg_id; enum wfd_session_arg_id arg_id;
enum wfd_session_state new_state = WFD_SESSION_STATE_NULL; enum wfd_session_state new_state = WFD_SESSION_STATE_NULL;
const struct wfd_arg_list *req_args = NULL; const struct wfd_arg_list *req_args = NULL;
int i; int i;
assert_ret(s);
assert_ret(RTSP_M_UNKNOWN != ror);
args = &s->rtsp_disp_tbl[ror].rule;
if(!args->len) { if(!args->len) {
return 0; return 0;
} }
@ -512,7 +543,7 @@ static int wfd_session_handle_request(struct rtsp *bus,
error: error:
wfd_session_terminate(s); wfd_session_terminate(s);
return log_ERRNO(); return log_ERR(r);
} }
static int wfd_session_handle_reply(struct rtsp *bus, static int wfd_session_handle_reply(struct rtsp *bus,
@ -553,10 +584,9 @@ static int wfd_session_handle_reply(struct rtsp *bus,
return 0; return 0;
error: error:
log_info("error while handling reply: %s", strerror(-r));
wfd_session_terminate(s); wfd_session_terminate(s);
return r; return log_ERR(r);
} }
int wfd_session_init(struct wfd_session *s, int wfd_session_init(struct wfd_session *s,
@ -579,7 +609,7 @@ int wfd_session_request(struct wfd_session *s,
int r; int r;
_rtsp_message_unref_ struct rtsp_message *m = NULL; _rtsp_message_unref_ struct rtsp_message *m = NULL;
assert(s); assert_ret(s);
r = wfd_session_do_request(s, id, args, &m); r = wfd_session_do_request(s, id, args, &m);
if(0 > r) { if(0 > r) {
@ -679,7 +709,7 @@ int wfd_session_start(struct wfd_session *s)
_shl_close_ int fd = -1; _shl_close_ int fd = -1;
uint32_t mask; uint32_t mask;
assert(wfd_is_session(s)); assert_ret(wfd_is_session(s));
if(WFD_SESSION_STATE_NULL != s->state) { if(WFD_SESSION_STATE_NULL != s->state) {
return -EINPROGRESS; return -EINPROGRESS;
@ -687,7 +717,7 @@ int wfd_session_start(struct wfd_session *s)
r = (*session_vtbl[s->dir].initiate_io)(s, &fd, &mask); r = (*session_vtbl[s->dir].initiate_io)(s, &fd, &mask);
if(0 > r) { if(0 > r) {
return r; return log_ERRNO();
} }
r = sd_event_add_io(ctl_wfd_get_loop(), r = sd_event_add_io(ctl_wfd_get_loop(),
@ -697,7 +727,7 @@ int wfd_session_start(struct wfd_session *s)
wfd_session_handle_io, wfd_session_handle_io,
s); s);
if (r < 0) { if (r < 0) {
return r; return log_ERRNO();
} }
fd = -1; fd = -1;
@ -789,7 +819,7 @@ const struct wfd_rectangle * wfd_session_get_disp_dimension(struct wfd_session *
int wfd_session_set_disp_dimension(struct wfd_session *s, const struct wfd_rectangle *rect) int wfd_session_set_disp_dimension(struct wfd_session *s, const struct wfd_rectangle *rect)
{ {
assert(rect); assert_ret(rect);
if(rect) { if(rect) {
s->disp_dimen = *rect; s->disp_dimen = *rect;

View file

@ -16,7 +16,6 @@
* You should have received a copy of the GNU Lesser General Public License * You should have received a copy of the GNU Lesser General Public License
* along with MiracleCast; If not, see <http://www.gnu.org/licenses/>. * along with MiracleCast; If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <assert.h>
#include <time.h> #include <time.h>
#include <systemd/sd-event.h> #include <systemd/sd-event.h>
#include "ctl.h" #include "ctl.h"
@ -28,6 +27,8 @@ static int wfd_sink_set_session(struct wfd_sink *sink,
{ {
int r; int r;
assert_ret(sink);
if(sink->session == session) { if(sink->session == session) {
return 0; return 0;
} }
@ -58,9 +59,10 @@ int wfd_sink_new(struct wfd_sink **out,
{ {
struct wfd_sink *sink; struct wfd_sink *sink;
assert(out); assert_ret(out);
assert(peer); assert_ret(peer);
assert(sube && wfd_sube_device_is_sink(sube)); assert_ret(sube);
assert_ret(wfd_sube_device_is_sink(sube));
sink = calloc(1, sizeof(struct wfd_sink)); sink = calloc(1, sizeof(struct wfd_sink));
if(!sink) { if(!sink) {
@ -98,16 +100,22 @@ void wfd_sink_free(struct wfd_sink *sink)
const char * wfd_sink_get_label(struct wfd_sink *sink) const char * wfd_sink_get_label(struct wfd_sink *sink)
{ {
assert_retv(sink, NULL);
return sink->label; return sink->label;
} }
const union wfd_sube * wfd_sink_get_dev_info(struct wfd_sink *sink) const union wfd_sube * wfd_sink_get_dev_info(struct wfd_sink *sink)
{ {
assert_retv(sink, NULL);
return &sink->dev_info; return &sink->dev_info;
} }
struct ctl_peer * wfd_sink_get_peer(struct wfd_sink *sink) struct ctl_peer * wfd_sink_get_peer(struct wfd_sink *sink)
{ {
assert_retv(sink, NULL);
return sink->peer; return sink->peer;
} }
@ -116,8 +124,8 @@ int wfd_sink_create_session(struct wfd_sink *sink, struct wfd_session **out)
int r; int r;
_wfd_session_unref_ struct wfd_session *sess = NULL; _wfd_session_unref_ struct wfd_session *sess = NULL;
assert(sink); assert_ret(sink);
assert(out); assert_ret(out);
if(wfd_sink_is_session_started(sink)) { if(wfd_sink_is_session_started(sink)) {
return -EALREADY; return -EALREADY;
@ -146,7 +154,7 @@ int wfd_sink_create_session(struct wfd_sink *sink, struct wfd_session **out)
int wfd_fn_out_session_ended(struct wfd_session *s) int wfd_fn_out_session_ended(struct wfd_session *s)
{ {
assert(wfd_is_out_session(s)); assert_ret(wfd_is_out_session(s));
wfd_sink_set_session(wfd_out_session_get_sink(s), NULL); wfd_sink_set_session(wfd_out_session_get_sink(s), NULL);
@ -155,5 +163,7 @@ int wfd_fn_out_session_ended(struct wfd_session *s)
bool wfd_sink_is_session_started(struct wfd_sink *sink) bool wfd_sink_is_session_started(struct wfd_sink *sink)
{ {
assert_retv(sink, false);
return NULL != sink->session; return NULL != sink->session;
} }

View file

@ -236,4 +236,13 @@ extern const char *LOG_SUBSYSTEM;
#define log_vEUNMANAGED() \ #define log_vEUNMANAGED() \
((void)log_EUNMANAGED()) ((void)log_EUNMANAGED())
#define assert_ret(c) \
if(!(c)) return (log_error("assertion " #c " failed"), -EINVAL)
#define assert_retv(c, v) \
if(!(c)) return (log_error("assertion " #c " failed"), (v))
#define assert_vret(c) \
if(!(c)) { log_error("assertion " #c " failed"); return; }
#endif /* SHL_LOG_H */ #endif /* SHL_LOG_H */