Commit Diff


commit - 27909800761a0019372616370f509848b663d62c
commit + 5c57fb104f2643c961f006a4c736e14f696d1689
blob - 6040d3bad633ffc70266f8930e7479fbfa8c66e1
blob + 8cb7468d5dd547a2c6ed4125341f38cc40f479b4
--- kamirepl.c
+++ kamirepl.c
@@ -68,6 +68,7 @@ static void		 client_error(struct bufferevent *, short
 static void		 readcmd(int, short, void *);
 
 static void		 handle_9p(const void *, size_t);
+static void		 clr(void);
 static void		 prompt(void);
 
 static void ATTR_DEAD
@@ -91,7 +92,8 @@ sig_handler(int sig, short event, void *d)
 	switch (sig) {
 	case SIGINT:
 	case SIGTERM:
-		log_warnx("\rShutting down...");
+		clr();
+		log_warnx("Shutting down...");
 		event_loopbreak();
 		return;
 	default:
@@ -276,13 +278,13 @@ client_error(struct bufferevent *bev, short err, void 
 		fatal("buffer event error");
 
 	if (err & EVBUFFER_EOF) {
-		printf("\r");
+		clr();
 		log_info("EOF");
 		event_loopbreak();
 		return;
 	}
 
-	printf("\r");
+	clr();
 	log_warnx("unknown event error");
 	event_loopbreak();
 }
@@ -297,7 +299,7 @@ readcmd(int fd, short event, void *data)
 	if ((linelen = getline(&line, &linesize, stdin)) != -1) {
 		line[linelen-1] = '\0';
 
-		printf("\r");
+		clr();
 		log_info("TODO: parse `%s'", line);
 		prompt();
 	}
@@ -319,13 +321,20 @@ handle_9p(const void *data, size_t len)
 	/* type is one byte long, no endianness issues */
 	hdr.tag = le16toh(hdr.tag);
 
-	printf("\r");
+	clr();
 	log_info("[%d] type=%s len=%"PRIu32, hdr.tag, pp_msg_type(hdr.type),
 	    hdr.len);
 	prompt();
 }
 
 static void
+clr(void)
+{
+	printf("\r");
+	fflush(stdout);
+}
+
+static void
 prompt(void)
 {
 	printf("%s", PROMPT);