summaryrefslogtreecommitdiff
path: root/textproc/mdocml
diff options
context:
space:
mode:
authorsevan <sevan>2015-03-26 19:59:53 +0000
committersevan <sevan>2015-03-26 19:59:53 +0000
commitb954bc787773745264b2b84c5f4a9b360b69e8bf (patch)
tree0be1da2da2c7b6c58168f5ef2cc456a9a82ea61b /textproc/mdocml
parentd3beca75eacaf8665cffac399a39e5cda860ace0 (diff)
downloadpkgsrc-b954bc787773745264b2b84c5f4a9b360b69e8bf.tar.gz
Revert changes from previous commit as it was incomplete and thus failed to address the issue, changes made are much larger upstream.
Heads up by tron@
Diffstat (limited to 'textproc/mdocml')
-rw-r--r--textproc/mdocml/distinfo5
-rw-r--r--textproc/mdocml/patches/patch-compat_fts.c275
-rw-r--r--textproc/mdocml/patches/patch-compat_fts.h33
3 files changed, 12 insertions, 301 deletions
diff --git a/textproc/mdocml/distinfo b/textproc/mdocml/distinfo
index 9be72745c17..ed4b90e29db 100644
--- a/textproc/mdocml/distinfo
+++ b/textproc/mdocml/distinfo
@@ -1,8 +1,7 @@
-$NetBSD: distinfo,v 1.39 2015/03/26 14:16:12 sevan Exp $
+$NetBSD: distinfo,v 1.40 2015/03/26 19:59:53 sevan Exp $
SHA1 (mdocml-1.13.3.tar.gz) = 3ccfbb492a477b84343c97de743b3dd5bd3c763b
RMD160 (mdocml-1.13.3.tar.gz) = 47d1096708b45b15d8f198404fd6608d164bb66a
Size (mdocml-1.13.3.tar.gz) = 358971 bytes
-SHA1 (patch-compat_fts.c) = 9ae6bc956e44b87ac957d6d8d9e9179e6a6cb25a
-SHA1 (patch-compat_fts.h) = a1b38d4af483df59cabbe7c9925f52a4445c2898
+SHA1 (patch-compat_fts.c) = bc20484964d8ff0aa2af07d581bad39a6c056a5a
SHA1 (patch-roff.7) = 22335024f83abc347ca39aabf7ab8d9cb38f7db2
diff --git a/textproc/mdocml/patches/patch-compat_fts.c b/textproc/mdocml/patches/patch-compat_fts.c
index f4e0726fe31..102632d2bef 100644
--- a/textproc/mdocml/patches/patch-compat_fts.c
+++ b/textproc/mdocml/patches/patch-compat_fts.c
@@ -1,272 +1,17 @@
-$NetBSD: patch-compat_fts.c,v 1.4 2015/03/26 14:16:12 sevan Exp $
+$NetBSD: patch-compat_fts.c,v 1.5 2015/03/26 19:59:53 sevan Exp $
-"We always use FTS_NOCHDIR, so delete the directory changing code.
-This not only simplifies matters, but also helps operating systems
-lacking dirfd(3), for example Solaris 10."
+Fix build under Solaris 10.
---- compat_fts.c.orig 2015-03-26 04:03:30.000000000 +0000
-+++ compat_fts.c
-@@ -60,7 +60,6 @@ static size_t fts_maxarglen(char * cons
- static void fts_padjust(FTS *, FTSENT *);
- static int fts_palloc(FTS *, size_t);
- static unsigned short fts_stat(FTS *, FTSENT *);
--static int fts_safe_changedir(FTS *, FTSENT *, int, const char *);
+--- compat_fts.c.orig 2015-03-13 12:38:38.000000000 +0000
++++ compat_fts.c 2015-03-19 08:22:11.000000000 +0000
+@@ -76,6 +76,10 @@
- #define ISDOT(a) (a[0] == '.' && (!a[1] || (a[1] == '.' && !a[2])))
- #ifndef O_DIRECTORY
-@@ -74,8 +73,6 @@ static int fts_safe_changedir(FTS *, FT
- #define ISSET(opt) (sp->fts_options & (opt))
- #define SET(opt) (sp->fts_options |= (opt))
+ #define FCHDIR(sp, fd) (!ISSET(FTS_NOCHDIR) && fchdir(fd))
--#define FCHDIR(sp, fd) (!ISSET(FTS_NOCHDIR) && fchdir(fd))
--
++#ifdef __sun__
++#define dirfd(fd) ((fd)->dd_fd)
++#endif
++
FTS *
fts_open(char * const *argv, int options, void *dummy)
{
-@@ -146,17 +143,6 @@ fts_open(char * const *argv, int options
- sp->fts_cur->fts_link = root;
- sp->fts_cur->fts_info = FTS_INIT;
-
-- /*
-- * If using chdir(2), grab a file descriptor pointing to dot to ensure
-- * that we can get back here; this could be avoided for some paths,
-- * but almost certainly not worth the effort. Slashes, symbolic links,
-- * and ".." are all fairly nasty problems. Note, if we can't get the
-- * descriptor we run anyway, just more slowly.
-- */
-- if (!ISSET(FTS_NOCHDIR) &&
-- (sp->fts_rfd = open(".", O_RDONLY | O_CLOEXEC)) < 0)
-- SET(FTS_NOCHDIR);
--
- if (nitems == 0)
- free(parent);
-
-@@ -213,25 +199,13 @@ fts_close(FTS *sp)
- free(p);
- }
-
-- /* Stash the original directory fd if needed. */
-- rfd = ISSET(FTS_NOCHDIR) ? -1 : sp->fts_rfd;
--
- /* Free up child linked list, sort array, path buffer, stream ptr.*/
- if (sp->fts_child)
- fts_lfree(sp->fts_child);
- free(sp->fts_path);
- free(sp);
-
-- /* Return to original directory, checking for error. */
-- if (rfd != -1) {
-- int saved_errno;
-- error = fchdir(rfd);
-- saved_errno = errno;
-- (void)close(rfd);
-- errno = saved_errno;
-- }
--
-- return (error);
-+ return (0);
- }
-
- /*
-@@ -274,25 +248,11 @@ fts_read(FTS *sp)
- }
-
- /*
-- * Cd to the subdirectory.
-- *
-- * If have already read and now fail to chdir, whack the list
-- * to make the names come out right, and set the parent errno
-- * so the application will eventually get an error condition.
-- * Set the FTS_DONTCHDIR flag so that when we logically change
-- * directories back to the parent we don't do a chdir.
-- *
- * If haven't read do so. If the read fails, fts_build sets
- * FTS_STOP or the fts_info field of the node.
- */
- if (sp->fts_child) {
-- if (fts_safe_changedir(sp, p, -1, p->fts_accpath)) {
-- p->fts_errno = errno;
-- p->fts_flags |= FTS_DONTCHDIR;
-- for (p = sp->fts_child; p; p = p->fts_link)
-- p->fts_accpath =
-- p->fts_parent->fts_accpath;
-- }
-+ /* nothing */
- } else if ((sp->fts_child = fts_build(sp)) == NULL) {
- if (ISSET(FTS_STOP))
- return (NULL);
-@@ -352,23 +312,6 @@ name: t = sp->fts_path + NAPPEND(p->fts
- /* NUL terminate the pathname. */
- sp->fts_path[p->fts_pathlen] = '\0';
-
-- /*
-- * Return to the parent directory. If at a root node or came through
-- * a symlink, go back through the file descriptor. Otherwise, cd up
-- * one directory.
-- */
-- if (p->fts_level == FTS_ROOTLEVEL) {
-- if (FCHDIR(sp, sp->fts_rfd)) {
-- SET(FTS_STOP);
-- sp->fts_cur = p;
-- return (NULL);
-- }
-- } else if (!(p->fts_flags & FTS_DONTCHDIR) &&
-- fts_safe_changedir(sp, p->fts_parent, -1, "..")) {
-- SET(FTS_STOP);
-- sp->fts_cur = p;
-- return (NULL);
-- }
- p->fts_info = p->fts_errno ? FTS_ERR : FTS_DP;
- return (sp->fts_cur = p);
- }
-@@ -432,32 +375,6 @@ fts_build(FTS *sp)
- }
-
- /*
-- * If we're going to need to stat anything or we want to descend
-- * and stay in the directory, chdir. If this fails we keep going,
-- * but set a flag so we don't chdir after the post-order visit.
-- * We won't be able to stat anything, but we can still return the
-- * names themselves. Note, that since fts_read won't be able to
-- * chdir into the directory, it will have to return different path
-- * names than before, i.e. "a/b" instead of "b". Since the node
-- * has already been visited in pre-order, have to wait until the
-- * post-order visit to return the error. There is a special case
-- * here, if there was nothing to stat then it's not an error to
-- * not be able to stat. This is all fairly nasty. If a program
-- * needed sorted entries or stat information, they had better be
-- * checking FTS_NS on the returned nodes.
-- */
-- cderrno = 0;
-- if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) {
-- cur->fts_errno = errno;
-- cur->fts_flags |= FTS_DONTCHDIR;
-- descend = 0;
-- cderrno = errno;
-- (void)closedir(dirp);
-- dirp = NULL;
-- } else
-- descend = 1;
--
-- /*
- * Figure out the max file name length that can be stored in the
- * current path -- the inner loop allocates more path as necessary.
- * We really wouldn't have to do the maxlen calculations here, we
-@@ -468,10 +385,8 @@ fts_build(FTS *sp)
- * each new name into the path.
- */
- len = NAPPEND(cur);
-- if (ISSET(FTS_NOCHDIR)) {
-- cp = sp->fts_path + len;
-- *cp++ = '/';
-- }
-+ cp = sp->fts_path + len;
-+ *cp++ = '/';
- len++;
- maxlen = sp->fts_pathlen - len;
-
-@@ -518,8 +433,7 @@ mem1: saved_errno = errno;
- /* Did realloc() change the pointer? */
- if (oldaddr != sp->fts_path) {
- doadjust = 1;
-- if (ISSET(FTS_NOCHDIR))
-- cp = sp->fts_path + len;
-+ cp = sp->fts_path + len;
- }
- maxlen = sp->fts_pathlen - len;
- }
-@@ -542,20 +456,11 @@ mem1: saved_errno = errno;
- return (NULL);
- }
-
-- if (cderrno) {
-- p->fts_info = FTS_NS;
-- p->fts_errno = cderrno;
-- p->fts_accpath = cur->fts_accpath;
-- } else {
-- /* Build a file name for fts_stat to stat. */
-- if (ISSET(FTS_NOCHDIR)) {
-- p->fts_accpath = p->fts_path;
-- memmove(cp, p->fts_name, p->fts_namelen + 1);
-- } else
-- p->fts_accpath = p->fts_name;
-- /* Stat it. */
-- p->fts_info = fts_stat(sp, p);
-- }
-+ /* Build a file name for fts_stat to stat. */
-+ p->fts_accpath = p->fts_path;
-+ memmove(cp, p->fts_name, p->fts_namelen + 1);
-+ /* Stat it. */
-+ p->fts_info = fts_stat(sp, p);
-
- /* We walk in directory order so "ls -f" doesn't get upset. */
- p->fts_link = NULL;
-@@ -581,26 +486,9 @@ mem1: saved_errno = errno;
- * If not changing directories, reset the path back to original
- * state.
- */
-- if (ISSET(FTS_NOCHDIR)) {
-- if (len == sp->fts_pathlen || nitems == 0)
-- --cp;
-- *cp = '\0';
-- }
--
-- /*
-- * If descended after called from fts_children or after called from
-- * fts_read and nothing found, get back. At the root level we use
-- * the saved fd; if one of fts_open()'s arguments is a relative path
-- * to an empty directory, we wind up here with no other way back. If
-- * can't get back, we're done.
-- */
-- if (descend && !nitems &&
-- (cur->fts_level == FTS_ROOTLEVEL ? FCHDIR(sp, sp->fts_rfd) :
-- fts_safe_changedir(sp, cur->fts_parent, -1, ".."))) {
-- cur->fts_info = FTS_ERR;
-- SET(FTS_STOP);
-- return (NULL);
-- }
-+ if (len == sp->fts_pathlen || nitems == 0)
-+ --cp;
-+ *cp = '\0';
-
- /* If didn't find anything, return NULL. */
- if (!nitems) {
-@@ -771,38 +659,4 @@ fts_maxarglen(char * const *argv)
- return (max + 1);
- }
-
--/*
-- * Change to dir specified by fd or p->fts_accpath without getting
-- * tricked by someone changing the world out from underneath us.
-- * Assumes p->fts_dev and p->fts_ino are filled in.
-- */
--static int
--fts_safe_changedir(FTS *sp, FTSENT *p, int fd, const char *path)
--{
-- int ret, oerrno, newfd;
-- struct stat sb;
--
-- newfd = fd;
-- if (ISSET(FTS_NOCHDIR))
-- return (0);
-- if (fd < 0 && (newfd = open(path, O_RDONLY|O_DIRECTORY|O_CLOEXEC)) < 0)
-- return (-1);
-- if (fstat(newfd, &sb)) {
-- ret = -1;
-- goto bail;
-- }
-- if (p->fts_dev != sb.st_dev || p->fts_ino != sb.st_ino) {
-- errno = ENOENT; /* disinformation */
-- ret = -1;
-- goto bail;
-- }
-- ret = fchdir(newfd);
--bail:
-- oerrno = errno;
-- if (fd < 0)
-- (void)close(newfd);
-- errno = oerrno;
-- return (ret);
--}
--
- #endif
diff --git a/textproc/mdocml/patches/patch-compat_fts.h b/textproc/mdocml/patches/patch-compat_fts.h
deleted file mode 100644
index f26045d385c..00000000000
--- a/textproc/mdocml/patches/patch-compat_fts.h
+++ /dev/null
@@ -1,33 +0,0 @@
-$NetBSD: patch-compat_fts.h,v 1.1 2015/03/26 14:16:12 sevan Exp $
-
-"We always use FTS_NOCHDIR, so delete the directory changing code.
-This not only simplifies matters, but also helps operating systems
-lacking dirfd(3), for example Solaris 10."
-
---- compat_fts.h.orig 2015-03-26 04:16:43.000000000 +0000
-+++ compat_fts.h
-@@ -40,13 +40,12 @@ typedef struct {
- struct _ftsent *fts_child; /* linked list of children */
- dev_t fts_dev; /* starting device # */
- char *fts_path; /* path for this descent */
-- int fts_rfd; /* fd for root */
- size_t fts_pathlen; /* sizeof(path) */
-
- #define FTS_NOCHDIR 0x0004 /* don't change directories */
- #define FTS_PHYSICAL 0x0010 /* physical walk */
- #define FTS_XDEV 0x0040 /* don't cross devices */
--#define FTS_OPTIONMASK 0x00ff /* valid user option mask */
-+#define FTS_OPTIONMASK 0x0054 /* valid user option mask */
-
- #define FTS_STOP 0x2000 /* (private) unrecoverable error */
- int fts_options; /* fts_open options, global flags */
-@@ -85,9 +84,6 @@ typedef struct _ftsent {
- #define FTS_SL 12 /* symbolic link */
- unsigned short fts_info; /* user flags for FTSENT structure */
-
--#define FTS_DONTCHDIR 0x01 /* don't chdir .. to the parent */
-- unsigned short fts_flags; /* private flags for FTSENT structure */
--
- #define FTS_NOINSTR 3 /* no instructions */
- #define FTS_SKIP 4 /* discard node */
- unsigned short fts_instr; /* fts_set() instructions */