* Removed all Id tags.
[cacao.git] / src / cacao / cacao.c
index 7c9ede157b9fc63337305b4a4433619bff77789a..ac005387bfbc27aad3c8abd55b6ee0ed5f59559f 100644 (file)
@@ -1,6 +1,6 @@
 /* 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 $
-
 */
 
 
@@ -78,15 +67,18 @@ static JavaVMInitArgs *cacao_options_prepare(int argc, char **argv);
 
 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
 
@@ -100,14 +92,14 @@ int main(int argc, char **argv)
        
        /* 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();
        }
 
@@ -116,7 +108,7 @@ int main(int argc, char **argv)
        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();
        }
 
@@ -128,7 +120,7 @@ int main(int argc, char **argv)
 # endif
 
        if (lt_dlinit()) {
-               fprintf(stderr, "lt_dlinit failed: %s\n", lt_dlerror());
+               fprintf(stderr, "main: lt_dlinit failed: %s\n", lt_dlerror());
                abort();
        }
 
@@ -136,24 +128,38 @@ int main(int argc, char **argv)
           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);