Use copy_value instead of operator* in dirit

上级 b6be3a2f
......@@ -52,7 +52,7 @@ ls(const char *path)
} else if (ST_ISDIR(st)) {
dirit di(fd);
for (; !di.end(); ++di) {
const char *name = *di;
const char *name = di.copy_value();
if (xfstatat(fd, name, &st) < 0){
printf("ls: cannot stat %s\n", name);
......
......@@ -13,7 +13,7 @@ public:
return *this;
}
const char * operator*() {
const char * copy_value() {
char *buf = (char*)malloc(256);
return name(buf, 256);
}
......
......@@ -6,7 +6,7 @@ struct forwork : public work {
: it_(it), cond_(cond), body_(body), frame_(frame) {}
virtual void run() {
decltype(*it_) v = *it_;
decltype(it_.copy_value()) v = it_.copy_value();
++it_;
if (cond_(it_)) {
forwork<IT, BODY> *w = new forwork<IT, BODY>(it_, cond_, body_, frame_);
......@@ -41,7 +41,7 @@ wq_for(IT &init, bool (*cond)(IT &it), BODY body)
// XXX(sbw) should be able to coarsen loop
decltype(*init) v = *init;
decltype(init.copy_value()) v = init.copy_value();
++init;
if (cond(init)) {
forwork<IT, BODY> *w = new forwork<IT, BODY>(init, cond, body, frame);
......
......@@ -3,7 +3,7 @@
#include <dirent.h>
class dirit {
public:
public:
dirit(int fd) : fd_(fd), end_(false) {
d_ = fdopendir(fd);
ent_ = (struct dirent*)ebuf_;
......@@ -19,7 +19,7 @@ public:
return *this;
}
const char * operator*() {
const char * copy_value() {
char *buf = (char*)malloc(256);
return name(buf, 256);
}
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论