fix use of sf_open_fd() instad of sf_open()
authorRobin Gareus <robin@gareus.org>
Fri, 7 Jun 2013 17:33:20 +0000 (19:33 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 7 Jun 2013 17:33:20 +0000 (19:33 +0200)
libs/pbd/sndfile_manager.cc

index c3fbd7be5bbceadb372201195f47cf67b433b978..53e3c5ce007c551b188314d985ef4abb30f5de93 100644 (file)
 #include "pbd/sndfile_manager.h"
 #include "pbd/debug.h"
 
+/*
+ * Neat solution to the Win32/OS2 binary file flage requirement.
+ * If O_BINARY isn't already defined by the inclusion of the system
+ * headers, set it to zero.
+ */
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+
 using namespace std;
 using namespace PBD;
 
@@ -89,8 +99,23 @@ bool
 SndFileDescriptor::open ()
 {
        /* we must have a lock on the FileManager's mutex */
-       
-       int fd = ::open(_path.c_str(), O_LARGEFILE | (_writeable ? (O_RDWR|O_CREAT) : O_RDONLY));
+
+       int fd, oflag, mode ;
+
+       if (_writeable) {
+               oflag = O_RDWR | O_CREAT | O_BINARY ;
+               mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
+       } else {
+               oflag = O_RDONLY | O_BINARY ;
+               mode = 0 ;
+       }
+
+       if (mode == 0) {
+               fd = ::open (_path.c_str(), oflag) ;
+       } else {
+               fd = ::open (_path.c_str(), oflag, mode) ;
+       }
+
        if (fd == -1) return false;
        fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);