[BACK]Return to term.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libterminfo

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libterminfo/term.c between version 1.17 and 1.18

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) {

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.18

CVSweb <webmaster@jp.NetBSD.org>