[BACK]Return to tag.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/tag.c between version 1.26 and 1.27

version 1.26, 2020/01/19 18:02:00 version 1.27, 2020/01/20 10:37:15
Line 18 
Line 18 
   
 #include <sys/types.h>  #include <sys/types.h>
   
   #include <assert.h>
 #include <errno.h>  #include <errno.h>
 #include <limits.h>  #include <limits.h>
 #include <signal.h>  #include <signal.h>
Line 146  tag_put(const char *s, int prio, size_t line)
Line 147  tag_put(const char *s, int prio, size_t line)
         size_t                   len;          size_t                   len;
         unsigned int             slot;          unsigned int             slot;
   
           assert(prio <= TAG_FALLBACK);
         if (tag_files.tfd <= 0)          if (tag_files.tfd <= 0)
                 return;                  return;
   
Line 162  tag_put(const char *s, int prio, size_t line)
Line 164  tag_put(const char *s, int prio, size_t line)
                 return;                  return;
   
         se = s + len;          se = s + len;
         if (*se != '\0')          if (*se != '\0' && prio < TAG_WEAK)
                 prio = INT_MAX;                  prio = TAG_WEAK;
   
         slot = ohash_qlookupi(&tag_data, s, &se);          slot = ohash_qlookupi(&tag_data, s, &se);
         entry = ohash_find(&tag_data, slot);          entry = ohash_find(&tag_data, slot);
Line 183  tag_put(const char *s, int prio, size_t line)
Line 185  tag_put(const char *s, int prio, size_t line)
   
                 /*                  /*
                  * Lower priority numbers take precedence,                   * Lower priority numbers take precedence,
                  * but 0 is special.                   * but TAG_FALLBACK is special.
                  * A tag with priority 0 is only used                   * A tag with priority TAG_FALLBACK is only used
                  * if the tag occurs exactly once.                   * if the tag occurs exactly once.
                  */                   */
   
                 if (prio == 0) {                  if (prio == TAG_FALLBACK) {
                         if (entry->prio == 0)                          if (entry->prio == TAG_FALLBACK)
                                 entry->prio = -1;                                  entry->prio = TAG_DELETE;
                         return;                          return;
                 }                  }
   
                 /* A better entry is already present, ignore the new one. */                  /* A better entry is already present, ignore the new one. */
   
                 if (entry->prio != -1 && entry->prio < prio)                  if (entry->prio < prio)
                         return;                          return;
   
                 /* The existing entry is worse, clear it. */                  /* The existing entry is worse, clear it. */
   
                 if (entry->prio == -1 || entry->prio == 0 ||                  if (entry->prio > prio)
                     entry->prio > prio)  
                         entry->nlines = 0;                          entry->nlines = 0;
         }          }
   
Line 242  tag_write(void)
Line 243  tag_write(void)
         empty = 1;          empty = 1;
         entry = ohash_first(&tag_data, &slot);          entry = ohash_first(&tag_data, &slot);
         while (entry != NULL) {          while (entry != NULL) {
                 if (stream != NULL && entry->prio != -1) {                  if (stream != NULL && entry->prio < TAG_DELETE) {
                         for (i = 0; i < entry->nlines; i++) {                          for (i = 0; i < entry->nlines; i++) {
                                 fprintf(stream, "%s %s %zu\n",                                  fprintf(stream, "%s %s %zu\n",
                                     entry->s, tag_files.ofn, entry->lines[i]);                                      entry->s, tag_files.ofn, entry->lines[i]);

Legend:
Removed from v.1.26  
changed lines
  Added in v.1.27

CVSweb