From e539f82d2af8aac684ead174e22c04897e0f85c0 Mon Sep 17 00:00:00 2001
From: dimitri staessens <dimitri.staessens@ugent.be>
Date: Tue, 22 Aug 2017 09:54:45 +0200
Subject: lib, irmd: Use static buffer for messages

---
 src/irmd/ipcp.c   | 26 +++++++++-----------------
 src/lib/sockets.c | 30 +++++++++++-------------------
 2 files changed, 20 insertions(+), 36 deletions(-)

diff --git a/src/irmd/ipcp.c b/src/irmd/ipcp.c
index b8f11508..e1689b91 100644
--- a/src/irmd/ipcp.c
+++ b/src/irmd/ipcp.c
@@ -52,9 +52,9 @@ ipcp_msg_t * send_recv_ipcp_msg(pid_t        api,
                                 ipcp_msg_t * msg)
 {
        int            sockfd    = 0;
-       buffer_t       buf;
+       uint8_t        buf[IPCP_MSG_BUF_SIZE];
        char *         sock_path = NULL;
-       ssize_t        count     = 0;
+       ssize_t        len;
        ipcp_msg_t *   recv_msg  = NULL;
        struct timeval tv;
 
@@ -73,14 +73,8 @@ ipcp_msg_t * send_recv_ipcp_msg(pid_t        api,
 
        free(sock_path);
 
-       buf.len = ipcp_msg__get_packed_size(msg);
-       if (buf.len == 0) {
-               close(sockfd);
-               return NULL;
-       }
-
-       buf.data = malloc(IPCP_MSG_BUF_SIZE);
-       if (buf.data == NULL) {
+       len = ipcp_msg__get_packed_size(msg);
+       if (len == 0) {
                close(sockfd);
                return NULL;
        }
@@ -113,18 +107,16 @@ ipcp_msg_t * send_recv_ipcp_msg(pid_t        api,
                log_warn("Failed to set timeout on socket.");
 
        pthread_cleanup_push(close_ptr, (void *) &sockfd);
-       pthread_cleanup_push((void (*)(void *)) free, (void *) buf.data);
 
-       ipcp_msg__pack(msg, buf.data);
+       ipcp_msg__pack(msg, buf);
 
-       if (write(sockfd, buf.data, buf.len) != -1)
-               count = read(sockfd, buf.data, IPCP_MSG_BUF_SIZE);
+       if (write(sockfd, buf, len) != -1)
+               len = read(sockfd, buf, IPCP_MSG_BUF_SIZE);
 
-       if (count > 0)
-               recv_msg = ipcp_msg__unpack(NULL, count, buf.data);
+       if (len > 0)
+               recv_msg = ipcp_msg__unpack(NULL, len, buf);
 
        pthread_cleanup_pop(true);
-       pthread_cleanup_pop(true);
 
        return recv_msg;
 }
diff --git a/src/lib/sockets.c b/src/lib/sockets.c
index 263d2356..9f1b326e 100644
--- a/src/lib/sockets.c
+++ b/src/lib/sockets.c
@@ -95,40 +95,32 @@ static void close_ptr(void * o)
 
 irm_msg_t * send_recv_irm_msg(irm_msg_t * msg)
 {
-        int sockfd;
-        buffer_t buf;
-        ssize_t count = 0;
-        irm_msg_t * recv_msg = NULL;
+        int         sockfd;
+        uint8_t     buf[IRM_MSG_BUF_SIZE];
+        ssize_t     len;
+        irm_msg_t * recv_msg;
 
         sockfd = client_socket_open(IRM_SOCK_PATH);
         if (sockfd < 0)
                 return NULL;
 
-        buf.len = irm_msg__get_packed_size(msg);
-        if (buf.len == 0) {
-                close(sockfd);
-                return NULL;
-        }
-
-        buf.data = malloc(IRM_MSG_BUF_SIZE);
-        if (buf.data == NULL) {
+        len = irm_msg__get_packed_size(msg);
+        if (len == 0) {
                 close(sockfd);
                 return NULL;
         }
 
         pthread_cleanup_push(close_ptr, &sockfd);
-        pthread_cleanup_push((void (*)(void *)) free, (void *) buf.data);
 
-        irm_msg__pack(msg, buf.data);
+        irm_msg__pack(msg, buf);
 
-        if (write(sockfd, buf.data, buf.len) != -1)
-                count = read(sockfd, buf.data, IRM_MSG_BUF_SIZE);
+        if (write(sockfd, buf, len) != -1)
+                len = read(sockfd, buf, IRM_MSG_BUF_SIZE);
 
-        if (count > 0)
-                recv_msg = irm_msg__unpack(NULL, count, buf.data);
+        if (len > 0)
+                recv_msg = irm_msg__unpack(NULL, len, buf);
 
         pthread_cleanup_pop(true);
-        pthread_cleanup_pop(true);
 
         return recv_msg;
 }
-- 
cgit v1.2.3