Mail Archives: cygwin/2006/09/01/13:51:08
I'm just changing the subject so that Eric will, with luck, notice
and comment on what's going on here.
cgf
On Fri, Sep 01, 2006 at 10:47:13AM -0700, clayne AT anodized DOT com wrote:
>On Fri, Sep 01, 2006 at 01:24:57PM -0400, Christopher Faylor wrote:
>> >In regards to setting the fd to textmode as a way of stripping CRs.
>> >Only problem is that it's making 213,110 syscalls for a 213k libtool
>> >script. That cannot be an efficient way to remove CRs from input.
>>
>> Opening a file with O_TEXT should not, AFAIK, cause a bunch of one-byte
>> reads.
>>
>> A simple test case (tm) seems to confirm that.
>
>You're right. I also verified this.
>
>I found the real culprit, which I had also ifdef'd out because it looked
>bogus and crufty:
>
>/* Return 1 if a seek on FD will succeed. */
>#ifndef __CYGWIN__
># define fd_is_seekable(fd) (lseek ((fd), 0L, SEEK_CUR) >= 0)
>#else
># define fd_is_seekable(fd) 0
>#endif /* __CYGWIN__ */
>
>/* Take FD, a file descriptor, and create and return a buffered stream
> corresponding to it. If something is wrong and the file descriptor
> is invalid, return a NULL stream. */
>BUFFERED_STREAM *
>fd_to_buffered_stream (fd)
> int fd;
>{
> char *buffer;
> size_t size;
> struct stat sb;
>
> if (fstat (fd, &sb) < 0)
> {
> close (fd);
> return ((BUFFERED_STREAM *)NULL);
> }
>
> size = (fd_is_seekable (fd)) ? min (sb.st_size, MAX_INPUT_BUFFER_SIZE) : 1;
> if (size == 0)
> size = 1;
> buffer = (char *)xmalloc (size);
>
> return (make_buffered_stream (fd, buffer, size));
>}
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -