=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/mandocdb.c,v retrieving revision 1.57 retrieving revision 1.58 diff -c -r1.57 -r1.58 *** src/usr.bin/mandoc/mandocdb.c 2014/01/05 04:13:46 1.57 --- src/usr.bin/mandoc/mandocdb.c 2014/01/05 04:48:35 1.58 *************** *** 1,4 **** ! /* $Id: mandocdb.c,v 1.57 2014/01/05 04:13:46 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze --- 1,4 ---- ! /* $Id: mandocdb.c,v 1.58 2014/01/05 04:48:35 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze *************** *** 106,116 **** struct mlink *next; /* singly linked list */ }; - struct title { - char *title; /* name(sec/arch) given inside the file */ - char *file; /* file name in case of mismatch */ - }; - enum stmt { STMT_DELETE_PAGE = 0, /* delete mpage */ STMT_INSERT_PAGE, /* insert mpage */ --- 106,111 ---- *************** *** 139,145 **** static void mlink_free(struct mlink *); static void mlinks_undupe(struct mpage *); static void mpages_free(void); ! static void mpages_merge(struct mchars *, struct mparse *, int); static void parse_cat(struct mpage *); static void parse_man(struct mpage *, const struct man_node *); static void parse_mdoc(struct mpage *, const struct mdoc_node *); --- 134,140 ---- static void mlink_free(struct mlink *); static void mlinks_undupe(struct mpage *); static void mpages_free(void); ! static void mpages_merge(struct mchars *, struct mparse *); static void parse_cat(struct mpage *); static void parse_man(struct mpage *, const struct man_node *); static void parse_mdoc(struct mpage *, const struct mdoc_node *); *************** *** 427,433 **** if (OP_TEST != op) dbprune(); if (OP_DELETE != op) ! mpages_merge(mc, mp, 0); dbclose(1); } else { /* --- 422,428 ---- if (OP_TEST != op) dbprune(); if (OP_DELETE != op) ! mpages_merge(mc, mp); dbclose(1); } else { /* *************** *** 471,477 **** if (0 == dbopen(0)) goto out; ! mpages_merge(mc, mp, warnings && !use_all); dbclose(0); if (j + 1 < dirs.sz) { --- 466,472 ---- if (0 == dbopen(0)) goto out; ! mpages_merge(mc, mp); dbclose(0); if (j + 1 < dirs.sz) { *************** *** 937,955 **** * and filename to determine whether the file is parsable or not. */ static void ! mpages_merge(struct mchars *mc, struct mparse *mp, int check_reachable) { ! struct ohash title_table; ! struct ohash_info title_info, str_info; struct mpage *mpage; struct mlink *mlink; struct mdoc *mdoc; struct man *man; - struct title *title_entry; - char *title_str; const char *cp; int match; ! unsigned int pslot, tslot; enum mandoclevel lvl; str_info.alloc = hash_alloc; --- 932,947 ---- * and filename to determine whether the file is parsable or not. */ static void ! mpages_merge(struct mchars *mc, struct mparse *mp) { ! struct ohash_info str_info; struct mpage *mpage; struct mlink *mlink; struct mdoc *mdoc; struct man *man; const char *cp; int match; ! unsigned int pslot; enum mandoclevel lvl; str_info.alloc = hash_alloc; *************** *** 957,970 **** str_info.hfree = hash_free; str_info.key_offset = offsetof(struct str, key); - if (check_reachable) { - title_info.alloc = hash_alloc; - title_info.halloc = hash_halloc; - title_info.hfree = hash_free; - title_info.key_offset = offsetof(struct title, title); - ohash_init(&title_table, 6, &title_info); - } - mpage = ohash_first(&mpages, &pslot); while (NULL != mpage) { mlinks_undupe(mpage); --- 949,954 ---- *************** *** 1051,1105 **** else parse_cat(mpage); - /* - * Build a title string for the file. If it matches - * the location of the file, remember the title as - * found; else, remember it as missing. - */ - - if (check_reachable) { - if (-1 == asprintf(&title_str, "%s(%s%s%s)", - mpage->title, mpage->sec, - '\0' == *mpage->arch ? "" : "/", - mpage->arch)) { - perror(NULL); - exit((int)MANDOCLEVEL_SYSERR); - } - tslot = ohash_qlookup(&title_table, title_str); - title_entry = ohash_find(&title_table, tslot); - if (NULL == title_entry) { - title_entry = mandoc_malloc( - sizeof(struct title)); - title_entry->title = title_str; - title_entry->file = mandoc_strdup( - match ? "" : mpage->mlinks->file); - ohash_insert(&title_table, tslot, - title_entry); - } else { - if (match) - *title_entry->file = '\0'; - free(title_str); - } - } - dbindex(mpage, mc); ohash_delete(&strings); mpage = ohash_next(&mpages, &pslot); - } - - if (check_reachable) { - title_entry = ohash_first(&title_table, &tslot); - while (NULL != title_entry) { - if ('\0' != *title_entry->file) - say(title_entry->file, - "Probably unreachable, title is %s", - title_entry->title); - free(title_entry->title); - free(title_entry->file); - free(title_entry); - title_entry = ohash_next(&title_table, &tslot); - } - ohash_delete(&title_table); } } --- 1035,1043 ----