Add null checks on all JNI object parameters.

This commit is contained in:
Peter Johnson
2016-12-14 23:53:44 -08:00
parent 8c2a148ed1
commit 19be09c361

View File

@@ -31,6 +31,7 @@ static JClass entryInfoCls;
static JClass keyNotDefinedEx;
static JClass persistentEx;
static JClass illegalArgEx;
static JClass nullPointerEx;
// Thread-attached environment for listener callbacks.
static JNIEnv *listenerEnv = nullptr;
@@ -88,6 +89,9 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
illegalArgEx = JClass(env, "java/lang/IllegalArgumentException");
if (!illegalArgEx) return JNI_ERR;
nullPointerEx = JClass(env, "java/lang/NullPointerException");
if (!nullPointerEx) return JNI_ERR;
// Initial configuration of listener start/exit
nt::SetListenerOnStart(ListenerOnStart);
nt::SetListenerOnExit(ListenerOnExit);
@@ -107,6 +111,7 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) {
keyNotDefinedEx.free(env);
persistentEx.free(env);
illegalArgEx.free(env);
nullPointerEx.free(env);
jvm = nullptr;
}
@@ -307,6 +312,10 @@ extern "C" {
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_containsKey
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val) return false;
return true;
@@ -320,6 +329,10 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getType
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return 0;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val) return NT_UNASSIGNED;
return val->type();
@@ -333,6 +346,10 @@ JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_putBoolean
(JNIEnv *env, jclass, jstring key, jboolean value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
return nt::SetEntryValue(JStringRef{env, key},
nt::Value::MakeBoolean(value != JNI_FALSE));
}
@@ -345,6 +362,10 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_putDouble
(JNIEnv *env, jclass, jstring key, jdouble value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
return nt::SetEntryValue(JStringRef{env, key},
nt::Value::MakeDouble(value));
}
@@ -357,6 +378,14 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_putString
(JNIEnv *env, jclass, jstring key, jstring value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return false;
}
return nt::SetEntryValue(JStringRef{env, key},
nt::Value::MakeString(JStringRef{env, value}));
}
@@ -369,6 +398,14 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_putRaw__Ljava_lang_String_2_3B
(JNIEnv *env, jclass, jstring key, jbyteArray value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return false;
}
auto v = FromJavaRaw(env, value);
if (!v) return false;
return nt::SetEntryValue(JStringRef{env, key}, v);
@@ -382,6 +419,14 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_putRaw__Ljava_lang_String_2Ljava_nio_ByteBuffer_2I
(JNIEnv *env, jclass, jstring key, jobject value, jint len)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return false;
}
auto v = FromJavaRawBB(env, value, len);
if (!v) return false;
return nt::SetEntryValue(JStringRef{env, key}, v);
@@ -395,6 +440,14 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_putBooleanArray
(JNIEnv *env, jclass, jstring key, jbooleanArray value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return false;
}
auto v = FromJavaBooleanArray(env, value);
if (!v) return false;
return nt::SetEntryValue(JStringRef{env, key}, v);
@@ -408,6 +461,14 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_putDoubleArray
(JNIEnv *env, jclass, jstring key, jdoubleArray value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return false;
}
auto v = FromJavaDoubleArray(env, value);
if (!v) return false;
return nt::SetEntryValue(JStringRef{env, key}, v);
@@ -421,6 +482,14 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_putStringArray
(JNIEnv *env, jclass, jstring key, jobjectArray value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return false;
}
auto v = FromJavaStringArray(env, value);
if (!v) return false;
return nt::SetEntryValue(JStringRef{env, key}, v);
@@ -434,6 +503,10 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_forcePutBoolean
(JNIEnv *env, jclass, jstring key, jboolean value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return;
}
nt::SetEntryTypeValue(JStringRef{env, key},
nt::Value::MakeBoolean(value != JNI_FALSE));
}
@@ -446,6 +519,10 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_forcePutDouble
(JNIEnv *env, jclass, jstring key, jdouble value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return;
}
nt::SetEntryTypeValue(JStringRef{env, key}, nt::Value::MakeDouble(value));
}
@@ -457,6 +534,14 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_forcePutString
(JNIEnv *env, jclass, jstring key, jstring value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return;
}
nt::SetEntryTypeValue(JStringRef{env, key},
nt::Value::MakeString(JStringRef{env, value}));
}
@@ -469,6 +554,14 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_forcePutRaw__Ljava_lang_String_2_3B
(JNIEnv *env, jclass, jstring key, jbyteArray value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return;
}
auto v = FromJavaRaw(env, value);
if (!v) return;
nt::SetEntryTypeValue(JStringRef{env, key}, v);
@@ -482,6 +575,14 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_forcePutRaw__Ljava_lang_String_2Ljava_nio_ByteBuffer_2I
(JNIEnv *env, jclass, jstring key, jobject value, jint len)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return;
}
auto v = FromJavaRawBB(env, value, len);
if (!v) return;
nt::SetEntryTypeValue(JStringRef{env, key}, v);
@@ -495,6 +596,14 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_forcePutBooleanArray
(JNIEnv *env, jclass, jstring key, jbooleanArray value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return;
}
auto v = FromJavaBooleanArray(env, value);
if (!v) return;
nt::SetEntryTypeValue(JStringRef{env, key}, v);
@@ -508,6 +617,14 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_forcePutDoubleArray
(JNIEnv *env, jclass, jstring key, jdoubleArray value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return;
}
auto v = FromJavaDoubleArray(env, value);
if (!v) return;
nt::SetEntryTypeValue(JStringRef{env, key}, v);
@@ -521,6 +638,14 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_forcePutStringArray
(JNIEnv *env, jclass, jstring key, jobjectArray value)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return;
}
if (!value) {
env->ThrowNew(nullPointerEx, "value cannot be null");
return;
}
auto v = FromJavaStringArray(env, value);
if (!v) return;
nt::SetEntryTypeValue(JStringRef{env, key}, v);
@@ -534,6 +659,10 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT jobject JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getValue__Ljava_lang_String_2
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val) {
ThrowTableKeyNotDefined(env, key);
@@ -550,6 +679,10 @@ JNIEXPORT jobject JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTables
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getBoolean__Ljava_lang_String_2
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsBoolean()) {
ThrowTableKeyNotDefined(env, key);
@@ -566,6 +699,10 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jdouble JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getDouble__Ljava_lang_String_2
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return 0;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsDouble()) {
ThrowTableKeyNotDefined(env, key);
@@ -582,6 +719,10 @@ JNIEXPORT jdouble JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTables
JNIEXPORT jstring JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getString__Ljava_lang_String_2
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsString()) {
ThrowTableKeyNotDefined(env, key);
@@ -598,6 +739,10 @@ JNIEXPORT jstring JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTables
JNIEXPORT jbyteArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getRaw__Ljava_lang_String_2
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsRaw()) {
ThrowTableKeyNotDefined(env, key);
@@ -614,6 +759,10 @@ JNIEXPORT jbyteArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTab
JNIEXPORT jbooleanArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getBooleanArray__Ljava_lang_String_2
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsBooleanArray()) {
ThrowTableKeyNotDefined(env, key);
@@ -630,6 +779,10 @@ JNIEXPORT jbooleanArray JNICALL Java_edu_wpi_first_wpilibj_networktables_Network
JNIEXPORT jdoubleArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getDoubleArray__Ljava_lang_String_2
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsDoubleArray()) {
ThrowTableKeyNotDefined(env, key);
@@ -646,6 +799,10 @@ JNIEXPORT jdoubleArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkT
JNIEXPORT jobjectArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getStringArray__Ljava_lang_String_2
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsStringArray()) {
ThrowTableKeyNotDefined(env, key);
@@ -662,6 +819,10 @@ JNIEXPORT jobjectArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkT
JNIEXPORT jobject JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getValue__Ljava_lang_String_2Ljava_lang_Object_2
(JNIEnv *env, jclass, jstring key, jobject defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val) return defaultValue;
return MakeJObject(env, *val);
@@ -675,6 +836,10 @@ JNIEXPORT jobject JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTables
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getBoolean__Ljava_lang_String_2Z
(JNIEnv *env, jclass, jstring key, jboolean defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsBoolean()) return defaultValue;
return val->GetBoolean();
@@ -688,6 +853,10 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jdouble JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getDouble__Ljava_lang_String_2D
(JNIEnv *env, jclass, jstring key, jdouble defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return 0;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsDouble()) return defaultValue;
return val->GetDouble();
@@ -701,6 +870,10 @@ JNIEXPORT jdouble JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTables
JNIEXPORT jstring JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getString__Ljava_lang_String_2Ljava_lang_String_2
(JNIEnv *env, jclass, jstring key, jstring defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsString()) return defaultValue;
return MakeJString(env, val->GetString());
@@ -714,6 +887,10 @@ JNIEXPORT jstring JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTables
JNIEXPORT jbyteArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getRaw__Ljava_lang_String_2_3B
(JNIEnv *env, jclass, jstring key, jbyteArray defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsRaw()) return defaultValue;
return MakeJByteArray(env, val->GetRaw());
@@ -727,6 +904,10 @@ JNIEXPORT jbyteArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTab
JNIEXPORT jbooleanArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getBooleanArray__Ljava_lang_String_2_3Z
(JNIEnv *env, jclass, jstring key, jbooleanArray defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsBooleanArray()) return defaultValue;
return MakeJBooleanArray(env, val->GetBooleanArray());
@@ -740,6 +921,10 @@ JNIEXPORT jbooleanArray JNICALL Java_edu_wpi_first_wpilibj_networktables_Network
JNIEXPORT jdoubleArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getDoubleArray__Ljava_lang_String_2_3D
(JNIEnv *env, jclass, jstring key, jdoubleArray defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsDoubleArray()) return defaultValue;
return MakeJDoubleArray(env, val->GetDoubleArray());
@@ -753,6 +938,10 @@ JNIEXPORT jdoubleArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkT
JNIEXPORT jobjectArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getStringArray__Ljava_lang_String_2_3Ljava_lang_String_2
(JNIEnv *env, jclass, jstring key, jobjectArray defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsStringArray()) return defaultValue;
return MakeJStringArray(env, val->GetStringArray());
@@ -766,6 +955,10 @@ JNIEXPORT jobjectArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkT
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setDefaultBoolean
(JNIEnv *env, jclass, jstring key, jboolean defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
return nt::SetDefaultEntryValue(JStringRef{env, key},
nt::Value::MakeBoolean(defaultValue != JNI_FALSE));
}
@@ -778,6 +971,10 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setDefaultDouble
(JNIEnv *env, jclass, jstring key, jdouble defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return 0;
}
return nt::SetDefaultEntryValue(JStringRef{env, key},
nt::Value::MakeDouble(defaultValue));
}
@@ -790,6 +987,14 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setDefaultString
(JNIEnv *env, jclass, jstring key, jstring defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
if (!defaultValue) {
env->ThrowNew(nullPointerEx, "defaultValue cannot be null");
return false;
}
return nt::SetDefaultEntryValue(
JStringRef{env, key},
nt::Value::MakeString(JStringRef{env, defaultValue}));
@@ -803,6 +1008,14 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setDefaultRaw
(JNIEnv *env, jclass, jstring key, jbyteArray defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
if (!defaultValue) {
env->ThrowNew(nullPointerEx, "defaultValue cannot be null");
return false;
}
auto v = FromJavaRaw(env, defaultValue);
return nt::SetDefaultEntryValue(JStringRef{env, key}, v);
}
@@ -815,6 +1028,14 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setDefaultBooleanArray
(JNIEnv *env, jclass, jstring key, jbooleanArray defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
if (!defaultValue) {
env->ThrowNew(nullPointerEx, "defaultValue cannot be null");
return false;
}
auto v = FromJavaBooleanArray(env, defaultValue);
return nt::SetDefaultEntryValue(JStringRef{env, key}, v);
}
@@ -827,6 +1048,14 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setDefaultDoubleArray
(JNIEnv *env, jclass, jstring key, jdoubleArray defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
if (!defaultValue) {
env->ThrowNew(nullPointerEx, "defaultValue cannot be null");
return false;
}
auto v = FromJavaDoubleArray(env, defaultValue);
return nt::SetDefaultEntryValue(JStringRef{env, key}, v);
}
@@ -839,6 +1068,14 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setDefaultStringArray
(JNIEnv *env, jclass, jstring key, jobjectArray defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return false;
}
if (!defaultValue) {
env->ThrowNew(nullPointerEx, "defaultValue cannot be null");
return false;
}
auto v = FromJavaStringArray(env, defaultValue);
return nt::SetDefaultEntryValue(JStringRef{env, key}, v);
}
@@ -851,6 +1088,10 @@ JNIEXPORT jboolean JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTable
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setEntryFlags
(JNIEnv *env, jclass, jstring key, jint flags)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return;
}
nt::SetEntryFlags(JStringRef{env, key}, flags);
}
@@ -862,6 +1103,10 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getEntryFlags
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return 0;
}
return nt::GetEntryFlags(JStringRef{env, key});
}
@@ -873,6 +1118,10 @@ JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_deleteEntry
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return;
}
nt::DeleteEntry(JStringRef{env, key});
}
@@ -895,6 +1144,10 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT jobjectArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getEntries
(JNIEnv *env, jclass, jstring prefix, jint types)
{
if (!prefix) {
env->ThrowNew(nullPointerEx, "prefix cannot be null");
return nullptr;
}
auto arr = nt::GetEntryInfo(JStringRef{env, prefix}, types);
jobjectArray jarr = env->NewObjectArray(arr.size(), entryInfoCls, nullptr);
if (!jarr) return nullptr;
@@ -924,6 +1177,15 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_addEntryListener
(JNIEnv *envouter, jclass, jstring prefix, jobject listener, jint flags)
{
if (!prefix) {
envouter->ThrowNew(nullPointerEx, "prefix cannot be null");
return 0;
}
if (!listener) {
envouter->ThrowNew(nullPointerEx, "listener cannot be null");
return 0;
}
// the shared pointer to the weak global will keep it around until the
// entry listener is destroyed
auto listener_global =
@@ -987,6 +1249,11 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_addConnectionListener
(JNIEnv *envouter, jclass, jobject listener, jboolean immediateNotify)
{
if (!listener) {
envouter->ThrowNew(nullPointerEx, "listener cannot be null");
return 0;
}
// the shared pointer to the weak global will keep it around until the
// entry listener is destroyed
auto listener_global =
@@ -1048,6 +1315,10 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT jbyteArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getRpc__Ljava_lang_String_2
(JNIEnv *env, jclass, jstring key)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsRpc()) {
ThrowTableKeyNotDefined(env, key);
@@ -1064,6 +1335,14 @@ JNIEXPORT jbyteArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTab
JNIEXPORT jbyteArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_getRpc__Ljava_lang_String_2_3B
(JNIEnv *env, jclass, jstring key, jbyteArray defaultValue)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return nullptr;
}
if (!defaultValue) {
env->ThrowNew(nullPointerEx, "defaultValue cannot be null");
return nullptr;
}
auto val = nt::GetEntryValue(JStringRef{env, key});
if (!val || !val->IsRpc()) return defaultValue;
return MakeJByteArray(env, val->GetRpc());
@@ -1077,6 +1356,14 @@ JNIEXPORT jbyteArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTab
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_callRpc__Ljava_lang_String_2_3B
(JNIEnv *env, jclass, jstring key, jbyteArray params)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return 0;
}
if (!params) {
env->ThrowNew(nullPointerEx, "params cannot be null");
return 0;
}
return nt::CallRpc(JStringRef{env, key}, JByteArrayRef{env, params});
}
@@ -1088,6 +1375,14 @@ JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_callRpc__Ljava_lang_String_2Ljava_nio_ByteBuffer_2I
(JNIEnv *env, jclass, jstring key, jobject params, jint params_len)
{
if (!key) {
env->ThrowNew(nullPointerEx, "key cannot be null");
return 0;
}
if (!params) {
env->ThrowNew(nullPointerEx, "params cannot be null");
return 0;
}
return nt::CallRpc(JStringRef{env, key},
JByteArrayRef{env, params, params_len});
}
@@ -1100,6 +1395,10 @@ JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setNetworkIdentity
(JNIEnv *env, jclass, jstring name)
{
if (!name) {
env->ThrowNew(nullPointerEx, "name cannot be null");
return;
}
nt::SetNetworkIdentity(JStringRef{env, name});
}
@@ -1112,6 +1411,14 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
(JNIEnv *env, jclass, jstring persistFilename, jstring listenAddress,
jint port)
{
if (!persistFilename) {
env->ThrowNew(nullPointerEx, "persistFilename cannot be null");
return;
}
if (!listenAddress) {
env->ThrowNew(nullPointerEx, "listenAddress cannot be null");
return;
}
nt::StartServer(JStringRef{env, persistFilename},
JStringRef{env, listenAddress}.c_str(), port);
}
@@ -1146,6 +1453,10 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_startClient__Ljava_lang_String_2I
(JNIEnv *env, jclass, jstring serverName, jint port)
{
if (!serverName) {
env->ThrowNew(nullPointerEx, "serverName cannot be null");
return;
}
nt::StartClient(JStringRef{env, serverName}.c_str(), port);
}
@@ -1157,6 +1468,14 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_startClient___3Ljava_lang_String_2_3I
(JNIEnv *env, jclass, jobjectArray serverNames, jintArray ports)
{
if (!serverNames) {
env->ThrowNew(nullPointerEx, "serverNames cannot be null");
return;
}
if (!ports) {
env->ThrowNew(nullPointerEx, "ports cannot be null");
return;
}
int len = env->GetArrayLength(serverNames);
if (len != env->GetArrayLength(ports)) {
env->ThrowNew(illegalArgEx,
@@ -1174,7 +1493,7 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JLocal<jstring> elem{
env, static_cast<jstring>(env->GetObjectArrayElement(serverNames, i))};
if (!elem) {
env->ThrowNew(illegalArgEx, "null string in serverNames");
env->ThrowNew(nullPointerEx, "null string in serverNames");
return;
}
names.emplace_back(JStringRef{env, elem}.str());
@@ -1204,6 +1523,10 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setServer__Ljava_lang_String_2I
(JNIEnv *env, jclass, jstring serverName, jint port)
{
if (!serverName) {
env->ThrowNew(nullPointerEx, "serverName cannot be null");
return;
}
nt::SetServer(JStringRef{env, serverName}.c_str(), port);
}
@@ -1215,6 +1538,14 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setServer___3Ljava_lang_String_2_3I
(JNIEnv *env, jclass, jobjectArray serverNames, jintArray ports)
{
if (!serverNames) {
env->ThrowNew(nullPointerEx, "serverNames cannot be null");
return;
}
if (!ports) {
env->ThrowNew(nullPointerEx, "ports cannot be null");
return;
}
int len = env->GetArrayLength(serverNames);
if (len != env->GetArrayLength(ports)) {
env->ThrowNew(illegalArgEx,
@@ -1232,7 +1563,7 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JLocal<jstring> elem{
env, static_cast<jstring>(env->GetObjectArrayElement(serverNames, i))};
if (!elem) {
env->ThrowNew(illegalArgEx, "null string in serverNames");
env->ThrowNew(nullPointerEx, "null string in serverNames");
return;
}
names.emplace_back(JStringRef{env, elem}.str());
@@ -1303,6 +1634,10 @@ JNIEXPORT jobjectArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkT
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_savePersistent
(JNIEnv *env, jclass, jstring filename)
{
if (!filename) {
env->ThrowNew(nullPointerEx, "filename cannot be null");
return;
}
const char *err = nt::SavePersistent(JStringRef{env, filename});
if (err) env->ThrowNew(persistentEx, err);
}
@@ -1315,6 +1650,10 @@ JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI
JNIEXPORT jobjectArray JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_loadPersistent
(JNIEnv *env, jclass, jstring filename)
{
if (!filename) {
env->ThrowNew(nullPointerEx, "filename cannot be null");
return nullptr;
}
std::vector<std::string> warns;
const char *err = nt::LoadPersistent(JStringRef{env, filename},
[&](size_t line, const char *msg) {
@@ -1383,6 +1722,11 @@ extern "C" {
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_networktables_NetworkTablesJNI_setLogger
(JNIEnv *env, jclass, jobject func, jint minLevel)
{
if (!func) {
env->ThrowNew(nullPointerEx, "func cannot be null");
return;
}
// cls is a temporary here; cannot be used within callback functor
jclass cls = env->GetObjectClass(func);
if (!cls) return;