Author: hyc Date: Tue May 11 05:49:27 2010 New Revision: 477 Log: Fix RTMP_Read, return 0 on EOF, not -1 Modified: trunk/librtmp/rtmp.c trunk/librtmp/rtmp_sys.h Modified: trunk/librtmp/rtmp.c ============================================================================== --- trunk/librtmp/rtmp.c Tue May 11 05:30:32 2010 (r476) +++ trunk/librtmp/rtmp.c Tue May 11 05:49:27 2010 (r477) @@ -4039,8 +4039,17 @@ RTMP_Read(RTMP *r, char *buf, int size) int nRead = 0, total = 0; /* can't continue */ - if (r->m_read.status < 0) +fail: + switch (r->m_read.status < 0) { + case RTMP_READ_EOF: + case RTMP_READ_COMPLETE: + return 0; + case RTMP_READ_ERROR: /* corrupted stream, resume failed */ + SetSockError(EINVAL); return -1; + default: + break; + } /* first time thru */ if (!(r->m_read.flags & RTMP_READ_HEADER)) @@ -4064,7 +4073,7 @@ RTMP_Read(RTMP *r, char *buf, int size) r->m_read.buf = NULL; r->m_read.buflen = 0; r->m_read.status = nRead; - return -1; + goto fail; } r->m_read.buf += nRead; r->m_read.buflen -= nRead; Modified: trunk/librtmp/rtmp_sys.h ============================================================================== --- trunk/librtmp/rtmp_sys.h Tue May 11 05:30:32 2010 (r476) +++ trunk/librtmp/rtmp_sys.h Tue May 11 05:49:27 2010 (r477) @@ -37,6 +37,7 @@ #endif #define GetSockError() WSAGetLastError() +#define SetSockError(e) WSASetLastError(e) #define setsockopt(a,b,c,d,e) (setsockopt)(a,b,c,(const char *)d,(int)e) #define EWOULDBLOCK WSAETIMEDOUT /* we don't use nonblocking, but we do use timeouts */ #define sleep(n) Sleep(n*1000) @@ -52,6 +53,7 @@ #include <netinet/in.h> #include <netinet/tcp.h> #define GetSockError() errno +#define SetSockError(e) errno = e #undef closesocket #define closesocket(s) close(s) #define msleep(n) usleep(n*1000)
participants (1)
-
hyc