Skip to content

Commit bc7b153

Browse files
committed
SelfReview then cleanup, cleanup and cleanup again.
1 parent 0fa665b commit bc7b153

File tree

3 files changed

+22
-200
lines changed

3 files changed

+22
-200
lines changed

src/main/cpp/_nix_based/jssc.cpp

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -532,31 +532,29 @@ JNIEXPORT jboolean JNICALL Java_jssc_SerialNativeInterface_setDTR
532532
*/
533533
JNIEXPORT jint JNICALL Java_jssc_SerialNativeInterface_writeBytes
534534
(JNIEnv *env, jobject, jlong portHandle, jbyteArray buffer){
535-
if( buffer == NULL ){
535+
ssize_t ret = 0;
536+
jbyte *jBuffer = NULL;
537+
if( !buffer ){
536538
jclass exClz = env->FindClass("java/lang/NullPointerException");
537-
if( exClz != NULL ) env->ThrowNew(exClz, "buffer");
538-
return 0;
539+
if( exClz ) env->ThrowNew(exClz, "buffer");
540+
goto Finally;
539541
}
540-
jboolean ret = JNI_FALSE;
541-
jbyte* jBuffer = env->GetByteArrayElements(buffer, JNI_FALSE);
542-
if( jBuffer == NULL ){
543-
jclass exClz = env->FindClass("java/lang/RuntimeException");
544-
if( exClz != NULL ) env->ThrowNew(exClz, "jni->GetByteArrayElements() failed");
545-
return 0;
542+
jBuffer = env->GetByteArrayElements(buffer, NULL);
543+
if( !jBuffer ){
544+
jclass exClz = env->ExceptionCheck() ? NULL : env->FindClass("java/lang/RuntimeException");
545+
if( exClz ) env->ThrowNew(exClz, "jni->GetByteArrayElements() failed");
546+
goto Finally;
546547
}
547-
jint bufferSize = env->GetArrayLength(buffer);
548-
jint result = write(portHandle, jBuffer, (size_t)bufferSize);
549-
if( result == -1 ){
550-
int err = errno; /*bakup errno*/
548+
ret = write(portHandle, jBuffer, env->GetArrayLength(buffer));
549+
if( ret == -1 ){
550+
int err = errno;
551551
jclass exClz = env->FindClass("java/io/IOException");
552-
assert(exClz != NULL);
553-
env->ThrowNew(exClz, strerror(err));
552+
if( exClz ) env->ThrowNew(exClz, strerror(err));
554553
goto Finally;
555554
}
556-
ret = (result == bufferSize) ? JNI_TRUE : JNI_FALSE;
557555
Finally:
558-
env->ReleaseByteArrayElements(buffer, jBuffer, 0);
559-
return ret;
556+
if( jBuffer ) env->ReleaseByteArrayElements(buffer, jBuffer, 0);
557+
return (jint)ret;
560558
}
561559

562560
/**
@@ -677,7 +675,7 @@ JNIEXPORT jbyteArray JNICALL Java_jssc_SerialNativeInterface_readBytes
677675
lpBuffer = (jbyte*)malloc(byteCount*sizeof*lpBuffer);
678676
if( !lpBuffer ){
679677
char emsg[32]; emsg[0] = '\0';
680-
snprintf(emsg, sizeof emsg, "malloc(%d) failed", byteCount*sizeof*lpBuffer);
678+
snprintf(emsg, sizeof emsg, "malloc(%ld) failed", byteCount*sizeof*lpBuffer);
681679
jclass exClz = env->FindClass("java/lang/RuntimeException");
682680
if( exClz ) env->ThrowNew(exClz, emsg);
683681
returnArray = NULL; goto Finally;

src/main/cpp/jssc_SerialNativeInterface.h

Lines changed: 0 additions & 173 deletions
This file was deleted.

src/main/cpp/windows/jssc.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -245,13 +245,8 @@ JNIEXPORT jint JNICALL Java_jssc_SerialNativeInterface_writeBytes
245245
}
246246
jbyte* jBuffer = env->GetByteArrayElements(buffer, NULL);
247247
if( !jBuffer ){
248-
if( !env->ExceptionCheck() ){
249-
/* IMHO this code should be unreachable, as GetByteArrayElements should already
250-
* have set an exception by itself. But will keep it as old code had it and
251-
* (who knows) maybe I miss something. So keep it to stay on the safe side. */
252-
jclass exClz = env->FindClass("java/lang/RuntimeException");
253-
if( exClz ) env->ThrowNew(exClz, "jni->GetByteArrayElements() failed");
254-
}
248+
jclass exClz = env->ExceptionCheck() ? NULL : env->FindClass("java/lang/RuntimeException");
249+
if( exClz ) env->ThrowNew(exClz, "jni->GetByteArrayElements() failed");
255250
return 0;
256251
}
257252
OVERLAPPED *overlapped = new OVERLAPPED();
@@ -270,7 +265,9 @@ JNIEXPORT jint JNICALL Java_jssc_SerialNativeInterface_writeBytes
270265
CloseHandle(overlapped->hEvent);
271266
delete overlapped;
272267
if( returnValue < 0 ){
273-
return env->ThrowNew(env->FindClass("jssc/SerialPortException"), "WriteFile() failed");
268+
jobject *exClz = env->FindClass("jssc/SerialPortException");
269+
if( exClz ) env->ThrowNew(exClz, "WriteFile() failed");
270+
return 0;
274271
}
275272
return returnValue;
276273
}

0 commit comments

Comments
 (0)