Fix problems with FFmpeg files that have all-zero stream IDs.
[dcpomatic.git] / src / lib / scp_dcp_job.cc
index a9fdfefda2f01671698c83279a624e5102ed894d..779c8dd44b2abf131ea8490c73c4f17f8b155ef1 100644 (file)
@@ -96,7 +96,7 @@ public:
 };
 
 
-SCPDCPJob::SCPDCPJob (shared_ptr<Film> f)
+SCPDCPJob::SCPDCPJob (shared_ptr<const Film> f)
        : Job (f)
        , _status (_("Waiting"))
 {
@@ -150,7 +150,7 @@ SCPDCPJob::run ()
                throw NetworkError (String::compose (_("Could not create remote directory %1 (%2)"), _film->dcp_name(), ssh_get_error (ss.session)));
        }
        
-       string const dcp_dir = _film->dir (_film->dcp_name());
+       boost::filesystem::path const dcp_dir = _film->dir (_film->dcp_name());
        
        boost::uintmax_t bytes_to_transfer = 0;
        for (boost::filesystem::directory_iterator i = boost::filesystem::directory_iterator (dcp_dir); i != boost::filesystem::directory_iterator(); ++i) {
@@ -179,11 +179,13 @@ SCPDCPJob::run ()
                        int const t = min (to_do, buffer_size);
                        size_t const read = fread (buffer, 1, t, f);
                        if (read != size_t (t)) {
+                               fclose (f);
                                throw ReadFileError (boost::filesystem::path (*i).string());
                        }
                        
                        r = ssh_scp_write (sc.scp, buffer, t);
                        if (r != SSH_OK) {
+                               fclose (f);
                                throw NetworkError (String::compose (_("Could not write to remote file (%1)"), ssh_get_error (ss.session)));
                        }
                        to_do -= t;