coverity/13770: add_keyword(), mark as false pos.

Also cleaned up the function a little bit.
This commit is contained in:
Nicolas Hillegeer
2014-05-31 19:52:34 +02:00
committed by Justin M. Keyes
parent ebbd87b0be
commit 1a031af233

View File

@@ -3806,30 +3806,25 @@ static void clear_keywtab(hashtab_T *ht)
hash_init(ht); hash_init(ht);
} }
/* /// Add a keyword to the list of keywords.
* Add a keyword to the list of keywords. ///
*/ /// @param name name of keyword
static void /// @param id group ID for this keyword
add_keyword ( /// @param flags flags for this keyword
char_u *name, /* name of keyword */ /// @param cont_in_list containedin for this keyword
int id, /* group ID for this keyword */ /// @param next_list nextgroup for this keyword
int flags, /* flags for this keyword */ static void add_keyword(char_u *name,
short *cont_in_list, /* containedin for this keyword */ int id,
short *next_list, /* nextgroup for this keyword */ int flags,
int conceal_char short *cont_in_list,
) short *next_list,
int conceal_char)
{ {
hashtab_T *ht;
hashitem_T *hi;
char_u *name_ic;
long_u hash;
char_u name_folded[MAXKEYWLEN + 1]; char_u name_folded[MAXKEYWLEN + 1];
char_u *name_ic = (curwin->w_s->b_syn_ic)
? str_foldcase(name, (int)STRLEN(name), name_folded, sizeof(name_folded))
: name;
if (curwin->w_s->b_syn_ic)
name_ic = str_foldcase(name, (int)STRLEN(name),
name_folded, MAXKEYWLEN + 1);
else
name_ic = name;
keyentry_T *kp = xmalloc(sizeof(keyentry_T) + STRLEN(name_ic)); keyentry_T *kp = xmalloc(sizeof(keyentry_T) + STRLEN(name_ic));
STRCPY(kp->keyword, name_ic); STRCPY(kp->keyword, name_ic);
kp->k_syn.id = id; kp->k_syn.id = id;
@@ -3837,23 +3832,26 @@ add_keyword (
kp->flags = flags; kp->flags = flags;
kp->k_char = conceal_char; kp->k_char = conceal_char;
kp->k_syn.cont_in_list = copy_id_list(cont_in_list); kp->k_syn.cont_in_list = copy_id_list(cont_in_list);
if (cont_in_list != NULL) if (cont_in_list != NULL) {
curwin->w_s->b_syn_containedin = TRUE; curwin->w_s->b_syn_containedin = TRUE;
}
kp->next_list = copy_id_list(next_list); kp->next_list = copy_id_list(next_list);
if (curwin->w_s->b_syn_ic) long_u hash = hash_hash(kp->keyword);
ht = &curwin->w_s->b_keywtab_ic; hashtab_T *ht = (curwin->w_s->b_syn_ic) ? &curwin->w_s->b_keywtab_ic
else : &curwin->w_s->b_keywtab;
ht = &curwin->w_s->b_keywtab; hashitem_T *hi = hash_lookup(ht, kp->keyword, hash);
hash = hash_hash(kp->keyword); // even though it looks like only the kp->keyword member is
hi = hash_lookup(ht, kp->keyword, hash); // being used here, vim uses some pointer trickery to get the orignal
// struct again later by using knowledge of the offset of the keyword
// field in the struct. See the definition of the HI2KE macro.
if (HASHITEM_EMPTY(hi)) { if (HASHITEM_EMPTY(hi)) {
/* new keyword, add to hashtable */ // new keyword, add to hashtable
kp->ke_next = NULL; kp->ke_next = NULL;
hash_add_item(ht, hi, kp->keyword, hash); hash_add_item(ht, hi, kp->keyword, hash);
} else { } else {
/* keyword already exists, prepend to list */ // keyword already exists, prepend to list
kp->ke_next = HI2KE(hi); kp->ke_next = HI2KE(hi);
hi->hi_key = KE2HIKEY(kp); hi->hi_key = KE2HIKEY(kp);
} }