< 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 >