summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Fleischer <calcurse@cryptocrack.de>2011-03-05 17:48:54 +0100
committerLukas Fleischer <calcurse@cryptocrack.de>2011-03-05 17:49:27 +0100
commit0e5a9f16201a926856668b3c6b2be1c69696009d (patch)
treedf8fe60b12af7fad2ef8dab0d07a10010ec894f1
parenta7787067919d28a2e0564985e41dea42ea0321d8 (diff)
downloadcalcurse-0e5a9f16201a926856668b3c6b2be1c69696009d.zip
Clean up updatestring() in "utils.c".
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
-rw-r--r--src/utils.c33
1 files changed, 18 insertions, 15 deletions
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 */