Use copy_value instead of operator* in dirit

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