]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/comp_parse.c
ncurses 6.4 - patch 20240420
[ncurses.git] / ncurses / tinfo / comp_parse.c
index ff8d5657a197a8f194b684864e8d9e0a4a1e87f1..dec4b925625efe1cd364cdd3829929eb92dbb541 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright 2018-2021,2022 Thomas E. Dickey                                *
+ * Copyright 2018-2023,2024 Thomas E. Dickey                                *
  * Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
@@ -48,7 +48,7 @@
 
 #include <tic.h>
 
-MODULE_ID("$Id: comp_parse.c,v 1.124 2022/09/10 19:54:59 tom Exp $")
+MODULE_ID("$Id: comp_parse.c,v 1.134 2024/02/10 15:52:11 tom Exp $")
 
 static void sanity_check2(TERMTYPE2 *, bool);
 NCURSES_IMPEXP void (NCURSES_API *_nc_check_termtype2) (TERMTYPE2 *, bool) = sanity_check2;
@@ -222,8 +222,10 @@ _nc_read_entry_source(FILE *fp, char *buf,
     int immediate = 0;
 
     DEBUG(2,
-         (T_CALLED("_nc_read_entry_source(file=%p, buf=%p, literal=%d, silent=%d, hook=%p)"),
-          (void *) fp, buf, literal, silent, (void *) hook));
+         (T_CALLED("_nc_read_entry_source("
+                   "file=%p, buf=%p, literal=%d, silent=%d, hook=%#"
+                   PRIxPTR ")"),
+          (void *) fp, buf, literal, silent, CASTxPTR(hook)));
 
     if (silent)
        _nc_suppress_warnings = TRUE;   /* shut the lexer up, too */
@@ -262,8 +264,9 @@ _nc_read_entry_source(FILE *fp, char *buf,
 
     if (_nc_tail) {
        /* set up the head pointer */
-       for (_nc_head = _nc_tail; _nc_head->last; _nc_head = _nc_head->last)
-           continue;
+       for (_nc_head = _nc_tail; _nc_head->last; _nc_head = _nc_head->last) {
+           /* EMPTY */ ;
+       }
 
        DEBUG(2, ("head = %s", _nc_head->tterm.term_names));
        DEBUG(2, ("tail = %s", _nc_tail->tterm.term_names));
@@ -401,7 +404,7 @@ _nc_resolve_uses2(bool fullresolve, bool literal)
     ENTRY *qp, *rp, *lastread = 0;
     bool keepgoing;
     unsigned i, j;
-    int unresolved, total_unresolved, multiples;
+    int total_unresolved, multiples;
 
     DEBUG(2, (T_CALLED("_nc_resolve_uses2")));
 
@@ -412,8 +415,8 @@ _nc_resolve_uses2(bool fullresolve, bool literal)
     for_entry_list(qp) {
        int matchcount = 0;
 
-       for_entry_list(rp) {
-           if (qp > rp // FIXME - pointer-comparison is wrong...
+       for_entry_list2(rp, qp->next) {
+           if (qp > rp
                && check_collisions(qp->tterm.term_names,
                                    rp->tterm.term_names,
                                    matchcount + 1)) {
@@ -441,7 +444,6 @@ _nc_resolve_uses2(bool fullresolve, bool literal)
     total_unresolved = 0;
     _nc_curr_col = -1;
     for_entry_list(qp) {
-       unresolved = 0;
        for (i = 0; i < qp->nuses; i++) {
            bool foundit;
            char *child = _nc_first_name(qp->tterm.term_names);
@@ -510,7 +512,6 @@ _nc_resolve_uses2(bool fullresolve, bool literal)
 
            /* no good, mark this one unresolvable and complain */
            if (!foundit) {
-               unresolved++;
                total_unresolved++;
 
                _nc_curr_line = (int) lookline;
@@ -571,10 +572,10 @@ _nc_resolve_uses2(bool fullresolve, bool literal)
                     * (reverse) order.
                     */
                    for (; qp->nuses; qp->nuses--) {
-                       validate_merge(&merged,
-                                      qp->uses[qp->nuses - 1].link);
-                       _nc_merge_entry(&merged,
-                                       qp->uses[qp->nuses - 1].link);
+                       int n = (int) (qp->nuses - 1);
+                       validate_merge(&merged, qp->uses[n].link);
+                       _nc_merge_entry(&merged, qp->uses[n].link);
+                       free(qp->uses[n].name);
                    }
 
                    /*
@@ -612,13 +613,6 @@ _nc_resolve_uses2(bool fullresolve, bool literal)
        DEBUG(2, ("MERGES COMPLETED OK"));
     }
 
-    /*
-     * We'd like to free entries read in off disk at this point, but can't.
-     * The merge_entry() code doesn't copy the strings in the use entries,
-     * it just aliases them.  If this ever changes, do a
-     * free_entries(lastread) here.
-     */
-
     DEBUG(2, ("RESOLUTION FINISHED"));
 
     if (fullresolve) {