r485 - trunk/librtmp/rtmp.c
Author: hyc Date: Wed May 26 17:16:25 2010 New Revision: 485 Log: Read buffer fixes: We overallocated the buf by 4 bytes, but the result may not have needed the extra space. Also, don't return without reading at least one packet. (Alternative: return early, but set EAGAIN...) Modified: trunk/librtmp/rtmp.c Modified: trunk/librtmp/rtmp.c ============================================================================== --- trunk/librtmp/rtmp.c Mon May 24 21:43:48 2010 (r484) +++ trunk/librtmp/rtmp.c Wed May 26 17:16:25 2010 (r485) @@ -4052,9 +4052,10 @@ Read_1_Packet(RTMP *r, char *buf, unsign if (recopy) { - memcpy(buf, r->m_read.buf, buflen); - r->m_read.bufpos = r->m_read.buf + buflen; - r->m_read.buflen = ret - buflen; + len = ret > buflen ? buflen : ret; + memcpy(buf, r->m_read.buf, len); + r->m_read.bufpos = r->m_read.buf + len; + r->m_read.buflen = ret - len; } return ret; } @@ -4162,11 +4163,13 @@ fail: size -= nRead; } - if (size > 0 && (nRead = Read_1_Packet(r, buf, size)) >= 0) + while (size > 0 && (nRead = Read_1_Packet(r, buf, size)) >= 0) { + if (!nRead) continue; buf += nRead; total += nRead; size -= nRead; + break; } if (nRead < 0) r->m_read.status = nRead;
participants (1)
-
hyc