X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Fread_entry.c;h=429f719a867383c86a28256fae33869cfb78f209;hp=e56c5a1ff14057a463c33c7eb7a7b9e6d7d9a654;hb=fbd79f88d0de057053bd9658499f4e87c10ff2f4;hpb=b93d96b78ac5250135975df892cee793dc3c0797 diff --git a/ncurses/tinfo/read_entry.c b/ncurses/tinfo/read_entry.c index e56c5a1f..429f719a 100644 --- a/ncurses/tinfo/read_entry.c +++ b/ncurses/tinfo/read_entry.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2017,2018 Free Software Foundation, Inc. * + * Copyright 2018-2019,2020 Thomas E. Dickey * + * Copyright 1998-2016,2017 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 * @@ -41,7 +42,7 @@ #include -MODULE_ID("$Id: read_entry.c,v 1.148 2018/04/14 17:43:37 tom Exp $") +MODULE_ID("$Id: read_entry.c,v 1.158 2020/08/22 20:49:46 tom Exp $") #define TYPE_CALLOC(type,elts) typeCalloc(type, (unsigned)(elts)) @@ -57,9 +58,9 @@ convert_16bits(char *buf, NCURSES_INT2 *Numbers, int count) int i; size_t j; size_t size = SIZEOF_SHORT; - unsigned char ch; for (i = 0; i < count; i++) { unsigned mask = 0xff; + unsigned char ch = 0; Numbers[i] = 0; for (j = 0; j < size; ++j) { ch = UChar(*buf++); @@ -159,11 +160,11 @@ convert_strings(char *buf, char **Strings, int count, int size, char *table) /* make sure all strings are NUL terminated */ if (VALID_STRING(Strings[i])) { - for (p = Strings[i]; p <= table + size; p++) + for (p = Strings[i]; p < table + size; p++) if (*p == '\0') break; /* if there is no NUL, ignore the string */ - if (p > table + size) + if (p >= table + size) Strings[i] = ABSENT_STRING; } } @@ -552,7 +553,7 @@ _nc_read_file_entry(const char *const filename, TERMTYPE2 *ptr) int code; if (_nc_access(filename, R_OK) < 0 - || (fp = fopen(filename, "rb")) == 0) { + || (fp = fopen(filename, BIN_R)) == 0) { TR(TRACE_DATABASE, ("cannot open terminfo %s (errno=%d)", filename, errno)); code = TGETENT_NO; } else { @@ -694,7 +695,7 @@ decode_quickdump(char *target, const char *source) char *base = target; int result = 0; - if (!strncmp(source, "b64:", 4)) { + if (!strncmp(source, "b64:", (size_t) 4)) { source += 4; while (*source != '\0') { int bits[4]; @@ -712,7 +713,7 @@ decode_quickdump(char *target, const char *source) } } } - } else if (!strncmp(source, "hex:", 4)) { + } else if (!strncmp(source, "hex:", (size_t) 4)) { source += 4; while (*source != '\0') { int ch = decode_hex(&source); @@ -749,10 +750,14 @@ _nc_read_tic_entry(char *filename, (T_CALLED("_nc_read_tic_entry(file=%p, path=%s, name=%s)"), filename, path, name)); + assert(TGETENT_YES == TRUE); /* simplify call for _nc_name_match */ + if ((used = decode_quickdump(buffer, path)) != 0 && (code = _nc_read_termtype(tp, buffer, used)) == TGETENT_YES - && _nc_name_match(tp->term_names, name, "|")) { + && (code = _nc_name_match(tp->term_names, name, "|")) == TGETENT_YES) { TR(TRACE_DATABASE, ("loaded quick-dump for %s", name)); + /* shorten name shown by infocmp */ + _nc_STRCPY(filename, "$TERMINFO", limit); } else #if USE_HASHED_DB if (make_db_filename(filename, limit, path) @@ -817,7 +822,7 @@ _nc_read_tic_entry(char *filename, code = _nc_read_file_entry(filename, tp); } #if NCURSES_USE_TERMCAP - else if (code != TGETENT_YES) { + if (code != TGETENT_YES) { code = _nc_read_termcap_entry(name, tp); _nc_SPRINTF(filename, _nc_SLIMIT(PATH_MAX) "%.*s", PATH_MAX - 1, _nc_get_source()); @@ -877,7 +882,7 @@ _nc_read_entry2(const char *const name, char *const filename, TERMTYPE2 *const t #if NCURSES_EXT_NUMBERS /* - * This entrypoint is used by tack. + * This entrypoint is used by tack 1.07 */ NCURSES_EXPORT(int) _nc_read_entry(const char *const name, char *const filename, TERMTYPE *const tp)