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