[master] 7058d47 Use cli_readres for varnish responses in interactive mode

Martin Blix Grydeland martin at varnish-cache.org
Fri Mar 11 15:09:41 CET 2011


commit 7058d471b586151e01a8167b04d5845edffa7fd5
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date:   Fri Mar 11 15:07:26 2011 +0100

    Use cli_readres for varnish responses in interactive mode

diff --git a/bin/varnishadm/varnishadm.c b/bin/varnishadm/varnishadm.c
index 628a995..4f3d013 100644
--- a/bin/varnishadm/varnishadm.c
+++ b/bin/varnishadm/varnishadm.c
@@ -193,7 +193,9 @@ pass(int sock)
 {
 	struct pollfd fds[2];
 	char buf[1024];
-	int i, n, m;
+	int i, n;
+	char *answer = NULL;
+	unsigned u, status;
 
 #ifdef HAVE_LIBEDIT
 	_line_sock = sock;
@@ -214,21 +216,25 @@ pass(int sock)
 		i = poll(fds, 2, -1);
 		assert(i > 0);
 		if (fds[0].revents & POLLIN) {
-			n = read(fds[0].fd, buf, sizeof buf);
-			if (n == 0)
-				RL_EXIT(0);
-			if (n < 0) {
-				perror("Read error reading CLI socket");
-				RL_EXIT(1);
-			}
-			assert(n > 0);
 			/* Get rid of the prompt, kinda hackish */
-			write(1, "\r           \r", 13);
-			m = write(1, buf, n);
-			if (n != m) {
-				perror("Write error writing stdout");
+			u = write(1, "\r           \r", 13);
+			u = cli_readres(fds[0].fd, &status, &answer, timeout);
+			if (u) {
+				if (status == CLIS_COMMS)
+					RL_EXIT(0);
+				if (answer)
+					fprintf(stderr, "%s\n", answer);
 				RL_EXIT(1);
 			}
+
+			sprintf(buf, "%u\n", status);
+			u = write(1, buf, strlen(buf));
+			if (answer) {
+				u = write(1, answer, strlen(answer));
+				u = write(1, "\n", 1);
+				free(answer);
+				answer = NULL;
+			}
 #ifdef HAVE_LIBEDIT
 			rl_forced_update_display();
 #endif



More information about the varnish-commit mailing list