< prev index next >
test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.cpp
Print this page
rev 52050 : [mq]: lock_reformat
rev 52051 : [mq]: without_string
@@ -20,33 +20,51 @@
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-#include <string>
-
#include "ExceptionCheckingJniEnv.hpp"
namespace {
template<class T = void*>
class JNIVerifier {
public:
- JNIVerifier(ExceptionCheckingJniEnv *env, const std::string& base_msg)
- : _env(env), _base_msg(base_msg) {
+ JNIVerifier(ExceptionCheckingJniEnv *env, const char* base_msg)
+ : _env(env), _base_msg(base_msg), _return_error(NULL) {
}
~JNIVerifier() {
JNIEnv* jni_env = _env->GetJNIEnv();
if (jni_env->ExceptionCheck()) {
- _env->HandleError(_base_msg.c_str());
- } else {
- if (!_return_error.empty()) {
- const std::string msg = _base_msg + ":" + _return_error;
- _env->HandleError(msg.c_str());
+ _env->HandleError(_base_msg);
+ return;
+ }
+
+ if (_return_error != NULL) {
+ ProcessReturnError();
+ }
+ }
+
+ void ProcessReturnError() {
+ int len = snprintf(NULL, 0, "%s : %s", _base_msg, _return_error) + 1;
+
+ if (len <= 0) {
+ _env->HandleError(_return_error);
+ return;
}
+
+ char* full_message = (char*) malloc(len);
+ if (full_message == NULL) {
+ _env->HandleError(_return_error);
+ return;
}
+
+ snprintf(full_message, len, "%s : %s", _base_msg, _return_error);
+
+ _env->HandleError(full_message);
+ free(full_message);
}
T ResultNotNull(T ptr) {
if (ptr == NULL) {
_return_error = "Return is NULL";
@@ -54,12 +72,12 @@
return ptr;
}
private:
ExceptionCheckingJniEnv* _env;
- std::string _base_msg;
- std::string _return_error;
+ const char* _base_msg;
+ const char* _return_error;
};
}
jclass ExceptionCheckingJniEnv::GetObjectClass(jobject obj) {
< prev index next >