[sslh] [PATCH 02/10] Let defer_write accumulate data

ondra+sslh at mistotebe.net ondra+sslh at mistotebe.net
Tue Sep 24 00:30:32 CEST 2013


From: Ondřej Kuzník <ondra at mistotebe.net>

---
 common.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/common.c b/common.c
index f3bae27..708fc7c 100644
--- a/common.c
+++ b/common.c
@@ -161,12 +161,20 @@ int connect_addr(struct addrinfo *addr, int fd_from, const char* cnx_name)
 /* Store some data to write to the queue later */
 int defer_write(struct queue *q, void* data, int data_size) 
 {
+    char *p;
     if (verbose) 
         fprintf(stderr, "**** writing defered on fd %d\n", q->fd);
-    q->defered_data = malloc(data_size);
-    q->begin_defered_data = q->defered_data;
-    q->defered_data_size = data_size;
-    memcpy(q->defered_data, data, data_size);
+
+    p = realloc(q->defered_data, q->defered_data_size + data_size);
+    if (!p) {
+        perror("realloc");
+        exit(1);
+    }
+
+    q->defered_data = q->begin_defered_data = p;
+    p += q->defered_data_size;
+    q->defered_data_size += data_size;
+    memcpy(p, data, data_size);
 
     return 0;
 }
-- 
1.8.4.rc3




More information about the sslh mailing list