X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fcross.cc;h=5d35d5a4bbcb28da70ca7b77f0ceec678c1a826e;hp=b9b2153030d81dc66f63382101f0c1f4848c3c15;hb=5eb8b5c3a1566aef638e9d9df03b88d320735092;hpb=1b1137dac3167de7e4bb23d86a4f3505ad880675 diff --git a/src/lib/cross.cc b/src/lib/cross.cc index b9b215303..5d35d5a4b 100644 --- a/src/lib/cross.cc +++ b/src/lib/cross.cc @@ -65,7 +65,7 @@ using boost::shared_ptr; /** @param s Number of seconds to sleep for */ void -dcpomatic_sleep (int s) +dcpomatic_sleep_seconds (int s) { #ifdef DCPOMATIC_POSIX sleep (s); @@ -75,6 +75,17 @@ dcpomatic_sleep (int s) #endif } +void +dcpomatic_sleep_milliseconds (int ms) +{ +#ifdef DCPOMATIC_POSIX + usleep (ms * 1000); +#endif +#ifdef DCPOMATIC_WINDOWS + Sleep (ms); +#endif +} + /** @return A string of CPU information (model name etc.) */ string cpu_info () @@ -300,9 +311,17 @@ openssl_path () boost::filesystem::path path = dir; path /= "openssl.exe"; return path; -#else - /* We assume that it's on the path for Linux and OS X */ - return "openssl"; +#endif + +#ifdef DCPOMATIC_OSX + boost::filesystem::path path = app_contents(); + path /= "MacOS"; + path /= "openssl"; + return path; +#endif + +#ifdef DCPOMATIC_LINUX + return "dcpomatic2_openssl"; #endif } @@ -337,6 +356,7 @@ void Waker::nudge () { #ifdef DCPOMATIC_WINDOWS + boost::mutex::scoped_lock lm (_mutex); SetThreadExecutionState (ES_SYSTEM_REQUIRED); #endif } @@ -344,6 +364,7 @@ Waker::nudge () Waker::Waker () { #ifdef DCPOMATIC_OSX + boost::mutex::scoped_lock lm (_mutex); /* We should use this */ // IOPMAssertionCreateWithName (kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, CFSTR ("Encoding DCP"), &_assertion_id); /* but it's not available on 10.5, so we use this */ @@ -354,6 +375,7 @@ Waker::Waker () Waker::~Waker () { #ifdef DCPOMATIC_OSX + boost::mutex::scoped_lock lm (_mutex); IOPMAssertionRelease (_assertion_id); #endif } @@ -471,6 +493,46 @@ home_directory () return getenv("HOME"); #endif #ifdef DCPOMATIC_WINDOWS - return getenv("HOMEDRIVE") / getenv("HOMEPATH"); + return boost::filesystem::path(getenv("HOMEDRIVE")) / boost::filesystem::path(getenv("HOMEPATH")); +#endif +} + +string +command_and_read (string cmd) +{ +#ifdef DCPOMATIC_LINUX + FILE* pipe = popen (cmd.c_str(), "r"); + if (!pipe) { + throw runtime_error ("popen failed"); + } + + string result; + char buffer[128]; + try { + while (fgets(buffer, sizeof(buffer), pipe)) { + result += buffer; + } + } catch (...) { + pclose (pipe); + throw; + } + + pclose (pipe); + return result; +#endif + + return ""; +} + +/** @return true if this process is a 32-bit one running on a 64-bit-capable OS */ +bool +running_32_on_64 () +{ +#ifdef DCPOMATIC_WINDOWS + BOOL p; + IsWow64Process (GetCurrentProcess(), &p); + return p; #endif + /* XXX: assuming nobody does this on Linux / OS X */ + return false; }