> From: Andreas Grünbacher [mailto:[email protected]] > Sent: Thursday, September 13, 2012 2:30 PM > To: Joachim Schmitz > Cc: [email protected] > Subject: Re: FW: patch-2.7: "make check" problem on HP NonStop: we can't > open() a symlink > > Joachim, > > 2012/9/13 Joachim Schmitz <[email protected]>: > > FYI, not sure whether it made it to the list, > > it seems not. Thanks for the bug report. > > > -----Original Message----- > > From: Joachim Schmitz [mailto:[email protected]] > > Sent: Thursday, September 13, 2012 12:02 PM > > To: '[email protected]' > > Subject: patch-7.2: "make check" problem on HP NonStop: we can't open() a > > symlink > > > > .patch-2.7/tests $ make check > > make check-TESTS > > . > > PASS: crlf-handling > > XFAIL: dash-o-append > > PASS: empty-files > > . > > PASS: remember-reject-files > > FAIL: symlinks > > PASS: unmodified-files > > ============================================================================ > > Testsuite summary for GNU patch 2.7 > > ============================================================================ > > # TOTAL: 34 > > # PASS: 32 > > # SKIP: 0 > > # XFAIL: 1 > > # FAIL: 1 > > # XPASS: 0 > > # ERROR: 0 > > ============================================================================ > > See tests/test-suite.log > > Please report to [email protected] > > ./patch-2.7/tests $ cat test-suite.log > > ========================================= > > GNU patch 2.7: tests/test-suite.log > > ========================================= > > > > # TOTAL: 34 > > # PASS: 32 > > # SKIP: 0 > > # XFAIL: 1 > > # FAIL: 1 > > # XPASS: 0 > > # ERROR: 0 > > > > .. contents:: :depth: 2 > > > > XFAIL: dash-o-append > > ==================== > > > > * patch -o a.new a < a.diff > > FAILED > > expected: > > patching file a > > patching file a > > got: > > patching file a.new (read from a) > > patching file a.new (read from a) > > Hunk #1 FAILED at 1. > > 1 out of 1 hunk FAILED -- saving rejects to file a.new.rej > > * cat a.new > > FAILED > > expected: > > two > > three > > got: > > two > > one > > 2 tests (0 passed, 2 failed) > > > > FAIL: symlinks > > ============== > > > > * ln -s f l > > ok > > * patch < create.diff || echo "Status: $?" > > FAILED > > expected: > > File l is not a regular file -- can't patch > > 1 out of 1 hunk ignored -- saving rejects to file l.rej > > Status: 1 > > got: > > File l is not a regular file -- can't patch > > ./patch-2.7/src/patch: **** Can't create temporary file ./l.oVcCGDA : > > Invalid function argument > > Status: 2 > > * cat f > > ok > > * ln -s f l > > ok > > * patch < modify.diff || echo "Status: $?" > > FAILED > > expected: > > File l is not a regular file -- can't patch > > 1 out of 1 hunk ignored -- saving rejects to file l.rej > > Status: 1 > > got: > > File l is not a regular file -- can't patch > > ./patch-2.7/src/patch: **** Can't create temporary file ./l.oiCjgkU : > > Invalid function argument > > Status: 2 > > * ln -s f l > > ok > > * patch < delete.diff || echo "Status: $?" > > FAILED > > expected: > > File l is not a regular file -- can't patch > > 1 out of 1 hunk ignored -- saving rejects to file l.rej > > Status: 1 > > got: > > File l is not a regular file -- can't patch > > ./patch-2.7/src/patch: **** Can't create temporary file ./l.olx81mW : > > Invalid function argument > > Status: 2 > > * patch -p1 < create-symlink.diff || echo "Status: $?" > > ok > > * echo a > target1 && cat symlink > > ok > > * echo b > target1 && cat symlink > > ok > > * patch -p1 < modify-symlink.diff || echo "Status: $?" > > FAILED > > expected: > > patching symbolic link symlink > > got: > > ./patch-2.7/src/patch: **** Can't create temporary file ./symlink.oTJw5jX : > > Invalid function argument > > Status: 2 > > * echo a > target2 && cat symlink > > FAILED > > expected: > > a > > got: > > cat: cannot open symlink > > * echo b > target2 && cat symlink > > FAILED > > expected: > > b > > got: > > cat: cannot open symlink > > * patch -p1 < delete-symlink.diff || echo "Status: $?" > > FAILED > > expected: > > patching symbolic link symlink > > got: > > ./patch-2.7/src/patch: **** Can't create temporary file ./symlink.otlv6CR : > > Invalid function argument > > Status: 2 > > * test ! -L symlink > > FAILED > > * patch -p1 --backup < create-symlink.diff || echo "Status: $?" > > FAILED > > expected: > > patching symbolic link symlink > > got: > > The next patch would create the file symlink, > > which already exists! Assume -R? [n] > > Apply anyway? [n] > > Skipping patch. > > ./patch-2.7/src/patch: **** Can't create temporary file /tmp/poUilvEh : > > Invalid function argument > > Status: 2 > > * test -f symlink.orig && test ! -s symlink.orig > > FAILED > > * patch -p1 --backup < modify-symlink.diff || echo "Status: $?" > > FAILED > > expected: > > patching symbolic link symlink > > got: > > ./patch-2.7/src/patch: **** Can't create temporary file ./symlink.oGNmIDV : > > Invalid function argument > > Status: 2 > > * echo a > symlink.orig && cat target1 > > FAILED > > expected: > > a > > got: > > cat: cannot open target1 > > * echo b > symlink.orig && cat target1 > > FAILED > > expected: > > b > > got: > > cat: cannot open target1 > > * patch -p1 --backup < delete-symlink.diff || echo "Status: $?" > > FAILED > > expected: > > patching symbolic link symlink > > got: > > ./patch-2.7/src/patch: **** Can't create temporary file ./symlink.osxQKXD : > > Invalid function argument > > Status: 2 > > * echo a > symlink.orig && cat target2 > > FAILED > > expected: > > a > > got: > > cat: cannot open target2 > > * echo b > symlink.orig && cat target2 > > FAILED > > expected: > > b > > got: > > cat: cannot open target2 > > 23 tests (7 passed, 16 failed) > > > > .patch-2.7/tests $ > > > > That error gets generated on 2 places of scr/util.c, pretty close to one > > another. > > > > for(;;) > > { > > int fd; > > > > if (gen_tempname (template, 0, flags, GT_NOCREATE)) > > pfatal ("Can't create temporary file %s", template); > > retry: > > fd = open (template, O_CREAT | O_EXCL | flags, mode); > > if (fd == -1) > > { > > if (errno == try_makedirs_errno) > > { > > makedirs (template); > > /* FIXME: When patch fails, this may leave around empty > > directories. */ > > try_makedirs_errno = 0; > > goto retry; > > } > > if (errno == EEXIST) > > continue; > > pfatal ("Can't create temporary file %s", template); > > } > > *name = template; > > return fd; > > } > > > > Further testing showed that we hit the 2nd occurrence. Seems the open() > > doesn't like the mode parameter 0120777, and the S_IFLNK > > part of it in particular, and indeed HP NonStop only supports the file type > > bits S_IFREG, S_ISVTX and S_SYNC. > > > > Any ideas how to fix it? Is it fixable at all? Should I just ignore that > > failed test? > > We only need to pass the file permissions here. How about this patch? > > diff --git a/src/patch.c b/src/patch.c > index febfd42..1c6fb4b 100644 > --- a/src/patch.c > +++ b/src/patch.c > @@ -297,7 +297,8 @@ main (int argc, char **argv) > > tmpoutst.st_size = -1; > outfd = make_tempfile (&TMPOUTNAME, 'o', outname, > - O_WRONLY | binary_transput, instat.st_mode); > + O_WRONLY | binary_transput, > + instat.st_mode & S_IRWXUGO); > TMPOUTNAME_needs_removal = 1; > if (diff_type == ED_DIFF) { > outstate.zero_output = false; >
Yes, it does, thanks! Only have that XFAIL on dash-o-append remaining. Guess that X stands for eXpected? Bye, Jojo
