Michael Riepe
Mon, 22 Sep 2008 11:03:50 -0700
Hi! James Cameron wrote:
> An export to a full filesystem appears to succeed, but the resulting > files are empty. > > This is caused by no return status checking on the mpegmuxer::flush > calls to write(), at lines 300 and 365. Yep, that's a bug. Please try the attached patch. -- Michael "Tired" Riepe <[EMAIL PROTECTED]> X-Tired: Each morning I get up I die a little
Index: src/mpegmuxer.h
===================================================================
--- src/mpegmuxer.h (revision 131)
+++ src/mpegmuxer.h (working copy)
@@ -196,6 +196,8 @@
{
return maxscr<p.maxscr;
}
+
+ bool write(int fd);
};
class stream
Index: src/mpegmuxer.cpp
===================================================================
--- src/mpegmuxer.cpp (revision 131)
+++ src/mpegmuxer.cpp (working copy)
@@ -297,7 +297,7 @@
pack p(packsize,0,muxrate,0);
scr+=13500000;
p.setscr(scr);
- ::write(fd,p.getdata(),p.getsize());
+ if (!p.write(fd)) return false;
}
scr=minscr;
@@ -362,7 +362,7 @@
ptsstring(scr2pts(p->getmaxscr())).c_str(),
ptsstring(p->getdts()).c_str(),
s->getbuffree() );
- ::write(fd,p->getdata(),p->getsize());
+ if (!p->write(fd)) return false;
if (p->getaupayloadlen()>0) {
s->fill(p->getaupayloadlen());
}
@@ -737,3 +737,25 @@
d[4]=((scrb32<<3)&0xf8)|0x04|((scrx>>7)&0x03);
d[5]=scrx<<1|0x01;
}
+
+bool
+mpegmuxer::pack::write(int fd) {
+ uint8_t *d = (uint8_t*)data;
+ size_t len = size;
+ ssize_t n = 0;
+
+ while (len > 0 && (n = ::write(fd, d, len)) > 0) {
+ len -= n;
+ d += n;
+ }
+ if (len == 0) {
+ return true;
+ }
+ if (n == 0) {
+ fprintf(stderr, "zero-length write - disk full?\n");
+ }
+ else {
+ perror("write");
+ }
+ return false;
+}
------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________ DVBCUT-devel mailing list DVBCUT-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dvbcut-devel