From 8c5dc2d1617dafd1b40a5b713ad3791e2f17f49b Mon Sep 17 00:00:00 2001
From: Miciah Dashiel Butler Masters <miciah@myrealbox.com>
Date: Sat, 1 Sep 2007 09:20:40 +0000
Subject: [PATCH] Factor init_textarea_data out of textarea_edit

---
 src/viewer/text/textarea.c | 40 ++++++++++++++++++++++++++------------
 1 file changed, 28 insertions(+), 12 deletions(-)

diff --git a/src/viewer/text/textarea.c b/src/viewer/text/textarea.c
index cc71525ef..57602a9ac 100644
--- a/src/viewer/text/textarea.c
+++ b/src/viewer/text/textarea.c
@@ -573,6 +573,32 @@ error:
 	return filename;
 }
 
+static struct textarea_data *
+init_textarea_data(struct terminal *term, struct form_state *fs,
+                   struct document_view *doc_view, struct link *link)
+{
+	struct textarea_data *td;
+
+	assert(fs && doc_view && link && term);
+
+	td = mem_calloc(1, sizeof(*td));
+	if (!td) return NULL;
+
+	td->fn = save_textarea_file(fs->value);
+	if (!td->fn) {
+		mem_free(td);
+		return NULL;
+	}
+
+	td->fs = fs;
+	td->doc_view = doc_view;
+	td->link = link;
+	td->fc_maxlength = get_link_form_control(link)->maxlength;
+	td->term = term;
+
+	return td;
+}
+
 void
 textarea_edit(int op, struct terminal *term_, struct form_state *fs_,
 	      struct document_view *doc_view_, struct link *link_)
@@ -595,14 +621,9 @@ textarea_edit(int op, struct terminal *term_, struct form_state *fs_,
 
 		assert(fs_ && doc_view_ && link_ && term_);
 
-		td = mem_calloc(1, sizeof(*td));
-		if (!td) return;
-
-		td->fn = save_textarea_file(fs_->value);
-		if (!td->fn) {
-			mem_free(td);
+		td = init_textarea_data(term_, fs_, doc_view_, link_);
+		if (!td)
 			return;
-		}
 
 		ed = get_opt_str("document.browse.forms.editor",
 		                 doc_view_->session);
@@ -617,11 +638,6 @@ textarea_edit(int op, struct terminal *term_, struct form_state *fs_,
 			goto free_and_return;
 		}
 
-		td->fs = fs_;
-		td->doc_view = doc_view_;
-		td->link = link_;
-		td->fc_maxlength = get_link_form_control(link_)->maxlength;
-		td->term = term_;
 		td->term->textarea_data = td;
 
 		exec_on_terminal(td->term, ex, "", TERM_EXEC_FG);