X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-mkfifoat.c;h=86b821ed0c9d2639642985a42e54213b14d09807;hb=3386f3988ce2ab14d65f59659d8f95bf4830ecb3;hp=ef3e817c8dfb5d2b0e664cff961bdf06a176a4b1;hpb=987e5651e8d1c5aa933c9ce88562806af4093702;p=gnulib.git diff --git a/tests/test-mkfifoat.c b/tests/test-mkfifoat.c index ef3e817c8..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 @@ -32,6 +32,7 @@ SIGNATURE_CHECK (mknodat, int, (int, char const *, mode_t, dev_t)); #include #include +#include "ignore-value.h" #include "macros.h" #define BASE "test-mkfifoat.t" @@ -72,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); @@ -88,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);