diff options
author | Steven Rostedt (Red Hat) <rostedt@goodmis.org> | 2016-09-14 18:54:30 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2016-10-30 19:46:49 -0400 |
commit | 7a96111611ed8e67a0a371be04779609a2483a7e (patch) | |
tree | 162b6569a8b72760cdef14e42581139ebd6617b5 | |
parent | 7a9bb2d85096327d02836f6587de78784ce1b9ca (diff) | |
download | trace-cmd-7a96111611ed8e67a0a371be04779609a2483a7e.tar.gz |
trace-cmd msg: Consolidate logic of allocating reads of RINIT and SENDMETA
As the logic of allocating RINIT and SENDMETA on read is the same except for
sizes and where to store the dynamic data, create a helper funtion that
performs the algorithm for both of them.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | trace-msg.c | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/trace-msg.c b/trace-msg.c index 03c48ceb..62a9c194 100644 --- a/trace-msg.c +++ b/trace-msg.c @@ -309,6 +309,26 @@ static int msg_read(int fd, void *buf, u32 size, int *n) return 0; } +static int msg_read_extra(int fd, void *buf, int *n, + int size, int min_size, void **addr) +{ + int rsize; + int ret; + + rsize = min_size - *n; + ret = msg_read(fd, buf, rsize, n); + if (ret < 0) + return ret; + size -= *n; + if (size < 0) + return -ENOMSG; + *addr = malloc(size); + if (!*addr) + return -ENOMEM; + *n = 0; + return msg_read(fd, *addr, size, n); +} + static int tracecmd_msg_read_extra(int fd, struct tracecmd_msg *msg, int *n) { int size = ntohl(msg->size); @@ -335,31 +355,11 @@ static int tracecmd_msg_read_extra(int fd, struct tracecmd_msg *msg, int *n) } return 0; case MSG_RINIT: - rsize = MIN_RINIT_SIZE - *n; - ret = msg_read(fd, msg, rsize, n); - if (ret < 0) - return ret; - size -= *n; - if (size < 0) - return -ENOMSG; - msg->data.rinit.port_array = malloc(size); - if (!msg->data.rinit.port_array) - return -ENOMEM; - *n = 0; - return msg_read(fd, msg->data.rinit.port_array, size, n); + return msg_read_extra(fd, msg, n, size, MIN_RINIT_SIZE, + (void **)&msg->data.rinit.port_array); case MSG_SENDMETA: - rsize = MIN_META_SIZE - *n; - ret = msg_read(fd, msg, rsize, n); - if (ret < 0) - return ret; - size -= *n; - if (size < 0) - return -ENOMSG; - msg->data.meta.buf = malloc(size); - if (!msg->data.meta.buf) - return -ENOMEM; - *n = 0; - return msg_read(fd, msg->data.meta.buf, size, n); + return msg_read_extra(fd, msg, n, size, MIN_META_SIZE, + (void **)&msg->data.meta.buf); } return msg_read(fd, msg, size - MSG_HDR_LEN, n); |