in src/native/unix/native/java.c [395:457]
bool java_load(arg_data *args)
{
jclass stringClass = NULL;
jstring className = NULL;
jstring currentArgument = NULL;
jobjectArray stringArray = NULL;
jmethodID method = NULL;
jboolean ret = FALSE;
int x;
char lang[] = "java/lang/String";
char load[] = "load";
char loadparams[] = "(Ljava/lang/String;[Ljava/lang/String;)Z";
jsvc_xlate_to_ascii(args->clas);
className = (*env)->NewStringUTF(env, args->clas);
jsvc_xlate_from_ascii(args->clas);
if (className == NULL) {
log_error("Cannot create string for class name");
return false;
}
jsvc_xlate_to_ascii(lang);
stringClass = (*env)->FindClass(env, lang);
if (stringClass == NULL) {
log_error("Cannot find class java/lang/String");
return false;
}
stringArray = (*env)->NewObjectArray(env, args->anum, stringClass, NULL);
if (stringArray == NULL) {
log_error("Cannot create arguments array");
return false;
}
for (x = 0; x < args->anum; x++) {
jsvc_xlate_to_ascii(args->args[x]);
currentArgument = (*env)->NewStringUTF(env, args->args[x]);
if (currentArgument == NULL) {
jsvc_xlate_from_ascii(args->args[x]);
log_error("Cannot create string for argument %s", args->args[x]);
return false;
}
(*env)->SetObjectArrayElement(env, stringArray, x, currentArgument);
}
jsvc_xlate_to_ascii(load);
jsvc_xlate_to_ascii(loadparams);
method = (*env)->GetStaticMethodID(env, cls, load, loadparams);
if (method == NULL) {
log_error("Cannot find Daemon Loader \"load\" entry point");
return false;
}
log_debug("Daemon loading...");
ret = (*env)->CallStaticBooleanMethod(env, cls, method, className, stringArray);
if (ret == FALSE) {
log_error("Cannot load daemon");
return false;
}
log_debug("Daemon loaded successfully");
return true;
}