]> git.ipfire.org Git - pakfire.git/commitdiff
xfer: Use our own buffer implementation for the receive buffer
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 16 Apr 2025 15:45:29 +0000 (15:45 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 16 Apr 2025 15:45:29 +0000 (15:45 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/xfer.c

index e851d565cfb0e423d98f3f0fbc3f7898a9fdcd8e..9f158fb3b68aae14bdfc4dcc3a397c2648206332 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <systemd/sd-event.h>
 
+#include <pakfire/buffer.h>
 #include <pakfire/ctx.h>
 #include <pakfire/hasher.h>
 #include <pakfire/hex.h>
@@ -116,10 +117,7 @@ struct pakfire_xfer {
        } callbacks;
 
        // WebSocket Receive Buffer
-       struct pakfire_xfer_buffer {
-               char* data;
-               size_t length;
-       } recv_buffer;
+       struct pakfire_buffer recv_buffer;
 
        // WebSocket Send Buffer
        struct pakfire_send_buffer {
@@ -147,8 +145,7 @@ static void pakfire_xfer_free(struct pakfire_xfer* xfer) {
                sd_event_source_unref(xfer->event);
 
        // Receive Buffer
-       if (xfer->recv_buffer.data)
-               free(xfer->recv_buffer.data);
+       pakfire_buffer_free(&xfer->recv_buffer);
        if (xfer->send_buffer.data)
                free(xfer->send_buffer.data);
 
@@ -981,22 +978,6 @@ static const char* curl_http_version(long v) {
        return "unknown";
 }
 
-static int pakfire_xfer_allocate(struct pakfire_xfer* xfer, size_t length) {
-
-       // Otherwise, we resize the buffer
-       xfer->recv_buffer.data = pakfire_realloc(xfer->recv_buffer.data, length);
-       if (!xfer->recv_buffer.data) {
-               ERROR(xfer->ctx, "Could not allocate memory: %m\n");
-
-               return -errno;
-       }
-
-       // Update the length
-       xfer->recv_buffer.length = length;
-
-       return 0;
-}
-
 static int pakfire_xfer_socket_send(struct pakfire_xfer* self) {
        int r;
 
@@ -1022,7 +1003,7 @@ static int pakfire_xfer_socket_send(struct pakfire_xfer* self) {
 
 static int pakfire_xfer_socket_recv(struct pakfire_xfer* xfer) {
        const struct curl_ws_frame* meta = NULL;
-       char* buffer[4096];
+       char buffer[4096];
        int r;
 
        size_t bytes_received = 0;
@@ -1053,18 +1034,16 @@ static int pakfire_xfer_socket_recv(struct pakfire_xfer* xfer) {
                return 0;
 
        // Allocate some buffer space
-       r = pakfire_xfer_allocate(xfer, meta->offset + bytes_received);
-       if (r)
+       r = pakfire_buffer_push(&xfer->recv_buffer, buffer, bytes_received);
+       if (r < 0)
                return r;
 
-       // Copy the received message
-       memcpy(xfer->recv_buffer.data + meta->offset, buffer, bytes_received);
-
        // Call again if this was not the entire message
        if (meta->flags & CURLWS_CONT)
                return pakfire_xfer_socket_recv(xfer);
 
-       DEBUG(xfer->ctx, "We have received a message of %zu byte(s)\n", xfer->recv_buffer.length);
+       DEBUG(xfer->ctx, "We have received a message of %zu byte(s)\n",
+               pakfire_buffer_length(&xfer->recv_buffer));
 
        if (meta->flags & CURLWS_TEXT) {
                DEBUG(xfer->ctx, "The message is a text\n");