#include #include #include #include #include static char const *names[] = { "file/", "file/.", "file/./" }; int main (void) { struct stat st; int i; if (open ("file", O_WRONLY | O_CREAT, 0666) < 0) return perror ("file"), 1; int status = 0; for (i = 0; i < 3; i++) { char const *name = names[i]; if (lstat (name, &st) == 0) printf ("lstat succeeds on \"%s\"!\n", name), status = 1; else if (errno != ENOTDIR) perror (name), status = 1; if (faccessat (AT_FDCWD, name, F_OK, AT_EACCESS) == 0) printf ("faccessat succeeds on \"%s\"!\n", name), status = 1; else if (errno != ENOTDIR) perror (name), status = 1; } return status; }