Split termkey_new() into alloc and initialise phases
This commit is contained in:
parent
4cf544f26c
commit
f9fe338e3e
71
termkey.c
71
termkey.c
|
@ -173,12 +173,47 @@ static const char *res2str(TermKeyResult res)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* We might expose this as public API one day, when the ideas are finalised.
|
static TermKey *termkey_alloc(void)
|
||||||
* As yet it isn't public, so keep it static
|
|
||||||
*/
|
|
||||||
static TermKey *termkey_new_full(int fd, int flags, size_t buffsize, int waittime)
|
|
||||||
{
|
{
|
||||||
TermKey *tk = malloc(sizeof(*tk));
|
TermKey *tk = malloc(sizeof(TermKey));
|
||||||
|
if(!tk)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* Default all the object fields but don't allocate anything */
|
||||||
|
|
||||||
|
tk->fd = -1;
|
||||||
|
tk->flags = 0;
|
||||||
|
tk->canonflags = 0;
|
||||||
|
|
||||||
|
tk->buffer = NULL;
|
||||||
|
tk->buffstart = 0;
|
||||||
|
tk->buffcount = 0;
|
||||||
|
tk->buffsize = 256; /* bytes */
|
||||||
|
|
||||||
|
tk->restore_termios_valid = 0;
|
||||||
|
|
||||||
|
tk->waittime = 50; /* msec */
|
||||||
|
|
||||||
|
tk->is_closed = 0;
|
||||||
|
|
||||||
|
tk->nkeynames = 64;
|
||||||
|
tk->keynames = NULL;
|
||||||
|
|
||||||
|
for(int i = 0; i < 32; i++)
|
||||||
|
tk->c0[i].sym = TERMKEY_SYM_NONE;
|
||||||
|
|
||||||
|
tk->drivers = NULL;
|
||||||
|
|
||||||
|
tk->method.emit_codepoint = &emit_codepoint;
|
||||||
|
tk->method.peekkey_simple = &peekkey_simple;
|
||||||
|
tk->method.peekkey_mouse = &peekkey_mouse;
|
||||||
|
|
||||||
|
return tk;
|
||||||
|
}
|
||||||
|
|
||||||
|
TermKey *termkey_new(int fd, int flags)
|
||||||
|
{
|
||||||
|
TermKey *tk = termkey_alloc();
|
||||||
if(!tk)
|
if(!tk)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -203,26 +238,14 @@ static TermKey *termkey_new_full(int fd, int flags, size_t buffsize, int waittim
|
||||||
|
|
||||||
tk->fd = fd;
|
tk->fd = fd;
|
||||||
tk->flags = flags;
|
tk->flags = flags;
|
||||||
tk->canonflags = 0;
|
|
||||||
|
|
||||||
if(flags & TERMKEY_FLAG_SPACESYMBOL)
|
if(flags & TERMKEY_FLAG_SPACESYMBOL)
|
||||||
tk->canonflags |= TERMKEY_CANON_SPACESYMBOL;
|
tk->canonflags |= TERMKEY_CANON_SPACESYMBOL;
|
||||||
|
|
||||||
tk->buffer = malloc(buffsize);
|
tk->buffer = malloc(tk->buffsize);
|
||||||
if(!tk->buffer)
|
if(!tk->buffer)
|
||||||
goto abort_free_tk;
|
goto abort_free_tk;
|
||||||
|
|
||||||
tk->buffstart = 0;
|
|
||||||
tk->buffcount = 0;
|
|
||||||
tk->buffsize = buffsize;
|
|
||||||
|
|
||||||
tk->restore_termios_valid = 0;
|
|
||||||
|
|
||||||
tk->waittime = waittime;
|
|
||||||
|
|
||||||
tk->is_closed = 0;
|
|
||||||
|
|
||||||
tk->nkeynames = 64;
|
|
||||||
tk->keynames = malloc(sizeof(tk->keynames[0]) * tk->nkeynames);
|
tk->keynames = malloc(sizeof(tk->keynames[0]) * tk->nkeynames);
|
||||||
if(!tk->keynames)
|
if(!tk->keynames)
|
||||||
goto abort_free_buffer;
|
goto abort_free_buffer;
|
||||||
|
@ -231,13 +254,6 @@ static TermKey *termkey_new_full(int fd, int flags, size_t buffsize, int waittim
|
||||||
for(i = 0; i < tk->nkeynames; i++)
|
for(i = 0; i < tk->nkeynames; i++)
|
||||||
tk->keynames[i] = NULL;
|
tk->keynames[i] = NULL;
|
||||||
|
|
||||||
for(i = 0; i < 32; i++)
|
|
||||||
tk->c0[i].sym = TERMKEY_SYM_NONE;
|
|
||||||
|
|
||||||
tk->method.emit_codepoint = &emit_codepoint;
|
|
||||||
tk->method.peekkey_simple = &peekkey_simple;
|
|
||||||
tk->method.peekkey_mouse = &peekkey_mouse;
|
|
||||||
|
|
||||||
for(i = 0; keynames[i].name; i++)
|
for(i = 0; keynames[i].name; i++)
|
||||||
if(termkey_register_keyname(tk, keynames[i].sym, keynames[i].name) == -1)
|
if(termkey_register_keyname(tk, keynames[i].sym, keynames[i].name) == -1)
|
||||||
goto abort_free_keynames;
|
goto abort_free_keynames;
|
||||||
|
@ -348,11 +364,6 @@ abort_free_tk:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
TermKey *termkey_new(int fd, int flags)
|
|
||||||
{
|
|
||||||
return termkey_new_full(fd, flags, 256, 50);
|
|
||||||
}
|
|
||||||
|
|
||||||
void termkey_free(TermKey *tk)
|
void termkey_free(TermKey *tk)
|
||||||
{
|
{
|
||||||
free(tk->buffer); tk->buffer = NULL;
|
free(tk->buffer); tk->buffer = NULL;
|
||||||
|
|
Loading…
Reference in New Issue