void throwShmemException(JNIEnv *env, char *message, jint errorCode) { char msg[80]; char buf[255]; if (shmemBase_getlasterror(msg, sizeof(msg)) == SYS_OK) { sprintf(buf, "%s: %s\n", message, msg); } else { sprintf(buf, "%s, error code = %d", message, errorCode); } throwException(env, "java/io/IOException", buf); }
/* * Set the error message for this thread. If the error is an I/O * error then augment the supplied error message with the textual * representation of the I/O error. */ static void setLastError(int err, char *newmsg) { char buf[255]; char *msg; /* get any I/O first in case any system calls override errno */ if (err == JDWPTRANSPORT_ERROR_IO_ERROR) { if (shmemBase_getlasterror(buf, sizeof(buf)) != SYS_OK) { buf[0] = '\0'; } } /* free any current error */ msg = (char *)sysTlsGet(tlsIndex); if (msg != NULL) { (*callbacks->free)(msg); } /* * For I/O errors append the I/O error message with to the * supplied message. For all other errors just use the supplied * message. */ if (err == JDWPTRANSPORT_ERROR_IO_ERROR) { char *join_str = ": "; int msg_len = (int)strlen(newmsg) + (int)strlen(join_str) + (int)strlen(buf) + 3; msg = (*callbacks->alloc)(msg_len); if (msg != NULL) { strcpy(msg, newmsg); strcat(msg, join_str); strcat(msg, buf); } } else { msg = (*callbacks->alloc)((int)strlen(newmsg)+1); if (msg != NULL) { strcpy(msg, newmsg); } } /* Put a pointer to the message in TLS */ sysTlsPut(tlsIndex, msg); }