This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi Tom, This is a followup to this: http://gcc.gnu.org/ml/java-patches/2003-q3/msg00202.html >I like JStringToCString, but let's (1) put it somewhere less >win32-specific, and (2) rename it. Also it doesn't need to be in its >own namespace. Just adding this class, without using it, would be a >good candidate for a separate patch. BTW you don't need the >heapAllocated_ field; you can just check `if (buf_ != stackbuf_)'. Would it be sacrilegious to put this in cni.h? If not, here is a patch. If you're okay with this, I'll assume you'll want a patch for the CNI documentation also. Tested on (i686-pc-linux-gnu,i686-pc-linux-gnu), (i686-pc-linux-gnu,i686-pc-mingw32) and (i686-pc-mingw32,i686-pc-mingw32). The testcase is attached. -- Mohan http://www.thisiscool.com/ http://www.animalsong.org/ ChangeLog 2003-08-05 Mohan Embar <gnustuff@thisiscool.com> * gcj/cni.h: Added function JvGetStringUTF (puts and null terminates a jstring into a character buffer) and class JvTempCString (helper class for getting a temporary C string from a jstring) Index: gcj/cni.h =================================================================== RCS file: /cvsroot/gcc/gcc/libjava/gcj/cni.h,v retrieving revision 1.10 diff -u -2 -r1.10 cni.h --- gcj/cni.h 8 Jul 2003 21:27:37 -0000 1.10 +++ gcj/cni.h 5 Aug 2003 16:51:32 -0000 @@ -90,8 +90,56 @@ } +extern inline jsize +JvGetStringUTF (jstring str, char *buf) +{ + jsize len = JvGetStringUTFRegion (str, 0, str->length(), buf); + buf[len] = '\0'; + return len; +} + extern inline jstring JvNewStringUTF (const char *bytes) { return _Jv_NewStringUTF (bytes); +} + +/* Helper class which converts a jstring to a temporary char*. */ +class JvTempCString +{ +public: + JvTempCString(jstring jstr); + ~JvTempCString(); + +// Accessors + operator const char*() const {return buf_;} + const char* buf() const {return buf_;} + char* buf() {return buf_;} + +private: + char* buf_; + char stackbuf_[500]; +}; + +inline JvTempCString::JvTempCString (jstring jstr): + buf_(0) +{ + if (!jstr) return; + + jsize len = JvGetStringUTFLength(jstr); + if (len < jsize(sizeof(stackbuf_)-1)) + { + buf_ = stackbuf_; + } + else + { + buf_ = (char*) _Jv_Malloc (len+1); + } + JvGetStringUTF (jstr, buf_); +} + +inline JvTempCString::~JvTempCString () +{ + if (buf_ != stackbuf_) + _Jv_Free (buf_); }
Attachment:
CNITest.tar.bz2
Description: application/bzip2
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |