SIGSEGV issue

Andrew Haley aph-gcc@littlepinkcloud.COM
Wed Aug 29 11:59:00 GMT 2007


David Sayada writes:
 > Hi all,
 > 
 > This email is following the last email I sent a few days ago about SIGSEGV
 > occurring in a java CNI application compiled with gcj 4.1.2 on a PXA270
 > platform.
 > 
 > I have traced the place in the code causing the exception, and please the
 > see below the concerning code:
 > 
 >                         if ( nReadBytes == 0 )
 >                         {
 >                             continue;
 >                         }
 > 
 >                         for (int i=0; i<nReadBytes; i++)
 >                         {
 >                             info.m_strRequest += (char)info.m_readBuff.get(i);
 >                         }
 > 
 > I have read in some places that using UTF16 can be problematic with CNI.

Not to my knowledge.

 > I think that the char cast automatically uses UTF16 instead of
 > UTF8.

Java characters are Unicode by definition, so promoting a byte in this
way gets you a 16-bit Unicode Java character.  That's perfectly
alright as long as you're sure that your byte is ASCII.  It's
certainly not going to cause a SEGV.

 > Am I right? Is there a way to write this code without using the
 > char cast?

No.  This code is grossly inefficient, though: you really ought to be
using StringBuffer.append(char) like this:

     RequestBuffer.append((char)info.m_readBuff.get(i));

Andrew.



More information about the Java mailing list