about summary refs log tree commit diff
path: root/src/response.c
diff options
context:
space:
mode:
authorNakidai <nakidai@disroot.org>2024-12-15 00:29:28 +0300
committerNakidai <nakidai@disroot.org>2024-12-15 00:29:28 +0300
commitf611496625b0b240a8b849afabcfef9d373fa868 (patch)
tree2430ffe07a6368efc840c928d2f9bb02165ca183 /src/response.c
parent93c754359d9a52a1e848f1c2ad9603a0c04bf1d7 (diff)
downloadlibhttpc-f611496625b0b240a8b849afabcfef9d373fa868.tar.gz
libhttpc-f611496625b0b240a8b849afabcfef9d373fa868.zip
Make LibHTTPC_dumpResponse accept NULL in buf
When LibHTTPC_dumpResponse accepts NULL it will allocate buffer itself
using LibHTTPC_malloc
Diffstat (limited to 'src/response.c')
-rw-r--r--src/response.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/response.c b/src/response.c
index b930fc6..d2442ff 100644
--- a/src/response.c
+++ b/src/response.c
@@ -43,11 +43,39 @@ char *LibHTTPC_dumpResponse(struct LibHTTPC_Response *response, char *buf, size_
 
     snprintf(status, sizeof(status), "%d", response->status);
 
+    if (!buf)
+    {
+        if (!LibHTTPC_malloc)
+            return NULL;
+
+        size_t buf_len = (
+            1
+            + strlen(response->version) + 1
+            + strlen(status) + 1
+            + strlen(response->phrase) + 2
+            + 2
+        );
+        for (size_t i = 0; i < response->header_count; ++i)
+            buf_len += (
+                strlen(response->headers[i].name)
+                + 2
+                + strlen(response->headers[i].value)
+                + 2
+            );
+        if (response->body)
+            buf_len += strlen(response->body);
+        buf = malloc(buf_len);
+        if (!buf)
+            return NULL;
+
+        *buf = '\0';
+    }
+
 #define append(X) strncat(buf, (X), buf_len - strlen(buf))
     WRITE();
 #undef append
 
-    return NULL;
+    return buf;
 }
 
 #ifdef LibHTTPC_SOCK