00001
00002
00003
00004 #include <stdarg.h>
00005 #include <stdio.h>
00006 #include <syscall.h>
00007 #include "tests/filesys/extended/mk-tree.h"
00008 #include "tests/lib.h"
00009 #include "tests/main.h"
00010
00011 static void remove_tree (int at, int bt, int ct, int dt);
00012
00013 void
00014 test_main (void)
00015 {
00016 make_tree (4, 3, 3, 4);
00017 remove_tree (4, 3, 3, 4);
00018 }
00019
00020 static void do_remove (const char *format, ...) PRINTF_FORMAT (1, 2);
00021
00022 static void
00023 remove_tree (int at, int bt, int ct, int dt)
00024 {
00025 char try[128];
00026 int a, b, c, d;
00027
00028 msg ("removing /0/0/0/0 through /%d/%d/%d/%d...",
00029 at - 1, bt - 1, ct - 1, dt - 1);
00030 quiet = true;
00031 for (a = 0; a < at; a++)
00032 {
00033 for (b = 0; b < bt; b++)
00034 {
00035 for (c = 0; c < ct; c++)
00036 {
00037 for (d = 0; d < dt; d++)
00038 do_remove ("/%d/%d/%d/%d", a, b, c, d);
00039 do_remove ("/%d/%d/%d", a, b, c);
00040 }
00041 do_remove ("/%d/%d", a, b);
00042 }
00043 do_remove ("/%d", a);
00044 }
00045 quiet = false;
00046
00047 snprintf (try, sizeof (try), "/%d/%d/%d/%d", at - 1, 0, ct - 1, 0);
00048 CHECK (open (try) == -1, "open \"%s\" (must return -1)", try);
00049 }
00050
00051 static void
00052 do_remove (const char *format, ...)
00053 {
00054 char name[128];
00055 va_list args;
00056
00057 va_start (args, format);
00058 vsnprintf (name, sizeof name, format, args);
00059 va_end (args);
00060
00061 CHECK (remove (name), "remove \"%s\"", name);
00062 }