aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-08-12 03:49:37 +0000
committerNick Foster <nick@nerdnetworks.org>2010-08-16 17:29:22 -0700
commitf29306c54536d0bbe9f76b67f4c3651888bc485e (patch)
treeaa5eec558d895f9dccd684a75c4ec419079b5c1b
parent1bee816db5a925b17577010542fbbc459722f481 (diff)
downloaduhd-f29306c54536d0bbe9f76b67f4c3651888bc485e.tar.gz
uhd-f29306c54536d0bbe9f76b67f4c3651888bc485e.tar.bz2
uhd-f29306c54536d0bbe9f76b67f4c3651888bc485e.zip
uhd: avoid segfaults - use CPP macros for paths and dont split empty string
-rw-r--r--host/lib/constants.hpp.in7
-rw-r--r--host/lib/utils/paths.cpp12
2 files changed, 10 insertions, 9 deletions
diff --git a/host/lib/constants.hpp.in b/host/lib/constants.hpp.in
index 295c8f16c..aa51e558c 100644
--- a/host/lib/constants.hpp.in
+++ b/host/lib/constants.hpp.in
@@ -21,8 +21,9 @@
#include <uhd/config.hpp>
#include <string>
-static const std::string UHD_VERSION_STRING = "@CPACK_PACKAGE_VERSION@";
-static const std::string UHD_INSTALL_PREFIX = "@CMAKE_INSTALL_PREFIX@";
-static const std::string UHD_PKG_DATA_DIR = "@PKG_DATA_DIR@";
+//these should be pre-processor macros to avoid static initialization issues
+#define UHD_VERSION_STRING "@CPACK_PACKAGE_VERSION@"
+#define UHD_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@"
+#define UHD_PKG_DATA_DIR "@PKG_DATA_DIR@"
#endif /* INCLUDED_LIBUHD_CONSTANTS_HPP */
diff --git a/host/lib/utils/paths.cpp b/host/lib/utils/paths.cpp
index 0805a44fe..4029bd989 100644
--- a/host/lib/utils/paths.cpp
+++ b/host/lib/utils/paths.cpp
@@ -60,12 +60,14 @@ static std::vector<fs::path> get_env_paths(const std::string &var_name){
//split the path at the path separators
std::vector<std::string> path_strings;
- boost::split(path_strings, var_value, boost::is_any_of(env_path_sep));
+ if (not var_value.empty()) boost::split(//dont split empty strings
+ path_strings, var_value, boost::is_any_of(env_path_sep)
+ );
//convert to filesystem path, filter blank paths
std::vector<fs::path> paths;
BOOST_FOREACH(std::string &path_string, path_strings){
- if (path_string.size() == 0) continue;
+ if (path_string.empty()) continue;
paths.push_back(fs::system_complete(path_string));
}
return paths;
@@ -74,17 +76,15 @@ static std::vector<fs::path> get_env_paths(const std::string &var_name){
/***********************************************************************
* Get a list of special purpose paths
**********************************************************************/
-static const fs::path pkg_data_path = fs::path(UHD_INSTALL_PREFIX) / UHD_PKG_DATA_DIR;
-
std::vector<fs::path> get_image_paths(void){
std::vector<fs::path> paths = get_env_paths("UHD_IMAGE_PATH");
- paths.push_back(pkg_data_path / "images");
+ paths.push_back(fs::path(UHD_INSTALL_PREFIX) / UHD_PKG_DATA_DIR / "images");
return paths;
}
std::vector<fs::path> get_module_paths(void){
std::vector<fs::path> paths = get_env_paths("UHD_MODULE_PATH");
- paths.push_back(pkg_data_path / "modules");
+ paths.push_back(fs::path(UHD_INSTALL_PREFIX) / UHD_PKG_DATA_DIR / "modules");
return paths;
}