diff --git a/include/vlc_access.h b/include/vlc_access.h index 5892841cc4..9dd725aafe 100644 --- a/include/vlc_access.h +++ b/include/vlc_access.h @@ -183,9 +183,13 @@ static inline bool vlc_access_Eof(const access_t *access) */ static inline ssize_t vlc_access_Read(access_t *access, void *buf, size_t len) { - if (access->pf_read == NULL) - return -1; - return access->pf_read(access, buf, len); + int ret = -1; + + if (access->pf_read != NULL) + ret = access->pf_read(access, buf, len); + if (len > 0 && ret == 0) + access->info.b_eof = true; + return ret; } /** diff --git a/modules/access/archive/access.c b/modules/access/archive/access.c index 4363025582..d8b8c85bba 100644 --- a/modules/access/archive/access.c +++ b/modules/access/archive/access.c @@ -58,9 +58,6 @@ static ssize_t Read(access_t *p_access, void *p_data, size_t i_size) if (i_read < 0) i_read = 0; - if (i_size > 0 && i_read <= 0) - p_access->info.b_eof = true; - return i_read; } diff --git a/modules/access/attachment.c b/modules/access/attachment.c index 5e737c98f7..bbef66657a 100644 --- a/modules/access/attachment.c +++ b/modules/access/attachment.c @@ -116,8 +116,7 @@ static ssize_t Read(access_t *access, void *buffer, size_t size) access_sys_t *sys = access->p_sys; input_attachment_t *a = sys->attachment; - access->info.b_eof = sys->offset >= (uint64_t)a->i_data; - if (access->info.b_eof) + if (sys->offset >= (uint64_t)a->i_data) return 0; const size_t copy = __MIN(size, a->i_data - sys->offset); diff --git a/modules/access/avio.c b/modules/access/avio.c index 31468ff920..b807ef583d 100644 --- a/modules/access/avio.c +++ b/modules/access/avio.c @@ -306,10 +306,8 @@ void OutCloseAvio(vlc_object_t *object) static ssize_t Read(access_t *access, void *data, size_t size) { int r = avio_read(access->p_sys->context, data, size); - if (r <= 0) { - access->info.b_eof = true; + if (r < 0) r = 0; - } return r; } diff --git a/modules/access/concat.c b/modules/access/concat.c index 88eeb59aa7..fe9c14ca17 100644 --- a/modules/access/concat.c +++ b/modules/access/concat.c @@ -63,15 +63,11 @@ static access_t *GetAccess(access_t *access) } if (sys->next == NULL) - { -error: - access->info.b_eof = true; return NULL; - } a = vlc_access_NewMRL(VLC_OBJECT(access), sys->next->mrl); if (a == NULL) - goto error; + return NULL; sys->access = a; sys->next = sys->next->next; @@ -88,10 +84,7 @@ static ssize_t Read(access_t *access, void *buf, size_t len) * change. We need to check it. For instance, a path could point to a * regular file during Open() yet point to a directory here and now. */ if (unlikely(a->pf_read == NULL)) - { - access->info.b_eof = true; return 0; - } return vlc_access_Read(a, buf, len); } diff --git a/modules/access/dsm/access.c b/modules/access/dsm/access.c index cefb74893d..329a84775c 100644 --- a/modules/access/dsm/access.c +++ b/modules/access/dsm/access.c @@ -461,8 +461,6 @@ static ssize_t Read( access_t *p_access, void *p_buffer, size_t i_len ) access_sys_t *p_sys = p_access->p_sys; int i_read; - if( p_access->info.b_eof ) return 0; - i_read = smb_fread( p_sys->p_session, p_sys->i_fd, p_buffer, i_len ); if( i_read < 0 ) { @@ -470,8 +468,6 @@ static ssize_t Read( access_t *p_access, void *p_buffer, size_t i_len ) return -1; } - if( i_read == 0 ) p_access->info.b_eof = true; - return i_read; } diff --git a/modules/access/file.c b/modules/access/file.c index 690a99d9c9..1c2a46fc8c 100644 --- a/modules/access/file.c +++ b/modules/access/file.c @@ -295,7 +295,6 @@ static ssize_t Read (access_t *p_access, void *p_buffer, size_t i_len) val = 0; } - p_access->info.b_eof = !val; return val; } diff --git a/modules/access/ftp.c b/modules/access/ftp.c index 9a158d34f9..5f9bbca016 100644 --- a/modules/access/ftp.c +++ b/modules/access/ftp.c @@ -852,22 +852,17 @@ static ssize_t Read( access_t *p_access, void *p_buffer, size_t i_len ) assert( p_sys->data.fd != -1 ); assert( !p_sys->out ); - if( p_access->info.b_eof ) - return 0; - if( p_sys->data.p_tls != NULL ) i_read = vlc_tls_Read( p_sys->data.p_tls, p_buffer, i_len, false ); else i_read = vlc_recv_i11e( p_sys->data.fd, p_buffer, i_len, 0 ); - if( i_read > 0 ) + if( i_read >= 0 ) p_sys->offset += i_read; - else if( i_read == 0 ) - p_access->info.b_eof = true; else if( errno != EINTR && errno != EAGAIN ) { msg_Err( p_access, "receive error: %s", vlc_strerror_c(errno) ); - p_access->info.b_eof = true; + i_read = 0; } return i_read; diff --git a/modules/access/http.c b/modules/access/http.c index 5364c857fc..167c341326 100644 --- a/modules/access/http.c +++ b/modules/access/http.c @@ -518,10 +518,10 @@ static ssize_t Read( access_t *p_access, void *p_buffer, size_t i_len ) int i_read; if( p_sys->fd == -1 ) - goto fatal; + return 0; if( i_len == 0 ) - goto fatal; + return 0; if( p_sys->i_icy_meta > 0 && p_sys->offset - p_sys->i_icy_offset > 0 ) { @@ -531,14 +531,14 @@ static ssize_t Read( access_t *p_access, void *p_buffer, size_t i_len ) if( i_next == p_sys->i_icy_meta ) { if( ReadICYMeta( p_access ) ) - goto fatal; + return 0; } if( i_len > i_next ) i_len = i_next; } if( ReadData( p_access, &i_read, p_buffer, i_len ) ) - goto fatal; + return 0; if( i_read < 0 ) return -1; /* EINTR / EAGAIN */ @@ -554,17 +554,13 @@ static ssize_t Read( access_t *p_access, void *p_buffer, size_t i_len ) else return -1; } - goto fatal; + return 0; } assert( i_read >= 0 ); p_sys->offset += i_read; return i_read; - -fatal: - p_access->info.b_eof = true; - return 0; } static int ReadICYMeta( access_t *p_access ) @@ -793,7 +789,6 @@ static int Connect( access_t *p_access, uint64_t i_tell ) p_sys->b_has_size = false; p_sys->offset = i_tell; p_sys->size = 0; - p_access->info.b_eof = false; /* Open connection */ assert( p_sys->fd == -1 ); /* No open sockets (leaking fds is BAD) */ diff --git a/modules/access/imem-access.c b/modules/access/imem-access.c index a1b72f1a63..49b801472e 100644 --- a/modules/access/imem-access.c +++ b/modules/access/imem-access.c @@ -48,9 +48,6 @@ static ssize_t Read(access_t *access, void *buf, size_t len) val = 0; } - if (val <= 0) - access->info.b_eof = true; - return val; } diff --git a/modules/access/mtp.c b/modules/access/mtp.c index 744843198a..f25937a97e 100644 --- a/modules/access/mtp.c +++ b/modules/access/mtp.c @@ -195,12 +195,9 @@ static ssize_t Read( access_t *p_access, void *p_buffer, size_t i_len ) vlc_dialog_display_error( p_access, _( "File reading failed" ), _( "VLC could not read the file: %s" ), vlc_strerror(errno) ); - p_access->info.b_eof = true; return 0; } } - else if( i_ret == 0 ) - p_access->info.b_eof = true; return i_ret; } diff --git a/modules/access/rar/access.c b/modules/access/rar/access.c index 14f397df55..2db5434fd5 100644 --- a/modules/access/rar/access.c +++ b/modules/access/rar/access.c @@ -94,8 +94,6 @@ static ssize_t Read(access_t *access, void *data, size_t size) Seek(access, sys->position)) break; } - if (size > 0 && total <= 0) - access->info.b_eof = true; return total; } diff --git a/modules/access/sdp.c b/modules/access/sdp.c index 3bf8e7c302..05c5914ab6 100644 --- a/modules/access/sdp.c +++ b/modules/access/sdp.c @@ -88,10 +88,7 @@ static ssize_t Read (access_t *access, void *buf, size_t len) access_sys_t *sys = access->p_sys; if (sys->offset >= sys->length) - { - access->info.b_eof = true; return 0; - } if (len > sys->length - sys->offset) len = sys->length - sys->offset; diff --git a/modules/access/sftp.c b/modules/access/sftp.c index 91130efe9c..47ddd6cf00 100644 --- a/modules/access/sftp.c +++ b/modules/access/sftp.c @@ -388,18 +388,12 @@ static ssize_t Read( access_t *p_access, void *buf, size_t len ) { access_sys_t *p_sys = p_access->p_sys; - if( p_access->info.b_eof ) - return 0; - ssize_t val = libssh2_sftp_read( p_sys->file, buf, len ); if( val < 0 ) { - p_access->info.b_eof = true; msg_Err( p_access, "read failed" ); return 0; } - else if( val == 0 ) - p_access->info.b_eof = true; return val; } diff --git a/modules/access/smb.c b/modules/access/smb.c index eea468d2d8..08859d6334 100644 --- a/modules/access/smb.c +++ b/modules/access/smb.c @@ -323,18 +323,13 @@ static ssize_t Read( access_t *p_access, void *p_buffer, size_t i_len ) access_sys_t *p_sys = p_access->p_sys; int i_read; - if( p_access->info.b_eof ) return 0; - i_read = smbc_read( p_sys->i_smb, p_buffer, i_len ); if( i_read < 0 ) { msg_Err( p_access, "read failed (%s)", vlc_strerror_c(errno) ); - p_access->info.b_eof = true; - return -1; + i_read = 0; } - if( i_read == 0 ) p_access->info.b_eof = true; - return i_read; } diff --git a/modules/access/tcp.c b/modules/access/tcp.c index 6e3eaeb6a3..bc477ae27a 100644 --- a/modules/access/tcp.c +++ b/modules/access/tcp.c @@ -136,18 +136,14 @@ static ssize_t Read( access_t *p_access, void *p_buffer, size_t i_len ) access_sys_t *p_sys = p_access->p_sys; int i_read; - if( p_access->info.b_eof ) - return 0; - i_read = vlc_recv_i11e( p_sys->fd, p_buffer, i_len, 0 ); - if( i_read > 0 ) - ; - else if( i_read == 0 ) - p_access->info.b_eof = true; - else if( errno != EINTR && errno != EAGAIN ) + if( i_read < 0 ) { - msg_Err( p_access, "receive error: %s", vlc_strerror_c(errno) ); - p_access->info.b_eof = true; + if( errno != EINTR && errno != EAGAIN ) + { + msg_Err( p_access, "receive error: %s", vlc_strerror_c(errno) ); + i_read = 0; + } } return i_read; diff --git a/modules/access/vdr.c b/modules/access/vdr.c index 9f94038b6d..a23f4a02ef 100644 --- a/modules/access/vdr.c +++ b/modules/access/vdr.c @@ -342,11 +342,8 @@ static ssize_t Read( access_t *p_access, void *p_buffer, size_t i_len ) access_sys_t *p_sys = p_access->p_sys; if( p_sys->fd == -1 ) - { /* no more data */ - p_access->info.b_eof = true; return 0; - } ssize_t i_ret = read( p_sys->fd, p_buffer, i_len );