if (!f) {
throw FileError (_("Could not open file for writing"), cf);
}
- size_t const w = fwrite (s.c_str(), 1, s.length(), f);
- if (w != s.length()) {
- fclose (f);
- throw FileError (_("Could not write whole file"), cf);
- }
+ checked_fwrite (s.c_str(), s.length(), f, cf);
fclose (f);
} catch (xmlpp::exception& e) {
string s = e.what ();
#include "compose.hpp"
#include "exceptions.h"
#include "cross.h"
+#include "util.h"
#include <curl/curl.h>
#include <zip.h>
#include <boost/function.hpp>
char buffer[4096];
while (true) {
int const N = zip_fread (file_in_zip, buffer, sizeof (buffer));
- fwrite (buffer, 1, N, f);
+ checked_fwrite (buffer, N, f, temp_cert.file());
if (N < int (sizeof (buffer))) {
break;
}
throw OpenFileError (info_file, errno, read);
}
dcpomatic_fseek (file, frame_info_position (frame, eyes), SEEK_SET);
- fwrite (&info.offset, sizeof (info.offset), 1, file);
- fwrite (&info.size, sizeof (info.size), 1, file);
- fwrite (info.hash.c_str(), 1, info.hash.size(), file);
+ checked_fwrite (&info.offset, sizeof (info.offset), file, info_file);
+ checked_fwrite (&info.size, sizeof (info.size), file, info_file);
+ checked_fwrite (info.hash.c_str(), info.hash.size(), file, info_file);
fclose (file);
}
return EYES_LEFT;
}
+void
+checked_fwrite (void const * ptr, size_t size, FILE* stream, boost::filesystem::path path)
+{
+ size_t N = fwrite (ptr, 1, size, stream);
+ if (N != size) {
+ if (ferror(stream)) {
+ fclose (stream);
+ throw FileError (String::compose("fwrite error %1", errno), path);
+ } else {
+ fclose (stream);
+ throw FileError ("Unexpected short write", path);
+ }
+ }
+}
+
void
checked_fread (void* ptr, size_t size, FILE* stream, boost::filesystem::path path)
{
size_t N = fread (ptr, 1, size, stream);
if (N != size) {
if (ferror(stream)) {
+ fclose (stream);
throw FileError (String::compose("fread error %1", errno), path);
} else {
+ fclose (stream);
throw FileError ("Unexpected short read", path);
}
}
extern boost::shared_ptr<AudioBuffers> remap (boost::shared_ptr<const AudioBuffers> input, int output_channels, AudioMapping map);
extern Eyes increment_eyes (Eyes e);
extern void checked_fread (void* ptr, size_t size, FILE* stream, boost::filesystem::path path);
+extern void checked_fwrite (void const * ptr, size_t size, FILE* stream, boost::filesystem::path path);
#endif
boost::algorithm::replace_all (text, "$LENGTH", length);
- fwrite (text.c_str(), 1, text.length(), f);
+ checked_fwrite (text.c_str(), text.length(), f, cover);
fclose (f);
}
}
string const s = j->certificate (true);
- fwrite (s.c_str(), 1, s.length(), f);
+ checked_fwrite (s.c_str(), s.length(), f, path);
fclose (f);
}
d->Destroy ();
}
string const s = _get()->key().get ();
- fwrite (s.c_str(), 1, s.length(), f);
+ checked_fwrite (s.c_str(), s.length(), f, path);
fclose (f);
}
d->Destroy ();
}
string const chain = Config::instance()->decryption_chain()->chain();
- fwrite (chain.c_str(), 1, chain.length(), f);
+ checked_fwrite (chain.c_str(), chain.length(), f, path);
optional<string> const key = Config::instance()->decryption_chain()->key();
DCPOMATIC_ASSERT (key);
- fwrite (key->c_str(), 1, key->length(), f);
+ checked_fwrite (key->c_str(), key->length(), f, path);
fclose (f);
}
d->Destroy ();
}
string const s = Config::instance()->decryption_chain()->chain();
- fwrite (s.c_str(), 1, s.length(), f);
+ checked_fwrite (s.c_str(), s.length(), f, path);
fclose (f);
}
d->Destroy ();
}
string const s = Config::instance()->decryption_chain()->leaf().certificate (true);
- fwrite (s.c_str(), 1, s.length(), f);
+ checked_fwrite (s.c_str(), s.length(), f, path);
fclose (f);
}
+ " " + dcp::raw_convert<string>(_selected_playlist_position)
+ " " + dcp::raw_convert<string>(_viewer->position().get());
- fwrite (p.c_str(), p.length(), 1, f);
+ checked_fwrite (p.c_str(), p.length(), f, Config::path("position"));
fclose (f);
}
}