]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/comp_parse.c
ncurses 6.4 - patch 20230527
[ncurses.git] / ncurses / tinfo / comp_parse.c
index ff8d5657a197a8f194b684864e8d9e0a4a1e87f1..4244df4efed8f84a2c7d4c79a0b8245069387a80 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright 2018-2021,2022 Thomas E. Dickey                                *
+ * Copyright 2018-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  *
@@ -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.133 2023/05/27 20:13:10 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));
@@ -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)) {
@@ -571,10 +574,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 +615,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) {