File man-db-2.5.2-fhs.dif of Package man

--- manual/files.me
+++ manual/files.me	2009-01-15 01:02:11.000000000 +0100
@@ -135,9 +135,11 @@ manpath.
 However, if the element is not mentioned in the config file, a man directory
 relative to it will be sought.
 The subdirectories
-.i ../man
+.i ../man ,
+.i man ,
+.i ../share/man ,
 or
-.i man
+.i share/man
 relative to the path component are appended to the internal manpath if they
 exist.
 Finally, the internal manpath is stripped of duplicate paths before
--- src/manp.c
+++ src/manp.c	2009-01-15 01:02:11.000000000 +0100
@@ -58,6 +58,7 @@
 #include <unistd.h>
 
 #include "xgetcwd.h"
+#include "xvasprintf.h"
 
 #include "gettext.h"
 #define _(String) gettext (String)
@@ -886,7 +887,8 @@ static char *def_path (int flag)
  * directories listed in the man_db.config file.  If so, and it is
  * not already in the manpath, add it.  If the directory is not listed
  * in the man_db.config file, see if there is a subdirectory `../man' or
- * `man'.  If so, and it is not already in the manpath, add it.
+ * `man', or, for FHS-compliance, `../share/man' or `share/man'.  If so,
+ * and it is not already in the manpath, add it.
  * Example:  user has $HOME/bin in his path and the directory
  * $HOME/man exists -- the directory $HOME/man will be added
  * to the manpath.
@@ -941,13 +943,15 @@ static inline char *get_manpath_from_pat
 
 		 	t = has_mandir (p);
 		 	if (t) {
-				debug ("but does have a ../man or man "
+				debug ("but does have a ../man, man, "
+				       "../share/man, or share/man "
 				       "subdirectory\n");
 	
 				add_dir_to_list (tmplist, t);
 				free (t);
 		 	} else
-				debug ("and doesn't have ../man or man "
+				debug ("and doesn't have ../man, man, "
+				       "../share/man, or share/man "
 				       "subdirectories\n");
 		}
 	}
@@ -1022,34 +1026,41 @@ static void add_dir_to_list (char **lp,
 	}
 }
 
-/* path does not exist in config file: check to see if path/../man or 
-   path/man exist.  If so return it, if not return NULL. */
+/* path does not exist in config file: check to see if path/../man,
+   path/man, path/../share/man, or path/share/man exist.  If so return
+   it, if not return NULL. */
 static inline char *has_mandir (const char *path)
 {
-	char *newpath = NULL;
+	char *newpath;
 
 	/* don't assume anything about path, especially that it ends in 
 	   "bin" or even has a '/' in it! */
 	   
 	char *subdir = strrchr (path, '/');
 	if (subdir) {
-		const int prefix_len = subdir + 1 - path;
-		newpath = xmalloc (prefix_len + sizeof ("man") + 1);
-		strncpy (newpath, path, prefix_len);
-		strcpy (newpath + prefix_len, "man");
-
+		newpath = xasprintf ("%.*s/man", subdir - path, path);
 		if (is_directory (newpath) == 1)
 			return newpath;
-		else
-			*newpath = '\0';
+		free (newpath);
 	}
 
-	newpath = appendstr (newpath, path, "/man", NULL);
-
+	newpath = appendstr (NULL, path, "/man", NULL);
 	if (is_directory (newpath) == 1)
 		return newpath;
+	free (newpath);
+
+	if (subdir) {
+		newpath = xasprintf ("%.*s/share/man", subdir - path, path);
+		if (is_directory (newpath) == 1)
+			return newpath;
+		free (newpath);
+	}
 
+	newpath = appendstr (NULL, path, "/share/man", NULL);
+	if (is_directory (newpath) == 1)
+		return newpath;
 	free (newpath);
+
 	return NULL;
 }
 
openSUSE Build Service is sponsored by