169 lines
5.5 KiB
Plaintext
169 lines
5.5 KiB
Plaintext
--- include/manconfig.h.in
|
|
+++ include/manconfig.h.in 2008-04-21 13:32:56.000000000 +0200
|
|
@@ -375,8 +375,10 @@ extern char *program_name; /* the basena
|
|
#define NOT_FOUND 16 /* No action was taken */
|
|
|
|
/* System or user catpaths? Allow bitwise disjunctions of these. */
|
|
-#define SYSTEM_CAT 1
|
|
-#define USER_CAT 2
|
|
+#define SYSTEM_CATP 1
|
|
+#define USER_CATP 2
|
|
+#define FILE_CATP 4
|
|
+#define WHATIS_CATP 8
|
|
|
|
/* string macros */
|
|
#define STREQ(a,b) (strcmp(a,b) == 0)
|
|
--- src/catman.c
|
|
+++ src/catman.c 2008-01-30 12:02:21.000000000 +0100
|
|
@@ -450,7 +450,7 @@ int main (int argc, char *argv[])
|
|
char *catpath;
|
|
size_t len;
|
|
|
|
- catpath = get_catpath (*mp, SYSTEM_CAT | USER_CAT);
|
|
+ catpath = get_catpath (*mp, SYSTEM_CATP|USER_CATP);
|
|
|
|
if (catpath) {
|
|
if (is_directory (catpath) != 1) {
|
|
--- src/man.c
|
|
+++ src/man.c 2008-04-21 17:53:02.000000000 +0200
|
|
@@ -1249,8 +1304,7 @@ static pipeline *make_roff_command (cons
|
|
#ifdef ALT_EXT_FORMAT
|
|
/* Check both external formatter locations */
|
|
if (dir && !recode) {
|
|
- char *catpath = get_catpath
|
|
- (dir, global_manpath ? SYSTEM_CAT : USER_CAT);
|
|
+ char *catpath = get_catpath (dir, global_manpath ? SYSTEM_CATP : USER_CATP);
|
|
|
|
/* If we have an alternate catpath */
|
|
if (catpath) {
|
|
@@ -2366,8 +2450,7 @@ static char *find_cat_file (const char *
|
|
*/
|
|
if (!STREQ (man_file, original)) {
|
|
global_manpath = is_global_mandir (man_file);
|
|
- cat_path = get_catpath
|
|
- (man_file, global_manpath ? SYSTEM_CAT : USER_CAT);
|
|
+ cat_path = get_catpath (man_file, (global_manpath ? SYSTEM_CATP : USER_CATP)|FILE_CATP);
|
|
|
|
if (cat_path) {
|
|
cat_file = convert_name (cat_path, 0);
|
|
@@ -2394,8 +2477,7 @@ static char *find_cat_file (const char *
|
|
}
|
|
|
|
global_manpath = is_global_mandir (original);
|
|
- cat_path = get_catpath
|
|
- (original, global_manpath ? SYSTEM_CAT : USER_CAT);
|
|
+ cat_path = get_catpath (original, (global_manpath ? SYSTEM_CATP : USER_CATP)|FILE_CATP);
|
|
|
|
if (cat_path) {
|
|
cat_file = convert_name (cat_path, 0);
|
|
@@ -2884,9 +2966,7 @@ static int display_database (struct cand
|
|
|
|
if (access (file, R_OK) != 0) {
|
|
char *catpath;
|
|
- catpath = get_catpath (candp->path,
|
|
- global_manpath ? SYSTEM_CAT
|
|
- : USER_CAT);
|
|
+ catpath = get_catpath (candp->path, global_manpath ? SYSTEM_CATP : USER_CATP);
|
|
|
|
if (catpath && strcmp (catpath, candp->path) != 0) {
|
|
file = make_filename (catpath, name,
|
|
@@ -3001,7 +3081,7 @@ static int try_db (const char *manpath,
|
|
|
|
/* find out where our db for this manpath should be */
|
|
|
|
- catpath = get_catpath (manpath, global_manpath ? SYSTEM_CAT : USER_CAT);
|
|
+ catpath = get_catpath (manpath, (global_manpath ? SYSTEM_CATP : USER_CATP)|FILE_CATP);
|
|
if (catpath) {
|
|
database = mkdbname (catpath);
|
|
free (catpath);
|
|
--- src/mandb.c
|
|
+++ src/mandb.c 2008-01-30 12:01:40.000000000 +0100
|
|
@@ -484,10 +486,13 @@ static short process_manpath (const char
|
|
short amount = 0;
|
|
|
|
if (global_manpath) { /* system db */
|
|
- catpath = get_catpath (manpath, SYSTEM_CAT);
|
|
- assert (catpath);
|
|
+ catpath = get_catpath (manpath, SYSTEM_CATP);
|
|
+ if (!catpath) {
|
|
+ error (0, 0, _("warning: no system cat path for man path %s"), manpath);
|
|
+ return amount;
|
|
+ }
|
|
} else { /* user db */
|
|
- catpath = get_catpath (manpath, USER_CAT);
|
|
+ catpath = get_catpath (manpath, USER_CATP);
|
|
if (!catpath)
|
|
catpath = xstrdup (manpath);
|
|
}
|
|
--- src/manp.c
|
|
+++ src/manp.c 2008-01-30 12:01:03.000000000 +0100
|
|
@@ -1134,8 +1145,8 @@ char *get_catpath (const char *name, int
|
|
struct list *list;
|
|
|
|
for (list = namestore; list; list = list->next)
|
|
- if (((cattype & SYSTEM_CAT) && list->flag == MANDB_MAP) ||
|
|
- ((cattype & USER_CAT) && list->flag == MANDB_MAP_USER)) {
|
|
+ if (((cattype & SYSTEM_CATP) && list->flag == MANDB_MAP) ||
|
|
+ ((cattype & USER_CATP) && list->flag == MANDB_MAP_USER)) {
|
|
size_t manlen = strlen (list->key);
|
|
if (STRNEQ (name, list->key, manlen)) {
|
|
const char *suffix = name + manlen;
|
|
@@ -1143,16 +1154,30 @@ char *get_catpath (const char *name, int
|
|
|
|
if (*suffix == '/') {
|
|
++suffix;
|
|
- catpath = appendstr (catpath, "/",
|
|
- NULL);
|
|
+ catpath = appendstr (catpath, "/", NULL);
|
|
}
|
|
if (STRNEQ (suffix, "man", 3)) {
|
|
suffix += 3;
|
|
- catpath = appendstr (catpath, "cat",
|
|
- NULL);
|
|
+ catpath = appendstr (catpath, "cat", NULL);
|
|
}
|
|
catpath = appendstr (catpath, suffix, NULL);
|
|
- return catpath;
|
|
+ if (cattype & FILE_CATP)
|
|
+ return catpath;
|
|
+ if (is_directory (catpath) == 1)
|
|
+ return catpath;
|
|
+ if ((cattype & WHATIS_CATP) == 0) {
|
|
+ const char locale_delims[] = "_@,.";
|
|
+ const char *delim;
|
|
+ for (delim = locale_delims; *delim != '\0'; ++delim) {
|
|
+ char * tmp = strrchr (catpath, *delim);
|
|
+ if (!tmp)
|
|
+ continue;
|
|
+ *tmp = '\0';
|
|
+ if (is_directory (catpath) == 1)
|
|
+ return catpath;
|
|
+ }
|
|
+ }
|
|
+ free (catpath);
|
|
}
|
|
}
|
|
|
|
--- src/whatis.c
|
|
+++ src/whatis.c 2008-04-21 13:21:57.000000000 +0200
|
|
@@ -651,7 +651,7 @@ static int search (char *page)
|
|
debug ("lower(%s) = \"%s\"\n", page, lowpage);
|
|
|
|
for (mp = manpathlist; *mp; mp++) {
|
|
- catpath = get_catpath (*mp, SYSTEM_CAT | USER_CAT);
|
|
+ catpath = get_catpath (*mp, SYSTEM_CATP|USER_CATP|WHATIS_CATP);
|
|
|
|
if (catpath) {
|
|
database = mkdbname (catpath);
|
|
--- src/straycats.c
|
|
+++ src/straycats.c 2008-04-21 15:47:04.000000000 +0200
|
|
@@ -338,7 +343,7 @@ int straycats (const char *manpath)
|
|
return 0;
|
|
}
|
|
|
|
- catpath = get_catpath (manpath, SYSTEM_CAT | USER_CAT);
|
|
+ catpath = get_catpath (manpath, SYSTEM_CATP|USER_CATP);
|
|
|
|
/* look in the usual catpath location */
|
|
mandir = xstrdup (manpath);
|