From a75fc3529547584d2b885a8b2478d893b5abdaf5 Mon Sep 17 00:00:00 2001
From: Přemysl Janouch 
Date: Sat, 25 Apr 2015 02:41:52 +0200
Subject: degesch: refactor handle_command_buffer() a bit
---
 degesch.c | 83 +++++++++++++++++++++++++++++++--------------------------------
 1 file changed, 41 insertions(+), 42 deletions(-)
diff --git a/degesch.c b/degesch.c
index 09dc10b..8b79ffd 100644
--- a/degesch.c
+++ b/degesch.c
@@ -2642,6 +2642,45 @@ server_command_check (struct app_context *ctx, const char *action)
 	return false;
 }
 
+static void
+show_buffers_list (struct app_context *ctx)
+{
+	buffer_send_status (ctx, ctx->global_buffer, "%s", "");
+	buffer_send_status (ctx, ctx->global_buffer, "Buffers list:");
+
+	int i = 1;
+	LIST_FOR_EACH (struct buffer, iter, ctx->buffers)
+		buffer_send_status (ctx, ctx->global_buffer,
+			"  [%d] %s", i++, iter->name);
+}
+
+static void
+handle_buffer_close (struct app_context *ctx, char *arguments)
+{
+	struct buffer *buffer = NULL;
+	const char *which = NULL;
+	if (!*arguments)
+		buffer = ctx->current_buffer;
+	else
+		buffer = try_decode_buffer (ctx, (which = cut_word (&arguments)));
+
+	if (!buffer)
+		buffer_send_error (ctx, ctx->global_buffer,
+			"%s: %s", "No such buffer", which);
+	else if (buffer == ctx->global_buffer)
+		buffer_send_error (ctx, ctx->global_buffer,
+			"Can't close the global buffer");
+	else if (buffer == ctx->server_buffer)
+		buffer_send_error (ctx, ctx->global_buffer,
+			"Can't close the server buffer");
+	else
+	{
+		if (buffer == ctx->current_buffer)
+			buffer_activate (ctx, buffer_next (ctx, 1));
+		buffer_remove (ctx, buffer);
+	}
+}
+
 static bool
 handle_command_buffer (struct app_context *ctx, char *arguments)
 {
@@ -2649,21 +2688,10 @@ handle_command_buffer (struct app_context *ctx, char *arguments)
 	if (try_handle_buffer_goto (ctx, action))
 		return true;
 
-	struct buffer *buffer = NULL;
-
 	// XXX: also build a prefix map?
-	//   It looks like we'll want to split this into functions anyway.
 	// TODO: some subcommand to print N last lines from the buffer
 	if (!strcasecmp_ascii (action, "list"))
-	{
-		buffer_send_status (ctx, ctx->global_buffer, "%s", "");
-		buffer_send_status (ctx, ctx->global_buffer, "Buffers list:");
-
-		int i = 1;
-		LIST_FOR_EACH (struct buffer, iter, ctx->buffers)
-			buffer_send_status (ctx, ctx->global_buffer,
-				"  [%d] %s", i++, iter->name);
-	}
+		show_buffers_list (ctx);
 	else if (!strcasecmp_ascii (action, "clear"))
 	{
 		// TODO
@@ -2674,36 +2702,7 @@ handle_command_buffer (struct app_context *ctx, char *arguments)
 		//   we will probably need to extend liberty for this
 	}
 	else if (!strcasecmp_ascii (action, "close"))
-	{
-		const char *which = NULL;
-		if (!*arguments)
-			buffer = ctx->current_buffer;
-		else
-			buffer = try_decode_buffer (ctx, (which = cut_word (&arguments)));
-
-		if (!buffer)
-		{
-			buffer_send_error (ctx, ctx->global_buffer,
-				"%s: %s", "No such buffer", which);
-			return true;
-		}
-		if (buffer == ctx->global_buffer)
-		{
-			buffer_send_error (ctx, ctx->global_buffer,
-				"Can't close the global buffer");
-			return true;
-		}
-		if (buffer == ctx->server_buffer)
-		{
-			buffer_send_error (ctx, ctx->global_buffer,
-				"Can't close the server buffer");
-			return true;
-		}
-
-		if (buffer == ctx->current_buffer)
-			buffer_activate (ctx, buffer_next (ctx, 1));
-		buffer_remove (ctx, buffer);
-	}
+		handle_buffer_close (ctx, arguments);
 	else
 		return false;
 
-- 
cgit v1.2.3-70-g09d2