Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.sbin/makemandb Sync with API changes.



details:   https://anonhg.NetBSD.org/src/rev/0143088fd10c
branches:  trunk
changeset: 346502:0143088fd10c
user:      christos <christos%NetBSD.org@localhost>
date:      Fri Jul 15 19:41:33 2016 +0000

description:
Sync with API changes.

diffstat:

 usr.sbin/makemandb/makemandb.c |  213 ++++++++++++++++------------------------
 1 files changed, 87 insertions(+), 126 deletions(-)

diffs (truncated from 518 to 300 lines):

diff -r 6563f1095173 -r 0143088fd10c usr.sbin/makemandb/makemandb.c
--- a/usr.sbin/makemandb/makemandb.c    Fri Jul 15 19:40:42 2016 +0000
+++ b/usr.sbin/makemandb/makemandb.c    Fri Jul 15 19:41:33 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: makemandb.c,v 1.39 2016/07/06 08:52:01 abhinav Exp $   */
+/*     $NetBSD: makemandb.c,v 1.40 2016/07/15 19:41:33 christos Exp $  */
 /*
  * Copyright (c) 2011 Abhinav Upadhyay <er.abhinav.upadhyay%gmail.com@localhost>
  * Copyright (c) 2011 Kristaps Dzonsons <kristaps%bsd.lv@localhost>
@@ -17,7 +17,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: makemandb.c,v 1.39 2016/07/06 08:52:01 abhinav Exp $");
+__RCSID("$NetBSD: makemandb.c,v 1.40 2016/07/15 19:41:33 christos Exp $");
 
 #include <sys/stat.h>
 #include <sys/types.h>
@@ -38,6 +38,7 @@
 #include "dist/man.h"
 #include "dist/mandoc.h"
 #include "dist/mdoc.h"
+#include "dist/roff.h"
 
 #define BUFLEN 1024
 #define MDOC 0 //If the page is of mdoc(7) type
@@ -59,7 +60,7 @@
        int verbosity;  // 0: quiet, 1: default, 2: verbose
 } makemandb_flags;
 
-typedef struct mandb_rec {
+typedef struct roff_mandb_rec {
        /* Fields for mandb table */
        char *name;     // for storing the name of the man page
        char *name_desc; // for storing the one line description (.Nd)
@@ -90,32 +91,32 @@
        int page_type; //Indicates the type of page: mdoc or man
 } mandb_rec;
 
+typedef        void (*proff_nf)(const struct roff_node *n, mandb_rec *);
+
 static void append(secbuff *sbuff, const char *src);
 static void init_secbuffs(mandb_rec *);
 static void free_secbuffs(mandb_rec *);
 static int check_md5(const char *, sqlite3 *, const char *, char **, void *, size_t);
 static void cleanup(mandb_rec *);
-static void set_section(const struct mdoc *, const struct man *, mandb_rec *);
-static void set_machine(const struct mdoc *, mandb_rec *);
+static void set_section(const struct roff_man *, mandb_rec *);
+static void set_machine(const struct roff_man *, mandb_rec *);
 static int insert_into_db(sqlite3 *, mandb_rec *);
 static void begin_parse(const char *, struct mparse *, mandb_rec *,
                         const void *, size_t len);
-static void pmdoc_node(const struct mdoc_node *, mandb_rec *);
-static void pmdoc_Nm(const struct mdoc_node *, mandb_rec *);
-static void pmdoc_Nd(const struct mdoc_node *, mandb_rec *);
-static void pmdoc_Sh(const struct mdoc_node *, mandb_rec *);
-static void pmdoc_Xr(const struct mdoc_node *, mandb_rec *);
-static void pmdoc_Pp(const struct mdoc_node *, mandb_rec *);
-static void pmdoc_macro_handler(const struct mdoc_node *, mandb_rec *,
-                               enum mdoct);
-static void pman_node(const struct man_node *n, mandb_rec *);
-static void pman_parse_node(const struct man_node *, secbuff *);
-static void pman_parse_name(const struct man_node *, mandb_rec *);
-static void pman_sh(const struct man_node *, mandb_rec *);
-static void pman_block(const struct man_node *, mandb_rec *);
+static void proff_node(const struct roff_node *, mandb_rec *, const proff_nf *);
+static void pmdoc_Nm(const struct roff_node *, mandb_rec *);
+static void pmdoc_Nd(const struct roff_node *, mandb_rec *);
+static void pmdoc_Sh(const struct roff_node *, mandb_rec *);
+static void pmdoc_Xr(const struct roff_node *, mandb_rec *);
+static void pmdoc_Pp(const struct roff_node *, mandb_rec *);
+static void pmdoc_macro_handler(const struct roff_node *, mandb_rec *, int);
+static void pman_parse_node(const struct roff_node *, secbuff *);
+static void pman_parse_name(const struct roff_node *, mandb_rec *);
+static void pman_sh(const struct roff_node *, mandb_rec *);
+static void pman_block(const struct roff_node *, mandb_rec *);
 static void traversedir(const char *, const char *, sqlite3 *, struct mparse *);
-static void mdoc_parse_section(enum mdoc_sec, const char *, mandb_rec *);
-static void man_parse_section(enum man_sec, const struct man_node *, mandb_rec *);
+static void mdoc_parse_section(enum roff_sec, const char *, mandb_rec *);
+static void man_parse_section(enum man_sec, const struct roff_node *, mandb_rec *);
 static void build_file_cache(sqlite3 *, const char *, const char *,
                             struct stat *);
 static void update_db(sqlite3 *, struct mparse *, mandb_rec *);
@@ -125,9 +126,7 @@
 static void replace_hyph(char *);
 static makemandb_flags mflags = { .verbosity = 1 };
 
-typedef        void (*pman_nf)(const struct man_node *n, mandb_rec *);
-typedef        void (*pmdoc_nf)(const struct mdoc_node *n, mandb_rec *);
-static const pmdoc_nf mdocs[MDOC_MAX + 1] = {
+static const proff_nf mdocs[MDOC_MAX + 1] = {
        NULL, /* Ap */
        NULL, /* Dd */
        NULL, /* Dt */
@@ -284,7 +283,7 @@
        NULL, /* text */
 };
 
-static const pman_nf mans[MAN_MAX] = {
+static const proff_nf mans[MAN_MAX] = {
        NULL,   //br
        NULL,   //TH
        pman_sh, //SH
@@ -330,7 +329,6 @@
 main(int argc, char *argv[])
 {
        FILE *file;
-       struct mchars *mchars;
        const char *sqlstr, *manconf = NULL;
        char *line, *command, *parent;
        char *errmsg;
@@ -339,7 +337,7 @@
        sqlite3 *db;
        ssize_t len;
        size_t linesize;
-       struct mandb_rec rec;
+       struct roff_mandb_rec rec;
 
        while ((ch = getopt(argc, argv, "C:floQqv")) != -1) {
                switch (ch) {
@@ -372,10 +370,8 @@
        memset(&rec, 0, sizeof(rec));
 
        init_secbuffs(&rec);
-       mchars = mchars_alloc();
-       if (mchars == NULL)
-               errx(EXIT_FAILURE, "Can't allocate mchars");
-       mp = mparse_alloc(0, MANDOCLEVEL_BADARG, NULL, mchars, NULL);
+       mchars_alloc();
+       mp = mparse_alloc(0, MANDOCLEVEL_BADARG, NULL, NULL);
 
        if (manconf) {
                char *arg;
@@ -473,7 +469,7 @@
                printf("Performing index update\n");
        update_db(db, mp, &rec);
        mparse_free(mp);
-       mchars_free(mchars);
+       mchars_free();
        free_secbuffs(&rec);
 
        /* Commit the transaction */
@@ -910,8 +906,7 @@
 begin_parse(const char *file, struct mparse *mp, mandb_rec *rec,
     const void *buf, size_t len)
 {
-       struct mdoc *mdoc;
-       struct man *man;
+       struct roff_man *roff;
        mparse_reset(mp);
 
        rec->xr_found = 0;
@@ -926,22 +921,23 @@
                return;
        }
 
-       mparse_result(mp, &mdoc, &man, NULL);
-       if (mdoc == NULL && man == NULL) {
+       mparse_result(mp, &roff, NULL);
+       if (roff == NULL) {
                if (mflags.verbosity == 2)
-                       warnx("Not a man(7) or mdoc(7) page");
+                       warnx("Not a roff(7) page");
                return;
        }
 
-       set_machine(mdoc, rec);
-       set_section(mdoc, man, rec);
-       if (mdoc) {
+       set_machine(roff, rec);
+       set_section(roff, rec);
+       if (roff->macroset == MACROSET_MDOC) {
                rec->page_type = MDOC;
-               pmdoc_node(mdoc_node(mdoc), rec);
-       } else {
+               proff_node(roff->first->child, rec, mdocs);
+       } else if (roff->macroset == MACROSET_MAN) {
                rec->page_type = MAN;
-               pman_node(man_node(man), rec);
-       }
+               proff_node(roff->first->child, rec, mans);
+       } else
+               warnx("Unknown macroset %d", roff->macroset);
 }
 
 /*
@@ -950,23 +946,13 @@
  *  (Which should be the first character of the string).
  */
 static void
-set_section(const struct mdoc *md, const struct man *m, mandb_rec *rec)
+set_section(const struct roff_man *rm, mandb_rec *rec)
 {
-       if (md) {
-               const struct mdoc_meta *md_meta = mdoc_meta(md);
-               if (md_meta->msec == NULL) {
-                       easprintf(&rec->section, "%s", "?");
-               } else
-                       rec->section = estrdup(md_meta->msec);
-       } else if (m) {
-               const struct man_meta *m_meta = man_meta(m);
-               if (m_meta->msec == NULL)
-                       easprintf(&rec->section, "%s", "?");
-               else
-                       rec->section = estrdup(m_meta->msec);
-       } else
+       if (!rm)
                return;
-
+       const struct roff_meta *rm_meta = &rm->meta;
+       const char *s = rm_meta->msec == NULL ? "?" : rm_meta->msec;
+       easprintf(&rec->section, "%s", s);
        if (rec->section[0] == '?' && mflags.verbosity == 2)
                warnx("%s: Missing section number", rec->file_path);
 }
@@ -976,38 +962,13 @@
  *  Extracts the machine architecture information if available.
  */
 static void
-set_machine(const struct mdoc *md, mandb_rec *rec)
+set_machine(const struct roff_man *rm, mandb_rec *rec)
 {
-       if (md == NULL)
-               return;
-       const struct mdoc_meta *md_meta = mdoc_meta(md);
-       if (md_meta->arch)
-               rec->machine = estrdup(md_meta->arch);
-}
-
-static void
-pmdoc_node(const struct mdoc_node *n, mandb_rec *rec)
-{
-
-       if (n == NULL)
+       if (rm == NULL)
                return;
-
-       switch (n->type) {
-       case (MDOC_BODY):
-               /* FALLTHROUGH */
-       case (MDOC_TAIL):
-               /* FALLTHROUGH */
-       case (MDOC_ELEM):
-               if (mdocs[n->tok] == NULL)
-                       break;
-               (*mdocs[n->tok])(n, rec);
-               break;
-       default:
-               break;
-       }
-
-       pmdoc_node(n->child, rec);
-       pmdoc_node(n->next, rec);
+       const struct roff_meta *rm_meta = &rm->meta;
+       const char *a = rm_meta->arch == NULL ? "?" : rm_meta->arch;
+       rec->machine = estrdup(a);
 }
 
 /*
@@ -1015,13 +976,13 @@
  *  Extracts the Name of the manual page from the .Nm macro
  */
 static void
-pmdoc_Nm(const struct mdoc_node *n, mandb_rec *rec)
+pmdoc_Nm(const struct roff_node *n, mandb_rec *rec)
 {
        if (n->sec != SEC_NAME)
                return;
 
        for (n = n->child; n; n = n->next) {
-               if (n->type == MDOC_TEXT) {
+               if (n->type == ROFFT_TEXT) {
                        char *escaped_name = parse_escape(n->string);
                        concat(&rec->name, escaped_name);
                        free(escaped_name);
@@ -1034,16 +995,16 @@
  *  Extracts the one line description of the man page from the .Nd macro
  */
 static void
-pmdoc_Nd(const struct mdoc_node *n, mandb_rec *rec)
+pmdoc_Nd(const struct roff_node *n, mandb_rec *rec)
 {
        char *buf = NULL;
        char *name;
        char *nd_text;
 
-       if (n == NULL || (n->type != MDOC_TEXT && n->tok == MDOC_MAX))
+       if (n == NULL || (n->type != ROFFT_TEXT && n->tok == MDOC_MAX))
                return;
 
-       if (n->type == MDOC_TEXT) {
+       if (n->type == ROFFT_TEXT) {
                if (rec->xr_found && n->next) {
                        /*
                         * An Xr macro was seen previously, so parse this
@@ -1051,7 +1012,7 @@
                         */
                        name = n->string;



Home | Main Index | Thread Index | Old Index