aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 */