#include <limits.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
int
main (int argc, char **argv)
{
char template[] = "/tmp/wd_test_XXXXXX";
char *tmpdir = mkdtemp(template);
if (tmpdir == NULL)
{
perror ("Couldn't mkdtemp");
exit (-1);
}
if (chdir (tmpdir) != 0)
{
perror ("Couldn't chdir into tmpdir");
exit (-1);
}
/* Go deep. */
int dirslen = PATH_MAX;
while (dirslen > 0)
{
/* We don't do any error checking in case some OS fails. */
mkdir ("subdir", S_IRWXU);
chdir ("subdir");
dirslen -= strlen ("subdir");
}
/* Make one component inaccessible. */
chmod(tmpdir, 0);
/* Remove the current dir (don't check error, might fail). */
rmdir ("../subdir");
execlp ("echo", "echo", "Hello", "World", (char *) NULL);
perror ("Couldn't execlp");
return -1;
}