diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2019-10-03 23:57:12 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2019-10-04 19:01:21 +0300 |
commit | 200bb4c60fa4bca408c94e5964f02de496401611 (patch) | |
tree | df8abc9793176a41e3dfc19022ae95933b4e7945 | |
parent | f102ea69cc6f85c7b79b7ee14e8a462e38bb3900 (diff) |
libcamera: ipa_manager: Sort IPA modules by name
Sort IPA modules by name when enumerating modules in a directory in
order to guarantee a stable ordering. This eases debugging by making
issues more reproducible.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r-- | src/libcamera/ipa_manager.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp index 708233e8..27aa1792 100644 --- a/src/libcamera/ipa_manager.cpp +++ b/src/libcamera/ipa_manager.cpp @@ -7,6 +7,7 @@ #include "ipa_manager.h" +#include <algorithm> #include <dirent.h> #include <string.h> #include <sys/types.h> @@ -112,7 +113,7 @@ int IPAManager::addDir(const char *libDir) if (!dir) return -errno; - unsigned int count = 0; + std::vector<std::string> paths; while ((ent = readdir(dir)) != nullptr) { int offset = strlen(ent->d_name) - 3; if (offset < 0) @@ -120,8 +121,16 @@ int IPAManager::addDir(const char *libDir) if (strcmp(&ent->d_name[offset], ".so")) continue; - IPAModule *ipaModule = new IPAModule(std::string(libDir) + - "/" + ent->d_name); + paths.push_back(std::string(libDir) + "/" + ent->d_name); + } + closedir(dir); + + /* Ensure a stable ordering of modules. */ + std::sort(paths.begin(), paths.end()); + + unsigned int count = 0; + for (const std::string &path : paths) { + IPAModule *ipaModule = new IPAModule(path); if (!ipaModule->isValid()) { delete ipaModule; continue; @@ -131,7 +140,6 @@ int IPAManager::addDir(const char *libDir) count++; } - closedir(dir); return count; } |