From 66ce00153bd35bb83a296f7eb31efec6d6e6768b Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Mon, 21 Jul 2014 22:56:37 +0200 Subject: Refactor new_tempfile() Avoid preallocating buffers on the stack, use dynamic memory allocation instead. Also, change the semantics of new_tempfile() so that it returns the full name of the temporary file and fix all call sites. Signed-off-by: Lukas Fleischer --- src/note.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'src/note.c') diff --git a/src/note.c b/src/note.c index ce627b9..e98dd1d 100644 --- a/src/note.c +++ b/src/note.c @@ -77,19 +77,14 @@ char *generate_note(const char *str) /* Edit a note with an external editor. */ void edit_note(char **note, const char *editor) { - char tmppath[BUFSIZ]; - char *tmpext; + char *tmpprefix = NULL, *tmppath = NULL; char *notepath = NULL; char *sha1 = mem_malloc(SHA1_DIGESTLEN * 2 + 1); FILE *fp; - strncpy(tmppath, get_tempdir(), BUFSIZ); - tmppath[BUFSIZ - 1] = '\0'; - strncat(tmppath, "/calcurse-note.", BUFSIZ - strlen(tmppath) - 1); - if ((tmpext = new_tempfile(tmppath, TMPEXTSIZ)) == NULL) - return; - strncat(tmppath, tmpext, BUFSIZ - strlen(tmppath) - 1); - mem_free(tmpext); + asprintf(&tmpprefix, "%s/calcurse-note", get_tempdir()); + if ((tmppath = new_tempfile(tmpprefix)) == NULL) + goto cleanup; if (*note != NULL) { asprintf(¬epath, "%s%s", path_notes, *note); @@ -113,6 +108,10 @@ void edit_note(char **note, const char *editor) } unlink(tmppath); + +cleanup: + mem_free(tmpprefix); + mem_free(tmppath); } /* View a note in an external pager. */ -- cgit v1.2.3-54-g00ecf