Tweak mktree, replace for loop for wq_for loop

上级 cd18dd6d
...@@ -3,12 +3,20 @@ ...@@ -3,12 +3,20 @@
#include "user.h" #include "user.h"
#include "lib.h" #include "lib.h"
#include "fcntl.h" #include "fcntl.h"
#include "wq.hh"
#include "wqit.hh"
static int branch;
static void static void
dolevel(int fd, int branch, int depth) dolevel(int fd, int depth)
{ {
if (depth > 0) { if (depth > 0) {
for (int i = 0; i < branch; i++) { wq_num<int> it(0);
wq_for_serial<wq_num<int> >(it,
[](wq_num<int> &it)->bool { return it < branch; },
[&fd, &depth](int i)->void
{
char name[] = "a"; char name[] = "a";
*name += i; *name += i;
if (mkdirat(fd, name) < 0) if (mkdirat(fd, name) < 0)
...@@ -16,9 +24,9 @@ dolevel(int fd, int branch, int depth) ...@@ -16,9 +24,9 @@ dolevel(int fd, int branch, int depth)
int nfd = openat(fd, name, O_RDONLY); int nfd = openat(fd, name, O_RDONLY);
if (nfd < 0) if (nfd < 0)
die("openat"); die("openat: %s at %u", name, depth);
dolevel(nfd, branch, depth-1); dolevel(nfd, depth-1);
} });
} }
close(fd); close(fd);
...@@ -30,8 +38,10 @@ main(int ac, char **av) ...@@ -30,8 +38,10 @@ main(int ac, char **av)
if (ac < 4) if (ac < 4)
die("usage: %s dir branch depth", av[0]); die("usage: %s dir branch depth", av[0]);
initwq();
const char *dir = av[1]; const char *dir = av[1];
int branch = atoi(av[2]); branch = atoi(av[2]);
int depth = atoi(av[3]); int depth = atoi(av[3]);
if (mkdir(dir)) if (mkdir(dir))
...@@ -41,5 +51,5 @@ main(int ac, char **av) ...@@ -41,5 +51,5 @@ main(int ac, char **av)
if (fd < 0) if (fd < 0)
die("open"); die("open");
dolevel(fd, branch, depth); dolevel(fd, depth);
} }
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论