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

Diff for /mandoc/mandocdb.c between version 1.223 and 1.226

version 1.223, 2016/07/29 15:23:57 version 1.226, 2016/08/05 17:22:45
Line 122  static void  mlink_add(struct mlink *, const struct st
Line 122  static void  mlink_add(struct mlink *, const struct st
 static  void     mlink_check(struct mpage *, struct mlink *);  static  void     mlink_check(struct mpage *, struct mlink *);
 static  void     mlink_free(struct mlink *);  static  void     mlink_free(struct mlink *);
 static  void     mlinks_undupe(struct mpage *);  static  void     mlinks_undupe(struct mpage *);
   int              mpages_compare(const void *, const void *);
 static  void     mpages_free(void);  static  void     mpages_free(void);
 static  void     mpages_merge(struct dba *, struct mparse *);  static  void     mpages_merge(struct dba *, struct mparse *);
 static  void     parse_cat(struct mpage *, int);  static  void     parse_cat(struct mpage *, int);
Line 426  mandocdb(int argc, char *argv[])
Line 427  mandocdb(int argc, char *argv[])
                 if (OP_TEST != op && 0 == set_basedir(path_arg, 1))                  if (OP_TEST != op && 0 == set_basedir(path_arg, 1))
                         goto out;                          goto out;
   
                 if ((dba = dba_read(MANDOC_DB)) != NULL) {                  dba = nodb ? dba_new(128) : dba_read(MANDOC_DB);
                   if (dba != NULL) {
                         /*                          /*
                          * The existing database is usable.  Process                           * The existing database is usable.  Process
                          * all files specified on the command-line.                           * all files specified on the command-line.
Line 443  mandocdb(int argc, char *argv[])
Line 445  mandocdb(int argc, char *argv[])
                         use_all = 1;                          use_all = 1;
                         for (i = 0; i < argc; i++)                          for (i = 0; i < argc; i++)
                                 filescan(argv[i]);                                  filescan(argv[i]);
                         if (OP_TEST != op)                          if (nodb == 0)
                                 dbprune(dba);                                  dbprune(dba);
                 } else {                  } else {
                         /*                          /*
Line 1084  mlink_check(struct mpage *mpage, struct mlink *mlink)
Line 1086  mlink_check(struct mpage *mpage, struct mlink *mlink)
 static void  static void
 mpages_merge(struct dba *dba, struct mparse *mp)  mpages_merge(struct dba *dba, struct mparse *mp)
 {  {
         struct mpage            *mpage, *mpage_dest;          struct mpage            **mplist, *mpage, *mpage_dest;
         struct mlink            *mlink, *mlink_dest;          struct mlink            *mlink, *mlink_dest;
         struct roff_man         *man;          struct roff_man         *man;
         char                    *sodest;          char                    *sodest;
         char                    *cp;          char                    *cp;
         int                      fd;          int                      fd;
         unsigned int             pslot;          unsigned int             ip, npages, pslot;
   
           npages = ohash_entries(&mpages);
           mplist = mandoc_reallocarray(NULL, npages, sizeof(*mplist));
           ip = 0;
         mpage = ohash_first(&mpages, &pslot);          mpage = ohash_first(&mpages, &pslot);
         while (mpage != NULL) {          while (mpage != NULL) {
                 mlinks_undupe(mpage);                  mlinks_undupe(mpage);
                 if ((mlink = mpage->mlinks) == NULL) {                  if (mpage->mlinks != NULL)
                         mpage = ohash_next(&mpages, &pslot);                          mplist[ip++] = mpage;
                         continue;                  mpage = ohash_next(&mpages, &pslot);
                 }          }
           npages = ip;
           qsort(mplist, npages, sizeof(*mplist), mpages_compare);
   
           for (ip = 0; ip < npages; ip++) {
                   mpage = mplist[ip];
                   mlink = mpage->mlinks;
                 name_mask = NAME_MASK;                  name_mask = NAME_MASK;
                 mandoc_ohash_init(&names, 4, offsetof(struct str, key));                  mandoc_ohash_init(&names, 4, offsetof(struct str, key));
                 mandoc_ohash_init(&strings, 6, offsetof(struct str, key));                  mandoc_ohash_init(&strings, 6, offsetof(struct str, key));
Line 1207  mpages_merge(struct dba *dba, struct mparse *mp)
Line 1217  mpages_merge(struct dba *dba, struct mparse *mp)
 nextpage:  nextpage:
                 ohash_delete(&strings);                  ohash_delete(&strings);
                 ohash_delete(&names);                  ohash_delete(&names);
                 mpage = ohash_next(&mpages, &pslot);  
         }          }
           free(mplist);
 }  }
   
   int
   mpages_compare(const void *vp1, const void *vp2)
   {
           const struct mpage      *mp1, *mp2;
   
           mp1 = *(const struct mpage **)vp1;
           mp2 = *(const struct mpage **)vp2;
           return strcmp(mp1->mlinks->file, mp2->mlinks->file);
   }
   
 static void  static void
 parse_cat(struct mpage *mpage, int fd)  parse_cat(struct mpage *mpage, int fd)
 {  {
Line 1673  parse_mdoc_Nm(struct mpage *mpage, const struct roff_m
Line 1693  parse_mdoc_Nm(struct mpage *mpage, const struct roff_m
         if ( ! (mpage->name_head_done ||          if ( ! (mpage->name_head_done ||
             n->child == NULL || n->child->string == NULL ||              n->child == NULL || n->child->string == NULL ||
             strcasecmp(n->child->string, meta->title))) {              strcasecmp(n->child->string, meta->title))) {
                 putkey(mpage, n->child->string, ROFFT_HEAD);                  putkey(mpage, n->child->string, NAME_HEAD);
                 mpage->name_head_done = 1;                  mpage->name_head_done = 1;
         }          }
         return 0;          return 0;

Legend:
Removed from v.1.223  
changed lines
  Added in v.1.226

CVSweb