version 1.130, 2014/04/04 16:43:16 |
version 1.132, 2014/04/09 21:50:08 |
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); |
Line 224 static const struct mdoc_handler mdocs[MDOC_MAX] = { |
|
Line 224 static const struct mdoc_handler mdocs[MDOC_MAX] = { |
|
{ NULL, TYPE_Ic }, /* Ic */ |
{ NULL, TYPE_Ic }, /* Ic */ |
{ NULL, TYPE_In }, /* In */ |
{ NULL, TYPE_In }, /* In */ |
{ NULL, TYPE_Li }, /* Li */ |
{ NULL, TYPE_Li }, /* Li */ |
{ parse_mdoc_Nd, TYPE_Nd }, /* Nd */ |
{ parse_mdoc_Nd, 0 }, /* Nd */ |
{ parse_mdoc_Nm, 0 }, /* Nm */ |
{ parse_mdoc_Nm, 0 }, /* Nm */ |
{ NULL, 0 }, /* Op */ |
{ NULL, 0 }, /* Op */ |
{ NULL, 0 }, /* Ot */ |
{ NULL, 0 }, /* Ot */ |
|
|
} |
} |
} |
} |
|
|
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 941 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 960 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 992 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 1140 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); |
assert(NULL == mpage->desc); |
assert(NULL == mpage->desc); |
parse_mdoc(mpage, mdoc_node(mdoc)); |
parse_mdoc(mpage, mdoc_node(mdoc)); |
putkey(mpage, NULL != mpage->desc ? |
if (NULL == mpage->desc) |
mpage->desc : mpage->mlinks->name, TYPE_Nd); |
mpage->desc = mandoc_strdup( |
|
mpage->mlinks->name); |
} else if (NULL != man) |
} else if (NULL != man) |
parse_man(mpage, man_node(man)); |
parse_man(mpage, man_node(man)); |
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: |
Line 1293 parse_cat(struct mpage *mpage, int fd) |
|
Line 1299 parse_cat(struct mpage *mpage, int fd) |
|
"Cannot find NAME section"); |
"Cannot find NAME section"); |
assert(NULL == mpage->desc); |
assert(NULL == mpage->desc); |
mpage->desc = mandoc_strdup(mpage->mlinks->name); |
mpage->desc = mandoc_strdup(mpage->mlinks->name); |
putkey(mpage, mpage->mlinks->name, TYPE_Nd); |
|
fclose(stream); |
fclose(stream); |
free(title); |
free(title); |
return; |
return; |
Line 1334 parse_cat(struct mpage *mpage, int fd) |
|
Line 1339 parse_cat(struct mpage *mpage, int fd) |
|
|
|
assert(NULL == mpage->desc); |
assert(NULL == mpage->desc); |
mpage->desc = mandoc_strdup(p); |
mpage->desc = mandoc_strdup(p); |
putkey(mpage, mpage->desc, TYPE_Nd); |
|
fclose(stream); |
fclose(stream); |
free(title); |
free(title); |
} |
} |
Line 1475 parse_man(struct mpage *mpage, const struct man_node * |
|
Line 1479 parse_man(struct mpage *mpage, const struct man_node * |
|
|
|
assert(NULL == mpage->desc); |
assert(NULL == mpage->desc); |
mpage->desc = mandoc_strdup(start); |
mpage->desc = mandoc_strdup(start); |
putkey(mpage, mpage->desc, TYPE_Nd); |
|
free(title); |
free(title); |
return; |
return; |
} |
} |
Line 1923 dbadd(struct mpage *mpage, struct mchars *mc) |
|
Line 1926 dbadd(struct mpage *mpage, struct mchars *mc) |
|
if (NULL != mlink) |
if (NULL != mlink) |
fputs(", ", stdout); |
fputs(", ", stdout); |
} |
} |
for (key = ohash_first(&strings, &slot); NULL != key; |
printf(" - %s\n", mpage->desc); |
key = ohash_next(&strings, &slot)) { |
|
if (TYPE_Nd & key->mask) { |
|
if (NULL == key->rendered) |
|
render_key(mc, key); |
|
printf(" - %s", key->rendered); |
|
break; |
|
} |
|
} |
|
putchar('\n'); |
|
return; |
return; |
} |
} |
|
|
Line 1940 dbadd(struct mpage *mpage, struct mchars *mc) |
|
Line 1934 dbadd(struct mpage *mpage, struct mchars *mc) |
|
say(mlink->file, "Adding to database"); |
say(mlink->file, "Adding to database"); |
|
|
i = 1; |
i = 1; |
|
SQL_BIND_TEXT(stmts[STMT_INSERT_PAGE], i, mpage->desc); |
SQL_BIND_INT(stmts[STMT_INSERT_PAGE], i, FORM_SRC == mpage->form); |
SQL_BIND_INT(stmts[STMT_INSERT_PAGE], i, FORM_SRC == mpage->form); |
SQL_STEP(stmts[STMT_INSERT_PAGE]); |
SQL_STEP(stmts[STMT_INSERT_PAGE]); |
mpage->recno = sqlite3_last_insert_rowid(db); |
mpage->recno = sqlite3_last_insert_rowid(db); |
Line 2152 dbopen(int real) |
|
Line 2147 dbopen(int real) |
|
|
|
create_tables: |
create_tables: |
sql = "CREATE TABLE \"mpages\" (\n" |
sql = "CREATE TABLE \"mpages\" (\n" |
|
" \"desc\" TEXT NOT NULL,\n" |
" \"form\" INTEGER NOT NULL,\n" |
" \"form\" INTEGER NOT NULL,\n" |
" \"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL\n" |
" \"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL\n" |
");\n" |
");\n" |
Line 2184 prepare_statements: |
|
Line 2180 prepare_statements: |
|
"sec=? AND arch=? AND name=?)"; |
"sec=? AND arch=? AND name=?)"; |
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_DELETE_PAGE], NULL); |
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_DELETE_PAGE], NULL); |
sql = "INSERT INTO mpages " |
sql = "INSERT INTO mpages " |
"(form) VALUES (?)"; |
"(desc,form) VALUES (?,?)"; |
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_PAGE], NULL); |
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_PAGE], NULL); |
sql = "INSERT INTO mlinks " |
sql = "INSERT INTO mlinks " |
"(sec,arch,name,pageid) VALUES (?,?,?,?)"; |
"(sec,arch,name,pageid) VALUES (?,?,?,?)"; |