summaryrefslogtreecommitdiffstats
path: root/rtemstoolkit
diff options
context:
space:
mode:
Diffstat (limited to 'rtemstoolkit')
-rw-r--r--rtemstoolkit/rld-path.cpp18
-rw-r--r--rtemstoolkit/rld-path.h6
-rw-r--r--rtemstoolkit/rld.cpp22
3 files changed, 44 insertions, 2 deletions
diff --git a/rtemstoolkit/rld-path.cpp b/rtemstoolkit/rld-path.cpp
index 333c1c2..c848676 100644
--- a/rtemstoolkit/rld-path.cpp
+++ b/rtemstoolkit/rld-path.cpp
@@ -214,5 +214,23 @@ namespace rld
throw rld::error ("Not found", "unlinking: " + path);
}
}
+
+ void
+ get_system_path (paths& paths)
+ {
+ const char* path = ::getenv ("PATH");
+ strings ps;
+ rld::split (ps, path, RLD_PATHSTR_SEPARATOR);
+ if (ps.size ())
+ {
+ for (strings::iterator psi = ps.begin ();
+ psi != ps.end ();
+ ++psi)
+ {
+ if (check_directory (*psi))
+ paths.push_back (*psi);
+ }
+ }
+ }
}
}
diff --git a/rtemstoolkit/rld-path.h b/rtemstoolkit/rld-path.h
index d73c59b..80921a1 100644
--- a/rtemstoolkit/rld-path.h
+++ b/rtemstoolkit/rld-path.h
@@ -144,6 +144,12 @@ namespace rld
*/
void unlink (const std::string& path, bool not_present_error = false);
+ /**
+ * Return the system path as a set of strings.
+ *
+ * @param paths The split path paths.
+ */
+ void get_system_path (paths& paths);
}
}
diff --git a/rtemstoolkit/rld.cpp b/rtemstoolkit/rld.cpp
index c3368f9..b3e6fdc 100644
--- a/rtemstoolkit/rld.cpp
+++ b/rtemstoolkit/rld.cpp
@@ -235,7 +235,25 @@ namespace rld
void
set_progname (const std::string& progname_)
{
- progname = rld::path::path_abs (progname_);
+ if (rld::path::check_file (progname_))
+ progname = rld::path::path_abs (progname_);
+ else
+ {
+ rld::path::paths paths;
+ rld::path::get_system_path (paths);
+ for (rld::path::paths::const_iterator path = paths.begin ();
+ path != paths.end ();
+ ++path)
+ {
+ std::string pp;
+ rld::path::path_join (*path, progname_, pp);
+ if (rld::path::check_file (pp))
+ {
+ progname = rld::path::path_abs (pp);
+ break;
+ }
+ }
+ }
}
const std::string
@@ -262,7 +280,7 @@ namespace rld
std::string pp = get_program_path ();
if (rld::path::basename (pp) == "bin")
return rld::path::dirname (pp);
- return "";
+ return pp;
}
void