From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10923 invoked by alias); 16 Apr 2008 18:10:44 -0000 Received: (qmail 10893 invoked by uid 367); 16 Apr 2008 18:10:44 -0000 Date: Wed, 16 Apr 2008 18:10:00 -0000 Message-ID: <20080416181044.10878.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Implement JNI demangler. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 1e7034c7369e8eba1a69d61ffc3ea32afc23550c X-Git-Newrev: 8bd2c7f9c6c25521b2847522690a7a705b72741b Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q2/txt/msg00114.txt.bz2 The branch, master has been updated via 8bd2c7f9c6c25521b2847522690a7a705b72741b (commit) from 1e7034c7369e8eba1a69d61ffc3ea32afc23550c (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 8bd2c7f9c6c25521b2847522690a7a705b72741b Author: Andrew Cagney Date: Wed Apr 16 14:09:34 2008 -0400 Implement JNI demangler. frysk-sys/lib/stdcpp/ChangeLog 2008-04-16 Andrew Cagney * jni/Demangler.cxx (Java_lib_stdcpp_Demangler_demangle): Implement. ----------------------------------------------------------------------- Summary of changes: frysk-sys/lib/stdcpp/ChangeLog | 4 ++++ frysk-sys/lib/stdcpp/jni/Demangler.cxx | 30 +++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 7 deletions(-) First 500 lines of diff: diff --git a/frysk-sys/lib/stdcpp/ChangeLog b/frysk-sys/lib/stdcpp/ChangeLog index c74e989..d6f9a0c 100644 --- a/frysk-sys/lib/stdcpp/ChangeLog +++ b/frysk-sys/lib/stdcpp/ChangeLog @@ -1,3 +1,7 @@ +2008-04-16 Andrew Cagney + + * jni/Demangler.cxx (Java_lib_stdcpp_Demangler_demangle): Implement. + 2008-04-11 Andrew Cagney * jni/Demangler.cxx: New. diff --git a/frysk-sys/lib/stdcpp/jni/Demangler.cxx b/frysk-sys/lib/stdcpp/jni/Demangler.cxx index 8a72be6..e1702e6 100644 --- a/frysk-sys/lib/stdcpp/jni/Demangler.cxx +++ b/frysk-sys/lib/stdcpp/jni/Demangler.cxx @@ -37,15 +37,31 @@ // version and license this file solely under the GPL without // exception. + +#include +#include +#include + #include "lib_stdcpp_Demangler.h" +using namespace abi; JNIEXPORT jstring -Java_lib_stdcpp_Demangler_demangle (JNIEnv *env, jclass, jstring) -{ - jclass cls = env->FindClass("java/lang/RuntimeException"); - if (cls != NULL) { - env->ThrowNew(cls, __FILE__ ":Java_lib_stdcpp_Demangler_demangle not implemented"); - } - return 0; +Java_lib_stdcpp_Demangler_demangle(JNIEnv *env, jclass klass, + jstring mangledString) { + if (mangledString == NULL) + return NULL; + + int status = -1; + + const char* mangledName = env->GetStringUTFChars(mangledString, NULL); + if (mangledName == NULL) + return NULL; // exception pending + const char *demangledName = __cxa_demangle(mangledName, 0, 0, &status); + env->ReleaseStringUTFChars(mangledString, mangledName); + + if (status == 0) + return env->NewStringUTF(demangledName); + else + return mangledString; } hooks/post-receive -- frysk system monitor/debugger