On Sun, 2006-01-15 at 18:07 -0500, David Walluck wrote: > > If we also want it to look > > in /usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/ext then we should > > probably do this has a java-gcj-compat hack. > > It seems we have to add this to be consistent. Ok, here's my proposed patch. Tom - what do you think? --- java.c~ 2006-01-15 15:51:43.000000000 -0800 +++ java.c 2006-01-15 15:51:49.000000000 -0800 @@ -1,5 +1,5 @@ -/* java.c -- set LD_LIBRARY_PATH, LD_PRELOAD and exec gij - Copyright (C) 2005 Red Hat +/* java.c -- set LD_LIBRARY_PATH, LD_PRELOAD, java.ext.dirs and exec gij + Copyright (C) 2005, 2006 Red Hat This file is part of java-gcj-compat. @@ -40,6 +40,31 @@ #include <string.h> #include <unistd.h> +/* Return argv with -Djava.ext.dirs set properly, however, don't + change argv if -Djava.ext.dirs is already on the command line. */ +char ** +set_java_ext_dir (int argc, char *argv[]) +{ + char **nargv; + int i = 1; + + while (i < argc && *argv[i] == '-') + { + if (strncmp ("-Djava.ext.dirs=", argv[i], 16) == 0) + return argv; + else + i++; + } + + nargv = (char **) malloc ((argc + 2) * sizeof(char *)); + nargv[0] = argv[0]; + nargv[1] = "-Djava.ext.dirs=" JAVA_HOME "/jre/lib/ext:/usr/share/java-ext"; + for (i = 2; i <= argc; i++) + nargv[i] = argv[i-1]; + nargv[i] = 0; + return nargv; +} + int main (int argc, char* argv[]) { @@ -111,7 +136,7 @@ free (newpath); - error_code = execv (GCJ_BIN_DIR "/gij", argv); + error_code = execv (GCJ_BIN_DIR "/gij", set_java_ext_dir (argc, argv)); fprintf (stderr, "error spawning gij\n");