X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Fparse_entry.c;h=cf7a5f409d7c372dc689e3abf9d4a843c7d6553f;hp=a836543db824de67c4a570b857f0979de2f884e1;hb=fc79b49bd8a9c5e4db287514cdac46e1691cf48a;hpb=03a795bde58b3280a4e9d80029a3b7fec13c79ad diff --git a/ncurses/tinfo/parse_entry.c b/ncurses/tinfo/parse_entry.c index a836543d..cf7a5f40 100644 --- a/ncurses/tinfo/parse_entry.c +++ b/ncurses/tinfo/parse_entry.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. * + * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -48,7 +48,7 @@ #include #include -MODULE_ID("$Id: parse_entry.c,v 1.64 2007/07/28 22:21:22 tom Exp $") +MODULE_ID("$Id: parse_entry.c,v 1.69 2008/08/16 21:52:03 tom Exp $") #ifdef LINT static short const parametrized[] = @@ -245,6 +245,9 @@ _nc_parse_entry(struct entry *entryp, int literal, bool silent) entryp->tterm.str_table = entryp->tterm.term_names = _nc_save_str(ptr); + if (entryp->tterm.str_table == 0) + return (ERR); + DEBUG(1, ("Starting '%s'", ptr)); /* @@ -283,7 +286,7 @@ _nc_parse_entry(struct entry *entryp, int literal, bool silent) } else { /* normal token lookup */ entry_ptr = _nc_find_entry(_nc_curr_token.tk_name, - _nc_syntax ? _nc_cap_hash_table : _nc_info_hash_table); + _nc_get_hash_table(_nc_syntax)); /* * Our kluge to handle aliasing. The reason it's done @@ -308,7 +311,8 @@ _nc_parse_entry(struct entry *entryp, int literal, bool silent) goto nexttok; } - entry_ptr = _nc_find_entry(ap->to, _nc_cap_hash_table); + entry_ptr = _nc_find_entry(ap->to, + _nc_get_hash_table(TRUE)); if (entry_ptr && !silent) _nc_warning("%s (%s termcap extension) aliased to %s", ap->from, ap->source, ap->to); @@ -323,7 +327,8 @@ _nc_parse_entry(struct entry *entryp, int literal, bool silent) goto nexttok; } - entry_ptr = _nc_find_entry(ap->to, _nc_info_hash_table); + entry_ptr = _nc_find_entry(ap->to, + _nc_get_hash_table(FALSE)); if (entry_ptr && !silent) _nc_warning("%s (%s terminfo extension) aliased to %s", ap->from, ap->source, ap->to); @@ -370,26 +375,28 @@ _nc_parse_entry(struct entry *entryp, int literal, bool silent) * type, this will do the job. */ - /* tell max_attributes from arrow_key_map */ if (token_type == NUMBER && !strcmp("ma", _nc_curr_token.tk_name)) { + /* tell max_attributes from arrow_key_map */ entry_ptr = _nc_find_type_entry("ma", NUMBER, _nc_get_table(_nc_syntax != 0)); + assert(entry_ptr != 0); - /* map terminfo's string MT to MT */ } else if (token_type == STRING && !strcmp("MT", _nc_curr_token.tk_name)) { + /* map terminfo's string MT to MT */ entry_ptr = _nc_find_type_entry("MT", STRING, _nc_get_table(_nc_syntax != 0)); + assert(entry_ptr != 0); - /* treat strings without following "=" as empty strings */ } else if (token_type == BOOLEAN && entry_ptr->nte_type == STRING) { + /* treat strings without following "=" as empty strings */ token_type = STRING; - /* we couldn't recover; skip this token */ } else { + /* we couldn't recover; skip this token */ if (!silent) { const char *type_name; switch (entry_ptr->nte_type) { @@ -452,7 +459,7 @@ _nc_parse_entry(struct entry *entryp, int literal, bool silent) default: if (!silent) _nc_warning("unknown token type"); - _nc_panic_mode((_nc_syntax == SYN_TERMCAP) ? ':' : ','); + _nc_panic_mode((char) ((_nc_syntax == SYN_TERMCAP) ? ':' : ',')); continue; } } /* end else cur_token.name != "use" */ @@ -472,7 +479,7 @@ _nc_parse_entry(struct entry *entryp, int literal, bool silent) if (!literal) { if (_nc_syntax == SYN_TERMCAP) { bool has_base_entry = FALSE; - int i; + unsigned i; /* * Don't insert defaults if this is a `+' entry meant only @@ -547,8 +554,8 @@ append_acs0(string_desc * dst, int code, int src) { if (src != 0) { char temp[3]; - temp[0] = code; - temp[1] = src; + temp[0] = (char) code; + temp[1] = (char) src; temp[2] = 0; _nc_safe_strcat(dst, temp); } @@ -783,11 +790,12 @@ postprocess_termcap(TERMTYPE *tp, bool has_base) base = cp + 1) { size_t len = cp - base; - for (ap = ko_xlate; ap->from; ap++) + for (ap = ko_xlate; ap->from; ap++) { if (len == strlen(ap->from) && strncmp(ap->from, base, len) == 0) break; - if (!ap->to) { + } + if (!(ap->from && ap->to)) { _nc_warning("unknown capability `%.*s' in ko string", (int) len, base); continue; @@ -796,8 +804,8 @@ postprocess_termcap(TERMTYPE *tp, bool has_base) /* now we know we found a match in ko_table, so... */ - from_ptr = _nc_find_entry(ap->from, _nc_cap_hash_table); - to_ptr = _nc_find_entry(ap->to, _nc_info_hash_table); + from_ptr = _nc_find_entry(ap->from, _nc_get_hash_table(TRUE)); + to_ptr = _nc_find_entry(ap->to, _nc_get_hash_table(FALSE)); if (!from_ptr || !to_ptr) /* should never happen! */ _nc_err_abort("ko translation table is invalid, I give up");