< prev index next >

src/java.base/share/native/libjava/jni_util.c

Print this page
rev 14618 : 8158023: SocketExceptions contain too little information sometimes

*** 1,7 **** /* ! * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 52,189 **** /* JNU_Throw common exceptions */ JNIEXPORT void JNICALL JNU_ThrowNullPointerException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/NullPointerException", msg); } JNIEXPORT void JNICALL JNU_ThrowArrayIndexOutOfBoundsException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/ArrayIndexOutOfBoundsException", msg); } JNIEXPORT void JNICALL JNU_ThrowOutOfMemoryError(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/OutOfMemoryError", msg); } JNIEXPORT void JNICALL JNU_ThrowIllegalArgumentException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/IllegalArgumentException", msg); } JNIEXPORT void JNICALL JNU_ThrowIllegalAccessError(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/IllegalAccessError", msg); } JNIEXPORT void JNICALL JNU_ThrowIllegalAccessException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/IllegalAccessException", msg); } JNIEXPORT void JNICALL JNU_ThrowInternalError(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/InternalError", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchFieldException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/NoSuchFieldException", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchMethodException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/NoSuchMethodException", msg); } JNIEXPORT void JNICALL JNU_ThrowClassNotFoundException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/ClassNotFoundException", msg); } JNIEXPORT void JNICALL JNU_ThrowNumberFormatException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/NumberFormatException", msg); } JNIEXPORT void JNICALL JNU_ThrowIOException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/io/IOException", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchFieldError(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/NoSuchFieldError", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchMethodError(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/NoSuchMethodError", msg); } JNIEXPORT void JNICALL JNU_ThrowStringIndexOutOfBoundsException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/StringIndexOutOfBoundsException", msg); } JNIEXPORT void JNICALL JNU_ThrowInstantiationException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, "java/lang/InstantiationException", msg); } ! ! /* Throw an exception by name, using the string returned by ! * JVM_LastErrorString for the detail string. If the last-error * string is NULL, use the given default detail string. */ JNIEXPORT void JNICALL JNU_ThrowByNameWithLastError(JNIEnv *env, const char *name, const char *defaultDetail) { ! char buf[256]; size_t n = getLastErrorString(buf, sizeof(buf)); if (n > 0) { ! jstring s = JNU_NewStringPlatform(env, buf); ! if (s != NULL) { ! jobject x = JNU_NewObjectByName(env, name, ! "(Ljava/lang/String;)V", s); ! if (x != NULL) { ! (*env)->Throw(env, x); ! } ! } ! } ! if (!(*env)->ExceptionOccurred(env)) { JNU_ThrowByName(env, name, defaultDetail); } } ! /* Throw an IOException, using the last-error string for the detail ! * string. If the last-error string is NULL, use the given default ! * detail string. */ JNIEXPORT void JNICALL JNU_ThrowIOExceptionWithLastError(JNIEnv *env, const char *defaultDetail) { ! JNU_ThrowByNameWithLastError(env, "java/io/IOException", defaultDetail); } JNIEXPORT jvalue JNICALL JNU_CallStaticMethodByName(JNIEnv *env, --- 52,208 ---- /* JNU_Throw common exceptions */ JNIEXPORT void JNICALL JNU_ThrowNullPointerException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "NullPointerException", msg); } JNIEXPORT void JNICALL JNU_ThrowArrayIndexOutOfBoundsException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "ArrayIndexOutOfBoundsException", msg); } JNIEXPORT void JNICALL JNU_ThrowOutOfMemoryError(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "OutOfMemoryError", msg); } JNIEXPORT void JNICALL JNU_ThrowIllegalArgumentException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "IllegalArgumentException", msg); } JNIEXPORT void JNICALL JNU_ThrowIllegalAccessError(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "IllegalAccessError", msg); } JNIEXPORT void JNICALL JNU_ThrowIllegalAccessException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "IllegalAccessException", msg); } JNIEXPORT void JNICALL JNU_ThrowInternalError(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "InternalError", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchFieldException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "NoSuchFieldException", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchMethodException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "NoSuchMethodException", msg); } JNIEXPORT void JNICALL JNU_ThrowClassNotFoundException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "ClassNotFoundException", msg); } JNIEXPORT void JNICALL JNU_ThrowNumberFormatException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "NumberFormatException", msg); } JNIEXPORT void JNICALL JNU_ThrowIOException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAIOPKG "IOException", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchFieldError(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "NoSuchFieldError", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchMethodError(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "NoSuchMethodError", msg); } JNIEXPORT void JNICALL JNU_ThrowStringIndexOutOfBoundsException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "StringIndexOutOfBoundsException", msg); } JNIEXPORT void JNICALL JNU_ThrowInstantiationException(JNIEnv *env, const char *msg) { ! JNU_ThrowByName(env, JNU_JAVAPKG "InstantiationException", msg); } ! /* ! * Throw an exception by name, using the string returned by ! * getLastErrorString for the detail string. If the last-error * string is NULL, use the given default detail string. */ JNIEXPORT void JNICALL JNU_ThrowByNameWithLastError(JNIEnv *env, const char *name, const char *defaultDetail) { ! char buf[255 + 1]; // 256 characters, including terminating 0 size_t n = getLastErrorString(buf, sizeof(buf)); if (n > 0) { ! JNU_ThrowByName(env, name, buf); ! } else { JNU_ThrowByName(env, name, defaultDetail); } } ! /* ! * Throw an exception by name, using a given message and the string ! * returned by getLastErrorString to construct the detail string. ! */ ! JNIEXPORT void JNICALL ! JNU_ThrowByNameWithMessageAndLastError ! (JNIEnv *env, const char *name, const char *message) ! { ! char buf[254 + 2 + 255 + 1]; // 512 characters, including terminating 0 ! char errorBuf[255 + 1]; ! size_t errorLen = getLastErrorString(errorBuf, sizeof(errorBuf)); ! ! if (message != NULL && strlen(message) != 0) { ! if (errorLen != 0) { ! jio_snprintf(buf, sizeof(buf), "%.254s: %.255s", message, errorBuf); ! } else { ! jio_snprintf(buf, sizeof(buf), "%s", message); ! } ! } else if (errorLen != 0) { ! jio_snprintf(buf, sizeof(buf), "%s", errorBuf); ! } else { ! jio_snprintf(buf, sizeof(buf), "no further information"); ! } ! ! JNU_ThrowByName(env, name, buf); ! } ! ! /* ! * Convenience method. ! * Call JNU_ThrowByNameWithLastError for java.io.IOException. */ JNIEXPORT void JNICALL JNU_ThrowIOExceptionWithLastError(JNIEnv *env, const char *defaultDetail) { ! JNU_ThrowByNameWithLastError(env, JNU_JAVAIOPKG "IOException", defaultDetail); } JNIEXPORT jvalue JNICALL JNU_CallStaticMethodByName(JNIEnv *env,
< prev index next >