From bf0c0a0211a1334055b107ae21dfca3a0fea2311612f8e010837e8cd1c1d9f1c Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Thu, 28 May 2015 13:24:43 +0000 Subject: [PATCH] . OBS-URL: https://build.opensuse.org/package/show/Base:System/man?expand=0&rev=60 --- man-db-2.6.5-firefox.dif | 40 -- man-db-2.6.6.tar.xz | 3 - man-db-2.7.1-firefox.dif | 47 ++ ...ecurity4.dif => man-db-2.7.1-security4.dif | 35 +- man-db-2.6.5-zio.dif => man-db-2.7.1-zio.dif | 117 ++-- man-db-2.6.5.dif => man-db-2.7.1.dif | 572 ++++++++---------- man-db-2.7.1.tar.xz | 3 + man.changes | 56 ++ man.spec | 53 +- 9 files changed, 465 insertions(+), 461 deletions(-) delete mode 100644 man-db-2.6.5-firefox.dif delete mode 100644 man-db-2.6.6.tar.xz create mode 100644 man-db-2.7.1-firefox.dif rename man-db-2.6.5-security4.dif => man-db-2.7.1-security4.dif (51%) rename man-db-2.6.5-zio.dif => man-db-2.7.1-zio.dif (54%) rename man-db-2.6.5.dif => man-db-2.7.1.dif (81%) create mode 100644 man-db-2.7.1.tar.xz diff --git a/man-db-2.6.5-firefox.dif b/man-db-2.6.5-firefox.dif deleted file mode 100644 index 2b7c7d7..0000000 --- a/man-db-2.6.5-firefox.dif +++ /dev/null @@ -1,40 +0,0 @@ ---- - src/man.c | 10 ++++++---- - 1 file changed, 6 insertions(+), 4 deletions(-) - -diff --git src/man.c src/man.c -index 10bcd4f..5c164ad 100644 ---- src/man.c -+++ src/man.c -@@ -2316,22 +2316,24 @@ static void format_display (pipeline *decomp, - if (!status) - break; - } -- if (!candidate) -- error (CHILD_FAIL, 0, -- "couldn't execute any browser from %s", -- html_pager); - free (browser_list); - if (chdir (old_cwd) == -1) { - error (0, errno, _("can't change to directory %s"), - old_cwd); - chdir ("/"); - } -+ if (!status) -+ sleep(5); /* firefox runs into background to fast */ - if (remove_directory (htmldir, 0) == -1) - error (0, errno, _("can't remove directory %s"), - htmldir); - free (htmlfile); - free (htmldir); - free (old_cwd); -+ if (!candidate) -+ error (CHILD_FAIL, 0, -+ "couldn't execute any browser from %s", -+ html_pager); - } else - #endif /* TROFF_IS_GROFF */ - /* TODO: check format_cmd status too? */ --- -1.8.4.5 - diff --git a/man-db-2.6.6.tar.xz b/man-db-2.6.6.tar.xz deleted file mode 100644 index 2a3b0cb..0000000 --- a/man-db-2.6.6.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7da90f8d8df91e0e682769d50f4bdb905f525b5d0f01e7e5b8cc3c6da45f66c3 -size 1448576 diff --git a/man-db-2.7.1-firefox.dif b/man-db-2.7.1-firefox.dif new file mode 100644 index 0000000..2680368 --- /dev/null +++ b/man-db-2.7.1-firefox.dif @@ -0,0 +1,47 @@ +--- + src/man.c | 22 ++++++++++++---------- + 1 file changed, 12 insertions(+), 10 deletions(-) + +--- src/man.c ++++ src/man.c 2015-05-28 10:54:07.961519305 +0000 +@@ -1847,16 +1847,6 @@ static void format_display (pipeline *de + if (!status) + break; + } +- if (!candidate) { +- if (html_pager && *html_pager) +- error (CHILD_FAIL, 0, +- "couldn't execute any browser from %s", +- html_pager); +- else +- error (CHILD_FAIL, 0, +- "no browser configured, so cannot show " +- "HTML output"); +- } + free (browser_list); + if (have_old_cwd && restore_cwd (&old_cwd) < 0) { + error (0, errno, +@@ -1864,11 +1854,23 @@ static void format_display (pipeline *de + chdir ("/"); + } + free_cwd (&old_cwd); ++ if (!status) ++ sleep(5); /* firefox runs into background to fast */ + if (remove_directory (htmldir, 0) == -1) + error (0, errno, _("can't remove directory %s"), + htmldir); + free (htmlfile); + free (htmldir); ++ if (!candidate) { ++ if (html_pager && *html_pager) ++ error (CHILD_FAIL, 0, ++ "couldn't execute any browser from %s", ++ html_pager); ++ else ++ error (CHILD_FAIL, 0, ++ "no browser configured, so cannot show " ++ "HTML output"); ++ } + } else + #endif /* TROFF_IS_GROFF */ + /* TODO: check format_cmd status too? */ diff --git a/man-db-2.6.5-security4.dif b/man-db-2.7.1-security4.dif similarity index 51% rename from man-db-2.6.5-security4.dif rename to man-db-2.7.1-security4.dif index 3a4a21f..cfb0a3f 100644 --- a/man-db-2.6.5-security4.dif +++ b/man-db-2.7.1-security4.dif @@ -1,11 +1,9 @@ --- - src/mandb.c | 12 ++++++++++++ + src/mandb.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) -diff --git src/mandb.c src/mandb.c -index 86b9e97..5b8c57d 100644 --- src/mandb.c -+++ src/mandb.c ++++ src/mandb.c 2015-05-28 10:43:41.785520616 +0000 @@ -37,6 +37,7 @@ #include #include @@ -14,7 +12,7 @@ index 86b9e97..5b8c57d 100644 #include #include #include -@@ -422,10 +423,19 @@ static int mandb (const char *catpath, const char *manpath) +@@ -446,10 +447,19 @@ static int mandb (const char *catpath, c char *dbname; char *cachedir_tag; struct stat st; @@ -34,22 +32,17 @@ index 86b9e97..5b8c57d 100644 if (!quiet) printf (_("Processing manual pages under %s...\n"), manpath); -@@ -433,6 +443,7 @@ static int mandb (const char *catpath, const char *manpath) - if (stat (cachedir_tag, &st) == -1 && errno == ENOENT) { - FILE *cachedir_tag_file; +@@ -458,11 +468,13 @@ static int mandb (const char *catpath, c + if (stat (cachedir_tag, &st) == -1 && errno == ENOENT) { + FILE *cachedir_tag_file; -+ drop_effective_privs (); - cachedir_tag_file = fopen (cachedir_tag, "w"); - if (cachedir_tag_file) { - fputs ("Signature: 8a477f597d28d172789f06886806bc55\n" -@@ -444,6 +455,7 @@ static int mandb (const char *catpath, const char *manpath) - cachedir_tag_file); - fclose (cachedir_tag_file); ++ drop_effective_privs (); + cachedir_tag_file = fopen (cachedir_tag, "w"); + if (cachedir_tag_file) { + fputs (CACHEDIR_TAG, cachedir_tag_file); + fclose (cachedir_tag_file); + } ++ regain_effective_privs (); } -+ regain_effective_privs (); + free (cachedir_tag); } - free (cachedir_tag); - --- -1.8.4.5 - diff --git a/man-db-2.6.5-zio.dif b/man-db-2.7.1-zio.dif similarity index 54% rename from man-db-2.6.5-zio.dif rename to man-db-2.7.1-zio.dif index 2a09ede..0414476 100644 --- a/man-db-2.6.5-zio.dif +++ b/man-db-2.7.1-zio.dif @@ -1,14 +1,12 @@ --- - config.h.in | 3 +++ - configure.ac | 52 +++++++++++++++++++++++++++++++++++++++++++++ - lib/decompress.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + config.h.in | 3 ++ + configure.ac | 52 ++++++++++++++++++++++++++++++++++++++++++++ + lib/decompress.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+) -diff --git config.h.in config.h.in -index efa85da..9a3fcc9 100644 --- config.h.in -+++ config.h.in -@@ -692,6 +692,9 @@ ++++ config.h.in 2015-05-28 00:00:00.000000000 +0000 +@@ -737,6 +737,9 @@ /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ @@ -18,14 +16,12 @@ index efa85da..9a3fcc9 100644 /* Define to 1 if you have the header file. */ #undef HAVE_LINEWRAP_H -diff --git configure.ac configure.ac -index adde408..2daf4a3 100644 --- configure.ac -+++ configure.ac -@@ -98,6 +98,18 @@ AC_ARG_WITH([sections], - sections="$withval" - fi], - [: ${sections=1 n l 8 3 2 5 4 9 6 7}]) ++++ configure.ac 2015-05-28 11:01:35.689518526 +0000 +@@ -35,6 +35,18 @@ MAN_ARG_DEVICE + MAN_ARG_DB + MAN_ARG_CONFIG_FILE + MAN_ARG_SECTIONS +AC_ARG_WITH([zio], +[AS_HELP_STRING([--with-zio=LIBRARY], [use zlib/libbz2 wrapper library LIBRARY (libzio)])], + [if test -z "$withval" -o "$withval" = "yes" @@ -38,60 +34,58 @@ index adde408..2daf4a3 100644 + zio=$withval + fi], + [: ${zio=no}]) - AC_ARG_ENABLE([automatic-create], - [AS_HELP_STRING([--enable-automatic-create], [allow man to create user databases on the fly])], - [if test "$enableval" = "yes" -@@ -410,6 +422,46 @@ AC_SUBST([unlzma]) + MAN_ARG_AUTOMATIC_CREATE + MAN_ARG_AUTOMATIC_UPDATE + MAN_ARG_CATS +@@ -325,6 +337,46 @@ AC_SUBST([unlzma]) AC_SUBST([unxz]) AC_SUBST([unlzip]) MAN_COMPRESS_LIB([z], [gzopen]) +dnl Check for zlib and libbz2 libraries to use this together -+dnl with SuSE's libzio to open compressed info files. ++dnl with SUSE's libzio to open compressed info files. +dnl +if test "$zio" = "no" || test -n "$zio" +then -+ AC_CHECK_HEADER(zio.h,[ -+ for lib in ${zio#lib} zio -+ do -+ AC_CHECK_LIB($lib, fzopen, [LIBS="-l$lib $LIBS"; am_cv_libzio=yes]) -+ done -+ ]) -+ if test "$am_cv_libzio" = yes; then -+ AC_DEFINE([COMP_SRC],[],[Define if you have compressors and want to support compressed cat files.]) -+ AC_DEFINE([HAVE_ZIO],[],[Define to 1 if you have libzio for opening compressed manuals]) -+ AC_CHECK_HEADER(zlib.h,[ -+ for lib in z gz -+ do -+ AC_CHECK_LIB($lib, gzopen, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break]) -+ done -+ ]) -+ AC_CHECK_HEADER(bzlib.h,[ -+ for lib in bz2 bzip2 -+ do -+ AC_CHECK_LIB($lib, BZ2_bzopen, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break]) -+ done -+ ]) -+ AC_CHECK_HEADER(lzmadec.h, [ -+ for lib in lzma lzmadec -+ do -+ AC_CHECK_LIB($lib, lzmadec_open, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break]) -+ done -+ ]) -+ AC_CHECK_HEADER(lzma.h, [ -+ for lib in lzma -+ do -+ AC_CHECK_LIB($lib, lzma_easy_encoder, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break]) -+ done -+ ]) -+ fi ++ AC_CHECK_HEADER(zio.h,[ ++ for lib in ${zio#lib} zio ++ do ++ AC_CHECK_LIB($lib, fzopen, [LIBS="-l$lib $LIBS"; am_cv_libzio=yes]) ++ done ++ ]) ++ if test "$am_cv_libzio" = yes; then ++ AC_DEFINE([COMP_SRC],[],[Define if you have compressors and want to support compressed cat files.]) ++ AC_DEFINE([HAVE_ZIO],[],[Define to 1 if you have libzio for opening compressed manuals]) ++ AC_CHECK_HEADER(zlib.h,[ ++ for lib in z gz ++ do ++ AC_CHECK_LIB($lib, gzopen, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break]) ++ done ++ ]) ++ AC_CHECK_HEADER(bzlib.h,[ ++ for lib in bz2 bzip2 ++ do ++ AC_CHECK_LIB($lib, BZ2_bzopen, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break]) ++ done ++ ]) ++ AC_CHECK_HEADER(lzmadec.h, [ ++ for lib in lzma lzmadec ++ do ++ AC_CHECK_LIB($lib, lzmadec_open, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break]) ++ done ++ ]) ++ AC_CHECK_HEADER(lzma.h, [ ++ for lib in lzma ++ do ++ AC_CHECK_LIB($lib, lzma_easy_encoder, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break]) ++ done ++ ]) ++ fi +fi dnl To add more decompressors just follow the scheme above. - # Work out which manual page hierarchy scheme might be in use. -diff --git lib/decompress.c lib/decompress.c -index a176a9d..0057e39 100644 + # Check for various header files and associated libraries. --- lib/decompress.c -+++ lib/decompress.c ++++ lib/decompress.c 2015-05-28 00:00:00.000000000 +0000 @@ -38,6 +38,10 @@ #include "xvasprintf.h" @@ -103,7 +97,7 @@ index a176a9d..0057e39 100644 #include "manconfig.h" #include "comp_src.h" #include "pipeline.h" -@@ -68,6 +72,32 @@ static void decompress_zlib (void *data ATTRIBUTE_UNUSED) +@@ -68,6 +72,32 @@ static void decompress_zlib (void *data #endif /* HAVE_LIBZ */ @@ -136,7 +130,7 @@ index a176a9d..0057e39 100644 pipeline *decompress_open (const char *filename) { pipecmd *cmd; -@@ -82,6 +112,37 @@ pipeline *decompress_open (const char *filename) +@@ -82,6 +112,37 @@ pipeline *decompress_open (const char *f if (stat (filename, &st) < 0 || S_ISDIR (st.st_mode)) return NULL; @@ -174,7 +168,7 @@ index a176a9d..0057e39 100644 #ifdef HAVE_LIBZ filename_len = strlen (filename); if (filename_len > 3 && STREQ (filename + filename_len - 3, ".gz")) { -@@ -95,7 +156,11 @@ pipeline *decompress_open (const char *filename) +@@ -95,7 +156,11 @@ pipeline *decompress_open (const char *f } #endif /* HAVE_LIBZ */ @@ -186,6 +180,3 @@ index a176a9d..0057e39 100644 if (ext) { ++ext; --- -1.8.4.5 - diff --git a/man-db-2.6.5.dif b/man-db-2.7.1.dif similarity index 81% rename from man-db-2.6.5.dif rename to man-db-2.7.1.dif index c1f7348..3afcbb6 100644 --- a/man-db-2.6.5.dif +++ b/man-db-2.7.1.dif @@ -1,28 +1,25 @@ --- - configure.ac | 18 ++++++- - include/comp_src.h.in | 2 +- - lib/security.c | 36 +++++++++++++ - lib/util.c | 3 ++ - libdb/mydbm.h | 4 +- - mk_catdirs | 30 +++++++++++ - src/Makefile.am | 12 ++--- - src/check_mandirs.c | 48 ++++++++++++----- - src/lexgrog.l | 121 ++++++++++++++++++++++++++++------------- - src/man.c | 115 ++++++++++++++++++++++++++------------- - src/man_db.conf.in | 145 +++++++++++++++++++++++++++++++++++++++++++++++--- - src/mandb.c | 18 +++++-- - src/manp.c | 2 +- - src/straycats.c | 13 +++-- - src/ult_src.c | 9 +++- - src/ult_src.h | 7 +-- - 16 files changed, 460 insertions(+), 123 deletions(-) - create mode 100644 mk_catdirs + configure.ac | 18 +++++- + include/comp_src.h.in | 2 + lib/security.c | 36 ++++++++++++ + lib/util.c | 3 + + libdb/mydbm.h | 4 - + mk_catdirs | 30 ++++++++++ + src/Makefile.am | 12 +--- + src/check_mandirs.c | 43 ++++++++++---- + src/lexgrog.l | 121 ++++++++++++++++++++++++++++------------- + src/man.c | 109 ++++++++++++++++++++++++++----------- + src/man_db.conf.in | 145 +++++++++++++++++++++++++++++++++++++++++++++++--- + src/mandb.c | 18 +++++- + src/manp.c | 2 + src/straycats.c | 19 ++++-- + src/ult_src.c | 9 ++- + src/ult_src.h | 7 +- + 16 files changed, 459 insertions(+), 119 deletions(-) -diff --git configure.ac configure.ac -index 2daf4a3..34ce06e 100644 --- configure.ac -+++ configure.ac -@@ -333,6 +333,14 @@ then ++++ configure.ac 2015-05-28 00:00:00.000000000 +0000 +@@ -248,6 +248,14 @@ then fi MAN_CHECK_PROGS([eqn], [EQN], [use EQN to preprocess equations], [eqn geqn]) @@ -37,7 +34,7 @@ index 2daf4a3..34ce06e 100644 MAN_CHECK_PROGS([neqn], [NEQN], [use NEQN to preprocess equations for character devices], [neqn gneqn]) # If we fail to find an neqn, use eqn and try to force it to output for an # ascii device. As this is only relevant for equations (?), not using latin1 -@@ -376,9 +384,15 @@ then +@@ -291,9 +299,15 @@ then compress_ext="gz" fi MAN_CHECK_PROGS([compress], [COMPRESS], [use COMPRESS as UNIX compression utility], [compress]) @@ -55,10 +52,8 @@ index 2daf4a3..34ce06e 100644 if test -z "$gzip" then compressor="$compress -c" -diff --git include/comp_src.h.in include/comp_src.h.in -index 4d6b0e7..7c865e8 100644 --- include/comp_src.h.in -+++ include/comp_src.h.in ++++ include/comp_src.h.in 2015-05-28 00:00:00.000000000 +0000 @@ -53,7 +53,7 @@ struct compression comp_list[] = { #endif /* HAVE_GZIP */ @@ -68,10 +63,8 @@ index 4d6b0e7..7c865e8 100644 {UNCOMPRESS, "Z", NULL}, /* Else if we have gzip, incorporate the following */ #elif defined (HAVE_GZIP) -diff --git lib/security.c lib/security.c -index dd2e221..37d0ca7 100644 --- lib/security.c -+++ lib/security.c ++++ lib/security.c 2015-05-28 00:00:00.000000000 +0000 @@ -60,7 +60,10 @@ uid_t ruid; /* initial real user id */ @@ -134,11 +127,9 @@ index dd2e221..37d0ca7 100644 #endif /* SECURE_MAN_UID */ } -diff --git lib/util.c lib/util.c -index 978a16e..3dcf336 100644 --- lib/util.c -+++ lib/util.c -@@ -48,6 +48,9 @@ ++++ lib/util.c 2015-05-28 00:00:00.000000000 +0000 +@@ -50,6 +50,9 @@ #include "gettext.h" @@ -148,11 +139,9 @@ index 978a16e..3dcf336 100644 #include "manconfig.h" #include "error.h" -diff --git libdb/mydbm.h libdb/mydbm.h -index f0c4784..3538ed4 100644 --- libdb/mydbm.h -+++ libdb/mydbm.h -@@ -42,7 +42,7 @@ ++++ libdb/mydbm.h 2015-05-28 00:00:00.000000000 +0000 +@@ -44,7 +44,7 @@ # include # ifndef HAVE_GDBM_EXISTS @@ -161,7 +150,7 @@ index f0c4784..3538ed4 100644 # endif /* !HAVE_GDBM_EXISTS */ /* gdbm_nextkey() is not lexicographically sorted, so we need to keep the -@@ -144,7 +144,7 @@ extern int btree_nextkeydata(DB *db, datum *key, datum *cont); +@@ -156,7 +156,7 @@ extern void btree_set_time(DB *db, const # define MYDBM_SET_DPTR(d, value) ((d).data = (char *) (value)) # define MYDBM_DSIZE(d) ((d).size) # define MYDBM_CTRWOPEN(file) btree_flopen(file, O_TRUNC|O_CREAT|O_RDWR, DBMODE) @@ -170,11 +159,8 @@ index f0c4784..3538ed4 100644 # define MYDBM_RWOPEN(file) btree_flopen(file, O_RDWR, DBMODE) # define MYDBM_RDOPEN(file) btree_flopen(file, O_RDONLY, DBMODE) # define MYDBM_INSERT(db, key, cont) btree_insert(db, key, cont) -diff --git mk_catdirs mk_catdirs -new file mode 100644 -index 0000000..47eaa25 ---- /dev/null -+++ mk_catdirs +--- mk_catdirs ++++ mk_catdirs 2015-05-28 00:00:00.000000000 +0000 @@ -0,0 +1,30 @@ +#!/bin/sh + @@ -206,11 +192,9 @@ index 0000000..47eaa25 +cd ${OLDPWD} + +test "$(id -u)" -ne 0 || chown man:man -R ${CACHE} -diff --git src/Makefile.am src/Makefile.am -index 51118a1..0003cbc 100644 --- src/Makefile.am -+++ src/Makefile.am -@@ -177,15 +177,9 @@ apropos$(EXEEXT): whatis$(EXEEXT) ++++ src/Makefile.am 2015-05-28 00:00:00.000000000 +0000 +@@ -173,15 +173,9 @@ apropos$(EXEEXT): whatis$(EXEEXT) all-am: apropos$(EXEEXT) install-exec-hook: @@ -229,11 +213,9 @@ index 51118a1..0003cbc 100644 install-data-hook: @if test -f $(DESTDIR)$(config_file); then \ -diff --git src/check_mandirs.c src/check_mandirs.c -index f954dbf..f9d6314 100644 --- src/check_mandirs.c -+++ src/check_mandirs.c -@@ -354,10 +354,13 @@ static inline void add_dir_entries (const char *path, char *infile) ++++ src/check_mandirs.c 2015-05-28 00:00:00.000000000 +0000 +@@ -362,10 +362,13 @@ static inline void add_dir_entries (cons #ifdef SECURE_MAN_UID extern uid_t ruid; /* initial real user id */ @@ -248,7 +230,7 @@ index f954dbf..f9d6314 100644 { char *manname, *catname; #ifdef SECURE_MAN_UID -@@ -381,6 +384,8 @@ static void mkcatdirs (const char *mandir, const char *catdir) +@@ -389,6 +392,8 @@ static void mkcatdirs (const char *mandi #ifdef SECURE_MAN_UID if (ruid == 0) chown (catdir, man_owner->pw_uid, 0); @@ -257,7 +239,7 @@ index f954dbf..f9d6314 100644 #endif /* SECURE_MAN_UID */ drop_effective_privs (); } -@@ -391,9 +396,14 @@ static void mkcatdirs (const char *mandir, const char *catdir) +@@ -399,9 +404,14 @@ static void mkcatdirs (const char *mandi int j; regain_effective_privs (); debug ("creating catdir hierarchy %s ", catdir); @@ -275,7 +257,7 @@ index f954dbf..f9d6314 100644 if ((is_directory (manname) == 1) && (is_directory (catname) != 1)) { if (mkdir (catname, -@@ -402,11 +412,12 @@ static void mkcatdirs (const char *mandir, const char *catdir) +@@ -410,11 +420,12 @@ static void mkcatdirs (const char *mandi error (0, 0, _("warning: cannot create catdir %s"), catname); debug ("warning: cannot create catdir %s\n", catname); } else @@ -291,7 +273,7 @@ index f954dbf..f9d6314 100644 #endif /* SECURE_MAN_UID */ } } -@@ -505,15 +516,10 @@ static int testmandirs (const char *path, const char *catpath, time_t last, +@@ -523,15 +534,10 @@ static int testmandirs (const char *path } if (!quiet) { @@ -308,7 +290,7 @@ index f954dbf..f9d6314 100644 } add_dir_entries (path, mandir->d_name); MYDBM_CLOSE (dbf); -@@ -681,7 +687,7 @@ int update_db (const char *manpath, const char *catpath) +@@ -651,7 +657,7 @@ int update_db (const char *manpath, cons return new; } @@ -317,7 +299,7 @@ index f954dbf..f9d6314 100644 return EOF; } -@@ -863,6 +869,7 @@ static int purge_whatis (const char *path, int cat, const char *name, +@@ -843,6 +849,7 @@ static int purge_whatis (const char *pat "would delete\n", name, info->ext); return 1; } @@ -325,22 +307,11 @@ index f954dbf..f9d6314 100644 } /* Check that multi keys are correctly constructed. */ -@@ -937,6 +944,11 @@ int purge_missing (const char *manpath, const char *catpath) - gripe_rwopen_failed (); - return 0; - } -+ if (dbver_rd (dbf)) { -+ MYDBM_CLOSE (dbf); -+ dbf = NULL; -+ return 0; -+ } - - /* Extract the database mtime. */ - key = MYDBM_FIRSTKEY (dbf); -@@ -978,6 +990,14 @@ int purge_missing (const char *manpath, const char *catpath) +@@ -941,6 +948,14 @@ int purge_missing (const char *manpath, + key = nextkey; continue; } - ++ + /* Ignore db identifier keys. */ + if (*key.dptr == '.' && *(key.dptr+1) == 0) { + nextkey = MYDBM_NEXTKEY (dbf, key); @@ -348,15 +319,12 @@ index f954dbf..f9d6314 100644 + key = nextkey; + continue; + } -+ + content = MYDBM_FETCH (dbf, key); if (!MYDBM_DPTR (content)) { - nextkey = MYDBM_NEXTKEY (dbf, key); -diff --git src/lexgrog.l src/lexgrog.l -index 18c5a5b..9e5fc16 100644 --- src/lexgrog.l -+++ src/lexgrog.l -@@ -56,7 +56,7 @@ ++++ src/lexgrog.l 2015-05-28 11:06:00.000000000 +0000 +@@ -54,7 +54,7 @@ #include "manconv_client.h" @@ -364,8 +332,8 @@ index 18c5a5b..9e5fc16 100644 +#define YY_READ_BUF_SIZE YY_BUF_SIZE #define MAX_NAME 8192 - #ifdef PROFILE -@@ -207,15 +207,15 @@ static const struct macro perldocs[] = { + #define ARRAY_SIZE(array) (sizeof (array) / sizeof ((array)[0])) +@@ -200,15 +200,15 @@ static const struct macro perldocs[] = { { "R\"", "\"" } }; @@ -390,7 +358,7 @@ index 18c5a5b..9e5fc16 100644 static char newname[MAX_NAME]; static char *p_name; -@@ -224,6 +224,7 @@ static char filters[MAX_FILTERS]; +@@ -217,6 +217,7 @@ static char filters[MAX_FILTERS]; static int fill_mode; static int waiting_for_quote; @@ -398,7 +366,7 @@ index 18c5a5b..9e5fc16 100644 static pipeline *decomp; -@@ -241,7 +242,7 @@ static pipeline *decomp; +@@ -234,7 +235,7 @@ static pipeline *decomp; %} %option ecs meta-ecs @@ -407,7 +375,7 @@ index 18c5a5b..9e5fc16 100644 %option nostdinit %option warn %option noyywrap nounput -@@ -279,8 +280,9 @@ font_change \\f([[:upper:]1-4]|\({upper}{2}) +@@ -272,8 +273,9 @@ font_change \\f([[:upper:]1-4]|\({upper} size_change \\s[+-]?{digit} style_change ({font_change}{size_change}?|{size_change}{font_change}?) typeface \.(B[IR]?|I[BR]?|R[BI]|S[BM]) @@ -418,7 +386,7 @@ index 18c5a5b..9e5fc16 100644 /* Please add to this list if you know how. */ /* Note that, since flex only supports UTF-8 by accident, character classes -@@ -315,7 +317,26 @@ vi_name TÊN +@@ -308,7 +310,26 @@ vi_name TÊN zh_CN_name 名{blank}?(称|字){blank}?.* zh_TW_name (名{blank}?(稱|字)|命令名){blank}?.* name ({bg_name}|{cs_name}|{da_name}|{de_name}|{en_name}|{es_name}|{fi_name}|{fr_name}|{hu_name}|{id_name}|{it_name}|{ja_name}|{ko_name}|{latin_name}|{lt_name}|{nl_name}|{pl_name}|{ru_name}|{sk_name}|{sr_name}|{srlatin_name}|{sv_name}|{tr_name}|{vi_name}|{zh_CN_name}|{zh_TW_name}) @@ -446,7 +414,7 @@ index 18c5a5b..9e5fc16 100644 /* eptgrv : eqn, pic, tbl, grap, refer, vgrind */ tbl_request \.TS -@@ -329,8 +350,13 @@ vgrind_request \.vS +@@ -322,8 +343,13 @@ vgrind_request \.vS %% /* begin NAME section processing */ @@ -462,7 +430,7 @@ index 18c5a5b..9e5fc16 100644 /* general text matching */ \.[^Ss\r\n].* | -@@ -398,6 +424,7 @@ vgrind_request \.vS +@@ -391,6 +417,7 @@ vgrind_request \.vS {bol}\.sp{blank}* | /* vertical spacing */ {bol}\.ig{blank}* | /* block comment */ {bol}\.de[1i]?{blank}* | /* macro definition */ @@ -470,7 +438,7 @@ index 18c5a5b..9e5fc16 100644 {bol}\.i[ef]{blank}* | /* conditional */ {empty}{bol}.+ | <> { /* terminate the string */ -@@ -435,21 +462,24 @@ vgrind_request \.vS +@@ -428,21 +455,24 @@ vgrind_request \.vS } /* No-op requests */ @@ -500,7 +468,7 @@ index 18c5a5b..9e5fc16 100644 /* escape sequences and special characters */ { -@@ -465,6 +495,7 @@ vgrind_request \.vS +@@ -458,6 +488,7 @@ vgrind_request \.vS {next}\\[|^&!%acdpruz{}\r\n] /* various useless control chars */ {next}\\[bhlLvx]{blank}*'[^']+' /* various inline functions */ @@ -508,7 +476,7 @@ index 18c5a5b..9e5fc16 100644 {next}\\\$[1-9] /* interpolate arg */ /* roff named glyphs */ -@@ -627,11 +658,8 @@ vgrind_request \.vS +@@ -620,11 +651,8 @@ vgrind_request \.vS for later processing */ { {bol}\.br{blank}* | @@ -521,7 +489,7 @@ index 18c5a5b..9e5fc16 100644 {bol}\.RS{blank}.* | {bol}\.RE{blank}.* add_char_to_whatis ((char) 0x11); } -@@ -646,7 +674,7 @@ vgrind_request \.vS +@@ -639,7 +667,7 @@ vgrind_request \.vS [[:alnum:]]* add_str_to_whatis (yytext, yyleng); /* normalise the period (,) separators */ @@ -530,7 +498,7 @@ index 18c5a5b..9e5fc16 100644 {blank}*,{blank}* add_str_to_whatis (", ", 2); {bol}. { -@@ -662,7 +690,7 @@ vgrind_request \.vS +@@ -655,7 +683,7 @@ vgrind_request \.vS %% /* print warning and force scanner to terminate */ @@ -539,7 +507,7 @@ index 18c5a5b..9e5fc16 100644 { /* Even though MAX_NAME is a macro expanding to a constant, we * translate it using ngettext anyway because that will make it -@@ -679,7 +707,7 @@ static void too_big (void) +@@ -672,7 +700,7 @@ static void too_big (void) } /* append a string to newname if enough room */ @@ -548,7 +516,7 @@ index 18c5a5b..9e5fc16 100644 { if (p_name - newname + length >= MAX_NAME) too_big (); -@@ -690,8 +718,10 @@ static void add_str_to_whatis (const char *string, size_t length) +@@ -683,8 +711,10 @@ static void add_str_to_whatis (const cha } /* append a char to newname if enough room */ @@ -560,7 +528,7 @@ index 18c5a5b..9e5fc16 100644 if (p_name - newname + 1 >= MAX_NAME) too_big (); else if (waiting_for_quote && c == '"') -@@ -703,8 +733,24 @@ static void add_char_to_whatis (unsigned char c) +@@ -696,8 +726,24 @@ static void add_char_to_whatis (unsigned /* append the " - " separator to newname, trimming the first space if one's * already there */ @@ -586,7 +554,7 @@ index 18c5a5b..9e5fc16 100644 if (p_name != newname && *(p_name - 1) != ' ') add_char_to_whatis (' '); add_str_to_whatis ("- ", 2); -@@ -712,7 +758,7 @@ static void add_separator_to_whatis (void) +@@ -705,7 +751,7 @@ static void add_separator_to_whatis (voi /* append a word to newname if enough room, ensuring only necessary surrounding space */ @@ -595,7 +563,7 @@ index 18c5a5b..9e5fc16 100644 { if (p_name != newname && *(p_name - 1) != ' ') add_char_to_whatis (' '); -@@ -722,7 +768,7 @@ static void add_wordn_to_whatis (const char *string, size_t length) +@@ -715,7 +761,7 @@ static void add_wordn_to_whatis (const c add_str_to_whatis (string, length); } @@ -604,7 +572,7 @@ index 18c5a5b..9e5fc16 100644 { add_wordn_to_whatis (string, strlen (string)); } -@@ -732,7 +778,7 @@ struct compare_macro_key { +@@ -725,7 +771,7 @@ struct compare_macro_key { size_t length; }; @@ -613,7 +581,7 @@ index 18c5a5b..9e5fc16 100644 { const struct compare_macro_key *key = left; const struct macro *value = right; -@@ -750,7 +796,7 @@ static int compare_macro (const void *left, const void *right) +@@ -743,7 +789,7 @@ static int compare_macro (const void *le return 0; } @@ -622,7 +590,7 @@ index 18c5a5b..9e5fc16 100644 const char *string, size_t length) { struct compare_macro_key key; -@@ -764,23 +810,23 @@ static void add_macro_to_whatis (const struct macro *macros, size_t n_macros, +@@ -757,23 +803,23 @@ static void add_macro_to_whatis (const s add_str_to_whatis (macro->value, strlen (macro->value)); } @@ -650,7 +618,7 @@ index 18c5a5b..9e5fc16 100644 { /* If we are mid p_name and the last added char was not a space, * best add one. -@@ -856,6 +902,7 @@ int find_name_decompressed (pipeline *p, const char *filename, lexgrog *p_lg) +@@ -851,6 +897,7 @@ int find_name_decompressed (pipeline *p, fill_mode = 1; waiting_for_quote = 0; @@ -658,19 +626,17 @@ index 18c5a5b..9e5fc16 100644 if (p_lg->type) BEGIN (CAT_FILE); -diff --git src/man.c src/man.c -index 4715efb..edcd59c 100644 --- src/man.c -+++ src/man.c -@@ -68,6 +68,7 @@ static char *cwd; - #include ++++ src/man.c 2015-05-28 12:30:03.846019151 +0000 +@@ -68,6 +68,7 @@ int have_cwd; + #include #include #include +#include #include "argp.h" #include "dirname.h" -@@ -110,6 +111,8 @@ static char *cwd; +@@ -111,6 +112,8 @@ int have_cwd; #ifdef SECURE_MAN_UID extern uid_t ruid; extern uid_t euid; @@ -679,7 +645,7 @@ index 4715efb..edcd59c 100644 #endif /* SECURE_MAN_UID */ /* the default preprocessor sequence */ -@@ -140,6 +143,10 @@ char *lang; +@@ -141,6 +144,10 @@ char *lang; static int global_manpath = -1; /* global or user manual page hierarchy? */ static int skip; /* page exists but has been skipped */ @@ -690,18 +656,19 @@ index 4715efb..edcd59c 100644 #if defined _AIX || defined __sgi char **global_argv; -@@ -244,9 +251,9 @@ static int found_a_stray; /* found a straycat */ +@@ -245,10 +252,10 @@ static int found_a_stray; /* found a st #ifdef MAN_CATS static char *tmp_cat_file; /* for open_cat_stream(), close_cat_stream() */ static int created_tmp_cat; /* dto. */ -#endif static int tmp_cat_fd; - static int man_modtime; /* modtime of man page, for commit_tmp_cat() */ -+#endif /* MAN_CATS */ + static struct timespec man_modtime; /* modtime of man page, for + * commit_tmp_cat() */ ++#endif # ifdef TROFF_IS_GROFF static int ditroff; -@@ -611,25 +618,6 @@ static void gripe_no_name (const char *sect) +@@ -613,25 +620,6 @@ static void gripe_no_name (const char *s exit (FAIL); } @@ -727,34 +694,167 @@ index 4715efb..edcd59c 100644 #if defined(TROFF_IS_GROFF) || defined(HEIRLOOM_NROFF) static int get_roff_line_length (void) { -@@ -916,30 +904,43 @@ static int local_man_loop (const char *argv) +@@ -1454,6 +1442,18 @@ static void setenv_less (pipecmd *cmd, c + free (less_opts); + } + ++static void disable_x(void) ++{ ++ char *bname = basename((char*)pager); ++ if (bname) { ++ if (!strcmp(bname, "less")) ++ unsetenv("DISPLAY"); ++#if 0 ++ free(bname); ++#endif ++ } ++} ++ + static void add_output_iconv (pipeline *p, + const char *source, const char *target) + { +@@ -1513,6 +1513,8 @@ static pipeline *make_display_command (c + else + pipecmd_chdir (pager_cmd, cwd.name); + setenv_less (pager_cmd, title); ++ if (!htmlout) ++ disable_x(); + pipeline_command (p, pager_cmd); + } + pipeline_ignore_signals (p, 1); +@@ -1523,7 +1525,7 @@ static pipeline *make_display_command (c + return p; + } + +- ++#ifdef MAN_CATS + /* return a (malloced) temporary name in cat_file's directory */ + static char *tmp_cat_filename (const char *cat_file) + { +@@ -1551,7 +1553,6 @@ static char *tmp_cat_filename (const cha + return name; + } + +- + /* If delete unlink tmp_cat, else commit tmp_cat to cat_file. + Return non-zero on error. + */ +@@ -1623,6 +1624,7 @@ static int commit_tmp_cat (const char *c + + return status; + } ++#endif /* MAN_CATS */ + + /* TODO: This should all be refactored after work on the decompression + * library is complete. +@@ -1643,7 +1645,6 @@ static void maybe_discard_stderr (pipeli + } + + #ifdef MAN_CATS +- + /* Return pipeline to write formatted manual page to for saving as cat file. */ + static pipeline *open_cat_stream (const char *cat_file, const char *encoding) + { +@@ -1880,6 +1881,7 @@ static void format_display (pipeline *de + regain_effective_privs (); + } + ++#ifdef MAN_CATS + /* "Display" a page in catman mode, which amounts to saving it. */ + /* TODO: merge with format_display_and_save? */ + static void display_catman (const char *cat_file, pipeline *decomp, +@@ -1919,6 +1921,7 @@ static void display_catman (const char * + pop_cleanup(); + free (tmpcat); + } ++#endif /* MAN_CATS */ + + static void disable_hyphenation (void *data ATTRIBUTE_UNUSED) + { +@@ -2111,7 +2114,7 @@ static int display (const char *dir, con + format_cmd = NULL; + decomp_errno = errno; + } +- ++#ifdef MAN_CATS + /* Get modification time, for commit_tmp_cat(). */ + if (man_file && *man_file) { + struct stat stb; +@@ -2121,7 +2124,7 @@ static int display (const char *dir, con + } else + man_modtime = get_stat_mtime (&stb); + } +- ++#endif /* MAN_CATS */ + display_to_stdout = troff; + #ifdef TROFF_IS_GROFF + if (htmlout) +@@ -2257,6 +2260,7 @@ static int display (const char *dir, con + } + if (printed) + putchar ('\n'); ++#ifdef MAN_CATS + } else if (catman) { + if (format) { + if (!save_cat) +@@ -2269,6 +2273,7 @@ static int display (const char *dir, con + format_cmd, + formatted_encoding); + } ++#endif /* MAN_CATS */ + } else if (format) { + /* no cat or out of date */ + pipeline *disp_cmd; +@@ -2330,8 +2335,10 @@ static int display (const char *dir, con + + free (formatted_encoding); + +- pipeline_free (format_cmd); +- pipeline_free (decomp); ++ if (format_cmd) ++ pipeline_free (format_cmd); ++ if (decomp) ++ pipeline_free (decomp); + + if (!prompt) + prompt = found; +@@ -3165,7 +3172,7 @@ static int display_database_check (struc + #ifdef MAN_DB_UPDATES + if (!exists && !skip) { + debug ("dbdelete_wrapper (%s, %p)\n", +- candp->req_name, candp->source); ++ candp->req_name, candp->source->addr); + dbdelete_wrapper (candp->req_name, candp->source); + } + #endif /* MAN_DB_UPDATES */ +@@ -3768,6 +3775,8 @@ static int local_man_loop (const char *a display (NULL, "", NULL, "(stdin)", NULL); else { struct stat st; -- -- if (cwd[0]) { -- debug ("chdir %s\n", cwd); -- if (chdir (cwd)) { -- error (0, errno, _("can't chdir to %s"), cwd); -+ char *pwd = cwd; -+ char *file = basename((char*)argv); -+ -+ if (strcmp(argv, file)) { -+ char *dlm; -+ pwd = strdupa(argv); -+ -+ if ((dlm = strrchr(pwd, '/'))) -+ *dlm = '\0'; -+ } -+ -+ if (pwd[0]) { -+ debug ("chdir %s\n", pwd); -+ if (chdir (pwd)) { -+ error (0, errno, _("can't chdir to %s"), pwd); - regain_effective_privs (); ++ char *file = base_name((char*)argv); ++ char *pwd = NULL; + + if (have_cwd) { + debug ("restore_cwd: %d %s\n", cwd.desc, cwd.name); +@@ -3779,21 +3788,39 @@ static int local_man_loop (const char *a return 0; } } ++ if (strcmp(argv, file)) { ++ char *dlm; ++ pwd = strdupa(argv); ++ ++ if ((dlm = strrchr(pwd, '/'))) ++ *dlm = '\0'; ++ } ++ if (pwd && pwd[0]) { ++ debug ("chdir %s\n", pwd); ++ if (chdir (pwd)) { ++ error (0, errno, _("can't chdir to %s"), pwd); ++ regain_effective_privs (); ++ return 0; ++ } ++ } /* Check that the file exists and isn't e.g. a directory */ - if (stat (argv, &st)) { @@ -777,7 +877,7 @@ index 4715efb..edcd59c 100644 return NOT_FOUND; } -@@ -1006,8 +1007,13 @@ executable_out: +@@ -3860,8 +3887,13 @@ executable_out: argv_abs = xstrdup (argv); } lang = lang_dir (argv_abs); @@ -792,7 +892,7 @@ index 4715efb..edcd59c 100644 if (local_mf) error (0, errno, "%s", argv); exit_status = NOT_FOUND; -@@ -1036,7 +1042,16 @@ int main (int argc, char *argv[]) +@@ -3990,7 +4022,16 @@ int main (int argc, char *argv[]) umask (022); init_locale (); @@ -810,7 +910,7 @@ index 4715efb..edcd59c 100644 /* Use LANGUAGE only when LC_MESSAGES locale category is * neither "C" nor "POSIX". */ if (internal_locale && strcmp (internal_locale, "C") && -@@ -1101,9 +1116,13 @@ int main (int argc, char *argv[]) +@@ -4053,9 +4094,13 @@ int main (int argc, char *argv[]) if (external) do_extern (argc, argv); @@ -825,153 +925,8 @@ index 4715efb..edcd59c 100644 #endif /* SECURE_MAN_UID */ /* close this locale and reinitialise if a new locale was -@@ -1409,7 +1428,8 @@ static char *get_preprocessors_from_file (pipeline *decomp) - if (!line) - return NULL; - -- if (!strncmp (line, PP_COOKIE, 4)) { -+ if (!strncmp (line, PP_COOKIE, 4) || -+ (strlen(line) == 6 && !strncmp(line, ".\\\" ", 4))) { - const char *newline = strchr (line, '\n'); - if (newline) - return xstrndup (line + 4, newline - (line + 4)); -@@ -1921,6 +1941,18 @@ static void setenv_less (pipecmd *cmd, const char *title) - free (less_opts); - } - -+static void disable_x(void) -+{ -+ char *bname = basename((char*)pager); -+ if (bname) { -+ if (!strcmp(bname, "less")) -+ unsetenv("DISPLAY"); -+#if 0 -+ free(bname); -+#endif -+ } -+} -+ - static void add_output_iconv (pipeline *p, - const char *source, const char *target) - { -@@ -1976,6 +2008,8 @@ static pipeline *make_display_command (const char *encoding, const char *title) - - if (pager_cmd) { - setenv_less (pager_cmd, title); -+ if (!htmlout) -+ disable_x(); - pipeline_command (p, pager_cmd); - } - pipeline_ignore_signals (p, 1); -@@ -1986,7 +2020,7 @@ static pipeline *make_display_command (const char *encoding, const char *title) - return p; - } - -- -+#ifdef MAN_CATS - /* return a (malloced) temporary name in cat_file's directory */ - static char *tmp_cat_filename (const char *cat_file) - { -@@ -2088,6 +2122,7 @@ static int commit_tmp_cat (const char *cat_file, const char *tmp_cat, - - return status; - } -+#endif /* MAN_CATS */ - - /* TODO: This should all be refactored after work on the decompression - * library is complete. -@@ -2108,7 +2143,6 @@ static void maybe_discard_stderr (pipeline *p) - } - - #ifdef MAN_CATS -- - /* Return pipeline to write formatted manual page to for saving as cat file. */ - static pipeline *open_cat_stream (const char *cat_file, const char *encoding) - { -@@ -2343,6 +2377,7 @@ static void format_display (pipeline *decomp, - regain_effective_privs (); - } - -+#ifdef MAN_CATS - /* "Display" a page in catman mode, which amounts to saving it. */ - /* TODO: merge with format_display_and_save? */ - static void display_catman (const char *cat_file, pipeline *decomp, -@@ -2382,6 +2417,7 @@ static void display_catman (const char *cat_file, pipeline *decomp, - pop_cleanup(); - free (tmpcat); - } -+#endif /* MAN_CATS */ - - static void disable_hyphenation (void *data ATTRIBUTE_UNUSED) - { -@@ -2535,7 +2571,7 @@ static int display (const char *dir, const char *man_file, - format_cmd = NULL; - decomp_errno = errno; - } -- -+#ifdef MAN_CATS - /* Get modification time, for commit_tmp_cat(). */ - if (man_file && *man_file) { - struct stat stb; -@@ -2544,7 +2580,7 @@ static int display (const char *dir, const char *man_file, - else - man_modtime = stb.st_mtime; - } -- -+#endif /* MAN_CATS */ - display_to_stdout = troff; - #ifdef TROFF_IS_GROFF - if (htmlout) -@@ -2680,6 +2716,7 @@ static int display (const char *dir, const char *man_file, - } - if (printed) - putchar ('\n'); -+#ifdef MAN_CATS - } else if (catman) { - if (format) { - if (!save_cat) -@@ -2692,6 +2729,7 @@ static int display (const char *dir, const char *man_file, - format_cmd, - formatted_encoding); - } -+#endif /* MAN_CATS */ - } else if (format) { - /* no cat or out of date */ - pipeline *disp_cmd; -@@ -2753,8 +2791,10 @@ static int display (const char *dir, const char *man_file, - - free (formatted_encoding); - -- pipeline_free (format_cmd); -- pipeline_free (decomp); -+ if (format_cmd) -+ pipeline_free (format_cmd); -+ if (decomp) -+ pipeline_free (decomp); - - if (!prompt) - prompt = found; -@@ -2762,7 +2802,6 @@ static int display (const char *dir, const char *man_file, - return found; - } - -- - static char *find_cat_file (const char *path, const char *original, - const char *man_file) - { -@@ -3515,7 +3554,7 @@ static int display_database_check (struct candidate *candp) - #ifdef MAN_DB_UPDATES - if (!exists && !skip) { - debug ("dbdelete_wrapper (%s, %p)\n", -- candp->req_name, candp->source); -+ candp->req_name, candp->source->addr); - dbdelete_wrapper (candp->req_name, candp->source); - } - #endif /* MAN_DB_UPDATES */ -diff --git src/man_db.conf.in src/man_db.conf.in -index bc8bb7e..c94b543 100644 --- src/man_db.conf.in -+++ src/man_db.conf.in ++++ src/man_db.conf.in 2015-05-28 00:00:00.000000000 +0000 @@ -20,6 +20,14 @@ MANDATORY_MANPATH /usr/man MANDATORY_MANPATH /usr/share/man @@ -987,7 +942,7 @@ index bc8bb7e..c94b543 100644 #--------------------------------------------------------- # set up PATH to MANPATH mapping # ie. what man tree holds man pages for what binary directory. -@@ -34,8 +42,10 @@ MANPATH_MAP /usr/local/bin /usr/local/man +@@ -34,8 +42,10 @@ MANPATH_MAP /usr/local/bin /usr/local/m MANPATH_MAP /usr/local/bin /usr/local/share/man MANPATH_MAP /usr/local/sbin /usr/local/man MANPATH_MAP /usr/local/sbin /usr/local/share/man @@ -1139,11 +1094,9 @@ index bc8bb7e..c94b543 100644 # #--------------------------------------------------------- # Program definitions. These are commented out by default as the value -diff --git src/mandb.c src/mandb.c -index 5b8c57d..58cfeb6 100644 --- src/mandb.c -+++ src/mandb.c -@@ -193,6 +193,8 @@ static const char *xtmpfile; ++++ src/mandb.c 2015-05-28 11:33:30.000000000 +0000 +@@ -196,6 +196,8 @@ static const char *xtmpfile; #ifdef SECURE_MAN_UID extern uid_t ruid; extern uid_t euid; @@ -1152,7 +1105,7 @@ index 5b8c57d..58cfeb6 100644 #endif /* SECURE_MAN_UID */ static char *manpathlist[MAXDIRS]; -@@ -528,6 +530,8 @@ static int mandb (const char *catpath, const char *manpath) +@@ -548,6 +550,8 @@ static int mandb (const char *catpath, c return amount; } @@ -1161,7 +1114,7 @@ index 5b8c57d..58cfeb6 100644 static int process_manpath (const char *manpath, int global_manpath, struct hashtable *tried_catdirs) { -@@ -561,6 +565,8 @@ static int process_manpath (const char *manpath, int global_manpath, +@@ -594,6 +598,8 @@ static int process_manpath (const char * database = NULL; } @@ -1169,8 +1122,8 @@ index 5b8c57d..58cfeb6 100644 + push_cleanup (cleanup, NULL, 0); push_cleanup (cleanup_sigsafe, NULL, 1); - if (single_filename) { -@@ -591,7 +597,7 @@ static int process_manpath (const char *manpath, int global_manpath, + if (run_mandb) { +@@ -608,7 +614,7 @@ static int process_manpath (const char * if (!opt_test && amount) { finish_up (); #ifdef SECURE_MAN_UID @@ -1179,7 +1132,7 @@ index 5b8c57d..58cfeb6 100644 do_chown (man_owner->pw_uid); #endif /* SECURE_MAN_UID */ } -@@ -801,8 +807,14 @@ int main (int argc, char *argv[]) +@@ -819,8 +825,14 @@ int main (int argc, char *argv[]) error (FAIL, 0, _("the setuid man user \"%s\" does not exist"), MAN_OWNER); @@ -1196,10 +1149,8 @@ index 5b8c57d..58cfeb6 100644 #endif /* SECURE_MAN_UID */ read_config_file (user); -diff --git src/manp.c src/manp.c -index e73e838..22c7ae0 100644 --- src/manp.c -+++ src/manp.c ++++ src/manp.c 2015-05-28 00:00:00.000000000 +0000 @@ -925,7 +925,7 @@ static char *def_path (int flag) /* If we have complete config file failure... */ @@ -1209,19 +1160,17 @@ index e73e838..22c7ae0 100644 return manpath; } -diff --git src/straycats.c src/straycats.c -index 349d57b..9a27ff8 100644 --- src/straycats.c -+++ src/straycats.c ++++ src/straycats.c 2015-05-28 11:36:07.000000000 +0000 @@ -36,6 +36,7 @@ #include #include #include +#include + #include - #ifdef HAVE_DIRENT_H - # include -@@ -279,13 +280,17 @@ static int check_for_stray (void) + #include "canonicalize.h" +@@ -283,17 +284,23 @@ static int check_for_stray (void) if (lg.whatis) free (lg.whatis); @@ -1240,14 +1189,20 @@ index 349d57b..9a27ff8 100644 - free (section); + if (section) + free (section); + next_name: +- free (names[i]); ++ if (names[i]) ++ free (names[i]); } - closedir (cdir); +- free (names); ++ if (names) ++ free (names); return strays; -diff --git src/ult_src.c src/ult_src.c -index 283aee1..d2eb971 100644 + } + --- src/ult_src.c -+++ src/ult_src.c -@@ -379,10 +379,15 @@ const char *ult_src (const char *name, const char *path, ++++ src/ult_src.c 2015-05-28 00:00:00.000000000 +0000 +@@ -364,10 +364,15 @@ const char *ult_src (const char *name, c } pipeline_start (decomp); @@ -1265,10 +1220,8 @@ index 283aee1..d2eb971 100644 include = test_for_include (buffer); if (include) { -diff --git src/ult_src.h src/ult_src.h -index 6fad470..3cd3a37 100644 --- src/ult_src.h -+++ src/ult_src.h ++++ src/ult_src.h 2015-05-28 00:00:00.000000000 +0000 @@ -22,9 +22,10 @@ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -1283,6 +1236,3 @@ index 6fad470..3cd3a37 100644 /* Trace of the link chain from a given file. Any names listed here should * not have WHATIS_MAN entries created for them. --- -1.8.4.5 - diff --git a/man-db-2.7.1.tar.xz b/man-db-2.7.1.tar.xz new file mode 100644 index 0000000..57edc4e --- /dev/null +++ b/man-db-2.7.1.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4876204a3fafb4d8ccc1d172c0431ee581d95558cbd6c4e79caca7717049e0e +size 1498272 diff --git a/man.changes b/man.changes index b11ae87..40ecd8d 100644 --- a/man.changes +++ b/man.changes @@ -1,3 +1,59 @@ +------------------------------------------------------------------- +Thu May 28 12:55:34 UTC 2015 - werner@suse.de + +- Update to version 2.7.1 + For the first time since version 2.4.0, the database format has + changed slightly, so you will need to run 'mandb --create' after + installing the new version to rebuild your databases from scratch. +- Fixes + * Various portability fixes for Solaris, contributed by Peter Bray. + * man now runs correctly when its current working directory has been + deleted. (As a result of this fix, man-db now requires + libpipeline >= 1.4.0.) + * 'man -a' sends its prompts to /dev/tty rather than to stderr, and + likewise reads replies from /dev/tty rather than from stdin. + * Be more careful to avoid using or double-closing closed database + handles. Fixes test suite failures on some systems. + * Patch the fdutimens function imported from Gnulib to work around a + libc bug in GNU/Hurd. + * Fix test suite in the case where the system supports + high-precision timestamps but the file system containing the build + directory does not. + * lexgrog now filters terminal escape sequences out of cat pages + before trying to parse them. + * Tools that consider the terminal line length now prioritise the + COLUMNS environment variable above the TIOCGWINSZ ioctl. + * Manpath elements are no longer canonicalised before being inserted + into the search path; this caused the use of incorrect catpaths in + some cases. This was broken by the LANGUAGE-handling fixes in + 2.5.4. + * Remove test suite dependency on realpath(1). + * Fix a test failure when configured with --enable-undoc. + * Run the pager in man's original working directory rather than in + the manual hierarchy. (As a result of this fix, man-db now + requires libpipeline >= 1.3.0.) + * mandb only creates a cache directory tag if the catpath is + different from the manpath, since it should only be created in + directories that consist entirely of cached information. +- Improvements + * Ship a systemd tmpfiles snippet to clean up old cat files after a + week. + * The modification time of manual databases is now simply stored in + the mtime of the database files themselves, rather than using a + special row. This makes databases reproducible between + otherwise-identical installations, as long as the underlying + database has predictable behaviour. As a bonus, man-db now uses + high-precision timestamps to determine whether it needs to update + databases. + * Timestamps of manual pages are also now stored in the database + with high precision and compared accordingly. + * Files are now ordered by first physical extent before reading + them, for substantial performance improvements in operations such + as mandb and 'man -K'. + * 'man -H' shows a better error message if no browser is configured. + * zsoelim is now installed in $pkglibexecdir, to avoid clashes with + other packages. + ------------------------------------------------------------------- Thu Jul 31 08:33:00 UTC 2014 - werner@suse.de diff --git a/man.spec b/man.spec index 9e6a36d..b49fefd 100644 --- a/man.spec +++ b/man.spec @@ -1,7 +1,7 @@ # # spec file for package man # -# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -31,7 +31,8 @@ BuildRequires: pkg-config BuildRequires: po4a BuildRequires: xz-devel BuildRequires: zlib-devel -Version: 2.6.6 +#Version: 2.6.6 +Version: 2.7.1 Release: 0 Summary: A Program for Displaying man Pages License: GPL-2.0+ @@ -39,26 +40,28 @@ Group: System/Base Url: https://savannah.nongnu.org/projects/man-db PreReq: coreutils fillup Provides: man_db +Requires: cronie Requires: glibc-locale %if 0%{suse_version} > 1300 Recommends: groff-full %endif Requires: groff >= 1.18 Requires: less -Source: http://download.savannah.gnu.org/releases/man-db/man-db-%{version}.tar.xz +#Source: http://download.savannah.gnu.org/releases/man-db/man-db-%{version}.tar.xz +Source: man-db-2.7.1.tar.xz Source1: sysconfig.cron-man Source2: cron.daily.do_mandb Source3: cron.daily.clean_catman Source4: mancoding Source5: wrapper.c -Patch0: man-db-2.6.5.dif +Patch0: man-db-2.7.1.dif Patch1: man-db-2.6.3-man0.dif Patch2: man-db-2.3.19deb4.0-groff.dif Patch4: man-db-2.6.3-section.dif -Patch5: man-db-2.6.5-security4.dif -Patch6: man-db-2.6.5-firefox.dif +Patch5: man-db-2.7.1-security4.dif +Patch6: man-db-2.7.1-firefox.dif Patch7: man-db-2.6.3-chinese.dif -Patch9: man-db-2.6.5-zio.dif +Patch9: man-db-2.7.1-zio.dif Patch10: man-db-2.6.3-listall.dif # PATCH-FIX-SUSE Fixes the documentation for bnc#786679 Patch11: man-MAN_POSIXLY_CORRECT-man1.dif @@ -113,8 +116,12 @@ Authors: Cg g s m) SEC="${SEC[@]}" rm -f configure -%global optflags %{optflags} -funroll-loops -pipe -D_GNU_SOURCE -D_SVID_SOURCE -Wall - CFLAGS="%{optflags}" +%global optflags %{optflags} -funroll-loops -pipe -Wall + if grep -q _DEFAULT_SOURCE /usr/include/features.h ; then + CFLAGS="%{optflags} -D_DEFAULT_SOURCE" + else + CFLAGS="%{optflags} -D_GNU_SOURCE -D_SVID_SOURCE" + fi LDFLAGS= LIBS= LINGUAS= @@ -224,8 +231,12 @@ fi test -d var/catman/ && rm -rf var/catman/ || true %post +%{?tmpfiles_create:%tmpfiles_create %{_libexecdir}/tmpfiles.d/man-db.conf} %{fillup_only -an cron} +%posttrans +mandb --quiet --create + %files -f man-db.lang %defattr(-,root,root) %doc docs/COPYING @@ -237,23 +248,19 @@ test -d var/catman/ && rm -rf var/catman/ || true %{_bindir}/apropos %{_bindir}/catman %{_bindir}/lexgrog -%if %suse_version > 1030 -%attr(0755,root,root) %{_bindir}/man -%attr(0755,root,root) %{_bindir}/mandb -%else -%attr(4755,root,root) %{_bindir}/man -%attr(4755,root,root) %{_bindir}/mandb -%endif +%{_bindir}/man +%{_bindir}/mandb %{_bindir}/manpath %{_bindir}/whatis -%{_bindir}/zsoelim -%dir %attr(0755,root,root) %{_prefix}/lib/man-db -%attr(0755,root,root) %{_prefix}/lib/man-db/man -%attr(0755,root,root) %{_prefix}/lib/man-db/mandb -%attr(0755,man,man) %{_prefix}/lib/man-db/manconv -%attr(0755,man,man) %{_prefix}/lib/man-db/globbing +%dir %attr(0755,root,root) %{_libexecdir}/man-db +%attr(0755,root,root) %{_libexecdir}/man-db/man +%attr(0755,root,root) %{_libexecdir}/man-db/mandb +%attr(0755,man,man) %{_libexecdir}/man-db/manconv +%attr(0755,man,man) %{_libexecdir}/man-db/globbing %{_sbindir}/accessdb %{_libdir}/libman*.so +%{_libexecdir}/man-db/zsoelim +%{_libexecdir}/tmpfiles.d/man-db.conf %dir %{_datadir}/groff/site-tmac %{_datadir}/groff/site-tmac/tmac.andb %{_datadir}/groff/site-tmac/tmac.andocdb @@ -261,7 +268,7 @@ test -d var/catman/ && rm -rf var/catman/ || true %doc %{_mandir}/man5/*.5.gz %doc %{_mandir}/man8/*.8.gz %dir %{_mandir}/id -%defattr(-,man,man) +%defattr(-,man,root) %ghost %{_localstatedir}/cache/man/* %{_localstatedir}/adm/fillup-templates/sysconfig.cron-man