2024-01-25 14:12:00 +00:00
|
|
|
--- a/tools/cpp/src/cpp-build/generate_geocoding_data.cc.orig 1970-01-01 01:00:01.000000000 +0100
|
|
|
|
+++ b/tools/cpp/src/cpp-build/generate_geocoding_data.cc 2024-01-16 19:03:45.409089423 +0100
|
|
|
|
@@ -94,7 +94,8 @@
|
2023-05-24 13:37:59 +00:00
|
|
|
DirEntryKinds kind_;
|
|
|
|
};
|
|
|
|
|
|
|
|
-// Lists directory entries in path. "." and ".." are excluded. Returns true on
|
|
|
|
+// Lists directory entries in path. "." and ".." are excluded. Entries are
|
|
|
|
+// returned in a consistent order to ensure reproducibility. Returns true on
|
|
|
|
// success.
|
|
|
|
bool ListDirectory(const string& path, vector<DirEntry>* entries) {
|
|
|
|
entries->clear();
|
2024-01-25 14:12:00 +00:00
|
|
|
@@ -114,8 +115,14 @@
|
|
|
|
// http://pubs.opengroup.org/onlinepubs/9699919799/functions/readdir.html
|
|
|
|
errno = 0;
|
|
|
|
entry = readdir(dir);
|
|
|
|
+ if (errno != 0) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
if (entry == NULL) {
|
|
|
|
- return errno == 0;
|
|
|
|
+ std::sort(
|
|
|
|
+ entries->begin(), entries->end(),
|
|
|
|
+ [](const DirEntry& a, const DirEntry& b) { return a.name() < b.name(); });
|
|
|
|
+ return true;
|
2023-05-24 13:37:59 +00:00
|
|
|
}
|
2024-01-25 14:12:00 +00:00
|
|
|
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
|
|
|
|
continue;
|