summaryrefslogtreecommitdiffstats
path: root/icu/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'icu/src/main/java')
-rw-r--r--icu/src/main/java/com/ibm/icu4jni/charset/CharsetDecoderICU.java16
-rw-r--r--icu/src/main/java/com/ibm/icu4jni/charset/CharsetEncoderICU.java16
2 files changed, 22 insertions, 10 deletions
diff --git a/icu/src/main/java/com/ibm/icu4jni/charset/CharsetDecoderICU.java b/icu/src/main/java/com/ibm/icu4jni/charset/CharsetDecoderICU.java
index 919d865..9c74d68 100644
--- a/icu/src/main/java/com/ibm/icu4jni/charset/CharsetDecoderICU.java
+++ b/icu/src/main/java/com/ibm/icu4jni/charset/CharsetDecoderICU.java
@@ -286,9 +286,11 @@ public final class CharsetDecoderICU extends CharsetDecoder{
private final int getArray(CharBuffer out){
if(out.hasArray()){
+ // BEGIN android-changed: take arrayOffset into account
output = out.array();
- outEnd = out.limit();
- return out.position();
+ outEnd = out.arrayOffset() + out.limit();
+ return out.arrayOffset() + out.position();
+ // END android-changed
}else{
outEnd = out.remaining();
// BEGIN android-added
@@ -306,9 +308,11 @@ public final class CharsetDecoderICU extends CharsetDecoder{
}
private final int getArray(ByteBuffer in){
if(in.hasArray()){
+ // BEGIN android-changed: take arrayOffset into account
input = in.array();
- inEnd = in.limit();
- return in.position()+savedInputHeldLen;/*exclude the number fo bytes held in previous conversion*/
+ inEnd = in.arrayOffset() + in.limit();
+ return in.arrayOffset() + in.position() + savedInputHeldLen;/*exclude the number fo bytes held in previous conversion*/
+ // END android-changed
}else{
inEnd = in.remaining();
// BEGIN android-added
@@ -331,7 +335,9 @@ public final class CharsetDecoderICU extends CharsetDecoder{
}
private final void setPosition(CharBuffer out){
if(out.hasArray()){
- out.position(out.position() + data[OUTPUT_OFFSET]);
+ // BEGIN android-changed: take arrayOffset into account
+ out.position(out.position() + data[OUTPUT_OFFSET] - out.arrayOffset());
+ // END android-changed
}else{
out.put(output,0,data[OUTPUT_OFFSET]);
}
diff --git a/icu/src/main/java/com/ibm/icu4jni/charset/CharsetEncoderICU.java b/icu/src/main/java/com/ibm/icu4jni/charset/CharsetEncoderICU.java
index ec169f4..eada080 100644
--- a/icu/src/main/java/com/ibm/icu4jni/charset/CharsetEncoderICU.java
+++ b/icu/src/main/java/com/ibm/icu4jni/charset/CharsetEncoderICU.java
@@ -328,9 +328,11 @@ public final class CharsetEncoderICU extends CharsetEncoder {
//------------------------------------------
private final int getArray(ByteBuffer out) {
if(out.hasArray()){
+ // BEGIN android-changed: take arrayOffset into account
output = out.array();
- outEnd = out.limit();
- return out.position();
+ outEnd = out.arrayOffset() + out.limit();
+ return out.arrayOffset() + out.position();
+ // END android-changed
}else{
outEnd = out.remaining();
// BEGIN android-added
@@ -348,9 +350,11 @@ public final class CharsetEncoderICU extends CharsetEncoder {
private final int getArray(CharBuffer in) {
if(in.hasArray()){
+ // BEGIN android-changed: take arrayOffset into account
input = in.array();
- inEnd = in.limit();
- return in.position()+savedInputHeldLen;/*exclude the number fo bytes held in previous conversion*/
+ inEnd = in.arrayOffset() + in.limit();
+ return in.arrayOffset() + in.position() + savedInputHeldLen;/*exclude the number fo bytes held in previous conversion*/
+ // END android-changed
}else{
inEnd = in.remaining();
// BEGIN android-added
@@ -378,7 +382,9 @@ public final class CharsetEncoderICU extends CharsetEncoder {
// array backing the buffer directly and wrote to
// it, so just just set the position and return.
// This is done to avoid the creation of temp array.
- out.position(out.position() + data[OUTPUT_OFFSET] );
+ // BEGIN android-changed: take arrayOffset into account
+ out.position(out.position() + data[OUTPUT_OFFSET] - out.arrayOffset());
+ // END android-changed
} else {
out.put(output, 0, data[OUTPUT_OFFSET]);
}