1#include <limits.h>
2#include <stdlib.h>
3#include <stdio.h>
4#include <string.h>
5#include <unistd.h>
6#include <sys/stat.h>
7#include <sys/types.h>
8
9int
10main (int argc, char **argv)
11{
12  char template[] = "/tmp/wd_test_XXXXXX";
13  char *tmpdir = mkdtemp(template);
14  if (tmpdir == NULL)
15    {
16      perror ("Couldn't mkdtemp");
17      exit (-1);
18    }
19
20  if (chdir (tmpdir) != 0)
21    {
22      perror ("Couldn't chdir into tmpdir");
23      exit (-1);
24    }
25
26  /* Go deep. */
27  int dirslen = PATH_MAX;
28  while (dirslen > 0)
29    {
30      /* We don't do any error checking in case some OS fails. */
31      mkdir ("subdir", S_IRWXU);
32      chdir ("subdir");
33      dirslen -= strlen ("subdir");
34    }
35
36  /* Make one component inaccessible. */
37  chmod(tmpdir, 0);
38
39  /* Remove the current dir (don't check error, might fail). */
40  rmdir ("../subdir");
41
42  execlp ("echo", "echo", "Hello", "World", (char *) NULL);
43  perror ("Couldn't execlp");
44  return -1;
45}
46