diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-12-16 08:04:34 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-12-16 08:04:34 +0000 |
commit | a4ad6737e73b3efeb9ad854f1f4323ba3a43833a (patch) | |
tree | 024f1b91a781fbf3ba689ac1d0ae528e65c00097 /cgi.c | |
parent | c113fd6c3073c8d1f7404224cd333c09ae37bfa3 (diff) | |
download | mandoc-a4ad6737e73b3efeb9ad854f1f4323ba3a43833a.tar.gz |
Make paths in the mandocdb(8) index relative to the databases' path
prefix. This means that an index in, say, /usr/share/man will point to
man1/foo.1 instead of /usr/share/man/man1/foo.1. Not only does this
save a lot of space, it also allows manual trees to be moved around
without any side effects to the mandocdb(8) databases.
Diffstat (limited to 'cgi.c')
-rw-r--r-- | cgi.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -749,6 +749,7 @@ static void pg_show(const struct req *req, char *path) { struct manpaths ps; + size_t sz; char *sub; char file[MAXPATHLEN]; const char *fn, *cp; @@ -804,7 +805,8 @@ pg_show(const struct req *req, char *path) goto out; } - strlcpy(file, ps.paths[vol], MAXPATHLEN); + sz = strlcpy(file, ps.paths[vol], MAXPATHLEN); + assert(sz < MAXPATHLEN); strlcat(file, "/mandoc.index", MAXPATHLEN); /* Open the index recno(3) database. */ @@ -833,10 +835,13 @@ pg_show(const struct req *req, char *path) else if (NULL == memchr(fn, '\0', val.size - (fn - cp))) resp_baddb(); else { + file[(int)sz] = '\0'; + strlcat(file, "/", MAXPATHLEN); + strlcat(file, fn, MAXPATHLEN); if (0 == strcmp(cp, "cat")) - catman(req, fn + 1); + catman(req, file); else - format(req, fn + 1); + format(req, file); } out: if (idx) |