X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcross.cc;h=8785553cbe32ccfc3f35656739f6b22432eab374;hb=2e504b33eb9f38cac629ad31b7c107fb0cf5efda;hp=30fe887f80787297fa46b6f908d3dd1099097dd9;hpb=1e51605c2e235aed0debe80216755b51b2fec17c;p=dcpomatic.git diff --git a/src/lib/cross.cc b/src/lib/cross.cc index 30fe887f8..8785553cb 100644 --- a/src/lib/cross.cc +++ b/src/lib/cross.cc @@ -34,6 +34,13 @@ #ifdef DCPOMATIC_OSX #include #include +#include +#endif +#ifdef DCPOMATIC_POSIX +#include +#include +#include +#include #endif #include "exceptions.h" @@ -45,6 +52,7 @@ using std::wstring; using std::make_pair; using boost::shared_ptr; +/** @param s Number of seconds to sleep for */ void dcpomatic_sleep (int s) { @@ -63,6 +71,9 @@ cpu_info () string info; #ifdef DCPOMATIC_LINUX + /* This use of ifstream is ok; the filename can never + be non-Latin + */ ifstream f ("/proc/cpuinfo"); while (f.good ()) { string l; @@ -127,11 +138,9 @@ app_contents () } boost::filesystem::path path (buffer); - std::cout << "start " << path << "\n"; - path.remove_filename (); - std::cout << "then " << path << "\n"; - path.remove_filename (); - std::cout << "and then " << path << "\n"; + path = boost::filesystem::canonical (path); + path = path.parent_path (); + path = path.parent_path (); return path; } #endif @@ -179,7 +188,7 @@ run_ffprobe (boost::filesystem::path content, boost::filesystem::path out, share return; } - FILE* o = fopen (out.string().c_str(), "w"); + FILE* o = fopen_boost (out, "w"); if (!o) { log->log ("ffprobe call failed (could not create output file)"); return; @@ -264,3 +273,54 @@ openssl_path () #endif } + +/* Apparently there is no way to create an ofstream using a UTF-8 + filename under Windows. We are hence reduced to using fopen + with this wrapper. +*/ +FILE * +fopen_boost (boost::filesystem::path p, string t) +{ +#ifdef DCPOMATIC_WINDOWS + wstring w (t.begin(), t.end()); + /* c_str() here should give a UTF-16 string */ + return _wfopen (p.c_str(), w.c_str ()); +#else + return fopen (p.c_str(), t.c_str ()); +#endif +} + +int +dcpomatic_fseek (FILE* stream, int64_t offset, int whence) +{ +#ifdef DCPOMATIC_WINDOWS + return _fseeki64 (stream, offset, whence); +#else + return fseek (stream, offset, whence); +#endif +} + +void +Waker::nudge () +{ +#ifdef DCPOMATIC_WINDOWS + SetThreadExecutionState (ES_CONTINUOUS); +#endif +} + +Waker::Waker () +{ +#ifdef DCPOMATIC_OSX + /* We should use this */ + // IOPMAssertionCreateWithName (kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, CFSTR ("Encoding DCP"), &_assertion_id); + /* but it's not available on 10.5, so we use this */ + IOPMAssertionCreate (kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, &_assertion_id); +#endif +} + +Waker::~Waker () +{ +#ifdef DCPOMATIC_OSX + IOPMAssertionRelease (_assertion_id); +#endif +}