commit - 20dff2d28b240611ed334328b1279305169e5821
commit + 5ce4c55cc90bdd51007f40008c5044d451c6ea09
blob - 7ce53ce038aa1fe95ae993216a80c7a7af157365
blob + 6f9ed2e503f1d40a0a2ccc237fdaeb2faa9f056a
--- web/http.c
+++ web/http.c
http_reply(struct client *clt, int code, const char *reason, const char *ctype)
{
const char *version, *location = NULL;
- int r;
log_debug("> %d %s", code, reason);
if (clt->req.version == HTTP_1_0)
version = "HTTP/1.0";
- r = bufio_compose_fmt(&clt->bio, "%s %d %s\r\n"
+ if (bufio_compose_fmt(&clt->bio, "%s %d %s\r\n"
"Connection: close\r\n"
- "Cache-Control: no-store\r\n"
- "%s%s%s"
- "%s%s%s"
- "%s"
- "\r\n",
- version, code, reason,
- ctype == NULL ? "" : "Content-Type: ",
- ctype == NULL ? "" : ctype,
- ctype == NULL ? "" : "\r\n",
- location == NULL ? "" : "Location: ",
- location == NULL ? "" : location,
- location == NULL ? "" : "\r\n",
- clt->chunked ? "Transfer-Encoding: chunked\r\n" : "");
- if (r == -1) {
- clt->err = 1;
- return -1;
- }
+ "Cache-Control: no-store\r\n",
+ version, code, reason) == -1)
+ goto err;
+ if (ctype != NULL &&
+ bufio_compose_fmt(&clt->bio, "Content-Type: %s\r\n", ctype) == -1)
+ goto err;
+ if (location != NULL &&
+ bufio_compose_fmt(&clt->bio, "Location: %s\r\n", location) == -1)
+ goto err;
+ if (clt->chunked && bufio_compose_str(&clt->bio,
+ "Transfer-Encoding: chunked\r\n") == -1)
+ goto err;
+ if (bufio_compose(&clt->bio, "\r\n", 2) == -1)
+ goto err;
bufio_set_chunked(&clt->bio, clt->chunked);
}
return 0;
+
+ err:
+ clt->err = 1;
+ return -1;
}
int