003 File Manager
Current Path:
/usr/src/contrib/mandoc
usr
/
src
/
contrib
/
mandoc
/
📁
..
📄
INSTALL
(6.86 KB)
📄
LICENSE
(2.46 KB)
📄
Makefile
(15.29 KB)
📄
Makefile.depend
(5.65 KB)
📄
NEWS
(60.04 KB)
📄
TODO
(23.98 KB)
📄
apropos.1
(10.66 KB)
📄
arch.c
(1.94 KB)
📄
att.c
(1.62 KB)
📄
catman.8
(4.49 KB)
📄
catman.c
(5.52 KB)
📄
cgi.c
(27.06 KB)
📄
cgi.h.example
(220 B)
📄
chars.c
(13.24 KB)
📄
compat_err.c
(2.68 KB)
📄
compat_fts.c
(17.42 KB)
📄
compat_fts.h
(4.09 KB)
📄
compat_getline.c
(1.59 KB)
📄
compat_getsubopt.c
(2.89 KB)
📄
compat_isblank.c
(986 B)
📄
compat_mkdtemp.c
(1.59 KB)
📄
compat_ohash.c
(6.82 KB)
📄
compat_ohash.h
(2.63 KB)
📄
compat_progname.c
(1.05 KB)
📄
compat_reallocarray.c
(1.49 KB)
📄
compat_recallocarray.c
(2.88 KB)
📄
compat_strcasestr.c
(2.38 KB)
📄
compat_stringlist.c
(2.71 KB)
📄
compat_stringlist.h
(1.73 KB)
📄
compat_strlcat.c
(1.71 KB)
📄
compat_strlcpy.c
(1.59 KB)
📄
compat_strndup.c
(1.3 KB)
📄
compat_strsep.c
(2.55 KB)
📄
compat_strtonum.c
(1.88 KB)
📄
compat_vasprintf.c
(1.55 KB)
📄
config.h
(1.33 KB)
📄
configure
(17.5 KB)
📄
configure.local.example
(11.37 KB)
📄
dba.c
(13.02 KB)
📄
dba.h
(1.73 KB)
📄
dba_array.c
(4.23 KB)
📄
dba_array.h
(2 KB)
📄
dba_read.c
(2.33 KB)
📄
dba_write.c
(2.42 KB)
📄
dba_write.h
(1.23 KB)
📄
dbm.c
(9.28 KB)
📄
dbm.h
(1.94 KB)
📄
dbm_map.c
(4.67 KB)
📄
dbm_map.h
(1.2 KB)
📄
demandoc.1
(2.64 KB)
📄
demandoc.c
(5.21 KB)
📄
eqn.7
(12.07 KB)
📄
eqn.c
(27.21 KB)
📄
eqn.h
(2.19 KB)
📄
eqn_html.c
(5.91 KB)
📄
eqn_parse.h
(1.96 KB)
📄
eqn_term.c
(4.83 KB)
📄
gmdiff
(1.74 KB)
📄
html.c
(19.34 KB)
📄
html.h
(3.86 KB)
📄
lib.c
(1.07 KB)
📄
lib.in
(8.96 KB)
📄
libman.h
(1.66 KB)
📄
libmandoc.h
(3.21 KB)
📄
libmdoc.h
(2.97 KB)
📄
main.c
(28.93 KB)
📄
main.h
(2.06 KB)
📄
makewhatis.8
(4.78 KB)
📄
man-cgi.css
(464 B)
📄
man.1
(9.33 KB)
📄
man.7
(16.8 KB)
📄
man.c
(8.62 KB)
📄
man.cgi.3
(7.83 KB)
📄
man.cgi.8
(11.02 KB)
📄
man.conf.5
(3.92 KB)
📄
man.h
(991 B)
📄
man.options.1
(21.05 KB)
📄
man_html.c
(13.39 KB)
📄
man_macro.c
(11.4 KB)
📄
man_term.c
(25.6 KB)
📄
man_validate.c
(11.84 KB)
📄
manconf.h
(1.56 KB)
📄
mandoc.1
(54.89 KB)
📄
mandoc.3
(12.5 KB)
📄
mandoc.c
(12.41 KB)
📄
mandoc.css
(8.63 KB)
📄
mandoc.db.5
(5.74 KB)
📄
mandoc.h
(14.92 KB)
📄
mandoc_aux.c
(2.42 KB)
📄
mandoc_aux.h
(1.31 KB)
📄
mandoc_char.7
(29.23 KB)
📄
mandoc_escape.3
(9.33 KB)
📄
mandoc_headers.3
(12.41 KB)
📄
mandoc_html.3
(7.42 KB)
📄
mandoc_malloc.3
(4.46 KB)
📄
mandoc_msg.c
(8.92 KB)
📄
mandoc_ohash.c
(1.58 KB)
📄
mandoc_ohash.h
(1004 B)
📄
mandoc_parse.h
(1.82 KB)
📄
mandoc_xr.c
(2.75 KB)
📄
mandoc_xr.h
(1.17 KB)
📄
mandocd.8
(4.59 KB)
📄
mandocd.c
(5.98 KB)
📄
mandocdb.c
(55.16 KB)
📄
manpath.c
(7.73 KB)
📄
manpath.h
(1.22 KB)
📄
mansearch.3
(3.26 KB)
📄
mansearch.c
(18.99 KB)
📄
mansearch.h
(4.03 KB)
📄
mchars_alloc.3
(5.24 KB)
📄
mdoc.7
(73.34 KB)
📄
mdoc.c
(9.99 KB)
📄
mdoc.h
(3.96 KB)
📄
mdoc_argv.c
(16.19 KB)
📄
mdoc_html.c
(36.48 KB)
📄
mdoc_macro.c
(39.55 KB)
📄
mdoc_man.c
(37.07 KB)
📄
mdoc_markdown.c
(33.41 KB)
📄
mdoc_state.c
(5.24 KB)
📄
mdoc_term.c
(43.69 KB)
📄
mdoc_validate.c
(61.85 KB)
📄
msec.c
(1.09 KB)
📄
msec.in
(1.48 KB)
📄
out.c
(13.61 KB)
📄
out.h
(2.26 KB)
📄
preconv.c
(3.84 KB)
📄
predefs.in
(2.05 KB)
📄
read.c
(16.44 KB)
📄
roff.7
(61.96 KB)
📄
roff.c
(98.93 KB)
📄
roff.h
(8.85 KB)
📄
roff_html.c
(2.92 KB)
📄
roff_int.h
(4.08 KB)
📄
roff_term.c
(5.36 KB)
📄
roff_validate.c
(3.41 KB)
📄
soelim.1
(2.6 KB)
📄
soelim.c
(3.76 KB)
📄
st.c
(4.33 KB)
📄
tag.c
(6.65 KB)
📄
tag.h
(1.09 KB)
📄
tbl.3
(6.9 KB)
📄
tbl.7
(10.91 KB)
📄
tbl.c
(3.89 KB)
📄
tbl.h
(4.43 KB)
📄
tbl_data.c
(7.3 KB)
📄
tbl_html.c
(5.74 KB)
📄
tbl_int.h
(2.09 KB)
📄
tbl_layout.c
(8.06 KB)
📄
tbl_opts.c
(3.77 KB)
📄
tbl_parse.h
(1.31 KB)
📄
tbl_term.c
(24.42 KB)
📄
term.c
(24.4 KB)
📄
term.h
(6.14 KB)
📄
term_ascii.c
(9.88 KB)
📄
term_ps.c
(27.41 KB)
📄
term_tab.c
(3 KB)
📄
test-EFTYPE.c
(56 B)
📄
test-O_DIRECTORY.c
(88 B)
📄
test-PATH_MAX.c
(1.02 KB)
📄
test-be32toh.c
(147 B)
📄
test-cmsg.c
(174 B)
📄
test-dirent-namlen.c
(124 B)
📄
test-err.c
(994 B)
📄
test-fgetln.c
(147 B)
📄
test-fts.c
(964 B)
📄
test-getline.c
(186 B)
📄
test-getsubopt.c
(1.31 KB)
📄
test-isblank.c
(96 B)
📄
test-mkdtemp.c
(175 B)
📄
test-nanosleep.c
(239 B)
📄
test-noop.c
(30 B)
📄
test-ntohl.c
(91 B)
📄
test-ohash.c
(585 B)
📄
test-pledge.c
(73 B)
📄
test-progname.c
(118 B)
📄
test-reallocarray.c
(75 B)
📄
test-recallocarray.c
(132 B)
📄
test-recvmsg.c
(100 B)
📄
test-rewb-bsd.c
(618 B)
📄
test-rewb-sysv.c
(610 B)
📄
test-sandbox_init.c
(186 B)
📄
test-strcasestr.c
(131 B)
📄
test-stringlist.c
(1.14 KB)
📄
test-strlcat.c
(166 B)
📄
test-strlcpy.c
(148 B)
📄
test-strndup.c
(141 B)
📄
test-strptime.c
(212 B)
📄
test-strsep.c
(183 B)
📄
test-strtonum.c
(1.25 KB)
📄
test-vasprintf.c
(1.25 KB)
📄
test-wchar.c
(1.58 KB)
📄
tree.c
(8.17 KB)
Editing: tag.c
/* $Id: tag.c,v 1.24 2019/07/22 03:21:50 schwarze Exp $ */ /* * Copyright (c) 2015, 2016, 2018, 2019 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "config.h" #include <sys/types.h> #include <errno.h> #include <limits.h> #include <signal.h> #include <stddef.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "mandoc_aux.h" #include "mandoc_ohash.h" #include "mandoc.h" #include "tag.h" struct tag_entry { size_t *lines; size_t maxlines; size_t nlines; int prio; char s[]; }; static void tag_signal(int) __attribute__((__noreturn__)); static struct ohash tag_data; static struct tag_files tag_files; /* * Prepare for using a pager. * Not all pagers are capable of using a tag file, * but for simplicity, create it anyway. */ struct tag_files * tag_init(void) { struct sigaction sa; int ofd; ofd = -1; tag_files.tfd = -1; tag_files.tcpgid = -1; /* Clean up when dying from a signal. */ memset(&sa, 0, sizeof(sa)); sigfillset(&sa.sa_mask); sa.sa_handler = tag_signal; sigaction(SIGHUP, &sa, NULL); sigaction(SIGINT, &sa, NULL); sigaction(SIGTERM, &sa, NULL); /* * POSIX requires that a process calling tcsetpgrp(3) * from the background gets a SIGTTOU signal. * In that case, do not stop. */ sa.sa_handler = SIG_IGN; sigaction(SIGTTOU, &sa, NULL); /* Save the original standard output for use by the pager. */ if ((tag_files.ofd = dup(STDOUT_FILENO)) == -1) { mandoc_msg(MANDOCERR_DUP, 0, 0, "%s", strerror(errno)); goto fail; } /* Create both temporary output files. */ (void)strlcpy(tag_files.ofn, "/tmp/man.XXXXXXXXXX", sizeof(tag_files.ofn)); (void)strlcpy(tag_files.tfn, "/tmp/man.XXXXXXXXXX", sizeof(tag_files.tfn)); if ((ofd = mkstemp(tag_files.ofn)) == -1) { mandoc_msg(MANDOCERR_MKSTEMP, 0, 0, "%s: %s", tag_files.ofn, strerror(errno)); goto fail; } if ((tag_files.tfd = mkstemp(tag_files.tfn)) == -1) { mandoc_msg(MANDOCERR_MKSTEMP, 0, 0, "%s: %s", tag_files.tfn, strerror(errno)); goto fail; } if (dup2(ofd, STDOUT_FILENO) == -1) { mandoc_msg(MANDOCERR_DUP, 0, 0, "%s", strerror(errno)); goto fail; } close(ofd); /* * Set up the ohash table to collect output line numbers * where various marked-up terms are documented. */ mandoc_ohash_init(&tag_data, 4, offsetof(struct tag_entry, s)); return &tag_files; fail: tag_unlink(); if (ofd != -1) close(ofd); if (tag_files.ofd != -1) close(tag_files.ofd); if (tag_files.tfd != -1) close(tag_files.tfd); *tag_files.ofn = '\0'; *tag_files.tfn = '\0'; tag_files.ofd = -1; tag_files.tfd = -1; return NULL; } /* * Set the line number where a term is defined, * unless it is already defined at a lower priority. */ void tag_put(const char *s, int prio, size_t line) { struct tag_entry *entry; const char *se; size_t len; unsigned int slot; if (tag_files.tfd <= 0) return; if (s[0] == '\\' && (s[1] == '&' || s[1] == 'e')) s += 2; /* * Skip whitespace and escapes and whatever follows, * and if there is any, downgrade the priority. */ len = strcspn(s, " \t\\"); if (len == 0) return; se = s + len; if (*se != '\0') prio = INT_MAX; slot = ohash_qlookupi(&tag_data, s, &se); entry = ohash_find(&tag_data, slot); if (entry == NULL) { /* Build a new entry. */ entry = mandoc_malloc(sizeof(*entry) + len + 1); memcpy(entry->s, s, len); entry->s[len] = '\0'; entry->lines = NULL; entry->maxlines = entry->nlines = 0; ohash_insert(&tag_data, slot, entry); } else { /* * Lower priority numbers take precedence, * but 0 is special. * A tag with priority 0 is only used * if the tag occurs exactly once. */ if (prio == 0) { if (entry->prio == 0) entry->prio = -1; return; } /* A better entry is already present, ignore the new one. */ if (entry->prio > 0 && entry->prio < prio) return; /* The existing entry is worse, clear it. */ if (entry->prio < 1 || entry->prio > prio) entry->nlines = 0; } /* Remember the new line. */ if (entry->maxlines == entry->nlines) { entry->maxlines += 4; entry->lines = mandoc_reallocarray(entry->lines, entry->maxlines, sizeof(*entry->lines)); } entry->lines[entry->nlines++] = line; entry->prio = prio; } /* * Write out the tags file using the previously collected * information and clear the ohash table while going along. */ void tag_write(void) { FILE *stream; struct tag_entry *entry; size_t i; unsigned int slot; int empty; if (tag_files.tfd <= 0) return; if (tag_files.tagname != NULL && ohash_find(&tag_data, ohash_qlookup(&tag_data, tag_files.tagname)) == NULL) { mandoc_msg(MANDOCERR_TAG, 0, 0, "%s", tag_files.tagname); tag_files.tagname = NULL; } if ((stream = fdopen(tag_files.tfd, "w")) == NULL) mandoc_msg(MANDOCERR_FDOPEN, 0, 0, "%s", strerror(errno)); empty = 1; entry = ohash_first(&tag_data, &slot); while (entry != NULL) { if (stream != NULL && entry->prio >= 0) { for (i = 0; i < entry->nlines; i++) { fprintf(stream, "%s %s %zu\n", entry->s, tag_files.ofn, entry->lines[i]); empty = 0; } } free(entry->lines); free(entry); entry = ohash_next(&tag_data, &slot); } ohash_delete(&tag_data); if (stream != NULL) fclose(stream); else close(tag_files.tfd); tag_files.tfd = -1; if (empty) { unlink(tag_files.tfn); *tag_files.tfn = '\0'; } } void tag_unlink(void) { pid_t tc_pgid; if (tag_files.tcpgid != -1) { tc_pgid = tcgetpgrp(tag_files.ofd); if (tc_pgid == tag_files.pager_pid || tc_pgid == getpgid(0) || getpgid(tc_pgid) == -1) (void)tcsetpgrp(tag_files.ofd, tag_files.tcpgid); } if (*tag_files.ofn != '\0') unlink(tag_files.ofn); if (*tag_files.tfn != '\0') unlink(tag_files.tfn); } static void tag_signal(int signum) { struct sigaction sa; tag_unlink(); memset(&sa, 0, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_handler = SIG_DFL; sigaction(signum, &sa, NULL); kill(getpid(), signum); /* NOTREACHED */ _exit(1); }
Upload File
Create Folder