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

Diff for /mandoc/mandocdb.c between version 1.163 and 1.169

version 1.163, 2014/09/07 03:00:21 version 1.169, 2014/11/19 20:40:51
Line 138  struct mdoc_handler {
Line 138  struct mdoc_handler {
 static  void     dbclose(int);  static  void     dbclose(int);
 static  void     dbadd(struct mpage *, struct mchars *);  static  void     dbadd(struct mpage *, struct mchars *);
 static  void     dbadd_mlink(const struct mlink *mlink);  static  void     dbadd_mlink(const struct mlink *mlink);
   static  void     dbadd_mlink_name(const struct mlink *mlink);
 static  int      dbopen(int);  static  int      dbopen(int);
 static  void     dbprune(void);  static  void     dbprune(void);
 static  void     filescan(const char *);  static  void     filescan(const char *);
Line 169  static void  putmdockey(const struct mpage *,
Line 170  static void  putmdockey(const struct mpage *,
                         const struct mdoc_node *, uint64_t);                          const struct mdoc_node *, uint64_t);
 static  void     render_key(struct mchars *, struct str *);  static  void     render_key(struct mchars *, struct str *);
 static  void     say(const char *, const char *, ...);  static  void     say(const char *, const char *, ...);
 static  int      set_basedir(const char *);  static  int      set_basedir(const char *, int);
 static  int      treescan(void);  static  int      treescan(void);
 static  size_t   utf8(unsigned int, char [7]);  static  size_t   utf8(unsigned int, char [7]);
   
Line 315  static const struct mdoc_handler mdocs[MDOC_MAX] = {
Line 316  static const struct mdoc_handler mdocs[MDOC_MAX] = {
         { NULL, 0 },  /* sp */          { NULL, 0 },  /* sp */
         { NULL, 0 },  /* %U */          { NULL, 0 },  /* %U */
         { NULL, 0 },  /* Ta */          { NULL, 0 },  /* Ta */
           { NULL, 0 },  /* ll */
 };  };
   
   
Line 424  main(int argc, char *argv[])
Line 426  main(int argc, char *argv[])
         }          }
   
         exitcode = (int)MANDOCLEVEL_OK;          exitcode = (int)MANDOCLEVEL_OK;
         mp = mparse_alloc(mparse_options, MANDOCLEVEL_FATAL, NULL, NULL);  
         mc = mchars_alloc();          mc = mchars_alloc();
           mp = mparse_alloc(mparse_options, MANDOCLEVEL_FATAL, NULL,
               mc, NULL);
         ohash_init(&mpages, 6, &mpages_info);          ohash_init(&mpages, 6, &mpages_info);
         ohash_init(&mlinks, 6, &mlinks_info);          ohash_init(&mlinks, 6, &mlinks_info);
   
Line 436  main(int argc, char *argv[])
Line 438  main(int argc, char *argv[])
                  * Most of these deal with a specific directory.                   * Most of these deal with a specific directory.
                  * Jump into that directory first.                   * Jump into that directory first.
                  */                   */
                 if (OP_TEST != op && 0 == set_basedir(path_arg))                  if (OP_TEST != op && 0 == set_basedir(path_arg, 1))
                         goto out;                          goto out;
   
                 if (dbopen(1)) {                  if (dbopen(1)) {
Line 502  main(int argc, char *argv[])
Line 504  main(int argc, char *argv[])
                                 ohash_init(&mlinks, 6, &mlinks_info);                                  ohash_init(&mlinks, 6, &mlinks_info);
                         }                          }
   
                         if (0 == set_basedir(dirs.paths[j]))                          if (0 == set_basedir(dirs.paths[j], argc > 0))
                                 goto out;                                  continue;
                         if (0 == treescan())                          if (0 == treescan())
                                 goto out;                                  continue;
                         if (0 == dbopen(0))                          if (0 == dbopen(0))
                                 goto out;                                  continue;
   
                         mpages_merge(mc, mp);                          mpages_merge(mc, mp);
                         if (warnings && !nodb &&                          if (warnings && !nodb &&
Line 524  main(int argc, char *argv[])
Line 526  main(int argc, char *argv[])
         }          }
 out:  out:
         manpath_free(&dirs);          manpath_free(&dirs);
         mchars_free(mc);  
         mparse_free(mp);          mparse_free(mp);
           mchars_free(mc);
         mpages_free();          mpages_free();
         ohash_delete(&mpages);          ohash_delete(&mpages);
         ohash_delete(&mlinks);          ohash_delete(&mlinks);
Line 1152  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1154  mpages_merge(struct mchars *mc, struct mparse *mp)
                                          */                                           */
   
                                         if (mpage_dest->pageid)                                          if (mpage_dest->pageid)
                                                 dbadd_mlink(mlink);                                                  dbadd_mlink_name(mlink);
   
                                         if (NULL == mlink->next)                                          if (NULL == mlink->next)
                                                 break;                                                  break;
Line 1196  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1198  mpages_merge(struct mchars *mc, struct mparse *mp)
                 if (mpage->mlinks->gzip)                  if (mpage->mlinks->gzip)
                         mpage->form |= FORM_GZ;                          mpage->form |= FORM_GZ;
                 putkey(mpage, mpage->sec, TYPE_sec);                  putkey(mpage, mpage->sec, TYPE_sec);
                 putkey(mpage, '\0' == *mpage->arch ?                  if (*mpage->arch != '\0')
                     any : mpage->arch, TYPE_arch);                          putkey(mpage, mpage->arch, TYPE_arch);
   
                 for (mlink = mpage->mlinks; mlink; mlink = mlink->next) {                  for (mlink = mpage->mlinks; mlink; mlink = mlink->next) {
                         if ('\0' != *mlink->dsec)                          if ('\0' != *mlink->dsec)
Line 1727  putkeys(const struct mpage *mpage,
Line 1729  putkeys(const struct mpage *mpage,
         if (TYPE_Nm & v) {          if (TYPE_Nm & v) {
                 htab = &names;                  htab = &names;
                 v &= name_mask;                  v &= name_mask;
                 name_mask &= ~NAME_FIRST;                  if (v & NAME_FIRST)
                           name_mask &= ~NAME_FIRST;
                 if (debug > 1)                  if (debug > 1)
                         say(mpage->mlinks->file,                          say(mpage->mlinks->file,
                             "Adding name %*s", sz, cp);                              "Adding name %*s", sz, cp);
Line 1902  render_key(struct mchars *mc, struct str *key)
Line 1905  render_key(struct mchars *mc, struct str *key)
                  */                   */
   
                 if (write_utf8) {                  if (write_utf8) {
                         if (0 == (u = mchars_spec2cp(mc, seq, len)))                          if ((u = mchars_spec2cp(mc, seq, len)) <= 0)
                                 continue;                                  continue;
                         cpp = utfbuf;                          cpp = utfbuf;
                         if (0 == (sz = utf8(u, utfbuf)))                          if (0 == (sz = utf8(u, utfbuf)))
Line 1942  dbadd_mlink(const struct mlink *mlink)
Line 1945  dbadd_mlink(const struct mlink *mlink)
         SQL_BIND_INT64(stmts[STMT_INSERT_LINK], i, mlink->mpage->pageid);          SQL_BIND_INT64(stmts[STMT_INSERT_LINK], i, mlink->mpage->pageid);
         SQL_STEP(stmts[STMT_INSERT_LINK]);          SQL_STEP(stmts[STMT_INSERT_LINK]);
         sqlite3_reset(stmts[STMT_INSERT_LINK]);          sqlite3_reset(stmts[STMT_INSERT_LINK]);
   }
   
   static void
   dbadd_mlink_name(const struct mlink *mlink)
   {
           size_t           i;
   
           dbadd_mlink(mlink);
   
         i = 1;          i = 1;
         SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, NAME_FILE);          SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, NAME_FILE & NAME_MASK);
         SQL_BIND_TEXT(stmts[STMT_INSERT_NAME], i, mlink->name);          SQL_BIND_TEXT(stmts[STMT_INSERT_NAME], i, mlink->name);
         SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, mlink->mpage->pageid);          SQL_BIND_INT64(stmts[STMT_INSERT_NAME], i, mlink->mpage->pageid);
         SQL_STEP(stmts[STMT_INSERT_NAME]);          SQL_STEP(stmts[STMT_INSERT_NAME]);
Line 2343  hash_free(void *p, void *arg)
Line 2354  hash_free(void *p, void *arg)
 }  }
   
 static int  static int
 set_basedir(const char *targetdir)  set_basedir(const char *targetdir, int report_baddir)
 {  {
         static char      startdir[PATH_MAX];          static char      startdir[PATH_MAX];
         static int       getcwd_status;  /* 1 = ok, 2 = failure */          static int       getcwd_status;  /* 1 = ok, 2 = failure */
Line 2396  set_basedir(const char *targetdir)
Line 2407  set_basedir(const char *targetdir)
          * we can reliably check whether files are inside.           * we can reliably check whether files are inside.
          */           */
         if (NULL == realpath(targetdir, basedir)) {          if (NULL == realpath(targetdir, basedir)) {
                 exitcode = (int)MANDOCLEVEL_BADARG;                  if (report_baddir || errno != ENOENT) {
                 say("", "&%s: realpath", targetdir);                          exitcode = (int)MANDOCLEVEL_BADARG;
                           say("", "&%s: realpath", targetdir);
                   }
                 return(0);                  return(0);
         } else if (-1 == chdir(basedir)) {          } else if (-1 == chdir(basedir)) {
                 exitcode = (int)MANDOCLEVEL_BADARG;                  if (report_baddir || errno != ENOENT) {
                 say("", "&chdir");                          exitcode = (int)MANDOCLEVEL_BADARG;
                           say("", "&chdir");
                   }
                 return(0);                  return(0);
         }          }
         chdir_status = 1;          chdir_status = 1;

Legend:
Removed from v.1.163  
changed lines
  Added in v.1.169

CVSweb