Lines Matching defs:mlink

92 	struct mlink	*mlinks;  /* singly linked list */
97 struct mlink {
103 struct mlink *next; /* singly linked list */
123 static void dbadd_mlink(const struct mlink *);
132 static void mlink_add(struct mlink *, const struct stat *);
133 static void mlink_check(struct mpage *, struct mlink *);
134 static void mlink_free(struct mlink *);
434 mandoc_ohash_init(&mlinks, 6, offsetof(struct mlink, file));
508 offsetof(struct mlink, file));
585 struct mlink *mlink;
640 * If we're a regular file, add an mlink by using the
690 mlink = mandoc_calloc(1, sizeof(struct mlink));
691 if (strlcpy(mlink->file, path,
692 sizeof(mlink->file)) >=
693 sizeof(mlink->file)) {
695 free(mlink);
698 mlink->dform = dform;
699 mlink->dsec = dsec;
700 mlink->arch = arch;
701 mlink->name = ff->fts_name;
702 mlink->fsec = fsec;
703 mlink->gzip = gzip;
704 mlink_add(mlink, ff->fts_statp);
794 struct mlink *mlink;
916 mlink = mandoc_calloc(1, sizeof(struct mlink));
917 mlink->dform = FORM_NONE;
918 if (strlcpy(mlink->file, start, sizeof(mlink->file)) >=
919 sizeof(mlink->file)) {
921 free(mlink);
949 mlink->dform = FORM_SRC;
950 mlink->dsec = start + 3;
952 mlink->dform = FORM_CAT;
953 mlink->dsec = start + 3;
957 if (mlink->dsec != NULL && (p = strchr(start, '/')) != NULL) {
959 mlink->arch = start;
974 mlink->fsec = p;
981 mlink->name = start;
983 mlink->name = p + 1;
986 mlink_add(mlink, &st);
991 mlink_add(struct mlink *mlink, const struct stat *st)
997 assert(NULL != mlink->file);
999 mlink->dsec = mandoc_strdup(mlink->dsec ? mlink->dsec : "");
1000 mlink->arch = mandoc_strdup(mlink->arch ? mlink->arch : "");
1001 mlink->name = mandoc_strdup(mlink->name ? mlink->name : "");
1002 mlink->fsec = mandoc_strdup(mlink->fsec ? mlink->fsec : "");
1004 if ('0' == *mlink->fsec) {
1005 free(mlink->fsec);
1006 mlink->fsec = mandoc_strdup(mlink->dsec);
1007 mlink->fform = FORM_CAT;
1008 } else if ('1' <= *mlink->fsec && '9' >= *mlink->fsec)
1009 mlink->fform = FORM_SRC;
1011 mlink->fform = FORM_NONE;
1013 slot = ohash_qlookup(&mlinks, mlink->file);
1015 ohash_insert(&mlinks, slot, mlink);
1032 mlink->next = mpage->mlinks;
1033 mpage->mlinks = mlink;
1034 mlink->mpage = mpage;
1038 mlink_free(struct mlink *mlink)
1041 free(mlink->dsec);
1042 free(mlink->arch);
1043 free(mlink->name);
1044 free(mlink->fsec);
1045 free(mlink);
1052 struct mlink *mlink;
1055 while ((mlink = mpage->mlinks) != NULL) {
1056 mpage->mlinks = mlink->next;
1057 mlink_free(mlink);
1069 * For each mlink to the mpage, check whether the path looks like
1072 * If both conditions hold, drop the mlink.
1078 struct mlink **prev;
1079 struct mlink *mlink;
1084 while (NULL != (mlink = *prev)) {
1085 if (FORM_CAT != mlink->dform) {
1089 (void)strlcpy(buf, mlink->file, sizeof(buf));
1095 (void)strlcat(buf, mlink->dsec, sizeof(buf));
1100 say(mlink->file, "Man source exists: %s", buf);
1103 *prev = mlink->next;
1104 mlink_free(mlink);
1112 mlink_check(struct mpage *mpage, struct mlink *mlink)
1127 strcasecmp(mpage->sec, mlink->dsec))
1128 say(mlink->file, "Section \"%s\" manual in %s directory",
1129 mpage->sec, mlink->dsec);
1144 if (strcasecmp(mpage->arch, mlink->arch))
1145 say(mlink->file, "Architecture \"%s\" manual in "
1146 "\"%s\" directory", mpage->arch, mlink->arch);
1157 * Check whether this mlink
1161 slot = ohash_qlookup(&names, mlink->name);
1165 say(mlink->file, "Name missing in NAME section");
1179 struct mlink *mlink, *mlink_dest;
1186 if ((mlink = mpage->mlinks) == NULL)
1195 if ((fd = mparse_open(mp, mlink->file)) == -1) {
1196 say(mlink->file, "&open");
1204 if (mlink->dform != FORM_CAT || mlink->fform != FORM_CAT) {
1205 mparse_readfd(mp, fd, mlink->file);
1226 mlink->mpage = mpage_dest;
1238 dbadd_mlink(mlink);
1240 if (mlink->next == NULL)
1242 mlink = mlink->next;
1247 mlink->next = mlink_dest->next;
1267 mpage->arch = mandoc_strdup(mlink->arch);
1275 mpage->sec = mandoc_strdup(mlink->dsec);
1276 mpage->arch = mandoc_strdup(mlink->arch);
1277 mpage->title = mandoc_strdup(mlink->name);
1288 mpage->desc = mandoc_strdup(mlink->name);
1290 say(mlink->file, "No one-line description, "
1291 "using filename \"%s\"", mlink->name);
1294 for (mlink = mpage->mlinks;
1295 mlink != NULL;
1296 mlink = mlink->next) {
1297 putkey(mpage, mlink->name, NAME_FILE);
1299 mlink_check(mpage, mlink);
1314 struct mlink *mlink;
1320 mlink = mpage->mlinks;
1321 stream = fd == -1 ? fopen(mlink->file, "r") : fdopen(fd, "r");
1326 say(mlink->file, "&fopen");
1344 if (warnings && *mlink->dsec != '\0' &&
1345 strcasecmp(mpage->sec, mlink->dsec))
1346 say(mlink->file,
1348 mpage->sec, mlink->dsec);
1401 say(mlink->file, "Cannot find NAME section");
1420 say(mlink->file, "No dash in title line, "
2080 dbadd_mlink(const struct mlink *mlink)
2082 dba_page_alias(mlink->mpage->dba, mlink->name, NAME_FILE);
2083 dba_page_add(mlink->mpage->dba, DBP_SECT, mlink->dsec);
2084 dba_page_add(mlink->mpage->dba, DBP_SECT, mlink->fsec);
2085 dba_page_add(mlink->mpage->dba, DBP_ARCH, mlink->arch);
2086 dba_page_add(mlink->mpage->dba, DBP_FILE, mlink->file);
2096 struct mlink *mlink;
2104 mlink = mpage->mlinks;
2115 while (NULL != mlink) {
2116 fputs(mlink->name, stdout);
2117 if (NULL == mlink->next ||
2118 strcmp(mlink->dsec, mlink->next->dsec) ||
2119 strcmp(mlink->fsec, mlink->next->fsec) ||
2120 strcmp(mlink->arch, mlink->next->arch)) {
2122 if ('\0' == *mlink->dsec)
2123 fputs(mlink->fsec, stdout);
2125 fputs(mlink->dsec, stdout);
2126 if ('\0' != *mlink->arch)
2127 printf("/%s", mlink->arch);
2130 mlink = mlink->next;
2131 if (NULL != mlink)
2139 say(mlink->file, "Adding to database");
2145 *mpage->arch == '\0' ? mlink->arch : mpage->arch,
2146 cp, mlink->file, mpage->form);
2151 while (mlink != NULL) {
2152 dbadd_mlink(mlink);
2153 mlink = mlink->next;