public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Add some jni util methods. Date: Wed, 16 Apr 2008 15:30:00 -0000 [thread overview] Message-ID: <20080416153046.24206.qmail@sourceware.org> (raw) The branch, master has been updated via 2e5da7dc1ff6f57fcacfa23eb58f1a4f417bd388 (commit) from c2385ede8804d05066966d97177cbcf4fcfaed19 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 2e5da7dc1ff6f57fcacfa23eb58f1a4f417bd388 Author: Andrew Cagney <cagney@redhat.com> Date: Wed Apr 16 11:29:31 2008 -0400 Add some jni util methods. frysk-sys/frysk/ChangeLog 2008-04-16 Andrew Cagney <cagney@redhat.com> * jni/util.cxx: New. * jni/print.cxx: New. * jni/print.hxx: New. * jni/util.hxx: New. frysk-sys/frysk/rsl/ChangeLog 2008-04-16 Andrew Cagney <cagney@redhat.com> * jni/Log.cxx: Use members.hxx, and print.hxx. ----------------------------------------------------------------------- Summary of changes: frysk-sys/frysk/ChangeLog | 7 + frysk-sys/frysk/jni/members.cxx | 239 +++++++++++++++++++++++++++++++++++++++ frysk-sys/frysk/jni/members.hxx | 96 ++++++++++++++++ frysk-sys/frysk/jni/print.cxx | 73 ++++++++++++ frysk-sys/frysk/jni/print.hxx | 49 ++++++++ frysk-sys/frysk/rsl/ChangeLog | 4 + frysk-sys/frysk/rsl/jni/Log.cxx | 87 ++++----------- 7 files changed, 488 insertions(+), 67 deletions(-) create mode 100644 frysk-sys/frysk/jni/members.cxx create mode 100644 frysk-sys/frysk/jni/members.hxx create mode 100644 frysk-sys/frysk/jni/print.cxx create mode 100644 frysk-sys/frysk/jni/print.hxx First 500 lines of diff: diff --git a/frysk-sys/frysk/ChangeLog b/frysk-sys/frysk/ChangeLog index e0baf3a..d2b4ff3 100644 --- a/frysk-sys/frysk/ChangeLog +++ b/frysk-sys/frysk/ChangeLog @@ -1,3 +1,10 @@ +2008-04-16 Andrew Cagney <cagney@redhat.com> + + * jni/util.cxx: New. + * jni/print.cxx: New. + * jni/print.hxx: New. + * jni/util.hxx: New. + 2008-03-03 Andrew Cagney <cagney@redhat.com> * TestConfig.java: Move to frysk.config. diff --git a/frysk-sys/frysk/jni/members.cxx b/frysk-sys/frysk/jni/members.cxx new file mode 100644 index 0000000..ccca57f --- /dev/null +++ b/frysk-sys/frysk/jni/members.cxx @@ -0,0 +1,239 @@ +// This file is part of the program FRYSK. +// +// Copyright 2008, Red Hat Inc. +// +// FRYSK is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// FRYSK is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with FRYSK; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// In addition, as a special exception, Red Hat, Inc. gives You the +// additional right to link the code of FRYSK with code not covered +// under the GNU General Public License ("Non-GPL Code") and to +// distribute linked combinations including the two, subject to the +// limitations in this paragraph. Non-GPL Code permitted under this +// exception must only link to the code of FRYSK through those well +// defined interfaces identified in the file named EXCEPTION found in +// the source code files (the "Approved Interfaces"). The files of +// Non-GPL Code may instantiate templates or use macros or inline +// functions from the Approved Interfaces without causing the +// resulting work to be covered by the GNU General Public +// License. Only Red Hat, Inc. may make changes or additions to the +// list of Approved Interfaces. You must obey the GNU General Public +// License in all respects for all of the FRYSK code and other code +// used in conjunction with FRYSK except the Non-GPL Code covered by +// this exception. If you modify this file, you may extend this +// exception to your version of the file, but you are not obligated to +// do so. If you do not wish to provide this exception without +// modification, you must delete this exception statement from your +// version and license this file solely under the GPL without +// exception. + +#include <jni.h> + +#include "frysk/jni/members.hxx" + +jmethodID +getMethodID(JNIEnv* env, jobject object, const char* name, + const char* signature) { + jclass klass = env->GetObjectClass(object); + if (klass == NULL) { + fprintf(stderr, "frysk: failed to find class for method %s%s\n", + name, signature); + return NULL; + } + return getMethodID(env, klass, name, signature); +} + +jmethodID +getMethodID(JNIEnv* env, jclass klass, const char* name, + const char* signature) { + jmethodID methodID = env->GetMethodID(klass, name, signature); + if (methodID == NULL) { + fprintf(stderr, "frysk: failed to find method %s%s\n", + name, signature); + return NULL; + } + return methodID; +} + +jmethodID +getStaticMethodID(JNIEnv* env, jobject object, const char* name, + const char* signature) { + jclass klass = env->GetObjectClass(object); + if (klass == NULL) { + fprintf(stderr, "frysk: failed to find class for method %s%s\n", + name, signature); + return NULL; + } + return getStaticMethodID(env, klass, name, signature); +} + +jmethodID +getStaticMethodID(JNIEnv* env, jclass klass, const char* name, + const char* signature) { + jmethodID methodID = env->GetStaticMethodID(klass, name, signature); + if (methodID == NULL) { + fprintf(stderr, "frysk: failed to find method %s%s\n", + name, signature); + return NULL; + } + return methodID; +} + +jfieldID +getFieldID(JNIEnv* env, jobject object, const char* name, + const char* signature) { + jclass klass = env->GetObjectClass(object); + if (klass == NULL) { + fprintf(stderr, "frysk: failed to find class for field %s%s\n", + name, signature); + return NULL; + } + return getFieldID(env, klass, name, signature); +} + +jfieldID +getFieldID(JNIEnv* env, jclass klass, const char* name, + const char* signature) { + jfieldID fieldID = env->GetFieldID(klass, name, signature); + if (fieldID == NULL) { + fprintf(stderr, "frysk: failed to find field %s%s\n", + name, signature); + return NULL; + } + return fieldID; +} + +jfieldID +getStaticFieldID(JNIEnv* env, jobject object, const char* name, + const char* signature) { + jclass klass = env->GetObjectClass(object); + if (klass == NULL) { + fprintf(stderr, "frysk: failed to find class for field %s%s\n", + name, signature); + return NULL; + } + return getStaticFieldID(env, klass, name, signature); +} + +jfieldID +getStaticFieldID(JNIEnv* env, jclass klass, const char* name, + const char* signature) { + jfieldID fieldID = env->GetStaticFieldID(klass, name, signature); + if (fieldID == NULL) { + fprintf(stderr, "frysk: failed to find static field %s%s\n", + name, signature); + return NULL; + } + return fieldID; +} + + +jboolean +getMethodID(jmethodID* id, JNIEnv* env, jobject object, + const char* name, const char* signature) { + if (*id == NULL) { + *id = getMethodID(env, object, name, signature); + if (*id == NULL) { + return JNI_FALSE; + } + } + return JNI_TRUE; +} + +jboolean +getMethodID(jmethodID* id, JNIEnv* env, jclass klass, + const char* name, const char* signature) { + if (*id == NULL) { + *id = getMethodID(env, klass, name, signature); + if (*id == NULL) { + return JNI_FALSE; + } + } + return JNI_TRUE; +} + + +jboolean +getFieldID(jfieldID* id, JNIEnv* env, jobject object, + const char* name, const char* signature) { + if (*id == NULL) { + *id = getFieldID(env, object, name, signature); + if (*id == NULL) { + return JNI_FALSE; + } + } + return JNI_TRUE; +} + + +jboolean +getFieldID(jfieldID* id, JNIEnv* env, jclass klass, + const char* name, const char* signature) { + if (*id == NULL) { + *id = getFieldID(env, klass, name, signature); + if (*id == NULL) { + return JNI_FALSE; + } + } + return JNI_TRUE; +} + +jboolean +getStaticMethodID(jmethodID* id, JNIEnv* env, jobject object, + const char* name, const char* signature) { + if (*id == NULL) { + *id = getStaticMethodID(env, object, name, signature); + if (*id == NULL) { + return JNI_FALSE; + } + } + return JNI_TRUE; +} + +jboolean +getStaticMethodID(jmethodID* id, JNIEnv* env, jclass klass, + const char* name, const char* signature) { + if (*id == NULL) { + *id = getStaticMethodID(env, klass, name, signature); + if (*id == NULL) { + return JNI_FALSE; + } + } + return JNI_TRUE; +} + + +jboolean +getStaticFieldID(jfieldID* id, JNIEnv* env, jobject object, + const char* name, const char* signature) { + if (*id == NULL) { + *id = getStaticFieldID(env, object, name, signature); + if (*id == NULL) { + return JNI_FALSE; + } + } + return JNI_TRUE; +} + + +jboolean +getStaticFieldID(jfieldID* id, JNIEnv* env, jclass klass, + const char* name, const char* signature) { + if (*id == NULL) { + *id = getStaticFieldID(env, klass, name, signature); + if (*id == NULL) { + return JNI_FALSE; + } + } + return JNI_TRUE; +} diff --git a/frysk-sys/frysk/jni/members.hxx b/frysk-sys/frysk/jni/members.hxx new file mode 100644 index 0000000..3f28942 --- /dev/null +++ b/frysk-sys/frysk/jni/members.hxx @@ -0,0 +1,96 @@ +// This file is part of the program FRYSK. +// +// Copyright 2008, Red Hat Inc. +// +// FRYSK is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// FRYSK is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with FRYSK; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// In addition, as a special exception, Red Hat, Inc. gives You the +// additional right to link the code of FRYSK with code not covered +// under the GNU General Public License ("Non-GPL Code") and to +// distribute linked combinations including the two, subject to the +// limitations in this paragraph. Non-GPL Code permitted under this +// exception must only link to the code of FRYSK through those well +// defined interfaces identified in the file named EXCEPTION found in +// the source code files (the "Approved Interfaces"). The files of +// Non-GPL Code may instantiate templates or use macros or inline +// functions from the Approved Interfaces without causing the +// resulting work to be covered by the GNU General Public +// License. Only Red Hat, Inc. may make changes or additions to the +// list of Approved Interfaces. You must obey the GNU General Public +// License in all respects for all of the FRYSK code and other code +// used in conjunction with FRYSK except the Non-GPL Code covered by +// this exception. If you modify this file, you may extend this +// exception to your version of the file, but you are not obligated to +// do so. If you do not wish to provide this exception without +// modification, you must delete this exception statement from your +// version and license this file solely under the GPL without +// exception. + +/** + * These methods either return the requested ID; or print a message to + * stderr, and then return NULL. + */ + +extern jmethodID getMethodID(JNIEnv* env, jobject object, + const char* name, const char* signature); + +extern jmethodID getMethodID(JNIEnv* env, jclass klass, + const char* name, const char* signature); + +extern jfieldID getFieldID(JNIEnv* env, jobject object, + const char* name, const char* signature); + +extern jfieldID getFieldID(JNIEnv* env, jclass klass, + const char* name, const char* signature); + +extern jmethodID getStaticMethodID(JNIEnv* env, jobject object, + const char* name, const char* signature); + +extern jmethodID getStaticMethodID(JNIEnv* env, jclass klass, + const char* name, const char* signature); + +extern jfieldID getStaticFieldID(JNIEnv* env, jobject object, + const char* name, const char* signature); + +extern jfieldID getStaticFieldID(JNIEnv* env, jclass klass, + const char* name, const char* signature); + +/** + * These methods are similar, but instead of returning the ID they + * update the ID parameter, and return false if the update fails. + */ + +extern jboolean getMethodID(jmethodID* id, JNIEnv* env, jobject object, + const char* name, const char* signature); + +extern jboolean getMethodID(jmethodID* id, JNIEnv* env, jclass klass, + const char* name, const char* signature); + +extern jboolean getFieldID(jfieldID* id, JNIEnv* env, jobject object, + const char* name, const char* signature); + +extern jboolean getFieldID(jfieldID* id, JNIEnv* env, jclass klass, + const char* name, const char* signature); + +extern jboolean getStaticMethodID(jmethodID* id, JNIEnv* env, jobject object, + const char* name, const char* signature); + +extern jboolean getStaticMethodID(jmethodID* id, JNIEnv* env, jclass klass, + const char* name, const char* signature); + +extern jboolean getStaticFieldID(jfieldID* id, JNIEnv* env, jobject object, + const char* name, const char* signature); + +extern jboolean getStaticFieldID(jfieldID* id, JNIEnv* env, jclass klass, + const char* name, const char* signature); diff --git a/frysk-sys/frysk/jni/print.cxx b/frysk-sys/frysk/jni/print.cxx new file mode 100644 index 0000000..9567166 --- /dev/null +++ b/frysk-sys/frysk/jni/print.cxx @@ -0,0 +1,73 @@ +// This file is part of the program FRYSK. +// +// Copyright 2008, Red Hat Inc. +// +// FRYSK is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// FRYSK is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with FRYSK; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// In addition, as a special exception, Red Hat, Inc. gives You the +// additional right to link the code of FRYSK with code not covered +// under the GNU General Public License ("Non-GPL Code") and to +// distribute linked combinations including the two, subject to the +// limitations in this paragraph. Non-GPL Code permitted under this +// exception must only link to the code of FRYSK through those well +// defined interfaces identified in the file named EXCEPTION found in +// the source code files (the "Approved Interfaces"). The files of +// Non-GPL Code may instantiate templates or use macros or inline +// functions from the Approved Interfaces without causing the +// resulting work to be covered by the GNU General Public +// License. Only Red Hat, Inc. may make changes or additions to the +// list of Approved Interfaces. You must obey the GNU General Public +// License in all respects for all of the FRYSK code and other code +// used in conjunction with FRYSK except the Non-GPL Code covered by +// this exception. If you modify this file, you may extend this +// exception to your version of the file, but you are not obligated to +// do so. If you do not wish to provide this exception without +// modification, you must delete this exception statement from your +// version and license this file solely under the GPL without +// exception. + +#include <jni.h> +#include <stdlib.h> + +#include "frysk/jni/print.hxx" + +/** + * Do printf style printing to a java String. + */ + +jstring +ajprintf(JNIEnv* env, const char *fmt, ...) { + va_list ap; + va_start (ap, fmt); + jstring jmessage = vajprintf(env, fmt, ap); + va_end (ap); + return jmessage; +} + +/** + * Do vprintf style printing to a java String. + */ +jstring +vajprintf(JNIEnv* env, const char *fmt, va_list ap) { + char* message = NULL; + if (::vasprintf(&message, fmt, ap) < 0) { + return NULL; + } + jstring jmessage = env->NewStringUTF(message); + ::free(message); + if (jmessage == NULL) { + return NULL; + } + return jmessage; +} diff --git a/frysk-sys/frysk/jni/print.hxx b/frysk-sys/frysk/jni/print.hxx new file mode 100644 index 0000000..1b7694f --- /dev/null +++ b/frysk-sys/frysk/jni/print.hxx @@ -0,0 +1,49 @@ +// This file is part of the program FRYSK. +// +// Copyright 2008, Red Hat Inc. +// +// FRYSK is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// FRYSK is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with FRYSK; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// In addition, as a special exception, Red Hat, Inc. gives You the +// additional right to link the code of FRYSK with code not covered +// under the GNU General Public License ("Non-GPL Code") and to +// distribute linked combinations including the two, subject to the +// limitations in this paragraph. Non-GPL Code permitted under this +// exception must only link to the code of FRYSK through those well +// defined interfaces identified in the file named EXCEPTION found in +// the source code files (the "Approved Interfaces"). The files of +// Non-GPL Code may instantiate templates or use macros or inline +// functions from the Approved Interfaces without causing the +// resulting work to be covered by the GNU General Public +// License. Only Red Hat, Inc. may make changes or additions to the +// list of Approved Interfaces. You must obey the GNU General Public +// License in all respects for all of the FRYSK code and other code +// used in conjunction with FRYSK except the Non-GPL Code covered by +// this exception. If you modify this file, you may extend this +// exception to your version of the file, but you are not obligated to +// do so. If you do not wish to provide this exception without +// modification, you must delete this exception statement from your +// version and license this file solely under the GPL without +// exception. + +/** + * Do printf style printing to a java String. + */ +extern jstring ajprintf(JNIEnv* env, const char *fmt, ...) + __attribute__ ((format (printf, 2, 3))); + +/** + * Do vprintf style printing to a java String. + */ +extern jstring vajprintf(JNIEnv* env, const char *fmt, va_list ap); diff --git a/frysk-sys/frysk/rsl/ChangeLog b/frysk-sys/frysk/rsl/ChangeLog index 60122d5..1977571 100644 --- a/frysk-sys/frysk/rsl/ChangeLog +++ b/frysk-sys/frysk/rsl/ChangeLog hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2008-04-16 15:30 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20080416153046.24206.qmail@sourceware.org \ --to=cagney@sourceware.org \ --cc=frysk-cvs@sourceware.org \ --cc=frysk@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).