src/server/util/io.c

changeset 205
b8515afa450a
parent 203
7fe53d5d587c
child 235
4990147c58d0
equal deleted inserted replaced
204:e870a7c8f223 205:b8515afa450a
513 return IO_ERROR; 513 return IO_ERROR;
514 } 514 }
515 515
516 size_t length = sfd->len; 516 size_t length = sfd->len;
517 while(length > 0) { 517 while(length > 0) {
518 // TODO: remove
519 if(length > sfd->len) {
520 log_ereport(LOG_WARN, "net_fallback_sendfile: length > sfd->len: %zu > %zu", length, sfd->len);
521 free(buf);
522 return IO_ERROR;
523 }
524
518 if((r = system_fread(sfd->fd, buf, 4096)) <= 0) { 525 if((r = system_fread(sfd->fd, buf, 4096)) <= 0) {
519 break; 526 break;
520 } 527 }
521 char *write_buf = buf; 528 char *write_buf = buf;
522 while(r > 0) { 529 while(r > 0) {
523 ssize_t w = fd->write(fd, write_buf, r); 530 ssize_t w = fd->write(fd, write_buf, r);
531 // TODO: remove
532 if(w > r) {
533 log_ereport(LOG_WARN, "net_fallback_sendfile: w > r, %zd > %zd", w, r);
534 w = 0;
535 }
536
524 if(w <= 0) { 537 if(w <= 0) {
525 break; 538 free(buf);
539 fd->io_errno = errno;
540 return IO_ERROR;
526 } 541 }
527 r -= w; 542 r -= w;
528 length -= w; 543 length -= w;
529 write_buf += w; 544 write_buf += w;
530 }
531 if(r > 0) {
532 break;
533 } 545 }
534 } 546 }
535 free(buf); 547 free(buf);
536 if(length > 0) { 548 if(length > 0) {
537 fd->io_errno = errno; 549 fd->io_errno = errno;

mercurial