X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Finfocmp.c;h=d98c67601abc704c06afd66feb8876b14ea981d3;hp=f42ff3416ece69318d9b4706eedd97b8a832c75c;hb=deb0d07e8eb4803b9e9653359eab17a30d04369d;hpb=47d2fb4537d9ad5bb14f4810561a327930ca4280 diff --git a/progs/infocmp.c b/progs/infocmp.c index f42ff341..d98c6760 100644 --- a/progs/infocmp.c +++ b/progs/infocmp.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2020 Thomas E. Dickey * + * Copyright 2020,2021 Thomas E. Dickey * * Copyright 1998-2016,2017 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * @@ -43,7 +43,7 @@ #include -MODULE_ID("$Id: infocmp.c,v 1.144 2020/02/02 23:34:34 tom Exp $") +MODULE_ID("$Id: infocmp.c,v 1.151 2021/06/17 21:11:08 tom Exp $") #define MAX_STRING 1024 /* maximum formatted string */ @@ -94,7 +94,7 @@ typedef struct { static ENTERED *entered; #undef ExitProgram -static void ExitProgram(int code) GCC_NORETURN; +static GCC_NORETURN void ExitProgram(int code); /* prototype is to get gcc to accept the noreturn attribute */ static void ExitProgram(int code) @@ -322,16 +322,17 @@ static void print_uses(ENTRY * ep, FILE *fp) /* print an entry's use references */ { - unsigned i; - - if (!ep->nuses) + if (!ep->nuses) { fputs("NULL", fp); - else + } else { + unsigned i; + for (i = 0; i < ep->nuses; i++) { fputs(ep->uses[i].name, fp); if (i < ep->nuses - 1) fputs(" ", fp); } + } } static const char * @@ -418,7 +419,7 @@ show_comparing(char **names) /* * ncurses stores two types of non-standard capabilities: - * a) capabilities listed past the "STOP-HERE" comment in the Caps file. + * a) capabilities listed past the "STOP-HERE" comment in the Caps file. * These are used in the terminfo source file to provide data for termcaps, * e.g., when there is no equivalent capability in terminfo, as well as for * widely-used non-standard capabilities. @@ -835,6 +836,8 @@ analyze_string(const char *name, const char *cap, TERMTYPE2 *tp) char *cp = tp->Strings[i]; /* don't use function-key capabilities */ + if (strnames[i] == NULL) + continue; if (strnames[i][0] == 'k' && strnames[i][1] == 'f') continue; @@ -1194,8 +1197,9 @@ usage(void) DATA("Options:") }; #undef DATA + /* length is given here so the compiler can make everything readonly */ #define DATA(s) s - static const char options[][45] = + static const char options[][46] = { " -0 print single-row" ," -1 print single-column" @@ -1304,9 +1308,9 @@ dump_initializers(TERMTYPE2 *term) name_initializer("alias"), entries->tterm.term_names); for_each_string(n, term) { - char buf[MAX_STRING], *sp, *tp; - if (VALID_STRING(term->Strings[n])) { + char buf[MAX_STRING], *sp, *tp; + tp = buf; #define TP_LIMIT ((MAX_STRING - 5) - (size_t)(tp - buf)) *tp++ = '"'; @@ -1509,6 +1513,8 @@ show_databases(void) #if NO_LEAKS #define MAIN_LEAKS() \ + _nc_free_termtype2(&entries[0].tterm); \ + _nc_free_termtype2(&entries[1].tterm); \ free(myargv); \ free(tfile); \ free(tname) @@ -1528,7 +1534,7 @@ main(int argc, char *argv[]) char **myargv; char *firstdir, *restdir; - int c, i, len; + int c; bool formatted = FALSE; bool filecompare = FALSE; int initdump = 0; @@ -1835,8 +1841,8 @@ main(int argc, char *argv[]) tname[termcount]); status = _nc_read_entry2(tname[termcount], - tfile[termcount], - &entries[termcount].tterm); + tfile[termcount], + &entries[termcount].tterm); } if (status <= 0) { @@ -1880,6 +1886,8 @@ main(int argc, char *argv[]) analyze_string("rmkx", keypad_local, &entries[0].tterm); #undef CUR } else { + int i; + int len; /* * Here's where the real work gets done