summaryrefslogtreecommitdiffstats
path: root/input/input.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-10-25 14:58:30 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-10-25 14:58:30 +0000
commit16fca14336977c21bebaaf0225b6adb89abec4d6 (patch)
tree7946cf60412dafac8ff12f08b27d22c91c440ee0 /input/input.c
parent0bb18f0541883f86e8c256802cda65517b48c99e (diff)
downloadmpv-16fca14336977c21bebaaf0225b6adb89abec4d6.tar.bz2
mpv-16fca14336977c21bebaaf0225b6adb89abec4d6.tar.xz
better error handling
based on patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz> git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7912 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'input/input.c')
-rw-r--r--input/input.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/input/input.c b/input/input.c
index 50d9a04956..5bcaa04779 100644
--- a/input/input.c
+++ b/input/input.c
@@ -542,6 +542,8 @@ static int
mp_input_read_cmd(mp_input_fd_t* mp_fd, char** ret) {
char* end;
(*ret) = NULL;
+
+ if(mp_fd->flags & MP_FD_DEAD) return MP_INPUT_NOTHING;
// Allocate the buffer if it dont exist
if(!mp_fd->buffer) {
@@ -554,18 +556,21 @@ mp_input_read_cmd(mp_input_fd_t* mp_fd, char** ret) {
while( !(mp_fd->flags & MP_FD_GOT_CMD) && !(mp_fd->flags & MP_FD_EOF) && (mp_fd->size - mp_fd->pos > 1) ) {
int r = ((mp_cmd_func_t)mp_fd->read_func)(mp_fd->fd,mp_fd->buffer+mp_fd->pos,mp_fd->size - 1 - mp_fd->pos);
// Error ?
+ if(r == MP_INPUT_NOTHING) break;
if(r < 0) {
if(errno == EINTR)
continue;
else if(errno == EAGAIN)
break;
- mp_msg(MSGT_INPUT,MSGL_ERR,"Error while reading cmd fd %d : %s\n",mp_fd->fd,strerror(errno));
- return MP_INPUT_ERROR;
+ mp_msg(MSGT_INPUT,MSGL_WARN,"Error while reading cmd fd %d : %s\n",mp_fd->fd,strerror(errno));
+ return r; // MP_INPUT_ERROR or MP_INPUT_DEAD
// EOF ?
- } else if(r == 0) {
+ }
+ if(r == 0) {
mp_fd->flags |= MP_FD_EOF;
break;
}
+ // r > 0
mp_fd->pos += r;
break;
}