Changeset 3266
- Timestamp:
- May 1, 2007, 5:50:01 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/essentials/app-shells/bash/input.c
r3259 r3266 446 446 { 447 447 ssize_t nr; 448 #ifdef __OS2__ 449 off_t end, start = bp->b_size > 1 ? lseek (bp->b_fd, 0, SEEK_CUR) : -1; 450 #endif 448 451 449 452 nr = zread (bp->b_fd, bp->b_buffer, bp->b_size); 450 453 if (nr <= 0) 451 454 { 455 #ifdef __OS2__ 456 l_readerror: 457 #endif 452 458 bp->b_used = 0; 453 459 bp->b_buffer[0] = 0; … … 459 465 } 460 466 461 #if defined (__CYGWIN__) || defined (__OS2__) 462 /* If on cygwin and OS/2, translate \r\n to \n. */ 467 #ifdef __OS2__ 468 /* \r\n -> \n translation screws us down in sync_buffered_stream, 469 so, we have to check if translation took place and wind back 470 to right before the first one. New line characters are read 471 one by one. (Same as in zread.c.) */ 472 if (start >= 0 473 && (end = lseek (bp->b_fd, 0, SEEK_CUR)) > 0 474 && nr != end - start) 475 { 476 if (bp->b_buffer[0] == '\n') 477 { 478 if (lseek (bp->b_fd, start, SEEK_SET) >= 0) 479 { 480 nr = zread (bp->b_fd, bp->b_buffer, 1); 481 if (nr <= 0) 482 goto l_readerror; 483 } 484 } 485 else 486 { 487 char *nl = memchr (&bp->b_buffer[0], '\n', nr); 488 if (nl != NULL 489 && lseek (bp->b_fd, start + (nl - &bp->b_buffer[0]), SEEK_SET) >= 0) 490 nr = nl - &bp->b_buffer[0]; 491 } 492 } 493 #endif 494 495 #if defined (__CYGWIN__) 496 /* If on cygwin, translate \r\n to \n. */ 463 497 if (nr >= 2 && bp->b_buffer[nr - 2] == '\r' && bp->b_buffer[nr - 1] == '\n') 464 498 {
Note:
See TracChangeset
for help on using the changeset viewer.