You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by Mark Hindess <ma...@googlemail.com> on 2008/09/11 17:03:00 UTC
Re: svn commit: r693878 - /harmony/enhanced/classlib/trunk/modules/nio_char/src/main/native/niochar/shared/additional/GB18030.c
This broke my linux build because nio_char.so now needs to link against the
vmi.so. Fixed in r694287.
-Mark
In message <20...@eris.apache.org>, odeakin@apache.org wr
ites:
>
> Author: odeakin
> Date: Wed Sep 10 09:08:02 2008
> New Revision: 693878
>
> URL: http://svn.apache.org/viewvc?rev=693878&view=rev
> Log:
> Fix errors from HARMONY-5976 ([classlib] Results of static analysis):
> - resultChar must be signed (jint) to handle error return code from getUnico
> deFromBytes()
> - Fix unLinear() function so it does not return a pointer to deallocated sta
> ck memory.
>
> Modified:
> harmony/enhanced/classlib/trunk/modules/nio_char/src/main/native/niochar/
> shared/additional/GB18030.c
>
> Modified: harmony/enhanced/classlib/trunk/modules/nio_char/src/main/native/ni
> ochar/shared/additional/GB18030.c
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio
> _char/src/main/native/niochar/shared/additional/GB18030.c?rev=693878&r1=69387
> 7&r2=693878&view=diff
> =============================================================================
> =
> --- harmony/enhanced/classlib/trunk/modules/nio_char/src/main/native/niochar/
> shared/additional/GB18030.c (original)
> +++ harmony/enhanced/classlib/trunk/modules/nio_char/src/main/native/niochar/
> shared/additional/GB18030.c Wed Sep 10 09:08:02 2008
> @@ -17,11 +17,12 @@
>
> #include "GB18030.h"
> #include "hycomp.h"
> +#include "vmi.h"
>
> #define linear(b1, b2, b3, b4) ((((b1)*10+(b2))*126L+(b3))*10L+(b4))
> -static jbyte * unLinear(jint lin) {
> - jbyte arr[] = {0, 0, 0, 0};
> - jbyte *result = arr;
> +static jbyte* unLinear(JNIEnv *env, jint lin) {
> + PORT_ACCESS_FROM_ENV(env);
> + jbyte *result = hymem_allocate_memory(sizeof(jbyte)*4);
> lin-=linear((jbyte)0x81, (jbyte)0x30, (jbyte)0x81, (jbyte)0x30)
> ;
> result[3]=(jbyte)(0x30+lin%10); lin/=10;
> result[2]=(jbyte)(0x81+lin%126); lin/=126;
> @@ -1158,14 +1159,14 @@
> return -1;
> }
>
> -static jbyte * getBytesFromUnicode(jint charValue) {
> +static jbyte* getBytesFromUnicode(JNIEnv *env, jint charValue) {
> int rangeCounter = 0;
> while(rangeCounter < sizeof(ranges)){
> int startBytes = ranges[rangeCounter++];
> int length = ranges[rangeCounter++];
> int startChar = charValues[rangeCounter/2-1];
> if(startChar<=charValue && charValue<=startChar+length) {
> - return unLinear(startBytes+(charValue-startChar));
> + return unLinear(env, startBytes+(charValue-startChar));
> }
> }
> return NULL;
> @@ -1182,9 +1183,9 @@
> jchar *out = (*env)->GetCharArrayElements(env, outArr, NULL);
>
> jint *res = (*env)->GetIntArrayElements(env, result, NULL);
> - jint position = absolutePos;
> + jint resultChar, position = absolutePos;
> int i, variable;
> - jchar input, resultChar;
> + jchar input;
> jbyte b1, b2, b3, b4;
> for(i=0; i < bbremaining; i++) {
> if(res[1]==0) {
> @@ -1245,7 +1246,7 @@
> break;
> }
> if (resultChar != 0) {
> - out[arrPosition++] = resultChar; res[1] -= 1;
> + out[arrPosition++] = (jchar)resultChar; res[1] -= 1;
> } else {
> if(!( (126 >= b2 && b2 >= 64) || (-2 >= b2 && b2 >= -12
> 8) || (57 >= b2 && b2 >= 48)) ) {
> res[0] = res[0]+2;
> @@ -1280,7 +1281,7 @@
> resultChar = getUnicodeFromBytes(b1, b2, b3, b4);
> if(resultChar != -1) {
> res[0] -=4;
> - out[arrPosition++] = resultChar; res[1] -= 1
> ;
> + out[arrPosition++] = (jchar)resultChar; res[
> 1] -= 1;
> } else {
> res[2] = 4; res[3] = -1;
> (*env)->ReleaseCharArrayElements(env, outArr
> , out, 0);
> @@ -1324,7 +1325,7 @@
> index = (int)input >> 8;
> index = encodeIndex[index];
> while(index < 0) {
> - jbyte *arr = getBytesFromUnicode(in[arrayOffset+i]);
> + jbyte *arr = getBytesFromUnicode(env, in[arrayOffset+i]);
> if(arr!= NULL) {
> if(res[0]>=4) {
> *(jlong2addr(jbyte, outAddr) + position++) = (jbyte)arr[
> 0];
> @@ -1391,7 +1392,7 @@
> }
> *(jlong2addr(jbyte, outAddr) + position++) = (jbyte)(result
> Char & 0xFF); res[0] -= 1;
> } else {
> - jbyte *arr = getBytesFromUnicode(in[arrayOffset+i]);
> + jbyte *arr = getBytesFromUnicode(env, in[arrayOffset+i]);
> if(arr!= NULL) {
> if(res[0]>=4) {
> *(jlong2addr(jbyte, outAddr) + position++) = arr[0];
>
Re: svn commit: r693878 - /harmony/enhanced/classlib/trunk/modules/nio_char/src/main/native/niochar/shared/additional/GB18030.c
Posted by Oliver Deakin <ol...@googlemail.com>.
Thanks Mark - it was fine on Windows and I didn't see failures in the
build-test alerts for Linux so I thought it was ok there also. I wonder
why we did not see a build break there?
Regards,
Oliver
Mark Hindess wrote:
> This broke my linux build because nio_char.so now needs to link against the
> vmi.so. Fixed in r694287.
>
> -Mark
>
> In message <20...@eris.apache.org>, odeakin@apache.org wr
> ites:
>
>> Author: odeakin
>> Date: Wed Sep 10 09:08:02 2008
>> New Revision: 693878
>>
>> URL: http://svn.apache.org/viewvc?rev=693878&view=rev
>> Log:
>> Fix errors from HARMONY-5976 ([classlib] Results of static analysis):
>> - resultChar must be signed (jint) to handle error return code from getUnico
>> deFromBytes()
>> - Fix unLinear() function so it does not return a pointer to deallocated sta
>> ck memory.
>>
>> Modified:
>> harmony/enhanced/classlib/trunk/modules/nio_char/src/main/native/niochar/
>> shared/additional/GB18030.c
>>
>> Modified: harmony/enhanced/classlib/trunk/modules/nio_char/src/main/native/ni
>> ochar/shared/additional/GB18030.c
>> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio
>> _char/src/main/native/niochar/shared/additional/GB18030.c?rev=693878&r1=69387
>> 7&r2=693878&view=diff
>> =============================================================================
>> =
>> --- harmony/enhanced/classlib/trunk/modules/nio_char/src/main/native/niochar/
>> shared/additional/GB18030.c (original)
>> +++ harmony/enhanced/classlib/trunk/modules/nio_char/src/main/native/niochar/
>> shared/additional/GB18030.c Wed Sep 10 09:08:02 2008
>> @@ -17,11 +17,12 @@
>>
>> #include "GB18030.h"
>> #include "hycomp.h"
>> +#include "vmi.h"
>>
>> #define linear(b1, b2, b3, b4) ((((b1)*10+(b2))*126L+(b3))*10L+(b4))
>> -static jbyte * unLinear(jint lin) {
>> - jbyte arr[] = {0, 0, 0, 0};
>> - jbyte *result = arr;
>> +static jbyte* unLinear(JNIEnv *env, jint lin) {
>> + PORT_ACCESS_FROM_ENV(env);
>> + jbyte *result = hymem_allocate_memory(sizeof(jbyte)*4);
>> lin-=linear((jbyte)0x81, (jbyte)0x30, (jbyte)0x81, (jbyte)0x30)
>> ;
>> result[3]=(jbyte)(0x30+lin%10); lin/=10;
>> result[2]=(jbyte)(0x81+lin%126); lin/=126;
>> @@ -1158,14 +1159,14 @@
>> return -1;
>> }
>>
>> -static jbyte * getBytesFromUnicode(jint charValue) {
>> +static jbyte* getBytesFromUnicode(JNIEnv *env, jint charValue) {
>> int rangeCounter = 0;
>> while(rangeCounter < sizeof(ranges)){
>> int startBytes = ranges[rangeCounter++];
>> int length = ranges[rangeCounter++];
>> int startChar = charValues[rangeCounter/2-1];
>> if(startChar<=charValue && charValue<=startChar+length) {
>> - return unLinear(startBytes+(charValue-startChar));
>> + return unLinear(env, startBytes+(charValue-startChar));
>> }
>> }
>> return NULL;
>> @@ -1182,9 +1183,9 @@
>> jchar *out = (*env)->GetCharArrayElements(env, outArr, NULL);
>>
>> jint *res = (*env)->GetIntArrayElements(env, result, NULL);
>> - jint position = absolutePos;
>> + jint resultChar, position = absolutePos;
>> int i, variable;
>> - jchar input, resultChar;
>> + jchar input;
>> jbyte b1, b2, b3, b4;
>> for(i=0; i < bbremaining; i++) {
>> if(res[1]==0) {
>> @@ -1245,7 +1246,7 @@
>> break;
>> }
>> if (resultChar != 0) {
>> - out[arrPosition++] = resultChar; res[1] -= 1;
>> + out[arrPosition++] = (jchar)resultChar; res[1] -= 1;
>> } else {
>> if(!( (126 >= b2 && b2 >= 64) || (-2 >= b2 && b2 >= -12
>> 8) || (57 >= b2 && b2 >= 48)) ) {
>> res[0] = res[0]+2;
>> @@ -1280,7 +1281,7 @@
>> resultChar = getUnicodeFromBytes(b1, b2, b3, b4);
>> if(resultChar != -1) {
>> res[0] -=4;
>> - out[arrPosition++] = resultChar; res[1] -= 1
>> ;
>> + out[arrPosition++] = (jchar)resultChar; res[
>> 1] -= 1;
>> } else {
>> res[2] = 4; res[3] = -1;
>> (*env)->ReleaseCharArrayElements(env, outArr
>> , out, 0);
>> @@ -1324,7 +1325,7 @@
>> index = (int)input >> 8;
>> index = encodeIndex[index];
>> while(index < 0) {
>> - jbyte *arr = getBytesFromUnicode(in[arrayOffset+i]);
>> + jbyte *arr = getBytesFromUnicode(env, in[arrayOffset+i]);
>> if(arr!= NULL) {
>> if(res[0]>=4) {
>> *(jlong2addr(jbyte, outAddr) + position++) = (jbyte)arr[
>> 0];
>> @@ -1391,7 +1392,7 @@
>> }
>> *(jlong2addr(jbyte, outAddr) + position++) = (jbyte)(result
>> Char & 0xFF); res[0] -= 1;
>> } else {
>> - jbyte *arr = getBytesFromUnicode(in[arrayOffset+i]);
>> + jbyte *arr = getBytesFromUnicode(env, in[arrayOffset+i]);
>> if(arr!= NULL) {
>> if(res[0]>=4) {
>> *(jlong2addr(jbyte, outAddr) + position++) = arr[0];
>>
>>
>
>
>
>
--
Oliver Deakin
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU