From 0e5a9f16201a926856668b3c6b2be1c69696009d Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Sat, 5 Mar 2011 17:48:54 +0100 Subject: Clean up updatestring() in "utils.c". Signed-off-by: Lukas Fleischer --- src/utils.c | 33 ++++++++++++++++++--------------- 1 file 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 */ -- cgit v1.2.3