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 <[EMAIL PROTECTED]>, [EMAIL PROTECTED] 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

Reply via email to