diff options
author | Steven Rostedt (Red Hat) <rostedt@goodmis.org> | 2016-09-16 14:41:51 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2016-11-01 18:02:40 -0400 |
commit | 57653fbada3060ce4aecd9361ccba0689672c49d (patch) | |
tree | 701e4072f3ae8f60f320d191930b8052788de73c | |
parent | 17e61dba5514479fd13d45bcb6e03a7d0108720d (diff) | |
download | trace-cmd-57653fbada3060ce4aecd9361ccba0689672c49d.tar.gz |
trace-cmd msg: Add msg_write() helper for msg_do_write_check()
As the special cases in msg_do_write_check() do basically the same thing,
add a helper function to be called by them instead.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | trace-msg.c | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/trace-msg.c b/trace-msg.c index 4e700bfc..0fc55204 100644 --- a/trace-msg.c +++ b/trace-msg.c @@ -132,37 +132,31 @@ struct tracecmd_msg { struct tracecmd_msg *errmsg; +static int msg_write(int fd, struct tracecmd_msg *msg, int size, void *addr) +{ + int ret; + + ret = __do_write_check(fd, msg, size); + if (ret < 0) + return ret; + if (ntohl(msg->size) <= size) + return 0; + return __do_write_check(fd, addr, ntohl(msg->size) - size); +} + static ssize_t msg_do_write_check(int fd, struct tracecmd_msg *msg) { - int wsize; int ret; switch (ntohl(msg->cmd)) { case MSG_TINIT: - wsize = MIN_TINIT_SIZE; - ret = __do_write_check(fd, msg, wsize); - if (ret < 0) - break; - if (ntohl(msg->size) <= MIN_TINIT_SIZE) - break; - ret = __do_write_check(fd, msg->data.tinit.opt, - ntohl(msg->size) - wsize); + ret = msg_write(fd, msg, MIN_TINIT_SIZE, msg->data.tinit.opt); break; case MSG_RINIT: - wsize = MIN_RINIT_SIZE; - ret = __do_write_check(fd, msg, wsize); - if (ret < 0) - break; - ret = __do_write_check(fd, msg->data.rinit.port_array, - ntohl(msg->size) - wsize); + ret = msg_write(fd, msg, MIN_RINIT_SIZE, msg->data.rinit.port_array); break; case MSG_SENDMETA: - wsize = MIN_META_SIZE; - ret = __do_write_check(fd, msg, wsize); - if (ret < 0) - break; - ret = __do_write_check(fd, msg->data.meta.buf, - ntohl(msg->size) - wsize); + ret = msg_write(fd, msg, MIN_META_SIZE, msg->data.meta.buf); break; default: ret = __do_write_check(fd, msg, ntohl(msg->size)); |