< prev index next >

src/share/classes/sun/nio/cs/ext/ISO2022_JP.java

Print this page
rev 13451 : 8211382: ISO2022JP and GB18030 NIO converter issues
Reviewed-by: sherman, rriggs


 292                         case JISX0208_1983:
 293                             if (sp + inputSize + 1 > sl)
 294                                 return CoderResult.UNDERFLOW;
 295                             b2 = sa[sp + inputSize++] & 0xff;
 296                             c = dec0208.decodeDouble(b1,b2);
 297                             if (c == UNMAPPABLE_DECODING)
 298                                 return CoderResult.unmappableForLength(inputSize);
 299                             da[dp++] = c;
 300                             break;
 301                         case JISX0212_1990:
 302                             if (sp + inputSize + 1 > sl)
 303                                 return CoderResult.UNDERFLOW;
 304                             b2 = sa[sp + inputSize++] & 0xff;
 305                             c = dec0212.decodeDouble(b1,b2);
 306                             if (c == UNMAPPABLE_DECODING)
 307                                 return CoderResult.unmappableForLength(inputSize);
 308                             da[dp++] = c;
 309                             break;
 310                         case JISX0201_1976_KANA:
 311                         case SHIFTOUT:
 312                             if (b1 > 0x60) {
 313                                 return CoderResult.malformedForLength(inputSize);
 314                             }
 315                             da[dp++] = (char)(b1 + 0xff40);
 316                             break;
 317                     }
 318                     sp += inputSize;
 319                 }
 320                 return CoderResult.UNDERFLOW;
 321             } finally {
 322                 src.position(sp - src.arrayOffset());
 323                 dst.position(dp - dst.arrayOffset());
 324             }
 325         }
 326 
 327         private CoderResult decodeBufferLoop(ByteBuffer src,
 328                                              CharBuffer dst)
 329         {
 330             int mark = src.position();
 331             int b1 = 0, b2 = 0, b3 = 0, b4=0;
 332             char c = UNMAPPABLE_DECODING;


 413                                 return CoderResult.UNDERFLOW;
 414                             b2 = src.get() & 0xff;
 415                             inputSize++;
 416                             c = dec0208.decodeDouble(b1,b2);
 417                             if (c == UNMAPPABLE_DECODING)
 418                                 return CoderResult.unmappableForLength(inputSize);
 419                             dst.put(c);
 420                             break;
 421                         case JISX0212_1990:
 422                             if (!src.hasRemaining())
 423                                 return CoderResult.UNDERFLOW;
 424                             b2 = src.get() & 0xff;
 425                             inputSize++;
 426                             c = dec0212.decodeDouble(b1,b2);
 427                             if (c == UNMAPPABLE_DECODING)
 428                                 return CoderResult.unmappableForLength(inputSize);
 429                             dst.put(c);
 430                             break;
 431                         case JISX0201_1976_KANA:
 432                         case SHIFTOUT:
 433                             if (b1 > 0x60) {
 434                                 return CoderResult.malformedForLength(inputSize);
 435                             }
 436                             dst.put((char)(b1 + 0xff40));
 437                             break;
 438                     }
 439                     mark += inputSize;
 440                 }
 441                 return CoderResult.UNDERFLOW;
 442             } finally {
 443                 src.position(mark);
 444             }
 445         }
 446 
 447         // Make some protected methods public for use by JISAutoDetect
 448         public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
 449             if (src.hasArray() && dst.hasArray())
 450                 return decodeArrayLoop(src, dst);
 451             else
 452                 return decodeBufferLoop(src, dst);
 453         }




 292                         case JISX0208_1983:
 293                             if (sp + inputSize + 1 > sl)
 294                                 return CoderResult.UNDERFLOW;
 295                             b2 = sa[sp + inputSize++] & 0xff;
 296                             c = dec0208.decodeDouble(b1,b2);
 297                             if (c == UNMAPPABLE_DECODING)
 298                                 return CoderResult.unmappableForLength(inputSize);
 299                             da[dp++] = c;
 300                             break;
 301                         case JISX0212_1990:
 302                             if (sp + inputSize + 1 > sl)
 303                                 return CoderResult.UNDERFLOW;
 304                             b2 = sa[sp + inputSize++] & 0xff;
 305                             c = dec0212.decodeDouble(b1,b2);
 306                             if (c == UNMAPPABLE_DECODING)
 307                                 return CoderResult.unmappableForLength(inputSize);
 308                             da[dp++] = c;
 309                             break;
 310                         case JISX0201_1976_KANA:
 311                         case SHIFTOUT:
 312                             if (b1 > 0x5f) {
 313                                 return CoderResult.malformedForLength(inputSize);
 314                             }
 315                             da[dp++] = (char)(b1 + 0xff40);
 316                             break;
 317                     }
 318                     sp += inputSize;
 319                 }
 320                 return CoderResult.UNDERFLOW;
 321             } finally {
 322                 src.position(sp - src.arrayOffset());
 323                 dst.position(dp - dst.arrayOffset());
 324             }
 325         }
 326 
 327         private CoderResult decodeBufferLoop(ByteBuffer src,
 328                                              CharBuffer dst)
 329         {
 330             int mark = src.position();
 331             int b1 = 0, b2 = 0, b3 = 0, b4=0;
 332             char c = UNMAPPABLE_DECODING;


 413                                 return CoderResult.UNDERFLOW;
 414                             b2 = src.get() & 0xff;
 415                             inputSize++;
 416                             c = dec0208.decodeDouble(b1,b2);
 417                             if (c == UNMAPPABLE_DECODING)
 418                                 return CoderResult.unmappableForLength(inputSize);
 419                             dst.put(c);
 420                             break;
 421                         case JISX0212_1990:
 422                             if (!src.hasRemaining())
 423                                 return CoderResult.UNDERFLOW;
 424                             b2 = src.get() & 0xff;
 425                             inputSize++;
 426                             c = dec0212.decodeDouble(b1,b2);
 427                             if (c == UNMAPPABLE_DECODING)
 428                                 return CoderResult.unmappableForLength(inputSize);
 429                             dst.put(c);
 430                             break;
 431                         case JISX0201_1976_KANA:
 432                         case SHIFTOUT:
 433                             if (b1 > 0x5f) {
 434                                 return CoderResult.malformedForLength(inputSize);
 435                             }
 436                             dst.put((char)(b1 + 0xff40));
 437                             break;
 438                     }
 439                     mark += inputSize;
 440                 }
 441                 return CoderResult.UNDERFLOW;
 442             } finally {
 443                 src.position(mark);
 444             }
 445         }
 446 
 447         // Make some protected methods public for use by JISAutoDetect
 448         public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
 449             if (src.hasArray() && dst.hasArray())
 450                 return decodeArrayLoop(src, dst);
 451             else
 452                 return decodeBufferLoop(src, dst);
 453         }


< prev index next >