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

Diff for /mandoc/Attic/mandoc-db.c between version 1.5 and 1.6

version 1.5, 2011/04/04 16:49:03 version 1.6, 2011/04/05 13:09:33
Line 51  enum type {
Line 51  enum type {
         MANDOC_VARIABLE          MANDOC_VARIABLE
 };  };
   
   #define MAN_ARGS          DB *db, \
                             const char *dbn, \
                             DBT *key, size_t *ksz, \
                             DBT *val, \
                             const struct man_node *n
 #define MDOC_ARGS         DB *db, \  #define MDOC_ARGS         DB *db, \
                           const char *dbn, \                            const char *dbn, \
                           DBT *key, size_t *ksz, \                            DBT *key, size_t *ksz, \
Line 62  static void    dbt_appendb(DBT *, size_t *, 
Line 67  static void    dbt_appendb(DBT *, size_t *, 
                                 const void *, size_t);                                  const void *, size_t);
 static  void              dbt_init(DBT *, size_t *);  static  void              dbt_init(DBT *, size_t *);
 static  void              usage(void);  static  void              usage(void);
   static  void              pman(DB *, const char *,
                                   DBT *, size_t *, DBT *,
                                   const char *, struct man *);
   static  int               pman_node(MAN_ARGS);
 static  void              pmdoc(DB *, const char *,  static  void              pmdoc(DB *, const char *,
                                 DBT *, size_t *, DBT *,                                  DBT *, size_t *, DBT *,
                                 const char *, struct mdoc *);                                  const char *, struct mdoc *);
Line 207  main(int argc, char *argv[])
Line 216  main(int argc, char *argv[])
 {  {
         struct mparse   *mp; /* parse sequence */          struct mparse   *mp; /* parse sequence */
         struct mdoc     *mdoc; /* resulting mdoc */          struct mdoc     *mdoc; /* resulting mdoc */
           struct man      *man; /* resulting man */
         char            *fn;          char            *fn;
         const char      *dir; /* result dir (default: cwd) */          const char      *dir; /* result dir (default: cwd) */
         char             ibuf[MAXPATHLEN], /* index fname */          char             ibuf[MAXPATHLEN], /* index fname */
Line 330  main(int argc, char *argv[])
Line 340  main(int argc, char *argv[])
                         continue;                          continue;
                 }                  }
   
                 mparse_result(mp, &mdoc, NULL);                  mparse_result(mp, &mdoc, &man);
                 if (NULL == mdoc)                  if (NULL == mdoc && NULL == man)
                         continue;                          continue;
   
                 rkey.data = &rec;                  rkey.data = &rec;
Line 346  main(int argc, char *argv[])
Line 356  main(int argc, char *argv[])
                 memset(val.data, 0, sizeof(uint32_t));                  memset(val.data, 0, sizeof(uint32_t));
                 memcpy(val.data + 4, &rec, sizeof(uint32_t));                  memcpy(val.data + 4, &rec, sizeof(uint32_t));
   
                 pmdoc(db, fbbuf, &key, &ksz, &val, fn, mdoc);                  if (mdoc)
                           pmdoc(db, fbbuf, &key, &ksz, &val, fn, mdoc);
                   else
                           pman(db, fbbuf, &key, &ksz, &val, fn, man);
                 rec++;                  rec++;
         }          }
   
Line 648  pmdoc_node(MDOC_ARGS)
Line 661  pmdoc_node(MDOC_ARGS)
         pmdoc_node(db, dbn, key, ksz, val, n->child);          pmdoc_node(db, dbn, key, ksz, val, n->child);
         pmdoc_node(db, dbn, key, ksz, val, n->next);          pmdoc_node(db, dbn, key, ksz, val, n->next);
 }  }
   
   static int
   pman_node(MAN_ARGS)
   {
           const struct man_node *head, *body;
           const char      *end, *start;
           char             nil;
           uint32_t         fl;
   
           if (NULL == n)
                   return(0);
   
           /*
            * We're only searching for one thing: the first text child in
            * the BODY of a NAME section.  Since we don't keep track of
            * sections in -man, run some hoops to find out whether we're in
            * the correct section or not.
            */
   
           if (MAN_BODY == n->type && MAN_SH == n->tok) {
                   body = n;
                   assert(body->parent);
                   if (NULL != (head = body->parent->head) &&
                                   1 == head->nchild &&
                                   NULL != (head = (head->child)) &&
                                   MAN_TEXT == head->type &&
                                   0 == strcmp(head->string, "NAME") &&
                                   NULL != (body = body->child) &&
                                   MAN_TEXT == body->type) {
                           nil = '\0';
   
                           start = body->string;
                           if (NULL == (end = strchr(start, ' ')))
                                   end = start + strlen(start);
   
                           dbt_init(key, ksz);
                           dbt_appendb(key, ksz, start, end - start + 1);
                           dbt_appendb(key, ksz, &nil, 1);
                           fl = MANDOC_NAME;
                           memcpy(val->data, &fl, 4);
                           return(1);
                   }
           }
   
           if (pman_node(db, dbn, key, ksz, val, n->child))
                   return(1);
           if (pman_node(db, dbn, key, ksz, val, n->next))
                   return(1);
   
           return(0);
   }
   
   static void
   pman(DB *db, const char *dbn,
                   DBT *key, size_t *ksz, DBT *val,
                   const char *path, struct man *m)
   {
   
           pman_node(db, dbn, key, ksz, val, man_node(m));
   }
   
   
 static void  static void
 pmdoc(DB *db, const char *dbn,  pmdoc(DB *db, const char *dbn,

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

CVSweb