[master] df74fe4 Unlearn struct cli from VCLI_WriteResult()

Poul-Henning Kamp phk at varnish-cache.org
Mon Jun 6 10:43:17 CEST 2011


commit df74fe4c540e4e7b0dbd7932e5bca96cc0f6ae9d
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Jun 6 08:42:59 2011 +0000

    Unlearn struct cli from VCLI_WriteResult()

diff --git a/bin/varnishd/mgt_cli.c b/bin/varnishd/mgt_cli.c
index ee62ada..d3a0c67 100644
--- a/bin/varnishd/mgt_cli.c
+++ b/bin/varnishd/mgt_cli.c
@@ -400,7 +400,7 @@ mgt_cli_setup(int fdi, int fdo, int verbose, const char *ident, mgt_cli_close_f
 		mcf_banner(cli, NULL, NULL);
 	}
 	AZ(VSB_finish(cli->sb));
-	(void)VCLI_WriteResult(fdo, cli);
+	(void)VCLI_WriteResult(fdo, cli->result, VSB_data(cli->sb));
 
 
 	ev = vev_new();
diff --git a/include/cli_common.h b/include/cli_common.h
index 602afb0..5bad09d 100644
--- a/include/cli_common.h
+++ b/include/cli_common.h
@@ -44,7 +44,7 @@ struct cli {
 	struct VCLS		*cls;
 };
 
-int VCLI_WriteResult(int fd, const struct cli *cli);
+int VCLI_WriteResult(int fd, unsigned status, const char *result);
 int VCLI_ReadResult(int fd, unsigned *status, char **ptr, double tmo);
 
 void VCLI_AuthResponse(int S_fd, const char *challenge,
diff --git a/lib/libvarnish/cli_common.c b/lib/libvarnish/cli_common.c
index 3b7a0aa..7b6c43a 100644
--- a/lib/libvarnish/cli_common.c
+++ b/lib/libvarnish/cli_common.c
@@ -83,7 +83,7 @@ VCLI_SetResult(struct cli *cli, unsigned res)
 }
 
 int
-VCLI_WriteResult(int fd, const struct cli *cli)
+VCLI_WriteResult(int fd, unsigned status, const char *result)
 {
 	int i, l;
 	struct iovec iov[3];
@@ -93,18 +93,18 @@ VCLI_WriteResult(int fd, const struct cli *cli)
 					 * any misformats by snprintf
 					 */
 
-	assert(cli->result >= 100);
-	assert(cli->result <= 999);	/*lint !e650 const out of range */
+	assert(status >= 100);
+	assert(status <= 999);		/*lint !e650 const out of range */
 
 	i = snprintf(res, sizeof res,
-	    "%-3d %-8ld\n", cli->result, (long)VSB_len(cli->sb));
+	    "%-3d %-8jd\n", status, (intmax_t)strlen(result));
 	assert(i == CLI_LINE0_LEN);
 
 	iov[0].iov_base = res;
 	iov[0].iov_len = CLI_LINE0_LEN;
 
-	iov[1].iov_base = VSB_data(cli->sb);
-	iov[1].iov_len = VSB_len(cli->sb);
+	iov[1].iov_base = (void*)(uintptr_t)result;	/* TRUST ME */
+	iov[1].iov_len = strlen(result);
 
 	iov[2].iov_base = nl;
 	iov[2].iov_len = 1;
diff --git a/lib/libvarnish/cli_serve.c b/lib/libvarnish/cli_serve.c
index 571ee29..621f184 100644
--- a/lib/libvarnish/cli_serve.c
+++ b/lib/libvarnish/cli_serve.c
@@ -293,7 +293,8 @@ cls_vlu2(void *priv, char * const *av)
 
 	cli->cls = NULL;
 
-	if (VCLI_WriteResult(cfd->fdo, cli) || cli->result == CLIS_CLOSE)
+	if (VCLI_WriteResult(cfd->fdo, cli->result, VSB_data(cli->sb)) ||
+	    cli->result == CLIS_CLOSE)
 		return (1);
 
 	return (0);



More information about the varnish-commit mailing list