X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=inline;f=tests%2Ftest-mkfifoat.c;h=86b821ed0c9d2639642985a42e54213b14d09807;hb=fdd1b511c5c12912aae79b58e0c5f6ffa0492d6e;hp=fca3411b3e6842310c172fcbdac782406dcebc6e;hpb=5ca4b90d06ed5871ed0bf7bd59dbbf23b69a00ea;p=gnulib.git diff --git a/tests/test-mkfifoat.c b/tests/test-mkfifoat.c index fca3411b3..86b821ed0 100644 --- a/tests/test-mkfifoat.c +++ b/tests/test-mkfifoat.c @@ -1,5 +1,5 @@ /* Tests of mkfifoat and mknodat. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009-2013 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,10 @@ #include +#include "signature.h" +SIGNATURE_CHECK (mkfifoat, int, (int, char const *, mode_t)); +SIGNATURE_CHECK (mknodat, int, (int, char const *, mode_t, dev_t)); + #include #include #include @@ -28,17 +32,8 @@ #include #include -#define ASSERT(expr) \ - do \ - { \ - if (!(expr)) \ - { \ - fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ - fflush (stderr); \ - abort (); \ - } \ - } \ - while (0) +#include "ignore-value.h" +#include "macros.h" #define BASE "test-mkfifoat.t" @@ -78,7 +73,7 @@ main (void) int result; /* Remove any leftovers from a previous partial run. */ - ASSERT (system ("rm -rf " BASE "*") == 0); + ignore_value (system ("rm -rf " BASE "*")); /* Basic tests. */ result = test_mkfifo (do_mkfifoat, true); @@ -94,33 +89,59 @@ main (void) struct stat st; test_func func = funcs[i]; + /* Test behaviour for invalid file descriptors. */ + { + errno = 0; + ASSERT (func (-1, "foo", 0600) == -1); + ASSERT (errno == EBADF + || errno == ENOSYS /* seen on mingw */ + ); + } + { + close (99); + errno = 0; + ASSERT (func (99, "foo", 0600) == -1); + ASSERT (errno == EBADF + || errno == ENOSYS /* seen on mingw */ + ); + } + /* Create fifo while cwd is '.', then stat it from '..'. */ - ASSERT (func (AT_FDCWD, BASE "fifo", 0600) == 0); - errno = 0; - ASSERT (func (dfd, BASE "fifo", 0600) == -1); - ASSERT (errno == EEXIST); - ASSERT (chdir ("..") == 0); - errno = 0; - ASSERT (fstatat (AT_FDCWD, BASE "fifo", &st, 0) == -1); - ASSERT (errno == ENOENT); - memset (&st, 0, sizeof st); - ASSERT (fstatat (dfd, BASE "fifo", &st, 0) == 0); - ASSERT (S_ISFIFO (st.st_mode)); - ASSERT (unlinkat (dfd, BASE "fifo", 0) == 0); + if (func (AT_FDCWD, BASE "fifo", 0600) != 0) + ASSERT (errno == ENOSYS); /* seen on native Windows */ + else + { + errno = 0; + ASSERT (func (dfd, BASE "fifo", 0600) == -1); + ASSERT (errno == EEXIST); + ASSERT (chdir ("..") == 0); + errno = 0; + ASSERT (fstatat (AT_FDCWD, BASE "fifo", &st, 0) == -1); + ASSERT (errno == ENOENT); + memset (&st, 0, sizeof st); + ASSERT (fstatat (dfd, BASE "fifo", &st, 0) == 0); + ASSERT (S_ISFIFO (st.st_mode)); + ASSERT (unlinkat (dfd, BASE "fifo", 0) == 0); + } /* Create fifo while cwd is '..', then stat it from '.'. */ - ASSERT (func (dfd, BASE "fifo", 0600) == 0); - ASSERT (fchdir (dfd) == 0); - errno = 0; - ASSERT (func (AT_FDCWD, BASE "fifo", 0600) == -1); - ASSERT (errno == EEXIST); - memset (&st, 0, sizeof st); - ASSERT (fstatat (AT_FDCWD, BASE "fifo", &st, AT_SYMLINK_NOFOLLOW) == 0); - ASSERT (S_ISFIFO (st.st_mode)); - memset (&st, 0, sizeof st); - ASSERT (fstatat (dfd, BASE "fifo", &st, AT_SYMLINK_NOFOLLOW) == 0); - ASSERT (S_ISFIFO (st.st_mode)); - ASSERT (unlink (BASE "fifo") == 0); + if (func (dfd, BASE "fifo", 0600) != 0) + ASSERT (errno == ENOSYS); /* seen on native Windows */ + else + { + ASSERT (fchdir (dfd) == 0); + errno = 0; + ASSERT (func (AT_FDCWD, BASE "fifo", 0600) == -1); + ASSERT (errno == EEXIST); + memset (&st, 0, sizeof st); + ASSERT (fstatat (AT_FDCWD, BASE "fifo", &st, AT_SYMLINK_NOFOLLOW) + == 0); + ASSERT (S_ISFIFO (st.st_mode)); + memset (&st, 0, sizeof st); + ASSERT (fstatat (dfd, BASE "fifo", &st, AT_SYMLINK_NOFOLLOW) == 0); + ASSERT (S_ISFIFO (st.st_mode)); + ASSERT (unlink (BASE "fifo") == 0); + } } ASSERT (close (dfd) == 0);