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;