[libbluray-devel] disc: flush cache file before close (try to detect errors)
hpi1
git at videolan.org
Sun May 15 15:44:39 CEST 2016
libbluray | branch: master | hpi1 <hpi1 at anonymous.org> | Sun May 15 16:09:31 2016 +0300| [34f6e3fd9ef29ae09babddb8fb6f60ade8989a94] | committer: hpi1
disc: flush cache file before close (try to detect errors)
> http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=34f6e3fd9ef29ae09babddb8fb6f60ade8989a94
---
src/libbluray/disc/disc.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/libbluray/disc/disc.c b/src/libbluray/disc/disc.c
index 290e90f..b61281e 100644
--- a/src/libbluray/disc/disc.c
+++ b/src/libbluray/disc/disc.c
@@ -477,10 +477,11 @@ int disc_cache_bdrom_file(BD_DISC *p, const char *rel_path, const char *cache_pa
return -1;
}
- while (1) {
+ do {
uint8_t buf[16*2048];
got = file_read(fp_in, buf, sizeof(buf));
- if (got <= 0) {
+ if (got < 0) {
+ /* we'll call write(fp, buf, 0) after EOF. It is used to check for errors. */
break;
}
if (fp_out->write(fp_out, buf, got) != got) {
@@ -490,7 +491,8 @@ int disc_cache_bdrom_file(BD_DISC *p, const char *rel_path, const char *cache_pa
(void)file_unlink(cache_path);
return -1;
}
- }
+ } while (got > 0);
+
BD_DEBUG(DBG_FILE, "cached %s to %s\n", rel_path, cache_path);
file_close(fp_out);
More information about the libbluray-devel
mailing list