harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Charles Lee <littlee1...@gmail.com>
Subject Re: (HARMONY-6216) problem with reading zero-length file
Date Tue, 23 Jun 2009 02:39:14 GMT
No, Regis. No one will reply you........

On Tue, Jun 23, 2009 at 10:29 AM, Regis <xu.regis@gmail.com> wrote:

> Kyle Cho (JIRA) wrote:
>
>>    [
>> https://issues.apache.org/jira/browse/HARMONY-6216?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12721474#action_12721474]
>> Kyle Cho commented on HARMONY-6216:
>> -----------------------------------
>>
>> found that the patch breaks the following test case.
>>
>>  public static void main(String args[])
>>  {
>>    BufferedReader reader = new BufferedReader(new
>> InputStreamReader(System.in));
>>    String line = null;
>>    try {
>>      line = reader.readLine();
>>    } catch (IOException e) {
>>      e.printStackTrace();
>>    }
>>    System.out.println(line);
>>  }
>>
>>  problem with reading zero-length file
>>> -------------------------------------
>>>
>>>                Key: HARMONY-6216
>>>                URL: https://issues.apache.org/jira/browse/HARMONY-6216
>>>            Project: Harmony
>>>         Issue Type: Bug
>>>         Components: Classlib
>>>   Affects Versions: 5.0M10
>>>        Environment: RedHat EL 5 x86
>>>           Reporter: Kyle Cho
>>>           Priority: Minor
>>>        Attachments: HARMONY-6216.diff
>>>
>>>
>>> The following test fails:
>>> ----------------------- proc.java starts ------------------
>>> import java.io.*;
>>> class proc {
>>>        public static void main(String args[])
>>>        {
>>>                String s0 = "cpu";
>>>                String s = null;
>>>                String file= "/proc/cpuinfo"; // zero-length special file
>>>                try {
>>>                        BufferedReader br = new BufferedReader(new
>>> FileReader(new File(file)));
>>>                        do {
>>>                                if ((s = br.readLine()) == null) {
>>>                                        break;
>>>                                }
>>>                                System.out.println("s: "+s);
>>>                        } while (s.indexOf(s0) == -1);
>>>                } catch (IOException ioe) {
>>>                        ioe.printStackTrace();
>>>                }
>>>                System.out.println("s: "+s);
>>>        }
>>> }
>>> ----------------------- proc.java ends -------------------
>>> java.io.IOException
>>>        at
>>> org.apache.harmony.luni.platform.OSFileSystem.seek(OSFileSystem.java:110)
>>>        at java.io.FileInputStream.available(FileInputStream.java:149)
>>>        at java.io.InputStreamReader.read(InputStreamReader.java:249)
>>>        at java.io.BufferedReader.fillbuf(BufferedReader.java:107)
>>>        at java.io.BufferedReader.readLine(BufferedReader.java:318)
>>>        at proc.main(proc.java:11)
>>> s: null
>>>
>>
>>
> Hi gays,
>
> I have investigated this issue for a while, but can't find a good way to
> resolve it :(
>
> It is started by Harmony can't read zero-length special file in Linux, like
> file /proc/cpuinfo. Harmony InputStreamReader used available() before
> reading chars:
>
> if ((in.available() == 0) && (out.position() > offset)) {
>    // we could return the result without blocking read
>    break;
> }
>
> but available() can't work with zero-length special file, throws
> IOException (so do RI). So I removed the whole "if" statement, it break read
> from stdin, I realized that the "if" is just for stdin.
>
> For stdin, read will return immediately once has read some bytes, don't
> need to try to fill the given buffer full. But for FileInputStream, read
> operation will try its best to fill the buffer. That's different.
>
> I have no idea how to combine these two behaviors in one read methods
> without using available(). Anyone have ideas or suggestions?
>
> --
> Best Regards,
> Regis.
>



-- 
Yours sincerely,
Charles Lee

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message