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) { |
|
|
} |
} |
} |
} |
|
|
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: |
|
|
|
|
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 |