Skip to content
Snippets Groups Projects
Commit 727beb79 authored by Eelco Dolstra's avatar Eelco Dolstra
Browse files

* Canonicalization: when hashing directories, sort the directory

  entries by name.
parent 2f04e710
No related branches found
No related tags found
No related merge requests found
...@@ -154,24 +154,30 @@ static void dumpEntries(const string & path, DumpSink & sink) ...@@ -154,24 +154,30 @@ static void dumpEntries(const string & path, DumpSink & sink)
{ {
DIR * dir = opendir(path.c_str()); DIR * dir = opendir(path.c_str());
if (!dir) throw SysError("opening directory " + path); if (!dir) throw SysError("opening directory " + path);
struct dirent * dirent;
/* !!! sort entries */ Strings names;
struct dirent * dirent;
while (errno = 0, dirent = readdir(dir)) { while (errno = 0, dirent = readdir(dir)) {
string name = dirent->d_name; string name = dirent->d_name;
if (name == "." || name == "..") continue; if (name == "." || name == "..") continue;
names.push_back(name);
}
if (errno) throw SysError("reading directory " + path);
sort(names.begin(), names.end());
for (Strings::iterator it = names.begin();
it != names.end(); it++)
{
writeString("entry", sink); writeString("entry", sink);
writeString("(", sink); writeString("(", sink);
writeString("name", sink); writeString("name", sink);
writeString(name, sink); writeString(*it, sink);
writeString("file", sink); writeString("file", sink);
dumpPath(path + "/" + name, sink); dumpPath(path + "/" + *it, sink);
writeString(")", sink); writeString(")", sink);
} }
if (errno) throw SysError("reading directory " + path);
closedir(dir); /* !!! close on exception */ closedir(dir); /* !!! close on exception */
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment