From 3a5041b1c62c2b7c829f47bec2f1789c59844b6c Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Fri, 18 Sep 2009 18:06:31 -0600 Subject: test-fstatat: new test, to expose Solaris 9 bugs Share the stat and lstat tests with fstatat. * tests/test-stat.c (main): Factor guts... * tests/test-stat.h (test_stat_func): ...into new file. * tests/test-lstat.c (main): Factor guts... * tests/test-lstat.h (test_lstat_func): ...into new file. * tests/test-fstatat.c: New file. * modules/stat-tests (Files): Add test-stat.h. * modules/lstat-tests (Files): Add test-lstat.h. (Depends-on): Add stdbool. * modules/openat-tests (Depends-on): Add pathmax. (Files): Add test-lstat.h, test-stat.h, test-fstatat.c. (Makefile.am): Run new test. Signed-off-by: Eric Blake --- tests/test-stat.h | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 tests/test-stat.h (limited to 'tests/test-stat.h') diff --git a/tests/test-stat.h b/tests/test-stat.h new file mode 100644 index 0000000000..17bb43fe47 --- /dev/null +++ b/tests/test-stat.h @@ -0,0 +1,59 @@ +/* Tests of stat. + Copyright (C) 2009 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 + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake , 2009. */ + +/* This file is designed to test both stat(n,buf) and + fstatat(AT_FDCWD,n,buf,0). FUNC is the function to test. Assumes + that BASE and ASSERT are already defined, and that appropriate + headers are already included. */ + +static int +test_stat_func (int (*func) (char const *, struct stat *)) +{ + struct stat st1; + struct stat st2; + char cwd[PATH_MAX]; + + ASSERT (getcwd (cwd, PATH_MAX) == cwd); + ASSERT (func (".", &st1) == 0); + ASSERT (func ("./", &st2) == 0); + ASSERT (SAME_INODE (st1, st2)); + ASSERT (func (cwd, &st2) == 0); + ASSERT (SAME_INODE (st1, st2)); + ASSERT (func ("/", &st1) == 0); + ASSERT (func ("///", &st2) == 0); + ASSERT (SAME_INODE (st1, st2)); + + errno = 0; + ASSERT (func ("", &st1) == -1); + ASSERT (errno == ENOENT); + errno = 0; + ASSERT (func ("nosuch", &st1) == -1); + ASSERT (errno == ENOENT); + errno = 0; + ASSERT (func ("nosuch/", &st1) == -1); + ASSERT (errno == ENOENT); + + ASSERT (close (creat (BASE "file", 0600)) == 0); + ASSERT (func (BASE "file", &st1) == 0); + errno = 0; + ASSERT (func (BASE "file/", &st1) == -1); + ASSERT (errno == ENOTDIR); + ASSERT (unlink (BASE "file") == 0); + + return 0; +} -- cgit v1.2.1