bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
From: Ivan Zakharyaschev <imz@altlinux.org>
To: bug-gnulib@gnu.org
Cc: imz@altlinux.org
Subject: [PATCH] test-lchown.h: "symlink ownership not supported" is indicated by EOPNOTSUPP
Date: Sat, 15 Dec 2018 15:48:34 +0300	[thread overview]
Message-ID: <20181215124834.2007-1-imz@altlinux.org> (raw)

The "symlink ownership not supported" condition is expected to be
indicated by EOPNOTSUPP, as opposed to the "no support for ownership",
which is indicated by ENOSYS.

The latter condition is checked for earlier in this test on a
directory (rather than on a symlink). And if ENOSYS is raised for a
symlink, but not for a directory, this would be against the expected
behavior and should make the test fail.

This change helps this test to work correctly (i.e., to be skipped) if
gnulib's own implementation of lchown is used.

Such convention concerning the meaning of EOPNOTSUPP was also stated
in The Open Group Base Specifications Issue 6
IEEE Std 1003.1, 2004 Edition
(http://pubs.opengroup.org/onlinepubs/009604599/functions/lchown.html);
however, the EOPNOTSUPP case is removed in Issue 7, 2018 Edition
(http://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html).

gnulib's own implementation in lchmod.c follows this convention since
a62be9f4039b4499cfbb76e394cad2259d03fa84 (2004-08-07):

int
lchown (const char *file, uid_t uid, gid_t gid)
{
# if HAVE_CHOWN
#  if ! CHOWN_MODIFIES_SYMLINK
  struct stat stats;

  if (lstat (file, &stats) == 0 && S_ISLNK (stats.st_mode))
    {
      errno = EOPNOTSUPP;
      return -1;
    }
#  endif

  return chown (file, uid, gid);

# else /* !HAVE_CHOWN */
  errno = ENOSYS;
  return -1;
# endif
}
---
 tests/test-lchown.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/test-lchown.h b/tests/test-lchown.h
index bc10a5038..b1a7d4b12 100644
--- a/tests/test-lchown.h
+++ b/tests/test-lchown.h
@@ -124,7 +124,7 @@ test_lchown (int (*func) (char const *, uid_t, gid_t), bool print)
       return 77;
     }
   result = func (BASE "dir/link2", -1, -1);
-  if (result == -1 && errno == ENOSYS)
+  if (result == -1 && errno == EOPNOTSUPP)
     {
       ASSERT (unlink (BASE "dir/file") == 0);
       ASSERT (unlink (BASE "dir/link2") == 0);
-- 
2.17.1



             reply	other threads:[~2018-12-15 13:48 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-15 12:48 Ivan Zakharyaschev [this message]
2018-12-20  2:17 ` [PATCH] test-lchown.h: "symlink ownership not supported" is indicated by EOPNOTSUPP Bruno Haible
2018-12-20 10:35   ` Ivan Zakharyaschev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://lists.gnu.org/mailman/listinfo/bug-gnulib

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181215124834.2007-1-imz@altlinux.org \
    --to=imz@altlinux.org \
    --cc=bug-gnulib@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).