version 1.17, 2013/06/07 13:16:18 |
version 1.18, 2015/11/25 19:13:49 |
Line 54 const char *_ti_database; |
|
Line 54 const char *_ti_database; |
|
#include "compiled_terms.c" |
#include "compiled_terms.c" |
|
|
static int |
static int |
|
allocset(void *pp, int init, size_t nelem, size_t elemsize) |
|
{ |
|
void **p = pp; |
|
if (*p) { |
|
memset(*p, init, nelem * elemsize); |
|
return 0; |
|
} |
|
|
|
if ((*p = calloc(nelem, elemsize)) == NULL) |
|
return -1; |
|
|
|
if (init != 0) |
|
memset(*p, init, nelem * elemsize); |
|
return 0; |
|
} |
|
|
|
static int |
_ti_readterm(TERMINAL *term, const char *cap, size_t caplen, int flags) |
_ti_readterm(TERMINAL *term, const char *cap, size_t caplen, int flags) |
{ |
{ |
uint8_t ver; |
uint8_t ver; |
Line 68 _ti_readterm(TERMINAL *term, const char |
|
Line 85 _ti_readterm(TERMINAL *term, const char |
|
return -1; |
return -1; |
} |
} |
|
|
term->flags = calloc(TIFLAGMAX + 1, sizeof(char)); |
|
if (term->flags == NULL) |
if (allocset(&term->flags, 0, TIFLAGMAX + 1, sizeof(*term->flags)) == -1) |
return -1; |
|
term->nums = malloc((TINUMMAX + 1) * sizeof(short)); |
|
if (term->nums == NULL) |
|
return -1; |
return -1; |
memset(term->nums, (short)-1, (TINUMMAX + 1) * sizeof(short)); |
|
term->strs = calloc(TISTRMAX + 1, sizeof(char *)); |
if (allocset(&term->nums, -1, TINUMMAX + 1, sizeof(*term->nums)) == -1) |
if (term->strs == NULL) |
|
return -1; |
return -1; |
term->_arealen = caplen; |
|
term->_area = malloc(term->_arealen); |
if (allocset(&term->strs, 0, TISTRMAX + 1, sizeof(*term->strs)) == -1) |
if (term->_area == NULL) |
|
return -1; |
return -1; |
memcpy(term->_area, cap, term->_arealen); |
|
|
if (term->_arealen != caplen) { |
|
term->_arealen = caplen; |
|
term->_area = realloc(term->_area, term->_arealen); |
|
if (term->_area == NULL) |
|
return -1; |
|
memcpy(term->_area, cap, term->_arealen); |
|
} |
|
|
cap = term->_area; |
cap = term->_area; |
len = le16dec(cap); |
len = le16dec(cap); |
Line 158 _ti_readterm(TERMINAL *term, const char |
|
Line 177 _ti_readterm(TERMINAL *term, const char |
|
num = le16dec(cap); |
num = le16dec(cap); |
cap += sizeof(uint16_t); |
cap += sizeof(uint16_t); |
if (num != 0) { |
if (num != 0) { |
term->_nuserdefs = le16dec(cap); |
num = le16dec(cap); |
term->_userdefs = malloc(sizeof(*term->_userdefs) * num); |
|
cap += sizeof(uint16_t); |
cap += sizeof(uint16_t); |
|
if (num != term->_nuserdefs) { |
|
free(term->_userdefs); |
|
term->_userdefs = NULL; |
|
term->_nuserdefs = num; |
|
} |
|
if (allocset(&term->_userdefs, 0, term->_nuserdefs, |
|
sizeof(*term->_userdefs)) == -1) |
|
return -1; |
for (num = 0; num < term->_nuserdefs; num++) { |
for (num = 0; num < term->_nuserdefs; num++) { |
ud = &term->_userdefs[num]; |
ud = &term->_userdefs[num]; |
len = le16dec(cap); |
len = le16dec(cap); |
Line 204 _ti_readterm(TERMINAL *term, const char |
|
Line 230 _ti_readterm(TERMINAL *term, const char |
|
return -1; |
return -1; |
} |
} |
} |
} |
|
} else { |
|
term->_nuserdefs = 0; |
|
if (term->_userdefs) { |
|
free(term->_userdefs); |
|
term->_userdefs = NULL; |
|
} |
} |
} |
|
|
return 1; |
return 1; |
} |
} |
|
|
Line 350 _ti_findterm(TERMINAL *term, const char |
|
Line 383 _ti_findterm(TERMINAL *term, const char |
|
if (e != NULL) { |
if (e != NULL) { |
if (c == NULL) |
if (c == NULL) |
e = strdup(e); /* So we don't destroy env */ |
e = strdup(e); /* So we don't destroy env */ |
if (e == NULL) |
if (e == NULL) |
tic = NULL; |
tic = NULL; |
else |
else { |
tic = _ti_compile(e, TIC_WARNING | |
tic = _ti_compile(e, TIC_WARNING | |
TIC_ALIAS | TIC_DESCRIPTION | TIC_EXTRA); |
TIC_ALIAS | TIC_DESCRIPTION | TIC_EXTRA); |
if (c == NULL && e != NULL) |
|
free(e); |
free(e); |
|
} |
if (tic != NULL && ticcmp(tic, name) == 0) { |
if (tic != NULL && ticcmp(tic, name) == 0) { |
len = _ti_flatten(&f, tic); |
len = _ti_flatten(&f, tic); |
if (len != -1) { |
if (len != -1) { |