fixed buffer size incrementing bug in LineReader
[org.ibex.core.git] / src / org / ibex / util / LineReader.java
1 package org.ibex.util;
2 import java.io.*;
3
4 public class LineReader {
5
6     private static int MAXBUF = 1024 * 16;
7     char[] buf = new char[MAXBUF];
8     int buflen = 0;
9     Reader r;
10     Vec pushback = new Vec();
11
12     public LineReader(Reader r) { this.r = r; }
13
14     public void pushback(String s) { pushback.push(s); }
15
16     public String readLine() throws IOException {
17         while(true) {
18             if (pushback.size() > 0) return (String)pushback.pop();
19             for(int i=0; i<buflen; i++) {
20                 if (buf[i] == '\n') {
21                     String ret;
22                     if (buf[i-1] == '\r') ret = new String(buf, 0, i-1);
23                     else ret = new String(buf, 0, i);
24                     System.arraycopy(buf, i+1, buf, 0, buflen - (i+1));
25                     buflen -= i;
26                     return ret;
27                 }
28             }
29             int numread = r.read(buf, buflen, MAXBUF - buflen);
30             if (numread == -1) {
31                 if (buflen == 0) return null;
32                 String ret = new String(buf, 0, buflen);
33                 buflen = 0;
34                 return ret;
35             } else {
36                 buflen += numread;
37             }
38         }
39     }
40 }