From 0e5a9f16201a926856668b3c6b2be1c69696009d Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Sat, 5 Mar 2011 17:48:54 +0100
Subject: Clean up updatestring() in "utils.c".

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/utils.c | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

(limited to 'src')

diff --git a/src/utils.c b/src/utils.c
index 5a59556..3ce9898 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -372,23 +372,26 @@ getstring (WINDOW *win, char *str, int l, int x, int y)
 int
 updatestring (WINDOW *win, char **str, int x, int y)
 {
-  char *newstr;
-  int escape, len = strlen (*str) + 1;
+  int len = strlen (*str);
+  char *buf;
+  enum getstr ret;
 
-  EXIT_IF (len > BUFSIZ, _("Internal error: line too long"));
+  EXIT_IF (len + 1 > BUFSIZ, _("Internal error: line too long"));
   
-  newstr = mem_malloc (BUFSIZ);
-  (void) memcpy (newstr, *str, len);
-  escape = getstring (win, newstr, BUFSIZ, x, y);
-  if (!escape)
-    {
-      len = strlen (newstr) + 1;
-      *str = mem_realloc (*str, len, 1);
-      EXIT_IF (*str == 0, _("out of memory"));
-      (void) memcpy (*str, newstr, len);
-    }
-  mem_free (newstr);
-  return escape;
+  buf = mem_malloc (BUFSIZ);
+  (void)memcpy (buf, *str, len + 1);
+
+  ret = getstring (win, buf, BUFSIZ, x, y);
+
+  if (ret == GETSTRING_VALID) {
+    len = strlen (buf);
+    *str = mem_realloc (*str, len + 1, 1);
+    EXIT_IF (*str == 0, _("out of memory"));
+    (void)memcpy (*str, buf, len + 1);
+  }
+
+  mem_free (buf);
+  return ret;
 }
 
 /* checks if a string is only made of digits */
-- 
cgit v1.2.3-70-g09d2