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

Diff for /mandoc/tag.c between version 1.14 and 1.19

version 1.14, 2016/11/08 15:28:17 version 1.19, 2018/02/23 16:47:10
Line 38  struct tag_entry {
Line 38  struct tag_entry {
         char     s[];          char     s[];
 };  };
   
 static  void     tag_signal(int) __attribute__((noreturn));  static  void     tag_signal(int) __attribute__((__noreturn__));
   
 static struct ohash      tag_data;  static struct ohash      tag_data;
 static struct tag_files  tag_files;  static struct tag_files  tag_files;
Line 130  tag_put(const char *s, int prio, size_t line)
Line 130  tag_put(const char *s, int prio, size_t line)
         size_t                   len;          size_t                   len;
         unsigned int             slot;          unsigned int             slot;
   
         if (tag_files.tfd <= 0 || strchr(s, ' ') != NULL)          /* Sanity checks. */
   
           if (tag_files.tfd <= 0)
                 return;                  return;
           if (s[0] == '\\' && (s[1] == '&' || s[1] == 'e'))
                   s += 2;
           if (*s == '\0' || strchr(s, ' ') != NULL)
                   return;
   
         slot = ohash_qlookup(&tag_data, s);          slot = ohash_qlookup(&tag_data, s);
         entry = ohash_find(&tag_data, slot);          entry = ohash_find(&tag_data, slot);
Line 149  tag_put(const char *s, int prio, size_t line)
Line 155  tag_put(const char *s, int prio, size_t line)
   
         } else {          } else {
   
                   /* Handle priority 0 entries. */
   
                   if (prio == 0) {
                           if (entry->prio == 0)
                                   entry->prio = -1;
                           return;
                   }
   
                 /* A better entry is already present, ignore the new one. */                  /* A better entry is already present, ignore the new one. */
   
                 if (entry->prio < prio)                  if (entry->prio > 0 && entry->prio < prio)
                         return;                          return;
   
                 /* The existing entry is worse, clear it. */                  /* The existing entry is worse, clear it. */
   
                 if (entry->prio > prio)                  if (entry->prio < 1 || entry->prio > prio)
                         entry->nlines = 0;                          entry->nlines = 0;
         }          }
   
Line 188  tag_write(void)
Line 202  tag_write(void)
         stream = fdopen(tag_files.tfd, "w");          stream = fdopen(tag_files.tfd, "w");
         entry = ohash_first(&tag_data, &slot);          entry = ohash_first(&tag_data, &slot);
         while (entry != NULL) {          while (entry != NULL) {
                 if (stream != NULL)                  if (stream != NULL && entry->prio >= 0)
                         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]);
Line 199  tag_write(void)
Line 213  tag_write(void)
         ohash_delete(&tag_data);          ohash_delete(&tag_data);
         if (stream != NULL)          if (stream != NULL)
                 fclose(stream);                  fclose(stream);
           else
                   close(tag_files.tfd);
           tag_files.tfd = -1;
 }  }
   
 void  void
Line 207  tag_unlink(void)
Line 224  tag_unlink(void)
         pid_t    tc_pgid;          pid_t    tc_pgid;
   
         if (tag_files.tcpgid != -1) {          if (tag_files.tcpgid != -1) {
                 tc_pgid = tcgetpgrp(STDIN_FILENO);                  tc_pgid = tcgetpgrp(tag_files.ofd);
                 if (tc_pgid == tag_files.pager_pid ||                  if (tc_pgid == tag_files.pager_pid ||
                     tc_pgid == getpgid(0) ||                      tc_pgid == getpgid(0) ||
                     getpgid(tc_pgid) == -1)                      getpgid(tc_pgid) == -1)
                         (void)tcsetpgrp(STDIN_FILENO, tag_files.tcpgid);                          (void)tcsetpgrp(tag_files.ofd, tag_files.tcpgid);
         }          }
         if (*tag_files.ofn != '\0')          if (*tag_files.ofn != '\0')
                 unlink(tag_files.ofn);                  unlink(tag_files.ofn);

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.19

CVSweb