X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-stat.c;h=4cda08908b6aedf3e28a798e429da99dd95ea2d9;hb=5e5009f839875220d5dec7abdf5cf53d919f4d42;hp=337c819c16379aa00eca74d7b43b671891e167f5;hpb=5794d89bd24981d2974f1504a04bf09b7efaf251;p=gnulib.git diff --git a/tests/test-stat.c b/tests/test-stat.c index 337c819c1..4cda08908 100644 --- a/tests/test-stat.c +++ b/tests/test-stat.c @@ -1,5 +1,5 @@ /* Tests of stat. - 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 @@ -20,62 +20,37 @@ #include +/* Caution: stat may be a function-like macro. Although this + signature check must pass, it may be the signature of the real (and + broken) stat rather than rpl_stat. Most code should not use the + address of stat. */ +#include "signature.h" +SIGNATURE_CHECK (stat, int, (char const *, struct stat *)); + #include #include +#include #include -#include #include #include "pathmax.h" #include "same-inode.h" - -#define ASSERT(expr) \ - do \ - { \ - if (!(expr)) \ - { \ - fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ - fflush (stderr); \ - abort (); \ - } \ - } \ - while (0) +#include "macros.h" #define BASE "test-stat.t" -int -main () -{ - struct stat st1; - struct stat st2; - char cwd[PATH_MAX]; - - ASSERT (getcwd (cwd, PATH_MAX) == cwd); - ASSERT (stat (".", &st1) == 0); - ASSERT (stat ("./", &st2) == 0); - ASSERT (SAME_INODE (st1, st2)); - ASSERT (stat (cwd, &st2) == 0); - ASSERT (SAME_INODE (st1, st2)); - ASSERT (stat ("/", &st1) == 0); - ASSERT (stat ("///", &st2) == 0); - ASSERT (SAME_INODE (st1, st2)); +#include "test-stat.h" - errno = 0; - ASSERT (stat ("", &st1) == -1); - ASSERT (errno == ENOENT); - errno = 0; - ASSERT (stat ("nosuch", &st1) == -1); - ASSERT (errno == ENOENT); - errno = 0; - ASSERT (stat ("nosuch/", &st1) == -1); - ASSERT (errno == ENOENT); - - ASSERT (close (creat (BASE "file", 0600)) == 0); - ASSERT (stat (BASE "file", &st1) == 0); - errno = 0; - ASSERT (stat (BASE "file/", &st1) == -1); - ASSERT (errno == ENOTDIR); - ASSERT (unlink (BASE "file") == 0); +/* Wrapper around stat, which works even if stat is a function-like + macro, where test_stat_func(stat) would do the wrong thing. */ +static int +do_stat (char const *name, struct stat *st) +{ + return stat (name, st); +} - return 0; +int +main (void) +{ + return test_stat_func (do_stat, true); }