summaryrefslogtreecommitdiff
path: root/src/KM_fileio.cpp
diff options
context:
space:
mode:
authorjhurst <jhurst@cinecert.com>2016-12-03 21:26:24 +0000
committerjhurst <>2016-12-03 21:26:24 +0000
commit74e6b1105dffe52c6f347d723507ab346eabbb5a (patch)
treeb0e166ee8988cc9f2b150691effd0c4a1fa77cbd /src/KM_fileio.cpp
parent779d581d1176e0d09ae13a65d8047509bfa11eeb (diff)
o Fixed *all* Partiton version numbers in AS-02 files
Diffstat (limited to 'src/KM_fileio.cpp')
-rw-r--r--src/KM_fileio.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/KM_fileio.cpp b/src/KM_fileio.cpp
index b35e8ac..231f3b8 100644
--- a/src/KM_fileio.cpp
+++ b/src/KM_fileio.cpp
@@ -48,6 +48,10 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <mach-o/dyld.h>
#endif
+#if defined(__OpenBSD__)
+#include <sys/sysctl.h>
+#endif
+
using namespace Kumu;
#ifdef KM_WIN32
@@ -658,17 +662,23 @@ Kumu::GetExecutablePath(const std::string& default_path)
size_t size = X_BUFSIZE;
ssize_t rc = readlink("/proc/self/exe", path, size);
success = ( rc != -1 );
-#elif defined(__OpenBSD__) || defined(__FreeBSD__)
- size_t size = X_BUFSIZE;
- ssize_t rc = readlink("/proc/curproc/file", path, size);
- success = ( rc != -1 );
+#elif defined(__OpenBSD__)
+ // This fails if the CWD changes after the program has started but before the
+ // call to GetExecutablePath(). For least surprise, call GetExecutablePath()
+ // immediately in main() and save the value for later use.
+ const, char* p = getenv("_");
+ if ( p )
+ {
+ return Kumu::PathMakeAbsolute(p);
+ }
#elif defined(__FreeBSD__)
+ // requires procfs
size_t size = X_BUFSIZE;
ssize_t rc = readlink("/proc/curproc/file", path, size);
success = ( rc != -1 );
#elif defined(__NetBSD__)
size_t size = X_BUFSIZE;
- ssize_t rc = readlink("/proc/curproc/file", path, size);
+ ssize_t rc = readlink("/proc/curproc/exe", path, size);
success = ( rc != -1 );
#elif defined(__sun) && defined(__SVR4)
size_t size = X_BUFSIZE;