From 5b05b96ec0cbef6ed10adb1423cdedde09ee868e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Fri, 30 Dec 2016 08:30:59 +0100 Subject: Backport TERMKEY_FLAG_NOSTART and fix two leaks ...that are notably still present in the original library. --- termo.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'termo.c') diff --git a/termo.c b/termo.c index 469af1d..d72a4f5 100644 --- a/termo.c +++ b/termo.c @@ -425,12 +425,12 @@ termo_new (int fd, const char *encoding, int flags) termo_set_flags (tk, flags); const char *term = getenv ("TERM"); - if (termo_init (tk, term, encoding) - && termo_start (tk)) + if (!termo_init (tk, term, encoding)) + free (tk); + else if (!(flags & TERMO_FLAG_NOSTART) && !termo_start (tk)) + termo_free (tk); + else return tk; - - // FIXME: resource leak on termo_start() failure - free (tk); return NULL; } @@ -445,13 +445,12 @@ termo_new_abstract (const char *term, const char *encoding, int flags) termo_set_flags (tk, flags); if (!termo_init (tk, term, encoding)) - { free (tk); - return NULL; - } - - termo_start (tk); - return tk; + else if (!(flags & TERMO_FLAG_NOSTART) && !termo_start (tk)) + termo_free (tk); + else + return tk; + return NULL; } void -- cgit v1.2.3