| /* Copyright (C) 2004 Free Software Foundation |
| |
| This file is part of libgcj. |
| |
| This software is copyrighted work licensed under the terms of the |
| Libgcj License. Please consult the file "LIBGCJ_LICENSE" for |
| details. */ |
| |
| package gnu.gcj.convert; |
| |
| public class Input_UnicodeLittle extends BytesToUnicode |
| { |
| /** 0, 8, or 16 bits of a partially constructed character. */ |
| char partial; |
| /** How many bytes of partial are valid. */ |
| int partial_count; |
| |
| public String getName() { return "UnicodeLittle"; } |
| |
| public int read (char[] outbuffer, int outpos, int count) |
| { |
| int origcount = count; |
| for (;;) |
| { |
| if (partial_count == 2) |
| { |
| if (count == 0) |
| break; |
| if (partial == 0xFEFF) |
| ; // drop byte order mark |
| // else if (partial >= 0xFFFe) ERROR; |
| else |
| outbuffer[outpos++] = partial; |
| count--; |
| partial_count = 0; |
| partial = 0; |
| } |
| else if (inpos >= inlength) |
| break; |
| else |
| { |
| int b = inbuffer[inpos++] & 0xFF; |
| partial = (char) (partial | (b << (8 * partial_count))); |
| partial_count++; |
| } |
| } |
| return origcount - count; |
| } |
| } |