fix algorithm::find_last + filesystem module fixes
This commit is contained in:
parent
75a9f284a4
commit
c33fb68d89
|
@ -285,7 +285,7 @@ R find_last(R range, const T &v) {
|
||||||
R r = find(prev, v);
|
R r = find(prev, v);
|
||||||
if (r.empty())
|
if (r.empty())
|
||||||
break;
|
break;
|
||||||
prev = r;
|
range = r;
|
||||||
}
|
}
|
||||||
return range;
|
return range;
|
||||||
}
|
}
|
||||||
|
|
|
@ -167,9 +167,10 @@ private:
|
||||||
struct DirectoryRange;
|
struct DirectoryRange;
|
||||||
|
|
||||||
struct DirectoryStream {
|
struct DirectoryStream {
|
||||||
DirectoryStream(): p_d(), p_owned(false) {}
|
DirectoryStream(): p_d(), p_path(), p_owned(false) {}
|
||||||
DirectoryStream(const DirectoryStream &) = delete;
|
DirectoryStream(const DirectoryStream &) = delete;
|
||||||
DirectoryStream(DirectoryStream &&s): p_d(s.p_d), p_owned(s.p_owned) {
|
DirectoryStream(DirectoryStream &&s): p_d(s.p_d), p_path(move(s.p_path)),
|
||||||
|
p_owned(s.p_owned) {
|
||||||
s.p_d = nullptr;
|
s.p_d = nullptr;
|
||||||
s.p_owned = false;
|
s.p_owned = false;
|
||||||
}
|
}
|
||||||
|
@ -193,6 +194,7 @@ struct DirectoryStream {
|
||||||
memcpy(buf, &path[0], path.size());
|
memcpy(buf, &path[0], path.size());
|
||||||
buf[path.size()] = '\0';
|
buf[path.size()] = '\0';
|
||||||
p_d = opendir(buf);
|
p_d = opendir(buf);
|
||||||
|
p_path = path;
|
||||||
p_owned = true;
|
p_owned = true;
|
||||||
return is_open();
|
return is_open();
|
||||||
}
|
}
|
||||||
|
@ -227,11 +229,17 @@ struct DirectoryStream {
|
||||||
if (!p_d) return FileInfo();
|
if (!p_d) return FileInfo();
|
||||||
auto rd = readdir(p_d);
|
auto rd = readdir(p_d);
|
||||||
if (!rd) return FileInfo();
|
if (!rd) return FileInfo();
|
||||||
return FileInfo((const char *)rd->d_name);
|
if (!strcmp(rd->d_name, ".") || !strcmp(rd->d_name, ".."))
|
||||||
|
return read();
|
||||||
|
String ap = p_path;
|
||||||
|
ap += PATH_SEPARATOR;
|
||||||
|
ap += (const char *)rd->d_name;
|
||||||
|
return FileInfo(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
void swap(DirectoryStream &s) {
|
void swap(DirectoryStream &s) {
|
||||||
detail::swap_adl(p_d, s.p_d);
|
detail::swap_adl(p_d, s.p_d);
|
||||||
|
detail::swap_adl(p_path, s.p_path);
|
||||||
detail::swap_adl(p_owned, s.p_owned);
|
detail::swap_adl(p_owned, s.p_owned);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,6 +247,7 @@ struct DirectoryStream {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DIR *p_d;
|
DIR *p_d;
|
||||||
|
String p_path;
|
||||||
bool p_owned;
|
bool p_owned;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue