random: Fix behavior of kernel option "-rs".
[pintos-anon] / src / tests / filesys / extended / dir-rm-tree.c
1 /* Creates directories /0/0/0 through /3/2/2 and files in the
2    leaf directories, then removes them. */
3
4 #include <stdarg.h>
5 #include <stdio.h>
6 #include <syscall.h>
7 #include "tests/filesys/extended/mk-tree.h"
8 #include "tests/lib.h"
9 #include "tests/main.h"
10
11 static void remove_tree (int at, int bt, int ct, int dt);
12
13 void
14 test_main (void) 
15 {
16   make_tree (4, 3, 3, 4);
17   remove_tree (4, 3, 3, 4);
18 }
19
20 static void do_remove (const char *format, ...) PRINTF_FORMAT (1, 2);
21
22 static void
23 remove_tree (int at, int bt, int ct, int dt) 
24 {
25   char try[128];
26   int a, b, c, d;
27
28   msg ("removing /0/0/0/0 through /%d/%d/%d/%d...",
29        at - 1, bt - 1, ct - 1, dt - 1);
30   quiet = true;
31   for (a = 0; a < at; a++) 
32     {
33       for (b = 0; b < bt; b++) 
34         {
35           for (c = 0; c < ct; c++) 
36             {
37               for (d = 0; d < dt; d++)
38                 do_remove ("/%d/%d/%d/%d", a, b, c, d);
39               do_remove ("/%d/%d/%d", a, b, c);
40             }
41           do_remove ("/%d/%d", a, b);
42         }
43       do_remove ("/%d", a);
44     }
45   quiet = false;
46
47   snprintf (try, sizeof (try), "/%d/%d/%d/%d", at - 1, 0, ct - 1, 0);
48   CHECK (open (try) == -1, "open \"%s\" (must return -1)", try);
49 }
50
51 static void
52 do_remove (const char *format, ...) 
53 {
54   char name[128];
55   va_list args;
56
57   va_start (args, format);
58   vsnprintf (name, sizeof name, format, args);
59   va_end (args);
60
61   CHECK (remove (name), "remove \"%s\"", name);
62 }