Even better open-file error reports.
authorCarl Hetherington <cth@carlh.net>
Sun, 21 Aug 2016 21:59:19 +0000 (22:59 +0100)
committerCarl Hetherington <cth@carlh.net>
Sun, 21 Aug 2016 21:59:19 +0000 (22:59 +0100)
src/lib/exceptions.cc
src/lib/exceptions.h
src/lib/ffmpeg.cc
src/lib/file_group.cc
src/lib/magick_image_proxy.cc
src/lib/reel_writer.cc
src/lib/util.cc
src/wx/config_dialog.cc

index f3e3a999c8a42ed230d88da04657ac9fc5d5984f..cef6e7447f765ad8430b89783e632b7217ca1472 100644 (file)
@@ -27,8 +27,14 @@ using std::string;
 using std::runtime_error;
 
 /** @param f File that we were trying to open */
 using std::runtime_error;
 
 /** @param f File that we were trying to open */
-OpenFileError::OpenFileError (boost::filesystem::path f, int error)
-       : FileError (String::compose (_("could not open file %1 (%2)"), f.string(), error), f)
+OpenFileError::OpenFileError (boost::filesystem::path f, int error, bool reading)
+       : FileError (
+               String::compose (
+                       reading ? _("could not open file %1 for reading (%2)") : _("could not open file %1 for writing (%2)"),
+                       f.string(),
+                       error),
+               f
+               )
 {
 
 }
 {
 
 }
index 1a32b5402194ba7357dfa385764c2b4b10d71b48..75f4a8cd1bc01fbafa03851c664f268e8a433ccf 100644 (file)
@@ -95,8 +95,11 @@ public:
 class OpenFileError : public FileError
 {
 public:
 class OpenFileError : public FileError
 {
 public:
-       /** @param f File that we were trying to open */
-       OpenFileError (boost::filesystem::path f, int error);
+       /** @param f File that we were trying to open.
+        *  @param error Code of error that occurred.
+        *  @param reading true if we were opening to read, false if opening to write.
+        */
+       OpenFileError (boost::filesystem::path f, int error, bool reading);
 };
 
 /** @class ReadFileError.
 };
 
 /** @class ReadFileError.
index f750cfd58118f37819bf6ed23ff5ad687b2ef4fd..4b95666b800cbf6525314b5525c4f6645bf61201 100644 (file)
@@ -133,7 +133,7 @@ FFmpeg::setup_general ()
 
        int e = avformat_open_input (&_format_context, 0, 0, &options);
        if (e < 0) {
 
        int e = avformat_open_input (&_format_context, 0, 0, &options);
        if (e < 0) {
-               throw OpenFileError (_ffmpeg_content->path(0).string(), e);
+               throw OpenFileError (_ffmpeg_content->path(0).string(), e, true);
        }
 
        if (avformat_find_stream_info (_format_context, 0) < 0) {
        }
 
        if (avformat_find_stream_info (_format_context, 0) < 0) {
index 90aa10e28beb9d86aef50479555f378bf524e39d..c2ff047af3d955c539384a5ed8105b977aa2c4cb 100644 (file)
@@ -92,7 +92,7 @@ FileGroup::ensure_open_path (size_t p) const
        _current_path = p;
        _current_file = fopen_boost (_paths[_current_path], "rb");
        if (_current_file == 0) {
        _current_path = p;
        _current_file = fopen_boost (_paths[_current_path], "rb");
        if (_current_file == 0) {
-               throw OpenFileError (_paths[_current_path], errno);
+               throw OpenFileError (_paths[_current_path], errno, true);
        }
 }
 
        }
 }
 
index 25935a8395bdc5e45d0f59fddf3c1ca352084b79..2d1867fcc14a972c2296465178c07f50e7a4321f 100644 (file)
@@ -43,7 +43,7 @@ MagickImageProxy::MagickImageProxy (boost::filesystem::path path)
        boost::uintmax_t const size = boost::filesystem::file_size (path);
        FILE* f = fopen_boost (path, "rb");
        if (!f) {
        boost::uintmax_t const size = boost::filesystem::file_size (path);
        FILE* f = fopen_boost (path, "rb");
        if (!f) {
-               throw OpenFileError (path, errno);
+               throw OpenFileError (path, errno, true);
        }
 
        uint8_t* data = new uint8_t[size];
        }
 
        uint8_t* data = new uint8_t[size];
index 6bc879db4b7731ec06ee94faed2d4799cdff3432..692134654a84b3301f40ec02fbae8660b19cc852 100644 (file)
@@ -128,13 +128,14 @@ ReelWriter::write_frame_info (Frame frame, Eyes eyes, dcp::FrameInfo info) const
 {
        FILE* file = 0;
        boost::filesystem::path info_file = _film->info_file (_period);
 {
        FILE* file = 0;
        boost::filesystem::path info_file = _film->info_file (_period);
-       if (boost::filesystem::exists (info_file)) {
+       bool const read = boost::filesystem::exists (info_file);
+       if (read) {
                file = fopen_boost (info_file, "r+b");
        } else {
                file = fopen_boost (info_file, "wb");
        }
        if (!file) {
                file = fopen_boost (info_file, "r+b");
        } else {
                file = fopen_boost (info_file, "wb");
        }
        if (!file) {
-               throw OpenFileError (info_file, errno);
+               throw OpenFileError (info_file, errno, read);
        }
        dcpomatic_fseek (file, frame_info_position (frame, eyes), SEEK_SET);
        fwrite (&info.offset, sizeof (info.offset), 1, file);
        }
        dcpomatic_fseek (file, frame_info_position (frame, eyes), SEEK_SET);
        fwrite (&info.offset, sizeof (info.offset), 1, file);
index 6a1f2b2848049dd088ebf8b12e1e750d1cfb519d..e497ecf3c8a36a6d0fe9d5f3e04b2d0839405c7a 100644 (file)
@@ -422,7 +422,7 @@ digest_head_tail (vector<boost::filesystem::path> files, boost::uintmax_t size)
        while (i < int64_t (files.size()) && to_do > 0) {
                FILE* f = fopen_boost (files[i], "rb");
                if (!f) {
        while (i < int64_t (files.size()) && to_do > 0) {
                FILE* f = fopen_boost (files[i], "rb");
                if (!f) {
-                       throw OpenFileError (files[i].string(), errno);
+                       throw OpenFileError (files[i].string(), errno, true);
                }
 
                boost::uintmax_t this_time = min (to_do, boost::filesystem::file_size (files[i]));
                }
 
                boost::uintmax_t this_time = min (to_do, boost::filesystem::file_size (files[i]));
@@ -442,7 +442,7 @@ digest_head_tail (vector<boost::filesystem::path> files, boost::uintmax_t size)
        while (i >= 0 && to_do > 0) {
                FILE* f = fopen_boost (files[i], "rb");
                if (!f) {
        while (i >= 0 && to_do > 0) {
                FILE* f = fopen_boost (files[i], "rb");
                if (!f) {
-                       throw OpenFileError (files[i].string(), errno);
+                       throw OpenFileError (files[i].string(), errno, true);
                }
 
                boost::uintmax_t this_time = min (to_do, boost::filesystem::file_size (files[i]));
                }
 
                boost::uintmax_t this_time = min (to_do, boost::filesystem::file_size (files[i]));
index 13d7e17621a8b003ab5db23264709e518a36be79..ac5d90296b0982a26f6fedc26c498ca63927f684 100644 (file)
@@ -829,7 +829,7 @@ private:
                if (d->ShowModal () == wxID_OK) {
                        FILE* f = fopen_boost (wx_to_std (d->GetPath ()), "w");
                        if (!f) {
                if (d->ShowModal () == wxID_OK) {
                        FILE* f = fopen_boost (wx_to_std (d->GetPath ()), "w");
                        if (!f) {
-                               throw OpenFileError (wx_to_std (d->GetPath ()), errno);
+                               throw OpenFileError (wx_to_std (d->GetPath ()), errno, false);
                        }
 
                        string const s = j->certificate (true);
                        }
 
                        string const s = j->certificate (true);
@@ -977,7 +977,7 @@ private:
                if (d->ShowModal () == wxID_OK) {
                        FILE* f = fopen_boost (wx_to_std (d->GetPath ()), "w");
                        if (!f) {
                if (d->ShowModal () == wxID_OK) {
                        FILE* f = fopen_boost (wx_to_std (d->GetPath ()), "w");
                        if (!f) {
-                               throw OpenFileError (wx_to_std (d->GetPath ()), errno);
+                               throw OpenFileError (wx_to_std (d->GetPath ()), errno, false);
                        }
 
                        string const s = _chain->key().get ();
                        }
 
                        string const s = _chain->key().get ();
@@ -1060,7 +1060,7 @@ private:
                if (d->ShowModal () == wxID_OK) {
                        FILE* f = fopen_boost (wx_to_std (d->GetPath ()), "w");
                        if (!f) {
                if (d->ShowModal () == wxID_OK) {
                        FILE* f = fopen_boost (wx_to_std (d->GetPath ()), "w");
                        if (!f) {
-                               throw OpenFileError (wx_to_std (d->GetPath ()), errno);
+                               throw OpenFileError (wx_to_std (d->GetPath ()), errno, false);
                        }
 
                        string const s = Config::instance()->decryption_chain()->leaf().certificate (true);
                        }
 
                        string const s = Config::instance()->decryption_chain()->leaf().certificate (true);
@@ -1080,7 +1080,7 @@ private:
                if (d->ShowModal () == wxID_OK) {
                        FILE* f = fopen_boost (wx_to_std (d->GetPath ()), "w");
                        if (!f) {
                if (d->ShowModal () == wxID_OK) {
                        FILE* f = fopen_boost (wx_to_std (d->GetPath ()), "w");
                        if (!f) {
-                               throw OpenFileError (wx_to_std (d->GetPath ()), errno);
+                               throw OpenFileError (wx_to_std (d->GetPath ()), errno, false);
                        }
 
                        string const s = Config::instance()->decryption_chain()->chain();
                        }
 
                        string const s = Config::instance()->decryption_chain()->chain();