Mercurial > mplayer.hg
comparison input/input.c @ 7912:e15e76559bd5
Reverse Arpi's commit and put the right fix in place.
author | albeu |
---|---|
date | Fri, 25 Oct 2002 16:06:25 +0000 |
parents | dd3f18c7b006 |
children | 487cfc28525d |
comparison
equal
deleted
inserted
replaced
7911:dd3f18c7b006 | 7912:e15e76559bd5 |
---|---|
341 }; | 341 }; |
342 | 342 |
343 static int | 343 static int |
344 mp_input_default_key_func(int fd); | 344 mp_input_default_key_func(int fd); |
345 | 345 |
346 static int | |
347 mp_input_default_cmd_func(int fd,char* buf, int l); | |
348 | |
346 static char* | 349 static char* |
347 mp_input_get_key_name(int key); | 350 mp_input_get_key_name(int key); |
348 | 351 |
349 | 352 |
350 int | 353 int |
354 return 0; | 357 return 0; |
355 } | 358 } |
356 | 359 |
357 memset(&cmd_fds[num_cmd_fd],0,sizeof(mp_input_fd_t)); | 360 memset(&cmd_fds[num_cmd_fd],0,sizeof(mp_input_fd_t)); |
358 cmd_fds[num_cmd_fd].fd = fd; | 361 cmd_fds[num_cmd_fd].fd = fd; |
359 cmd_fds[num_cmd_fd].read_func = read_func ? read_func : (mp_cmd_func_t)read; | 362 cmd_fds[num_cmd_fd].read_func = read_func ? read_func : mp_input_default_cmd_func; |
360 cmd_fds[num_cmd_fd].close_func = close_func; | 363 cmd_fds[num_cmd_fd].close_func = close_func; |
361 if(!select) | 364 if(!select) |
362 cmd_fds[num_cmd_fd].flags = MP_FD_NO_SELECT; | 365 cmd_fds[num_cmd_fd].flags = MP_FD_NO_SELECT; |
363 num_cmd_fd++; | 366 num_cmd_fd++; |
364 | 367 |
540 | 543 |
541 static int | 544 static int |
542 mp_input_read_cmd(mp_input_fd_t* mp_fd, char** ret) { | 545 mp_input_read_cmd(mp_input_fd_t* mp_fd, char** ret) { |
543 char* end; | 546 char* end; |
544 (*ret) = NULL; | 547 (*ret) = NULL; |
545 | |
546 if(mp_fd->flags & MP_FD_DEAD) return MP_INPUT_NOTHING; | |
547 | 548 |
548 // Allocate the buffer if it dont exist | 549 // Allocate the buffer if it dont exist |
549 if(!mp_fd->buffer) { | 550 if(!mp_fd->buffer) { |
550 mp_fd->buffer = (char*)malloc(MP_CMD_MAX_SIZE*sizeof(char)); | 551 mp_fd->buffer = (char*)malloc(MP_CMD_MAX_SIZE*sizeof(char)); |
551 mp_fd->pos = 0; | 552 mp_fd->pos = 0; |
554 | 555 |
555 // Get some data if needed/possible | 556 // Get some data if needed/possible |
556 while( !(mp_fd->flags & MP_FD_GOT_CMD) && !(mp_fd->flags & MP_FD_EOF) && (mp_fd->size - mp_fd->pos > 1) ) { | 557 while( !(mp_fd->flags & MP_FD_GOT_CMD) && !(mp_fd->flags & MP_FD_EOF) && (mp_fd->size - mp_fd->pos > 1) ) { |
557 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); | 558 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); |
558 // Error ? | 559 // Error ? |
559 if(r == MP_INPUT_NOTHING) break; | |
560 if(r < 0) { | 560 if(r < 0) { |
561 if(errno == EINTR) | 561 switch(r) { |
562 continue; | 562 case MP_INPUT_ERROR: |
563 else if(errno == EAGAIN) | 563 case MP_INPUT_DEAD: |
564 break; | 564 mp_msg(MSGT_INPUT,MSGL_ERR,"Error while reading cmd fd %d : %s\n",mp_fd->fd,strerror(errno)); |
565 mp_msg(MSGT_INPUT,MSGL_WARN,"Error while reading cmd fd %d : %s\n",mp_fd->fd,strerror(errno)); | 565 case MP_INPUT_NOTHING: |
566 return r; // MP_INPUT_ERROR or MP_INPUT_DEAD | 566 return r; |
567 } | |
567 // EOF ? | 568 // EOF ? |
568 } | 569 } else if(r == 0) { |
569 if(r == 0) { | |
570 mp_fd->flags |= MP_FD_EOF; | 570 mp_fd->flags |= MP_FD_EOF; |
571 break; | 571 break; |
572 } | 572 } |
573 // r > 0 | |
574 mp_fd->pos += r; | 573 mp_fd->pos += r; |
575 break; | 574 break; |
576 } | 575 } |
577 | 576 |
578 // Reset the got_cmd flag | 577 // Reset the got_cmd flag |
616 | 615 |
617 if(*ret) | 616 if(*ret) |
618 return 1; | 617 return 1; |
619 else | 618 else |
620 return MP_INPUT_NOTHING; | 619 return MP_INPUT_NOTHING; |
620 } | |
621 | |
622 static int | |
623 mp_input_default_cmd_func(int fd,char* buf, int l) { | |
624 | |
625 while(1) { | |
626 int r = read(fd,buf,l); | |
627 // Error ? | |
628 if(r < 0) { | |
629 if(errno == EINTR) | |
630 continue; | |
631 else if(errno == EAGAIN) | |
632 return MP_INPUT_NOTHING; | |
633 return MP_INPUT_ERROR; | |
634 // EOF ? | |
635 } | |
636 return r; | |
637 } | |
638 | |
621 } | 639 } |
622 | 640 |
623 static char* | 641 static char* |
624 mp_input_find_bind_for_key(mp_cmd_bind_t* binds, int n,int* keys) { | 642 mp_input_find_bind_for_key(mp_cmd_bind_t* binds, int n,int* keys) { |
625 int j; | 643 int j; |