// Test program to demonstrate that Linux does not support AT_SYMLINK_NOFOLLOW // Copyright Duncan Exon Smith 2012 // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // Test this by running: // // rm -rf data && mkdir data && g++ -otest-fchmodat fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp && (cd data && ../test-fchmodat) // // If no assertions go off, then it looks like fchmodat is supported, // but AT_SYMLINK_NOFOLLOW is not supported. #include #include #include #include #include #ifdef NDEBUG # error This program depends on assert() so makes no sense if NDEBUG is defined #endif int main(int argc, char *argv[]) { { std::ofstream file("out"); file << "contents"; } assert(!::symlink("out", "sym")); assert(!::fchmodat(AT_FDCWD, "out", S_IRUSR | S_IWUSR | S_IXUSR, 0)); assert(!::fchmodat(AT_FDCWD, "sym", S_IRUSR | S_IWUSR | S_IXUSR, 0)); assert(::fchmodat(AT_FDCWD, "sym", S_IRUSR | S_IWUSR | S_IXUSR, AT_SYMLINK_NOFOLLOW) == -1); assert(errno == ENOTSUP); return 0; }