From: WATANABE Hirofumi Date: 2002-03-26T19:15:01+09:00 Subject: [ruby-dev:16613] Re: IO#gets improvement わたなべです。 nobu.nakada@nifty.ne.jp writes: :FILE_READPTRとFILE_READENDに追加しといたので、uClibc 0.9.9では :うまいこと引っかかるかも知れません。 bufendだと思ってたんだけどbufreadが正解でした。 0.9.9はこれでok。 #0.9.9はlarge file対応が甘かったりしますが。 #あ、0.9.10もまだ甘いなあ。 :__UCLIBC__のところで :READ_DATA_PENDING()をなんとかすれば、0.9.10でも通ることは通るか :も。 0.9.10のFILE構造体を調べてみると0.9.9とは全く違うものでした。 メンバ名も違うし、後述の感じでifdefしてるので、offsetすら決 めうちってわけにもいかないし、完全にアウトです。 ところで、BeOSやVMSではどうもeofかどうかで判断してるみたいで すが、これでいいなら、最悪#elseのところは #else # define READ_DATA_PENDING(fp) !feof(fp) #endif で、いい気がする。 -- わたなべひろふみ struct __stdio_file_struct { unsigned short modeflags; /* There could be a hole here, but modeflags is used most.*/ #ifdef __STDIO_WIDE unsigned char ungot_width[2]; __wchar_t ungot[2]; #else /* __STDIO_WIDE */ unsigned char ungot[2]; #endif /* __STDIO_WIDE */ int filedes; #if defined(__STDIO_BUFFERS) || defined(__STDIO_GLIBC_CUSTOM_STREAMS) struct __stdio_file_struct *nextopen; #endif /* defined(__STDIO_BUFFERS) || defined(__STDIO_GLIBC_CUSTOM_STREAMS) */ #ifdef __STDIO_BUFFERS unsigned char *bufstart; /* pointer to buffer */ unsigned char *bufend; /* pointer to 1 past end of buffer */ unsigned char *bufwpos; /* pointer to 1 past last buffered */ unsigned char *bufrpos; /* pointer to next readable buffered */