< prev index next >

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

Print this page
rev 14890 : 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
*** 145,157 **** 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) --- 145,157 ---- JNU_ThrowInstantiationException(JNIEnv *env, const char *msg) { JNU_ThrowByName(env, "java/lang/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)
*** 172,184 **** 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); --- 172,239 ---- if (!(*env)->ExceptionOccurred(env)) { 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[256]; ! size_t n = getLastErrorString(buf, sizeof(buf)); ! size_t messagelen = message == NULL ? 0 : strlen(message); ! ! if (n > 0) { ! jstring s = JNU_NewStringPlatform(env, buf); ! if (s != NULL) { ! jobject x = NULL; ! if (messagelen) { ! jstring s2 = NULL; ! size_t messageextlen = messagelen + 4; ! char *str1 = (char *)malloc((messageextlen) * sizeof(char)); ! if (str1 == 0) { ! JNU_ThrowOutOfMemoryError(env, 0); ! return; ! } ! jio_snprintf(str1, messageextlen, " (%s)", message); ! s2 = (*env)->NewStringUTF(env, str1); ! free(str1); ! if (s2 != NULL) { ! jstring s3 = JNU_CallMethodByName( ! env, NULL, s, "concat", ! "(Ljava/lang/String;)Ljava/lang/String;", ! s2).l; ! (*env)->DeleteLocalRef(env, s2); ! if (s3 != NULL) { ! (*env)->DeleteLocalRef(env, s); ! s = s3; ! } ! } ! } ! x = JNU_NewObjectByName(env, name, "(Ljava/lang/String;)V", s); ! if (x != NULL) { ! (*env)->Throw(env, x); ! } ! } ! } ! ! if (!(*env)->ExceptionOccurred(env)) { ! if (messagelen) { ! JNU_ThrowByName(env, name, message); ! } else { ! JNU_ThrowByName(env, name, "no further information"); ! } ! } ! } ! ! /* ! * Convenience method. ! * Call JNU_ThrowByNameWithLastError for java.io.IOException. */ JNIEXPORT void JNICALL JNU_ThrowIOExceptionWithLastError(JNIEnv *env, const char *defaultDetail) { JNU_ThrowByNameWithLastError(env, "java/io/IOException", defaultDetail);
< prev index next >