aboutsummaryrefslogtreecommitdiffstats
path: root/src/blogc-runserver/httpd-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/blogc-runserver/httpd-utils.c')
-rw-r--r--src/blogc-runserver/httpd-utils.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/blogc-runserver/httpd-utils.c b/src/blogc-runserver/httpd-utils.c
index 5e9df2d..e67afb1 100644
--- a/src/blogc-runserver/httpd-utils.c
+++ b/src/blogc-runserver/httpd-utils.c
@@ -19,16 +19,25 @@ br_readline(int socket)
bc_string_t *rv = bc_string_new();
char buffer[READLINE_BUFFER_SIZE];
ssize_t len;
+ bool end = false;
while ((len = read(socket, buffer, READLINE_BUFFER_SIZE)) > 0) {
- for (ssize_t i = 0; i < len; i++) {
- if (buffer[i] == '\r' || buffer[i] == '\n' || buffer[i] == '\0')
- goto end;
- bc_string_append_c(rv, buffer[i]);
+ if (!end) {
+ for (ssize_t i = 0; i < len; i++) {
+ if (buffer[i] == '\r' || buffer[i] == '\n' || buffer[i] == '\0') {
+ // we finished "recording", but still need to exhaust
+ // request data.
+ end = true;
+ break;
+ }
+ bc_string_append_c(rv, buffer[i]);
+ }
+ }
+ if (len < READLINE_BUFFER_SIZE) {
+ break;
}
}
-end:
return bc_string_free(rv, false);
}