X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-symlinkat.c;h=1795c0e17fa2b24b44564e35dc93cfc290d652c4;hb=8ea6bf995cf561a525abc8f716e98c8a9b917496;hp=4a6fe0a7b509855e62a159d0abc0981567a715c2;hpb=41e61aadba3855410c5b3d97280107f51c225048;p=gnulib.git diff --git a/tests/test-symlinkat.c b/tests/test-symlinkat.c index 4a6fe0a7b..1795c0e17 100644 --- a/tests/test-symlinkat.c +++ b/tests/test-symlinkat.c @@ -1,5 +1,5 @@ -/* Tests of symlinkat and readlinkat. - Copyright (C) 2009 Free Software Foundation, Inc. +/* Tests of symlinkat. + 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 @@ -20,6 +20,9 @@ #include +#include "signature.h" +SIGNATURE_CHECK (symlinkat, int, (char const *, int, char const *)); + #include #include #include @@ -28,25 +31,15 @@ #include #include +#include "ignore-value.h" +#include "macros.h" + #ifndef HAVE_SYMLINK # define HAVE_SYMLINK 0 #endif -#define ASSERT(expr) \ - do \ - { \ - if (!(expr)) \ - { \ - fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ - fflush (stderr); \ - abort (); \ - } \ - } \ - while (0) - #define BASE "test-symlinkat.t" -#include "test-readlink.h" #include "test-symlink.h" static int dfd = AT_FDCWD; @@ -57,67 +50,23 @@ do_symlink (char const *contents, char const *name) return symlinkat (contents, dfd, name); } -static ssize_t -do_readlink (char const *name, char *buf, size_t len) -{ - return readlinkat (dfd, name, buf, len); -} - int -main () +main (void) { - char buf[80]; int result; /* Remove any leftovers from a previous partial run. */ - ASSERT (system ("rm -rf " BASE "*") == 0); + ignore_value (system ("rm -rf " BASE "*")); /* Perform same checks as counterpart functions. */ - result = test_readlink (do_readlink, false); - ASSERT (test_symlink (do_symlink, false) == result); + result = test_symlink (do_symlink, false); dfd = openat (AT_FDCWD, ".", O_RDONLY); ASSERT (0 <= dfd); - ASSERT (test_readlink (do_readlink, false) == result); ASSERT (test_symlink (do_symlink, false) == result); - /* Now perform some cross-directory checks. Skip everything else on - mingw. */ - if (HAVE_SYMLINK) - { - const char *contents = "don't matter!"; - ssize_t exp = strlen (contents); - - /* Create link while cwd is '.', then read it in '..'. */ - ASSERT (symlinkat (contents, AT_FDCWD, BASE "link") == 0); - errno = 0; - ASSERT (symlinkat (contents, dfd, BASE "link") == -1); - ASSERT (errno == EEXIST); - ASSERT (chdir ("..") == 0); - errno = 0; - ASSERT (readlinkat (AT_FDCWD, BASE "link", buf, sizeof buf) == -1); - ASSERT (errno == ENOENT); - ASSERT (readlinkat (dfd, BASE "link", buf, sizeof buf) == exp); - ASSERT (strncmp (contents, buf, exp) == 0); - ASSERT (unlinkat (dfd, BASE "link", 0) == 0); - - /* Create link while cwd is '..', then read it in '.'. */ - ASSERT (symlinkat (contents, dfd, BASE "link") == 0); - ASSERT (fchdir (dfd) == 0); - errno = 0; - ASSERT (symlinkat (contents, AT_FDCWD, BASE "link") == -1); - ASSERT (errno == EEXIST); - buf[0] = '\0'; - ASSERT (readlinkat (AT_FDCWD, BASE "link", buf, sizeof buf) == exp); - ASSERT (strncmp (contents, buf, exp) == 0); - buf[0] = '\0'; - ASSERT (readlinkat (dfd, BASE "link", buf, sizeof buf) == exp); - ASSERT (strncmp (contents, buf, exp) == 0); - ASSERT (unlink (BASE "link") == 0); - } - ASSERT (close (dfd) == 0); if (result == 77) - fputs ("skipping test: symlinks not supported on this filesystem\n", - stderr); + fputs ("skipping test: symlinks not supported on this file system\n", + stderr); return result; }