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

Diff for /mandoc/mandocdb.c between version 1.129 and 1.131

version 1.129, 2014/04/04 15:55:19 version 1.131, 2014/04/04 18:23:30
Line 147  static void *hash_alloc(size_t, void *);
Line 147  static void *hash_alloc(size_t, void *);
 static  void     hash_free(void *, size_t, void *);  static  void     hash_free(void *, size_t, void *);
 static  void    *hash_halloc(size_t, void *);  static  void    *hash_halloc(size_t, void *);
 static  void     mlink_add(struct mlink *, const struct stat *);  static  void     mlink_add(struct mlink *, const struct stat *);
 static  int      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 *);
 static  void     mpages_free(void);  static  void     mpages_free(void);
 static  void     mpages_merge(struct mchars *, struct mparse *);  static  void     mpages_merge(struct mchars *, struct mparse *);
   static  void     names_check(void);
 static  void     parse_cat(struct mpage *, int);  static  void     parse_cat(struct mpage *, int);
 static  void     parse_man(struct mpage *, const struct man_node *);  static  void     parse_man(struct mpage *, const struct man_node *);
 static  void     parse_mdoc(struct mpage *, const struct mdoc_node *);  static  void     parse_mdoc(struct mpage *, const struct mdoc_node *);
Line 495  main(int argc, char *argv[])
Line 496  main(int argc, char *argv[])
                                 goto out;                                  goto out;
   
                         mpages_merge(mc, mp);                          mpages_merge(mc, mp);
                           if (warnings &&
                               ! (MPARSE_QUICK & mparse_options))
                                   names_check();
                         dbclose(0);                          dbclose(0);
   
                         if (j + 1 < dirs.sz) {                          if (j + 1 < dirs.sz) {
Line 920  nextlink:
Line 924  nextlink:
         }          }
 }  }
   
 static int  static void
 mlink_check(struct mpage *mpage, struct mlink *mlink)  mlink_check(struct mpage *mpage, struct mlink *mlink)
 {  {
         int      match;          struct str      *str;
           unsigned int     slot;
   
         match = 1;  
   
         /*          /*
          * Check whether the manual section given in a file           * Check whether the manual section given in a file
          * agrees with the directory where the file is located.           * agrees with the directory where the file is located.
Line 937  mlink_check(struct mpage *mpage, struct mlink *mlink)
Line 940  mlink_check(struct mpage *mpage, struct mlink *mlink)
          */           */
   
         if (FORM_SRC == mpage->form &&          if (FORM_SRC == mpage->form &&
             strcasecmp(mpage->sec, mlink->dsec)) {              strcasecmp(mpage->sec, mlink->dsec))
                 match = 0;  
                 say(mlink->file, "Section \"%s\" manual in %s directory",                  say(mlink->file, "Section \"%s\" manual in %s directory",
                     mpage->sec, mlink->dsec);                      mpage->sec, mlink->dsec);
         }  
   
         /*          /*
          * Manual page directories exist for each kernel           * Manual page directories exist for each kernel
Line 956  mlink_check(struct mpage *mpage, struct mlink *mlink)
Line 957  mlink_check(struct mpage *mpage, struct mlink *mlink)
          * on amd64, i386, sparc, and sparc64.           * on amd64, i386, sparc, and sparc64.
          */           */
   
         if (strcasecmp(mpage->arch, mlink->arch)) {          if (strcasecmp(mpage->arch, mlink->arch))
                 match = 0;  
                 say(mlink->file, "Architecture \"%s\" manual in "                  say(mlink->file, "Architecture \"%s\" manual in "
                     "\"%s\" directory", mpage->arch, mlink->arch);                      "\"%s\" directory", mpage->arch, mlink->arch);
         }  
   
         if (strcasecmp(mpage->title, mlink->name))          /*
                 match = 0;           * XXX
            * parse_cat() doesn't set TYPE_Nm and TYPE_NAME yet.
            */
   
         return(match);          if (FORM_CAT == mpage->form)
                   return;
   
           /*
            * Check whether this mlink
            * appears as a name in the NAME section.
            */
   
           slot = ohash_qlookup(&strings, mlink->name);
           str = ohash_find(&strings, slot);
           assert(NULL != str);
           if ( ! (TYPE_NAME & str->mask))
                   say(mlink->file, "Name missing in NAME section");
 }  }
   
 /*  /*
Line 988  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1001  mpages_merge(struct mchars *mc, struct mparse *mp)
         char                    *sodest;          char                    *sodest;
         char                    *cp;          char                    *cp;
         pid_t                    child_pid;          pid_t                    child_pid;
         int                      match, status;          int                      status;
         unsigned int             pslot;          unsigned int             pslot;
         enum mandoclevel         lvl;          enum mandoclevel         lvl;
   
Line 1136  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1149  mpages_merge(struct mchars *mc, struct mparse *mp)
                         putkey(mpage, mlink->name, TYPE_Nm);                          putkey(mpage, mlink->name, TYPE_Nm);
                 }                  }
   
                 if (warnings && !use_all) {  
                         match = 0;  
                         for (mlink = mpage->mlinks; mlink;  
                              mlink = mlink->next)  
                                 if (mlink_check(mpage, mlink))  
                                         match = 1;  
                 } else  
                         match = 1;  
   
                 if (NULL != mdoc) {                  if (NULL != mdoc) {
                         if (NULL != (cp = mdoc_meta(mdoc)->name))                          if (NULL != (cp = mdoc_meta(mdoc)->name))
                                 putkey(mpage, cp, TYPE_Nm);                                  putkey(mpage, cp, TYPE_Nm);
Line 1157  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1161  mpages_merge(struct mchars *mc, struct mparse *mp)
                 else                  else
                         parse_cat(mpage, fd[0]);                          parse_cat(mpage, fd[0]);
   
                   if (warnings && !use_all)
                           for (mlink = mpage->mlinks; mlink;
                                mlink = mlink->next)
                                   mlink_check(mpage, mlink);
   
                 dbadd(mpage, mc);                  dbadd(mpage, mc);
   
 nextpage:  nextpage:
Line 1182  nextpage:
Line 1191  nextpage:
   
         if (0 == nodb)          if (0 == nodb)
                 SQL_EXEC("END TRANSACTION");                  SQL_EXEC("END TRANSACTION");
   }
   
   static void
   names_check(void)
   {
           sqlite3_stmt    *stmt;
           const char      *name, *sec, *arch, *key;
           size_t           i;
           int              irc;
   
           sqlite3_prepare_v2(db,
             "SELECT name, sec, arch, key FROM ("
               "SELECT key, pageid FROM keys "
               "WHERE bits & ? AND NOT EXISTS ("
                 "SELECT pageid FROM mlinks "
                 "WHERE mlinks.pageid == keys.pageid "
                 "AND mlinks.name == keys.key"
               ")"
             ") JOIN ("
               "SELECT * FROM mlinks GROUP BY pageid"
             ") USING (pageid);",
             -1, &stmt, NULL);
   
           i = 1;
           SQL_BIND_INT64(stmt, i, TYPE_NAME);
   
           while (SQLITE_ROW == (irc = sqlite3_step(stmt))) {
                   name = sqlite3_column_text(stmt, 0);
                   sec  = sqlite3_column_text(stmt, 1);
                   arch = sqlite3_column_text(stmt, 2);
                   key  = sqlite3_column_text(stmt, 3);
                   say("", "%s(%s%s%s) lacks mlink \"%s\"", name, sec,
                       '\0' == *arch ? "" : "/",
                       '\0' == *arch ? "" : arch, key);
           }
           sqlite3_finalize(stmt);
 }  }
   
 static void  static void

Legend:
Removed from v.1.129  
changed lines
  Added in v.1.131

CVSweb