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