Commit Diff


commit - d54f10aa3fdb292115d93d868ae105413f812a7a
commit + 0c2c6365f8e2e5b832c9c91e6bec8f81bbe2df90
blob - c7317172f7c1dd0eb9f2595f4a4d0f9976784174
blob + 3b6350631e42b62f4a9aa477c0a2aee5464fec6b
--- gotwebd/fcgi.c
+++ gotwebd/fcgi.c
@@ -312,7 +312,7 @@ fcgi_gen_binary_response(struct request *c, const uint
 	if (c->sock->client_status == CLIENT_DISCONNECT)
 		return -1;
 
-	if (data == NULL)
+	if (data == NULL || len == 0)
 		return 0;
 
 	if ((resp = calloc(1, sizeof(struct fcgi_response))) == NULL) {
@@ -343,43 +343,9 @@ fcgi_gen_binary_response(struct request *c, const uint
 int
 fcgi_gen_response(struct request *c, const char *data)
 {
-	struct fcgi_response *resp;
-	struct fcgi_record_header *header;
-	ssize_t n = 0;
-	int i;
-
-	if (c->sock->client_status == CLIENT_DISCONNECT)
-		return -1;
-
-	if (data == NULL)
+	if (data == NULL || *data == '\0')
 		return 0;
-
-	if (strlen(data) == 0)
-		return 0;
-
-	if ((resp = calloc(1, sizeof(struct fcgi_response))) == NULL) {
-		log_warn("%s: cannot calloc fcgi_response", __func__);
-		return -1;
-	}
-
-	header = (struct fcgi_record_header*) resp->data;
-	header->version = 1;
-	header->type = FCGI_STDOUT;
-	header->id = htons(c->id);
-	header->padding_len = 0;
-	header->reserved = 0;
-
-	for (i = 0; i < strlen(data); i++) {
-		resp->data[i+8] = data[i];
-		n++;
-	}
-
-	header->content_len = htons(n);
-	resp->data_pos = 0;
-	resp->data_len = n + sizeof(struct fcgi_record_header);
-	fcgi_send_response(c, resp);
-
-	return 0;
+	return fcgi_gen_binary_response(c, data, strlen(data));
 }
 
 void