static jdwpTransportError JNICALL shmemStartListening(jdwpTransportEnv* env, const char *address, char **actualAddress) { jint rc; if (connection != NULL || transport != NULL) { RETURN_ERROR(JDWPTRANSPORT_ERROR_ILLEGAL_STATE, "already connected or already listening"); } rc = shmemBase_listen(address, &transport); /* * If a name was selected by the function above, find it and return * it in place of the original arg. */ if (rc == SYS_OK) { char *name; char *name2; rc = shmemBase_name(transport, &name); if (rc == SYS_OK) { name2 = (callbacks->alloc)((int)strlen(name) + 1); if (name2 == NULL) { RETURN_ERROR(JDWPTRANSPORT_ERROR_OUT_OF_MEMORY, "out of memory"); } else { strcpy(name2, name); *actualAddress = name2; } } } else { RETURN_IO_ERROR("failed to create shared memory listener"); } return JDWPTRANSPORT_ERROR_NONE; }
/* * Class: com_sun_tools_jdi_SharedMemoryTransport * Method: name * Signature: (J)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_sun_tools_jdi_SharedMemoryTransportService_name (JNIEnv *env, jobject thisObject, jlong id) { char *namePtr; jstring nameString = NULL; SharedMemoryTransport *transport = ID_TO_TRANSPORT(id); jint rc = shmemBase_name(transport, &namePtr); if (rc != SYS_OK) { throwShmemException(env, "shmemBase_name failed", rc); } else { nameString = (*env)->NewStringUTF(env, namePtr); if ((nameString == NULL) && !(*env)->ExceptionOccurred(env)) { throwException(env, "java/lang/InternalError", "Unable to create string"); } } return nameString; }