in src/main/c/Posix/SerialPort_Posix.c [434:495]
JNIEXPORT void JNICALL Java_com_fazecast_jSerialComm_SerialPort_retrievePortDetails(JNIEnv *env, jobject obj)
{
// Retrieve the serial port parameter fields
jstring portNameJString = (jstring)(*env)->GetObjectField(env, obj, comPortField);
if (checkJniError(env, __LINE__ - 1)) return;
const char *portName = (*env)->GetStringUTFChars(env, portNameJString, NULL);
if (checkJniError(env, __LINE__ - 1)) return;
// Ensure that the serial port exists
pthread_mutex_lock(&criticalSection);
if (!portsEnumerated)
enumeratePorts();
serialPort *port = fetchPort(&serialPorts, portName);
char continueRetrieval = (port != NULL);
// Fill in the Java-side port details
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, portDescriptionField, (*env)->NewStringUTF(env, port->portDescription));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, friendlyNameField, (*env)->NewStringUTF(env, port->friendlyName));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, portLocationField, (*env)->NewStringUTF(env, port->portLocation));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, serialNumberField, (*env)->NewStringUTF(env, port->serialNumber));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, manufacturerField, (*env)->NewStringUTF(env, port->manufacturer));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetObjectField(env, obj, deviceDriverField, (*env)->NewStringUTF(env, port->deviceDriver));
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetIntField(env, obj, vendorIdField, port->vendorID);
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
if (continueRetrieval)
{
(*env)->SetIntField(env, obj, productIdField, port->productID);
if (checkJniError(env, __LINE__ - 1)) continueRetrieval = 0;
}
// Release all JNI structures
pthread_mutex_unlock(&criticalSection);
(*env)->ReleaseStringUTFChars(env, portNameJString, portName);
checkJniError(env, __LINE__ - 1);
}