summaryrefslogtreecommitdiffstats
path: root/usr.bin/catman/catman.c
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2002-10-29 09:20:22 +0000
committerobrien <obrien@FreeBSD.org>2002-10-29 09:20:22 +0000
commitaeda7a26a201cfbaa0cbeebdeb480f6c481e6234 (patch)
treeda71c233b7bce6199f245a7b96df412105849bb9 /usr.bin/catman/catman.c
parent3c0cce1566ddddc39231b13243ee109bfa4723c3 (diff)
downloadFreeBSD-src-aeda7a26a201cfbaa0cbeebdeb480f6c481e6234.zip
FreeBSD-src-aeda7a26a201cfbaa0cbeebdeb480f6c481e6234.tar.gz
Mostly support alternate manpage zipping.
Diffstat (limited to 'usr.bin/catman/catman.c')
-rw-r--r--usr.bin/catman/catman.c51
1 files changed, 35 insertions, 16 deletions
diff --git a/usr.bin/catman/catman.c b/usr.bin/catman/catman.c
index ff53666..66d9d7a 100644
--- a/usr.bin/catman/catman.c
+++ b/usr.bin/catman/catman.c
@@ -81,6 +81,14 @@ static const char *locale_device[] = {
NULL
};
+#define BZ2_CMD "bzip2"
+#define BZ2_EXT ".bz2"
+#define BZ2CAT_CMD "bz"
+#define GZ_CMD "gzip -n"
+#define GZ_EXT ".gz"
+#define GZCAT_CMD "z"
+enum Ziptype {NONE, BZIP, GZIP};
+
static uid_t uid;
static gid_t gids[NGROUPS_MAX];
static int ngids;
@@ -237,10 +245,17 @@ is_manpage_name(char *name)
}
static int
+is_bzipped(char *name)
+{
+ int len = strlen(name);
+ return len >= 5 && strcmp(&name[len - 4], BZ2_EXT) == 0;
+}
+
+static int
is_gzipped(char *name)
{
int len = strlen(name);
- return len >= 4 && strcmp(&name[len - 3], ".gz") == 0;
+ return len >= 4 && strcmp(&name[len - 3], GZ_EXT) == 0;
}
/*
@@ -394,7 +409,7 @@ make_writable_dir(char *mandir, char *dir)
* the preformatted cat page.
*/
static void
-process_page(char *mandir, char *src, char *cat, int src_gzipped)
+process_page(char *mandir, char *src, char *cat, enum Ziptype zipped)
{
int src_test, cat_test;
time_t src_mtime, cat_mtime;
@@ -446,8 +461,9 @@ process_page(char *mandir, char *src, char *cat, int src_gzipped)
}
snprintf(tmp_file, sizeof tmp_file, "%s.tmp", cat);
snprintf(cmd, sizeof cmd,
- "%scat %s | tbl | nroff -T%s -man | col | gzip -cn > %s.tmp",
- src_gzipped ? "z" : "", src, nroff_device, cat);
+ "%scat %s | tbl | nroff -T%s -man | col | %s -c > %s.tmp",
+ zipped == BZIP ? BZ2CAT_CMD : zipped == GZIP ? GZCAT_CMD : "",
+ src, nroff_device, zipped == GZIP ? GZ_CMD : BZ2_CMD, cat);
if (system(cmd) != 0)
err(1, "formatting pipeline");
if (rename(tmp_file, cat) < 0)
@@ -467,10 +483,11 @@ scan_section(char *mandir, char *section, char *cat_section)
int npages;
int nexpected = 0;
int i, e;
+ enum Ziptype zipped;
char *page_name;
char page_path[MAXPATHLEN];
char cat_path[MAXPATHLEN];
- char gzip_path[MAXPATHLEN];
+ char zip_path[MAXPATHLEN];
/*
* scan the man section directory for pages
@@ -499,36 +516,38 @@ scan_section(char *mandir, char *section, char *cat_section)
}
continue;
}
- if (is_gzipped(page_name)) {
+ zipped = is_bzipped(page_name) ? BZIP :
+ is_gzipped(page_name) ? GZIP : NONE;
+ if (zipped != NONE) {
snprintf(cat_path, sizeof cat_path, "%s/%s",
cat_section, page_name);
if (expected != NULL)
expected[nexpected++] = strdup(page_name);
- process_page(mandir, page_path, cat_path, 1);
+ process_page(mandir, page_path, cat_path, zipped);
} else {
/*
* We've got an uncompressed man page,
* check to see if there's a (preferred)
* compressed one.
*/
- snprintf(gzip_path, sizeof gzip_path, "%s.gz",
- page_path);
- if (test_path(gzip_path, NULL) != 0) {
+ snprintf(zip_path, sizeof zip_path, "%s%s",
+ page_path, GZ_EXT);
+ if (test_path(zip_path, NULL) != 0) {
junk(mandir, page_path,
- "man page unused due to existing .gz");
+ "man page unused due to existing " GZ_EXT);
} else {
if (verbose) {
fprintf(stderr,
"warning, %s is uncompressed\n",
page_path);
}
- snprintf(cat_path, sizeof cat_path, "%s/%s.gz",
- cat_section, page_name);
+ snprintf(cat_path, sizeof cat_path, "%s/%s%s",
+ cat_section, page_name, GZ_EXT);
if (expected != NULL) {
asprintf(&expected[nexpected++],
- "%s.gz", page_name);
+ "%s%s", page_name, GZ_EXT);
}
- process_page(mandir, page_path, cat_path, 0);
+ process_page(mandir, page_path, cat_path, NONE);
}
}
}
@@ -562,7 +581,7 @@ scan_section(char *mandir, char *section, char *cat_section)
} else if (!is_gzipped(page_name) && e + 1 < nexpected &&
strncmp(page_name, expected[e + 1], strlen(page_name)) == 0 &&
strlen(expected[e + 1]) == strlen(page_name) + 3) {
- junk_reason = "cat page unused due to existing .gz";
+ junk_reason = "cat page unused due to existing " GZ_EXT;
} else
junk_reason = "cat page without man page";
snprintf(cat_path, sizeof cat_path, "%s/%s", cat_section,
OpenPOWER on IntegriCloud