force creation of MIDI (SMF) files on disk whenever an SMF object is created, to...
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 21 Jul 2010 13:02:58 +0000 (13:02 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 21 Jul 2010 13:02:58 +0000 (13:02 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@7459 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/evoral/src/SMF.cpp

index ae3c8781a53976c49173f463e4806fb406c57d43..210692f114ff9abca249764a15316fca5a0273d1 100644 (file)
@@ -128,11 +128,12 @@ SMF::create(const std::string& path, int track, uint16_t ppqn) THROW_FILE_ERROR
        _file_path = path;
 
        _smf = smf_new();
-       if (smf_set_ppqn(_smf, ppqn) != 0) {
-               throw FileError();
-       }
 
        if (_smf == NULL) {
+                return -1;
+       }
+
+       if (smf_set_ppqn(_smf, ppqn) != 0) {
                return -1;
        }
 
@@ -147,6 +148,21 @@ SMF::create(const std::string& path, int track, uint16_t ppqn) THROW_FILE_ERROR
                return -2;
 
        _smf_track->next_event_number = 0;
+
+        {
+                /* put a stub file on disk */
+
+                PBD::StdioFileDescriptor d (_file_path, "w+");
+                FILE* f = d.allocate ();
+                if (f == 0) {
+                        return -1;
+                }
+                
+                if (smf_save (_smf, f)) {
+                        return -1;
+                }
+        }
+
        _empty = true;
 
        return 0;