projects
/
dcpomatic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
b6e54c2
)
Hopefully fix error handling (including EAGAIN) in FileGroup.
author
Carl Hetherington
<cth@carlh.net>
Wed, 19 Dec 2018 22:15:34 +0000
(22:15 +0000)
committer
Carl Hetherington
<cth@carlh.net>
Wed, 19 Dec 2018 22:16:32 +0000
(22:16 +0000)
src/lib/file_group.cc
patch
|
blob
|
history
diff --git
a/src/lib/file_group.cc
b/src/lib/file_group.cc
index c2ff047af3d955c539384a5ed8105b977aa2c4cb..e18b9824e27181543ab271546ac6853d985f90a9 100644
(file)
--- a/
src/lib/file_group.cc
+++ b/
src/lib/file_group.cc
@@
-1,5
+1,5
@@
/*
/*
- Copyright (C) 2013-201
4
Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2013-201
8
Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
This file is part of DCP-o-matic.
@@
-22,11
+22,12
@@
* @brief FileGroup class.
*/
* @brief FileGroup class.
*/
-#include <cstdio>
-#include <sndfile.h>
#include "file_group.h"
#include "exceptions.h"
#include "cross.h"
#include "file_group.h"
#include "exceptions.h"
#include "cross.h"
+#include "compose.hpp"
+#include <sndfile.h>
+#include <cstdio>
#include <iostream>
using std::vector;
#include <iostream>
using std::vector;
@@
-147,7
+148,7
@@
FileGroup::seek (int64_t pos, int whence) const
/** Try to read some data from the current position into a buffer.
* @param buffer Buffer to write data into.
* @param amount Number of bytes to read.
/** Try to read some data from the current position into a buffer.
* @param buffer Buffer to write data into.
* @param amount Number of bytes to read.
- * @return Number of bytes read
, or -1 in the case of error
.
+ * @return Number of bytes read.
*/
int
FileGroup::read (uint8_t* buffer, int amount) const
*/
int
FileGroup::read (uint8_t* buffer, int amount) const
@@
-161,11
+162,17
@@
FileGroup::read (uint8_t* buffer, int amount) const
break;
}
break;
}
- /* See if there is another file to use */
- if ((_current_path + 1) >= _paths.size()) {
- break;
+ if (ferror(_current_file) && errno != EAGAIN) {
+ throw FileError (String::compose("fread error %1", errno), _paths[_current_path]);
+ }
+
+ if (feof (_current_file)) {
+ /* See if there is another file to use */
+ if ((_current_path + 1) >= _paths.size()) {
+ break;
+ }
+ ensure_open_path (_current_path + 1);
}
}
- ensure_open_path (_current_path + 1);
}
return read;
}
return read;