Backport TERMKEY_FLAG_NOSTART and fix two leaks

...that are notably still present in the original library.
This commit is contained in:
Přemysl Eric Janouch 2016-12-30 08:30:59 +01:00
parent a9b41e41b7
commit 5b05b96ec0
Signed by: p
GPG Key ID: B715679E3A361BE6
3 changed files with 14 additions and 13 deletions

View File

@ -39,7 +39,7 @@ statically linked against the library, and hence they can be run as they are:
What's Different From the Original termkey?
-------------------------------------------
The main change is throwing away any UTF-8 dependent code, making the library
The main change is throwing out any UTF-8 dependent code, making the library
capable of handling all unibyte and multibyte encodings supported by iconv on
your system. The characters are still presented as Unicode in the end, however,
as the other sensible option is wchar_t and that doesn't really work well, see

21
termo.c
View File

@ -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

View File

@ -192,7 +192,9 @@ enum
// Allow Ctrl-C to be read as normal, disabling SIGINT
TERMO_FLAG_CTRLC = 1 << 6,
// Return ERROR on signal (EINTR) rather than retry
TERMO_FLAG_EINTR = 1 << 7
TERMO_FLAG_EINTR = 1 << 7,
// Do not call termkey_start() in constructor
TERMO_FLAG_NOSTART = 1 << 8
};
enum