summaryrefslogtreecommitdiffstats
path: root/icu/src/main/native/ErrorCode.c
diff options
context:
space:
mode:
Diffstat (limited to 'icu/src/main/native/ErrorCode.c')
-rw-r--r--icu/src/main/native/ErrorCode.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/icu/src/main/native/ErrorCode.c b/icu/src/main/native/ErrorCode.c
new file mode 100644
index 0000000..b3e43cd
--- /dev/null
+++ b/icu/src/main/native/ErrorCode.c
@@ -0,0 +1,57 @@
+/**
+*******************************************************************************
+* Copyright (C) 1996-2005, International Business Machines Corporation and *
+* others. All Rights Reserved. *
+*******************************************************************************
+*
+*******************************************************************************
+*/
+
+#include "ErrorCode.h"
+
+/* private data members ----------------------------------------------------*/
+
+/**
+* Name of the java runtime exception classes
+*/
+#define ILLEGALARGUMENTEXCEPTION_ "java/lang/IllegalArgumentException"
+#define ARRAYINDEXOUTOFBOUNDSEXCEPTION_ "java/lang/ArrayIndexOutOfBoundsException"
+#define UNSUPPORTEDOPERATIONEXCEPTION_ "java/lang/UnsupportedOperationException"
+#define RUNTIMEEXCEPTION_ "java/lang/RuntimeException"
+
+/* public methods ---------------------------------------------------------*/
+
+/**
+* Checks if an error has occured.
+* Throws a generic Java RuntimeException if an error has occured.
+* @param env JNI environment variable
+* @param errorcode code to determine if it is an erro
+* @return 0 if errorcode is not an error, 1 if errorcode is an error, but the
+* creation of the exception to be thrown fails
+* @exception thrown if errorcode represents an error
+*/
+UBool icu4jni_error(JNIEnv *env, UErrorCode errorcode)
+{
+ const char *emsg = u_errorName(errorcode);
+ jclass exception;
+
+ if (errorcode > U_ZERO_ERROR && errorcode < U_ERROR_LIMIT) {
+ switch (errorcode) {
+ case U_ILLEGAL_ARGUMENT_ERROR :
+ exception = (*env)->FindClass(env, ILLEGALARGUMENTEXCEPTION_);
+ break;
+ case U_INDEX_OUTOFBOUNDS_ERROR :
+ case U_BUFFER_OVERFLOW_ERROR :
+ exception = (*env)->FindClass(env, ARRAYINDEXOUTOFBOUNDSEXCEPTION_);
+ break;
+ case U_UNSUPPORTED_ERROR :
+ exception = (*env)->FindClass(env, UNSUPPORTEDOPERATIONEXCEPTION_);
+ break;
+ default :
+ exception = (*env)->FindClass(env, RUNTIMEEXCEPTION_);
+ }
+
+ return ((*env)->ThrowNew(env, exception, emsg) != 0);
+ }
+ return 0;
+}