X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-linkat.c;h=8d179e2fafcbcbad414b5da342802dd8beb1945f;hb=88418d5fd24c99aac393d3e2f564f6939e4e2fe3;hp=efe5109db1ec4878e00e359dbca231060f3be0e7;hpb=9c40f34443ba034ee7890ab10c369a903417765d;p=gnulib.git diff --git a/tests/test-linkat.c b/tests/test-linkat.c index efe5109db..8d179e2fa 100644 --- a/tests/test-linkat.c +++ b/tests/test-linkat.c @@ -1,5 +1,5 @@ /* Tests of linkat. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,11 +29,13 @@ SIGNATURE_CHECK (linkat, int, (int, char const *, int, char const *, int)); #include #include #include +#include #include "areadlink.h" #include "filenamecat.h" #include "same-inode.h" #include "xgetcwd.h" +#include "ignore-value.h" #include "macros.h" #define BASE "test-linkat.t" @@ -51,6 +53,17 @@ do_link (char const *name1, char const *name2) return linkat (dfd1, name1, dfd2, name2, flag); } +/* Can we expect that link() and linkat(), when called on a symlink, + increment the link count of that symlink? */ +#if LINK_FOLLOWS_SYMLINKS == 0 +# define EXPECT_LINK_HARDLINKS_SYMLINKS 1 +#elif LINK_FOLLOWS_SYMLINKS == -1 +extern int __xpg4; +# define EXPECT_LINK_HARDLINKS_SYMLINKS (__xpg4 == 0) +#else +# define EXPECT_LINK_HARDLINKS_SYMLINKS 0 +#endif + /* Wrapper to see if two symlinks act the same. */ static void check_same_link (char const *name1, char const *name2) @@ -66,7 +79,7 @@ check_same_link (char const *name1, char const *name2) ASSERT (contents1); ASSERT (contents2); ASSERT (strcmp (contents1, contents2) == 0); - if (!LINK_FOLLOWS_SYMLINKS) + if (EXPECT_LINK_HARDLINKS_SYMLINKS) ASSERT (SAME_INODE (st1, st2)); free (contents1); free (contents2); @@ -81,7 +94,7 @@ main (void) int result; /* Clean up any trash from prior testsuite runs. */ - system ("rm -rf " BASE "*"); + ignore_value (system ("rm -rf " BASE "*")); /* Test basic link functionality, without mentioning symlinks. */ result = test_link (do_link, true); @@ -178,7 +191,7 @@ main (void) ASSERT (errno == EEXIST || errno == EPERM || errno == EACCES); errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "sub1/", 0) == -1); - ASSERT (errno == EEXIST); + ASSERT (errno == EEXIST || errno == ENOTDIR); errno = 0; ASSERT (linkat (dfd, BASE "link1", dfd, BASE "sub1", AT_SYMLINK_FOLLOW) == -1);