File: nocwd.c

package info (click to toggle)
valgrind 1%3A3.14.0-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 156,980 kB
  • sloc: ansic: 728,128; exp: 26,134; xml: 22,268; cpp: 7,638; asm: 7,312; makefile: 6,102; perl: 5,910; sh: 5,717
file content (45 lines) | stat: -rw-r--r-- 940 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#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;
}