#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;
}