src/macosx/native/java/util/prefs/MacOSXPreferencesFile.m
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -69,10 +69,12 @@
static void throwOutOfMemoryError(JNIEnv *env, const char *msg)
{
static jclass exceptionClass = NULL;
jclass c;
+ (*env)->ExceptionClear(env); // If an exception is pending, clear it before
+ // calling FindClass() and/or ThrowNew().
if (exceptionClass) {
c = exceptionClass;
} else {
c = (*env)->FindClass(env, "java/lang/OutOfMemoryError");
if ((*env)->ExceptionOccurred(env)) return;
@@ -532,12 +534,17 @@
JNIEXPORT jboolean JNICALL
Java_java_util_prefs_MacOSXPreferencesFile_addNode
(JNIEnv *env, jobject klass, jobject jpath,
jobject jname, jlong juser, jlong jhost)
{
- CFStringRef path = toCF(env, jpath);
- CFStringRef name = toCF(env, jname);
+ CFStringRef path = NULL;
+ CFStringRef name = NULL;
+
+ path = toCF(env, jpath);
+ if (path != NULL) {
+ name = toCF(env, jname);
+ }
CFStringRef user = (CFStringRef)jlong_to_ptr(juser);
CFStringRef host = (CFStringRef)jlong_to_ptr(jhost);
CFDictionaryRef node = NULL;
jboolean neededNewNode = false;
@@ -577,12 +584,17 @@
JNIEXPORT void JNICALL
Java_java_util_prefs_MacOSXPreferencesFile_removeNode
(JNIEnv *env, jobject klass, jobject jpath,
jobject jname, jlong juser, jlong jhost)
{
- CFStringRef path = toCF(env, jpath);
- CFStringRef name = toCF(env, jname);
+ CFStringRef path = NULL;
+ CFStringRef name = NULL;
+
+ path = toCF(env, jpath);
+ if (path != NULL) {
+ name = toCF(env, jname);
+ }
CFStringRef user = (CFStringRef)jlong_to_ptr(juser);
CFStringRef host = (CFStringRef)jlong_to_ptr(jhost);
CFStringRef parentName;
CFStringRef childName;
CFDictionaryRef constParent;
@@ -645,13 +657,21 @@
Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode
(JNIEnv *env, jobject klass, jobject jpath, jobject jchild,
jobject jname, jlong juser, jlong jhost)
{
// like addNode, but can put a three-level-deep dict into the root file
- CFStringRef path = toCF(env, jpath);
- CFStringRef child = toCF(env, jchild);
- CFStringRef name = toCF(env, jname);
+ CFStringRef path = NULL;
+ CFStringRef child = NULL;
+ CFStringRef name = NULL;
+
+ path = toCF(env, jpath);
+ if (path != NULL) {
+ child = toCF(env, jchild);
+ }
+ if (child != NULL) {
+ name = toCF(env, jname);
+ }
CFStringRef user = (CFStringRef)jlong_to_ptr(juser);
CFStringRef host = (CFStringRef)jlong_to_ptr(jhost);
CFMutableDictionaryRef parent;
CFDictionaryRef node;
CFStringRef topKey;
@@ -691,13 +711,21 @@
JNIEXPORT void JNICALL
Java_java_util_prefs_MacOSXPreferencesFile_removeChildFromNode
(JNIEnv *env, jobject klass, jobject jpath, jobject jchild,
jobject jname, jlong juser, jlong jhost)
{
- CFStringRef path = toCF(env, jpath);
- CFStringRef child = toCF(env, jchild);
- CFStringRef name = toCF(env, jname);
+ CFStringRef path = NULL;
+ CFStringRef child = NULL;
+ CFStringRef name = NULL;
+
+ path = toCF(env, jpath);
+ if (path != NULL) {
+ child = toCF(env, jchild);
+ }
+ if (child != NULL) {
+ name = toCF(env, jname);
+ }
CFStringRef user = (CFStringRef)jlong_to_ptr(juser);
CFStringRef host = (CFStringRef)jlong_to_ptr(jhost);
CFDictionaryRef constParent;
if (!path || !child || !name) goto badparams;
@@ -732,14 +760,25 @@
JNIEXPORT void JNICALL
Java_java_util_prefs_MacOSXPreferencesFile_addKeyToNode
(JNIEnv *env, jobject klass, jobject jpath, jobject jkey, jobject jvalue,
jobject jname, jlong juser, jlong jhost)
{
- CFStringRef path = toCF(env, jpath);
- CFStringRef key = toCF(env, jkey);
- CFStringRef value = toCF(env, jvalue);
- CFStringRef name = toCF(env, jname);
+ CFStringRef path = NULL;
+ CFStringRef key = NULL;
+ CFStringRef value = NULL;
+ CFStringRef name = NULL;
+
+ path = toCF(env, jpath);
+ if (path != NULL) {
+ key = toCF(env, jkey);
+ }
+ if (key != NULL) {
+ value = toCF(env, jvalue);
+ }
+ if (value != NULL) {
+ name = toCF(env, jname);
+ }
CFStringRef user = (CFStringRef)jlong_to_ptr(juser);
CFStringRef host = (CFStringRef)jlong_to_ptr(jhost);
CFMutableDictionaryRef node = NULL;
CFStringRef topKey;
CFMutableDictionaryRef topValue;
@@ -769,13 +808,21 @@
JNIEXPORT void JNICALL
Java_java_util_prefs_MacOSXPreferencesFile_removeKeyFromNode
(JNIEnv *env, jobject klass, jobject jpath, jobject jkey,
jobject jname, jlong juser, jlong jhost)
{
- CFStringRef path = toCF(env, jpath);
- CFStringRef key = toCF(env, jkey);
- CFStringRef name = toCF(env, jname);
+ CFStringRef path = NULL;
+ CFStringRef key = NULL;
+ CFStringRef name = NULL;
+
+ path = toCF(env, jpath);
+ if (path != NULL) {
+ key = toCF(env, jkey);
+ }
+ if (key != NULL) {
+ name = toCF(env, jname);
+ }
CFStringRef user = (CFStringRef)jlong_to_ptr(juser);
CFStringRef host = (CFStringRef)jlong_to_ptr(jhost);
CFDictionaryRef constNode;
if (!path || !key || !name) goto badparams;
@@ -810,13 +857,21 @@
JNIEXPORT jstring JNICALL
Java_java_util_prefs_MacOSXPreferencesFile_getKeyFromNode
(JNIEnv *env, jobject klass, jobject jpath, jobject jkey,
jobject jname, jlong juser, jlong jhost)
{
- CFStringRef path = toCF(env, jpath);
- CFStringRef key = toCF(env, jkey);
- CFStringRef name = toCF(env, jname);
+ CFStringRef path = NULL;
+ CFStringRef key = NULL;
+ CFStringRef name = NULL;
+
+ path = toCF(env, jpath);
+ if (path != NULL) {
+ key = toCF(env, jkey);
+ }
+ if (key != NULL) {
+ name = toCF(env, jname);
+ }
CFStringRef user = (CFStringRef)jlong_to_ptr(juser);
CFStringRef host = (CFStringRef)jlong_to_ptr(jhost);
CFPropertyListRef value;
CFDictionaryRef node;
jstring result = NULL;
@@ -912,12 +967,17 @@
static jarray getStringsForNode(JNIEnv *env, jobject klass, jobject jpath,
jobject jname, jlong juser, jlong jhost,
Boolean allowSlash)
{
- CFStringRef path = toCF(env, jpath);
- CFStringRef name = toCF(env, jname);
+ CFStringRef path = NULL;
+ CFStringRef name = NULL;
+
+ path = toCF(env, jpath);
+ if (path != NULL) {
+ name = toCF(env, jname);
+ }
CFStringRef user = (CFStringRef)jlong_to_ptr(juser);
CFStringRef host = (CFStringRef)jlong_to_ptr(jhost);
CFDictionaryRef node;
jarray result = NULL;
CFIndex count;