X-Git-Url: http://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=progs%2Finfocmp.c;h=ec5e07650dd43e1bf766e3e164e8d0a0ba77b1ed;hb=31c4bcf3307145fc5368b4aaf15e41bdd66a984b;hp=a49cbf6a4cb7b571022eaaeb1e694c9a2399e2c4;hpb=c2650100f80134924eda8f22cd7cc1d1d919ee3d;p=ncurses.git diff --git a/progs/infocmp.c b/progs/infocmp.c index a49cbf6a..ec5e0765 100644 --- a/progs/infocmp.c +++ b/progs/infocmp.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2020,2021 Thomas E. Dickey * + * Copyright 2020-2022,2023 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.147 2021/03/20 18:07:41 tom Exp $") +MODULE_ID("$Id: infocmp.c,v 1.157 2023/05/27 20:13:10 tom Exp $") #define MAX_STRING 1024 /* maximum formatted string */ @@ -124,17 +124,19 @@ failed(const char *s) ExitProgram(EXIT_FAILURE); } -static char * -canonical_name(char *ptr, char *buf) +static void +canonical_name(char *source, char *target) /* extract the terminal type's primary name */ { - char *bp; + int limit = NAMESIZE; - _nc_STRCPY(buf, ptr, NAMESIZE); - if ((bp = strchr(buf, '|')) != 0) - *bp = '\0'; - - return (buf); + while (--limit > 0) { + char ch = *source++; + if (ch == '|') + break; + *target++ = ch; + } + *target = '\0'; } static bool @@ -156,7 +158,7 @@ no_numeric(int value) } static bool -no_string(char *value) +no_string(const char *const value) { bool result = (value == ABSENT_STRING); if (!strcmp(s_absent, s_cancel)) @@ -322,16 +324,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 +421,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. @@ -902,7 +905,6 @@ analyze_string(const char *name, const char *cap, TERMTYPE2 *tp) sizeof(buf2)); _nc_STRNCPY(buf3, sp + csi, len); buf3[len] = '\0'; - len += (size_t) csi + 1; expansion = lookup_params(std_modes, buf2, buf3); } @@ -923,7 +925,6 @@ analyze_string(const char *name, const char *cap, TERMTYPE2 *tp) sizeof(buf2)); _nc_STRNCPY(buf3, sp + csi + 1, len); buf3[len] = '\0'; - len += (size_t) csi + 2; expansion = lookup_params(private_modes, buf2, buf3); } @@ -1131,8 +1132,8 @@ file_comparison(int argc, char *argv[]) if (entryeq(&qp->tterm, &rp->tterm) && useeq(qp, rp)) { char name1[NAMESIZE], name2[NAMESIZE]; - (void) canonical_name(qp->tterm.term_names, name1); - (void) canonical_name(rp->tterm.term_names, name2); + canonical_name(qp->tterm.term_names, name1); + canonical_name(rp->tterm.term_names, name2); (void) printf("%s = %s\n", name1, name2); } @@ -1160,8 +1161,8 @@ file_comparison(int argc, char *argv[]) entries[0] = *qp; entries[1] = *rp; - (void) canonical_name(qp->tterm.term_names, name1); - (void) canonical_name(rp->tterm.term_names, name2); + canonical_name(qp->tterm.term_names, name1); + canonical_name(rp->tterm.term_names, name2); switch (compare) { case C_DIFFERENCE: @@ -1307,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++ = '"'; @@ -1512,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) @@ -1531,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; @@ -1722,7 +1725,7 @@ main(int argc, char *argv[]) case 'v': itrace = (unsigned) optarg_to_number(); - set_trace_level(itrace); + use_verbosity(itrace); break; case 'W': @@ -1883,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