1 /* 2 * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 #include <string.h> 25 #include "jvmti.h" 26 #include "agent_common.h" 27 #include "jni_tools.h" 28 #include "jvmti_tools.h" 29 30 extern "C" { 31 32 /* ============================================================================= */ 33 34 static jlong timeout = 0; 35 36 #define PROPERTIES_COUNT 3 37 38 typedef struct PropertyDescStruct { 39 const char* name; 40 const char* value; 41 } PropertyDesc; 42 43 static PropertyDesc propDescList[PROPERTIES_COUNT] = { 44 {"nsk.jvmti.test.property", "new value of nsk.jvmti.test.property"}, 45 {"nsk.jvmti.test.property.empty.old", "new value of nsk.jvmti.test.property.emply.old"}, 46 {"nsk.jvmti.test.property.empty.new", ""} 47 }; 48 49 /* ============================================================================= */ 50 51 static int setProperties(jvmtiEnv* jvmti) { 52 int success = NSK_TRUE; 53 int i; 54 55 for (i = 0; i < PROPERTIES_COUNT; i++) { 56 NSK_DISPLAY1(" property: %s\n", propDescList[i].name); 57 NSK_DISPLAY1(" value: \"%s\"\n", propDescList[i].value); 58 if (!NSK_JVMTI_VERIFY( 59 jvmti->SetSystemProperty(propDescList[i].name, propDescList[i].value))) { 60 success = NSK_FALSE; 61 } 62 } 63 64 return success; 65 } 66 67 /* ============================================================================= */ 68 69 /** Agent library initialization. */ 70 #ifdef STATIC_BUILD 71 JNIEXPORT jint JNICALL Agent_OnLoad_setsysprop003(JavaVM *jvm, char *options, void *reserved) { 72 return Agent_Initialize(jvm, options, reserved); 73 } 74 JNIEXPORT jint JNICALL Agent_OnAttach_setsysprop003(JavaVM *jvm, char *options, void *reserved) { 75 return Agent_Initialize(jvm, options, reserved); 76 } 77 JNIEXPORT jint JNI_OnLoad_setsysprop003(JavaVM *jvm, char *options, void *reserved) { 78 return JNI_VERSION_1_8; 79 } 80 #endif 81 jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) { 82 jvmtiEnv* jvmti = NULL; 83 84 if (!NSK_VERIFY(nsk_jvmti_parseOptions(options))) 85 return JNI_ERR; 86 87 timeout = nsk_jvmti_getWaitTime() * 60 * 1000; 88 89 if (!NSK_VERIFY((jvmti = 90 nsk_jvmti_createJVMTIEnv(jvm, reserved)) != NULL)) 91 return JNI_ERR; 92 93 NSK_DISPLAY0(">>> Set new values for defined system properties in OnLoad phase\n"); 94 if (!setProperties(jvmti)) { 95 nsk_jvmti_setFailStatus(); 96 return JNI_ERR; 97 } 98 99 return JNI_OK; 100 } 101 102 /* ============================================================================= */ 103 104 }