summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Belt <andrewpbelt@gmail.com>2024-05-07 07:14:11 -0400
committerAndrew Belt <andrewpbelt@gmail.com>2024-05-07 07:14:11 -0400
commit5bf14750f0d8be98a609647cf118555b278f002a (patch)
tree9c2469924bda2bbbb8aa3a28980f189c5ab081ca
parentfc0a319ea4db898c4eeeecd9263add33ce6b300f (diff)
Remove system::glob(). Use regex to find Fundamental package path in plugin::init().
-rw-r--r--include/system.hpp4
-rw-r--r--src/plugin.cpp12
-rw-r--r--src/system.cpp17
3 files changed, 11 insertions, 22 deletions
diff --git a/include/system.hpp b/include/system.hpp
index 4419939c..16172c91 100644
--- a/include/system.hpp
+++ b/include/system.hpp
@@ -24,10 +24,6 @@ std::string join(const std::string& path1, const std::string& path2, Paths... pa
`depth` is the number of directories to recurse. 0 depth does not recurse. -1 depth recurses infinitely.
*/
std::vector<std::string> getEntries(const std::string& dirPath, int depth = 0);
-/** Expands a glob pattern such as `dir/file*.txt` to a list of paths.
-Paths are sorted.
-*/
-std::vector<std::string> glob(const std::string& pattern);
bool exists(const std::string& path);
/** Returns whether the given path is a file. */
bool isFile(const std::string& path);
diff --git a/src/plugin.cpp b/src/plugin.cpp
index cff9a5c5..68940de7 100644
--- a/src/plugin.cpp
+++ b/src/plugin.cpp
@@ -4,6 +4,7 @@
#include <map>
#include <stdexcept>
#include <tuple>
+#include <regex>
#include <sys/types.h>
#include <sys/stat.h>
@@ -244,6 +245,15 @@ static void extractPackages(std::string path) {
}
}
+static std::string getFundamentalPackagePath() {
+ std::regex r("Fundamental-.*-" + APP_OS + "-" + APP_CPU + "\\.vcvplugin");
+ for (const std::string& path : system::getEntries(asset::systemDir)) {
+ if (std::regex_match(system::getFilename(path), r))
+ return path;
+ }
+ return "";
+}
+
////////////////////
// public API
////////////////////
@@ -284,7 +294,7 @@ void init() {
// If Fundamental wasn't loaded, copy the bundled Fundamental package and load it
if (!settings::devMode && !getPlugin("Fundamental")) {
- std::string fundamentalPackage = get(system::glob(asset::system("Fundamental-*-" + APP_OS + "-" + APP_CPU + ".vcvplugin")), 0);
+ std::string fundamentalPackage = getFundamentalPackagePath();
std::string fundamentalDir = system::join(pluginsPath, "Fundamental");
if (fundamentalPackage != "" && system::isFile(fundamentalPackage)) {
INFO("Extracting bundled Fundamental package");
diff --git a/src/system.cpp b/src/system.cpp
index 2e0a1bc3..d4130b18 100644
--- a/src/system.cpp
+++ b/src/system.cpp
@@ -9,7 +9,6 @@
#include <dirent.h>
#include <sys/stat.h>
#include <cxxabi.h> // for abi::__cxa_demangle
-#include <glob.h>
#if defined ARCH_LIN || defined ARCH_MAC
#include <pthread.h>
@@ -89,22 +88,6 @@ std::vector<std::string> getEntries(const std::string& dirPath, int depth) {
}
-std::vector<std::string> glob(const std::string& pattern) {
- glob_t glob_result;
- memset(&glob_result, 0, sizeof(glob_result));
- std::vector<std::string> paths;
-
- if (!glob(pattern.c_str(), GLOB_BRACE, NULL, &glob_result)) {
- for (size_t i = 0; i < glob_result.gl_pathc; i++) {
- paths.push_back(std::string(glob_result.gl_pathv[i]));
- }
- }
-
- globfree(&glob_result);
- return paths;
-}
-
-
bool exists(const std::string& path) {
try {
return fs::exists(fs::u8path(path));