# HG changeset patch # User clanger # Date 1464335829 -7200 # Fri May 27 09:57:09 2016 +0200 # Node ID 46e6255ac7b0976a76ced5da46d380266f309a61 # Parent baf8c2e6b0cea1f2236298ee98eac2e4582231ea 8158023: SocketExceptions contain too little information sometimes diff --git a/src/java.base/share/native/libjava/jni_util.c b/src/java.base/share/native/libjava/jni_util.c --- a/src/java.base/share/native/libjava/jni_util.c +++ b/src/java.base/share/native/libjava/jni_util.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -54,134 +54,153 @@ JNIEXPORT void JNICALL JNU_ThrowNullPointerException(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/NullPointerException", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "NullPointerException", msg); } JNIEXPORT void JNICALL JNU_ThrowArrayIndexOutOfBoundsException(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/ArrayIndexOutOfBoundsException", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "ArrayIndexOutOfBoundsException", msg); } JNIEXPORT void JNICALL JNU_ThrowOutOfMemoryError(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/OutOfMemoryError", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "OutOfMemoryError", msg); } JNIEXPORT void JNICALL JNU_ThrowIllegalArgumentException(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/IllegalArgumentException", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "IllegalArgumentException", msg); } JNIEXPORT void JNICALL JNU_ThrowIllegalAccessError(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/IllegalAccessError", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "IllegalAccessError", msg); } JNIEXPORT void JNICALL JNU_ThrowIllegalAccessException(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/IllegalAccessException", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "IllegalAccessException", msg); } JNIEXPORT void JNICALL JNU_ThrowInternalError(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/InternalError", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "InternalError", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchFieldException(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/NoSuchFieldException", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "NoSuchFieldException", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchMethodException(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/NoSuchMethodException", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "NoSuchMethodException", msg); } JNIEXPORT void JNICALL JNU_ThrowClassNotFoundException(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/ClassNotFoundException", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "ClassNotFoundException", msg); } JNIEXPORT void JNICALL JNU_ThrowNumberFormatException(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/NumberFormatException", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "NumberFormatException", msg); } JNIEXPORT void JNICALL JNU_ThrowIOException(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/io/IOException", msg); + JNU_ThrowByName(env, JNU_JAVAIOPKG "IOException", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchFieldError(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/NoSuchFieldError", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "NoSuchFieldError", msg); } JNIEXPORT void JNICALL JNU_ThrowNoSuchMethodError(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/NoSuchMethodError", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "NoSuchMethodError", msg); } JNIEXPORT void JNICALL JNU_ThrowStringIndexOutOfBoundsException(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/StringIndexOutOfBoundsException", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "StringIndexOutOfBoundsException", msg); } JNIEXPORT void JNICALL JNU_ThrowInstantiationException(JNIEnv *env, const char *msg) { - JNU_ThrowByName(env, "java/lang/InstantiationException", msg); + JNU_ThrowByName(env, JNU_JAVAPKG "InstantiationException", msg); } - -/* Throw an exception by name, using the string returned by - * JVM_LastErrorString for the detail string. If the last-error +/* + * 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[256]; + char buf[255 + 1]; // 256 characters, including terminating 0 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, buf); + } else { 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. +/* + * 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, "java/io/IOException", defaultDetail); + JNU_ThrowByNameWithLastError(env, JNU_JAVAIOPKG "IOException", defaultDetail); } diff --git a/src/java.base/share/native/libjava/jni_util.h b/src/java.base/share/native/libjava/jni_util.h --- a/src/java.base/share/native/libjava/jni_util.h +++ b/src/java.base/share/native/libjava/jni_util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -97,17 +97,26 @@ JNIEXPORT void JNICALL JNU_ThrowInstantiationException(JNIEnv *env, const char *msg); -/* Throw an exception by name, using the string returned by - * JVM_LastErrorString for the detail string. If the last-error +/* + * 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 *defaultMessage); + const char *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. +/* + * 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); + +/* + * Convenience method. + * Call JNU_ThrowByNameWithLastError for java.io.IOException. */ JNIEXPORT void JNICALL JNU_ThrowIOExceptionWithLastError(JNIEnv *env, const char *defaultDetail); diff --git a/src/java.base/unix/native/libnet/Inet4AddressImpl.c b/src/java.base/unix/native/libnet/Inet4AddressImpl.c --- a/src/java.base/unix/native/libnet/Inet4AddressImpl.c +++ b/src/java.base/unix/native/libnet/Inet4AddressImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -803,7 +803,7 @@ } if (errno != EINPROGRESS) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", + JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", "connect failed"); close(fd); return JNI_FALSE; diff --git a/src/java.base/unix/native/libnet/Inet6AddressImpl.c b/src/java.base/unix/native/libnet/Inet6AddressImpl.c --- a/src/java.base/unix/native/libnet/Inet6AddressImpl.c +++ b/src/java.base/unix/native/libnet/Inet6AddressImpl.c @@ -790,7 +790,7 @@ } if (errno != EINPROGRESS) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", + JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", "connect failed"); close(fd); return JNI_FALSE; diff --git a/src/java.base/unix/native/libnet/NetworkInterface.c b/src/java.base/unix/native/libnet/NetworkInterface.c --- a/src/java.base/unix/native/libnet/NetworkInterface.c +++ b/src/java.base/unix/native/libnet/NetworkInterface.c @@ -619,8 +619,8 @@ (*env)->ReleaseStringUTFChars(env, name, name_utf); if (ret < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFFLAGS failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "getFlags() failed"); return -1; } @@ -1033,8 +1033,8 @@ // If EPROTONOSUPPORT is returned it means we don't have // support for this proto so don't throw an exception. if (errno != EPROTONOSUPPORT) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Socket creation failed"); } return -1; } @@ -1059,13 +1059,13 @@ if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { if (errno == EPROTONOSUPPORT) { if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV6 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed"); return -1; } } else { // errno is not NOSUPPORT - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV4 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed"); return -1; } } @@ -1094,15 +1094,15 @@ // SIOCGIFCOUNT doesn't work ifc.ifc_buf = NULL; if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed"); return ifs; } #elif defined(_AIX) ifc.ifc_buf = NULL; if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGSIZIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGSIZIFCONF) failed"); return ifs; } #endif /* __linux__ */ @@ -1114,8 +1114,8 @@ siocgifconfRequest = CSIOCGIFCONF; #endif if (ioctl(sock, siocgifconfRequest, (char *)&ifc) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed"); free(buf); return ifs; } @@ -1210,8 +1210,8 @@ ifc.ifc_buf = NULL; if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGSIZIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGSIZIFCONF) failed"); return ifs; } bufsize = ifc.ifc_len; @@ -1224,8 +1224,8 @@ ifc.ifc_len = bufsize; ifc.ifc_buf = buf; if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl CSIOCGIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed"); free(buf); return ifs; } @@ -1309,16 +1309,16 @@ // Let's make sure the interface does have a broadcast address. if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFFLAGS failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFFLAGS) failed"); return ret; } if (if2.ifr_flags & IFF_BROADCAST) { // It does, let's retrieve it if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFBRDADDR failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFBRDADDR) failed"); return ret; } @@ -1341,8 +1341,8 @@ strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1); if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFNETMASK failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK) failed"); return -1; } @@ -1411,8 +1411,8 @@ memset((char *)&ifr, 0, sizeof(ifr)); strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1); if (ioctl(sock, SIOCGIFHWADDR, &ifr) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFHWADDR failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFHWADDR) failed"); return -1; } @@ -1441,8 +1441,8 @@ } if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFMTU failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFMTU) failed"); return -1; } @@ -1483,15 +1483,15 @@ if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { if (errno == EPROTONOSUPPORT) { if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV6 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed"); return -1; } alreadyV6=1; } else { // errno is not NOSUPPORT - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV4 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed"); return -1; } } @@ -1510,8 +1510,8 @@ if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) { close(sock); if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV6 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed"); return -1; } } @@ -1555,8 +1555,8 @@ numifs.lifn_family = family; numifs.lifn_flags = 0; if (ioctl(sock, SIOCGLIFNUM, (char *)&numifs) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFNUM failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFNUM) failed"); return ifs; } @@ -1569,8 +1569,8 @@ ifc.lifc_len = bufsize; ifc.lifc_buf = buf; if (ioctl(sock, SIOCGLIFCONF, (char *)&ifc) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFCONF) failed"); free(buf); return ifs; } @@ -1637,16 +1637,16 @@ // Let's make sure the interface does have a broadcast address if (ioctl(sock, SIOCGLIFFLAGS, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFFLAGS failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFFLAGS) failed"); return ret; } if (if2.lifr_flags & IFF_BROADCAST) { // It does, let's retrieve it if (ioctl(sock, SIOCGLIFBRDADDR, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFBRDADDR failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFBRDADDR) failed"); return ret; } @@ -1669,8 +1669,8 @@ strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1); if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFNETMASK failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFNETMASK) failed"); return -1; } @@ -1720,8 +1720,8 @@ msg.len = DL_PHYS_ADDR_REQ_SIZE; if (putmsg(fd, &msg, NULL, 0) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "putmsg failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "putmsg() failed"); return -1; } @@ -1731,8 +1731,8 @@ msg.len = 0; msg.maxlen = sizeof (buf); if (getmsg(fd, &msg, NULL, &flags) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "getmsg failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "getmsg() failed"); return -1; } @@ -1816,8 +1816,8 @@ strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1); if (ioctl(sock, SIOCGLIFMTU, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFMTU failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFMTU) failed"); return -1; } @@ -1856,13 +1856,13 @@ if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { if (errno == EPROTONOSUPPORT) { if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV6 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed"); return -1; } } else { // errno is not NOSUPPORT - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV4 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed"); return -1; } } @@ -1883,8 +1883,8 @@ struct ifaddrs *ifa, *origifa; if (getifaddrs(&origifa) != 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "getifaddrs() function failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "getifaddrs() failed"); return ifs; } @@ -1945,8 +1945,8 @@ struct in6_ifreq ifr6; if (getifaddrs(&origifa) != 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "getifaddrs() function failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "getifaddrs() failed"); return ifs; } @@ -1962,8 +1962,8 @@ MIN(sizeof(ifr6.ifr_addr), ifa->ifa_addr->sa_len)); if (ioctl(sock, SIOCGIFNETMASK_IN6, (caddr_t)&ifr6) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFNETMASK_IN6 failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK_IN6) failed"); freeifaddrs(origifa); freeif(ifs); return NULL; @@ -2022,16 +2022,16 @@ // Make sure the interface does have a broadcast address if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFFLAGS failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFFLAGS) failed"); return ret; } if (if2.ifr_flags & IFF_BROADCAST) { // It does, let's retrieve it if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFBRDADDR failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFBRDADDR) failed"); return ret; } @@ -2054,8 +2054,8 @@ strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1); if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFNETMASK failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK) failed"); return -1; } @@ -2110,8 +2110,8 @@ strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1); if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFMTU failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFMTU) failed"); return -1; } diff --git a/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c b/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c --- a/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c +++ b/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c @@ -218,11 +218,11 @@ if (NET_Bind(fd, (struct sockaddr *)&him, len) < 0) { if (errno == EADDRINUSE || errno == EADDRNOTAVAIL || errno == EPERM || errno == EACCES) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "BindException", - "Bind failed"); + JNU_ThrowByNameWithLastError + (env, JNU_JAVANETPKG "BindException", "Bind failed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Bind failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Bind failed"); } return; } @@ -233,8 +233,8 @@ * that the system chose for us and store it in the Socket object. */ if (getsockname(fd, (struct sockaddr *)&him, &slen) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return; } @@ -281,8 +281,8 @@ setDefaultScopeID(env, (struct sockaddr *)&rmtaddr); if (NET_Connect(fd, (struct sockaddr *)&rmtaddr, len) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", - "Connect failed"); + JNU_ThrowByNameWithLastError + (env, JNU_JAVANETPKG "ConnectException", "Connect failed"); return; } @@ -469,7 +469,7 @@ JNU_ThrowByName(env, JNU_JAVANETPKG "PortUnreachableException", "ICMP Port Unreachable"); } else { - NET_ThrowByNameWithLastError(env, "java/io/IOException", "sendto failed"); + JNU_ThrowIOExceptionWithLastError(env, "sendto failed"); } } @@ -520,7 +520,8 @@ } else if (errno == ENOMEM) { JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Peek failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Peek failed"); } return ret; } @@ -544,7 +545,8 @@ if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Peek failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Peek failed"); } } return 0; @@ -616,7 +618,8 @@ } else if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Receive failed"); #else } else { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); @@ -681,7 +684,8 @@ if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Receive failed"); } } } else { @@ -827,7 +831,8 @@ } else if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Receive failed"); #else } else { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); @@ -859,7 +864,8 @@ if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Receive failed"); } } } else { @@ -932,8 +938,8 @@ } if ((fd = socket(domain, SOCK_DGRAM, 0)) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error creating socket"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error creating socket"); return; } @@ -1080,8 +1086,8 @@ if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&in, sizeof(in)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } } @@ -1109,8 +1115,8 @@ "IPV6_MULTICAST_IF failed (interface has IPv4 " "address only?)"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } return; } @@ -1129,8 +1135,8 @@ if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&in, sizeof(in)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } } @@ -1256,8 +1262,10 @@ on = (*env)->GetBooleanField(env, value, fid); loopback = (!on ? 1 : 0); - if (NET_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, (const void *)&loopback, sizeof(char)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); + if (NET_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, + (const void *)&loopback, sizeof(char)) < 0) { + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); return; } } @@ -1280,8 +1288,10 @@ on = (*env)->GetBooleanField(env, value, fid); loopback = (!on ? 1 : 0); - if (NET_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, (const void *)&loopback, sizeof(int)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); + if (NET_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, + (const void *)&loopback, sizeof(int)) < 0) { + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); return; } @@ -1420,7 +1430,8 @@ } if (NET_SetSockOpt(fd, level, optname, (const void *)&optval, optlen) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); return; } } @@ -1483,8 +1494,8 @@ if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (char *)inP, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return NULL; } @@ -1581,8 +1592,8 @@ if (getsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char*)&index, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return NULL; } @@ -1726,8 +1737,8 @@ len = SOCKADDR_LEN; if (getsockname(fd, (struct sockaddr *)&him, &len) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return NULL; } iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port); @@ -1752,8 +1763,8 @@ } if (NET_GetSockOpt(fd, level, optname, (void *)&optval, &optlen) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return NULL; } @@ -1805,8 +1816,8 @@ char ittl = (char)ttl; if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ittl, sizeof(ittl)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } } @@ -1818,8 +1829,8 @@ int ittl = (int)ttl; if (setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char*)&ittl, sizeof(ittl)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } } #endif @@ -1901,8 +1912,8 @@ if (getsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char*)&ttl, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return -1; } return (jint)ttl; @@ -1913,8 +1924,8 @@ socklen_t len = sizeof(ttl); if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return -1; } return (jint)ttl; diff --git a/src/java.base/unix/native/libnet/PlainSocketImpl.c b/src/java.base/unix/native/libnet/PlainSocketImpl.c --- a/src/java.base/unix/native/libnet/PlainSocketImpl.c +++ b/src/java.base/unix/native/libnet/PlainSocketImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -358,8 +358,8 @@ jlong prevTime = JVM_CurrentTimeMillis(env, 0); if (errno != EINPROGRESS) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", - "connect failed"); + JNU_ThrowByNameWithLastError + (env, JNU_JAVANETPKG "ConnectException", "connect failed"); SET_BLOCKING(fd); return; } @@ -455,28 +455,29 @@ #endif #if defined(EPROTO) if (errno == EPROTO) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ProtocolException", - "Protocol error"); + JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ProtocolException", + "Protocol error"); return; } #endif if (errno == ECONNREFUSED) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", - "Connection refused"); + JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", + "Connection refused"); } else if (errno == ETIMEDOUT) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", - "Connection timed out"); + JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", + "Connection timed out"); } else if (errno == EHOSTUNREACH) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "NoRouteToHostException", - "Host unreachable"); + JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "NoRouteToHostException", + "Host unreachable"); } else if (errno == EADDRNOTAVAIL) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "NoRouteToHostException", - "Address not available"); + JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "NoRouteToHostException", + "Address not available"); } else if ((errno == EISCONN) || (errno == EBADF)) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "connect failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "connect failed"); } return; } @@ -498,8 +499,8 @@ */ socklen_t slen = SOCKADDR_LEN; if (getsockname(fd, (struct sockaddr *)&him, &slen) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); } else { localport = NET_GetPortFromSockaddr((struct sockaddr *)&him); (*env)->SetIntField(env, this, psi_localportID, localport); @@ -536,19 +537,20 @@ } /* bind */ - if (NET_InetAddressToSockaddr(env, iaObj, localport, (struct sockaddr *)&him, &len, JNI_TRUE) != 0) { - return; + if (NET_InetAddressToSockaddr(env, iaObj, localport, (struct sockaddr *)&him, + &len, JNI_TRUE) != 0) { + return; } setDefaultScopeID(env, (struct sockaddr *)&him); if (NET_Bind(fd, (struct sockaddr *)&him, len) < 0) { if (errno == EADDRINUSE || errno == EADDRNOTAVAIL || errno == EPERM || errno == EACCES) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "BindException", - "Bind failed"); + JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "BindException", + "Bind failed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Bind failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Bind failed"); } return; } @@ -563,8 +565,8 @@ * that the system chose for us and store it in the Socket object. */ if (getsockname(fd, (struct sockaddr *)&him, &slen) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return; } localport = NET_GetPortFromSockaddr((struct sockaddr *)&him); @@ -580,8 +582,8 @@ * Signature: (I)V */ JNIEXPORT void JNICALL -Java_java_net_PlainSocketImpl_socketListen (JNIEnv *env, jobject this, - jint count) +Java_java_net_PlainSocketImpl_socketListen(JNIEnv *env, jobject this, + jint count) { /* this FileDescriptor fd field */ jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID); @@ -604,8 +606,8 @@ count -= 1; if (listen(fd, count) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Listen failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Listen failed"); } } @@ -684,7 +686,8 @@ } else if (errno == ENOMEM) { JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Accept failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Accept failed"); } return; } @@ -727,7 +730,8 @@ if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Accept failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Accept failed"); } } return; @@ -781,8 +785,8 @@ if (errno == ECONNRESET) { JNU_ThrowByName(env, "sun/net/ConnectionResetException", ""); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl FIONREAD failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl FIONREAD failed"); } } return ret; @@ -936,8 +940,8 @@ return; } #endif /* __solaris__ */ - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } } @@ -981,8 +985,8 @@ len = SOCKADDR_LEN; if (getsockname(fd, (struct sockaddr *)&him, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return -1; } iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port); @@ -1014,8 +1018,8 @@ } if (NET_GetSockOpt(fd, level, optname, (void *)&optval, &optlen) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return -1; } @@ -1063,6 +1067,6 @@ } n = NET_Send(fd, (char *)&d, 1, MSG_OOB); if (n == -1) { - NET_ThrowByNameWithLastError(env, "java/io/IOException", "Write failed"); + JNU_ThrowIOExceptionWithLastError(env, "Write failed"); } } diff --git a/src/java.base/unix/native/libnet/SocketInputStream.c b/src/java.base/unix/native/libnet/SocketInputStream.c --- a/src/java.base/unix/native/libnet/SocketInputStream.c +++ b/src/java.base/unix/native/libnet/SocketInputStream.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -111,8 +111,8 @@ } else if (errno == ENOMEM) { JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "select/poll failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "select/poll failed"); } } if (bufP != BUF) { @@ -145,8 +145,8 @@ break; default: - NET_ThrowByNameWithLastError(env, - JNU_JAVANETPKG "SocketException", "Read failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Read failed"); } } } else { diff --git a/src/java.base/unix/native/libnet/SocketOutputStream.c b/src/java.base/unix/native/libnet/SocketOutputStream.c --- a/src/java.base/unix/native/libnet/SocketOutputStream.c +++ b/src/java.base/unix/native/libnet/SocketOutputStream.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -69,7 +69,7 @@ int fd; if (IS_NULL(fdObj)) { - JNU_ThrowByName(env, "java/net/SocketException", "Socket closed"); + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); return; } else { fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID); @@ -77,7 +77,7 @@ * was closed (sysCloseFD), the file descriptor is set to -1. */ if (fd == -1) { - JNU_ThrowByName(env, "java/net/SocketException", "Socket closed"); + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); return; } @@ -114,8 +114,8 @@ JNU_ThrowByName(env, "sun/net/ConnectionResetException", "Connection reset"); } else { - NET_ThrowByNameWithLastError(env, "java/net/SocketException", - "Write failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Write failed"); } if (bufP != BUF) { free(bufP); diff --git a/src/java.base/unix/native/libnet/net_util_md.c b/src/java.base/unix/native/libnet/net_util_md.c --- a/src/java.base/unix/native/libnet/net_util_md.c +++ b/src/java.base/unix/native/libnet/net_util_md.c @@ -272,15 +272,6 @@ #endif - -void -NET_ThrowByNameWithLastError(JNIEnv *env, const char *name, - const char *defaultDetail) { - char errmsg[255]; - sprintf(errmsg, "errno: %d, error: %s\n", errno, defaultDetail); - JNU_ThrowByNameWithLastError(env, name, errmsg); -} - void NET_ThrowCurrent(JNIEnv *env, char *msg) { NET_ThrowNew(env, errno, msg); diff --git a/src/java.base/unix/native/libnet/net_util_md.h b/src/java.base/unix/native/libnet/net_util_md.h --- a/src/java.base/unix/native/libnet/net_util_md.h +++ b/src/java.base/unix/native/libnet/net_util_md.h @@ -53,8 +53,6 @@ void NET_ThrowUnknownHostExceptionWithGaiError(JNIEnv *env, const char* hostname, int gai_error); -void NET_ThrowByNameWithLastError(JNIEnv *env, const char *name, - const char *defaultDetail); #define NET_WAIT_READ 0x01 #define NET_WAIT_WRITE 0x02 diff --git a/src/java.base/windows/native/libnet/Inet4AddressImpl.c b/src/java.base/windows/native/libnet/Inet4AddressImpl.c --- a/src/java.base/windows/native/libnet/Inet4AddressImpl.c +++ b/src/java.base/windows/native/libnet/Inet4AddressImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 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 @@ -233,7 +233,7 @@ i++; } } else if (WSAGetLastError() == WSATRY_AGAIN) { - NET_ThrowByNameWithLastError(env, + JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "UnknownHostException", hostname); } else { diff --git a/src/java.base/windows/native/libnet/Inet6AddressImpl.c b/src/java.base/windows/native/libnet/Inet6AddressImpl.c --- a/src/java.base/windows/native/libnet/Inet6AddressImpl.c +++ b/src/java.base/windows/native/libnet/Inet6AddressImpl.c @@ -108,7 +108,7 @@ if (error) { if (WSAGetLastError() == WSATRY_AGAIN) { - NET_ThrowByNameWithLastError(env, + JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "UnknownHostException", hostname); JNU_ReleaseStringPlatformChars(env, host, hostname); @@ -407,7 +407,7 @@ } if (WSAGetLastError() != WSAEWOULDBLOCK) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", + JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", "connect failed"); WSACloseEvent(hEvent); closesocket(fd); diff --git a/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c b/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c --- a/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c +++ b/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -1713,8 +1713,8 @@ in.s_addr = htonl(getInetAddress_addr(env, value)); if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&in, sizeof(in)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } return; } @@ -1741,7 +1741,7 @@ } index = (*env)->GetIntField(env, value, ni_indexID); - if ( isAdapterIpv6Enabled(env, index) != 0 ) { + if (isAdapterIpv6Enabled(env, index) != 0) { if (setsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF, (const char*)&index, sizeof(index)) < 0) { if (errno == EINVAL && index > 0) { @@ -1749,8 +1749,8 @@ "IPV6_MULTICAST_IF failed (interface has IPv4 " "address only?)"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } return; } @@ -1758,13 +1758,13 @@ /* If there are any IPv4 addresses on this interface then * repeat the operation on the IPv4 fd */ - if (getInet4AddrFromIf (env, value, &in) < 0) { + if (getInet4AddrFromIf(env, value, &in) < 0) { return; } if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&in, sizeof(in)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } return; } else { @@ -1781,8 +1781,8 @@ if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&in, sizeof(in)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } return; } @@ -1932,8 +1932,8 @@ int len = sizeof(struct in_addr); if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (char *)inP, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return NULL; } @@ -2056,8 +2056,8 @@ { if (getsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char*)&index, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return NULL; } } @@ -2288,8 +2288,8 @@ } if (getsockname(fd, (struct sockaddr *)&him, &len) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return NULL; } iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port); diff --git a/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c b/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c --- a/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c +++ b/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -1054,8 +1054,8 @@ } if (getsockname(fd, (struct sockaddr *)&him, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return -1; } iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port); diff --git a/src/java.base/windows/native/libnet/net_util_md.c b/src/java.base/windows/native/libnet/net_util_md.c --- a/src/java.base/windows/native/libnet/net_util_md.c +++ b/src/java.base/windows/native/libnet/net_util_md.c @@ -215,14 +215,6 @@ (*env)->ThrowNew(env, cls, msg); } -void -NET_ThrowByNameWithLastError(JNIEnv *env, const char *name, - const char *defaultDetail) { - char errmsg[255]; - sprintf(errmsg, "errno: %d, error: %s\n", WSAGetLastError(), defaultDetail); - JNU_ThrowByNameWithLastError(env, name, errmsg); -} - jfieldID NET_GetFileDescriptorID(JNIEnv *env) { diff --git a/src/java.base/windows/native/libnet/net_util_md.h b/src/java.base/windows/native/libnet/net_util_md.h --- a/src/java.base/windows/native/libnet/net_util_md.h +++ b/src/java.base/windows/native/libnet/net_util_md.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -296,9 +296,6 @@ int NET_Socket(int domain, int type, int protocol); -void NET_ThrowByNameWithLastError(JNIEnv *env, const char *name, - const char *defaultDetail); - void NET_ThrowSocketException(JNIEnv *env, char* msg); /*