/* src/cacao/cacao.c - contains main() of cacao
- Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+ Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
J. Wenninger, J. Wenninger, Institut f. Computersprachen - TU Wien
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Contact: cacao@cacaojvm.org
-
- Authors: Reinhard Grafl
-
- Changes: Andi Krall
- Mark Probst
- Philipp Tomsich
- Christian Thalinger
-
- $Id: cacao.c 5810 2006-10-20 13:54:54Z twisti $
-
*/
int main(int argc, char **argv)
{
+#if defined(ENABLE_LIBJVM) && !defined(WITH_STATIC_CLASSPATH)
char *path;
+#endif
#if defined(ENABLE_LIBJVM)
/* Variables for JNI_CreateJavaVM dlopen call. */
lt_dlhandle libjvm_handle;
- lt_ptr libjvm_createvm;
+ lt_ptr libjvm_vm_createjvm;
lt_ptr libjvm_vm_run;
+ const char *lterror;
- s4 (*JNI_CreateJavaVM)(JavaVM **, void **, void *);
+ bool (*vm_createjvm)(JavaVM **, void **, void *);
void (*vm_run)(JavaVM *, JavaVMInitArgs *);
#endif
/* load and initialize a Java VM, return a JNI interface pointer in env */
-#if !defined(WITH_STATIC_CLASSPATH) && defined(ENABLE_LIBJVM)
+#if defined(ENABLE_LIBJVM) && !defined(WITH_STATIC_CLASSPATH)
# if defined(WITH_JRE_LAYOUT)
/* SUN also uses a buffer of 4096-bytes (strace is your friend). */
path = malloc(sizeof(char) * 4096);
if (readlink("/proc/self/exe", path, 4095) == -1) {
- fprintf(stderr, "readlink failed: %s\n", strerror(errno));
+ fprintf(stderr, "main: readlink failed: %s\n", strerror(errno));
abort();
}
path = dirname(path);
if ((strlen(path) + strlen("/../lib/libjvm") + strlen("0")) > 4096) {
- fprintf(stderr, "libjvm name to long for buffer\n");
+ fprintf(stderr, "main: libjvm name to long for buffer\n");
abort();
}
# endif
if (lt_dlinit()) {
- fprintf(stderr, "lt_dlinit failed: %s\n", lt_dlerror());
+ fprintf(stderr, "main: lt_dlinit failed: %s\n", lt_dlerror());
abort();
}
If not found, try the absolute path. */
if (!(libjvm_handle = lt_dlopenext("libjvm"))) {
+ /* save the error message */
+
+ lterror = strdup(lt_dlerror());
+
if (!(libjvm_handle = lt_dlopenext(path))) {
- fprintf(stderr, "lt_dlopenext failed: %s\n", lt_dlerror());
+ /* print the first error message too */
+
+ fprintf(stderr, "main: lt_dlopenext failed: %s\n", lterror);
+
+ /* and now the current one */
+
+ fprintf(stderr, "main: lt_dlopenext failed: %s\n", lt_dlerror());
abort();
}
+
+ /* free the error string */
+
+ free((void *) lterror);
}
- if (!(libjvm_createvm = lt_dlsym(libjvm_handle, "JNI_CreateJavaVM"))) {
- fprintf(stderr, "lt_dlsym failed: %s\n", lt_dlerror());
+ if (!(libjvm_vm_createjvm = lt_dlsym(libjvm_handle, "vm_createjvm"))) {
+ fprintf(stderr, "main: lt_dlsym failed: %s\n", lt_dlerror());
abort();
}
- JNI_CreateJavaVM =
- (s4 (*)(JavaVM **, void **, void *)) (ptrint) libjvm_createvm;
+ vm_createjvm =
+ (bool (*)(JavaVM **, void **, void *)) (ptrint) libjvm_vm_createjvm;
#endif
/* create the Java VM */
- JNI_CreateJavaVM(&vm, (void *) &env, vm_args);
+ (void) vm_createjvm(&vm, (void *) &env, vm_args);
#if defined(ENABLE_JVMTI)
pthread_mutex_init(&dbgcomlock,NULL);