X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fruntime.c;h=a4fc68adbf13ced6c1fc871b5d4c63830ed19035;hb=f2b65035e35f3f7ae5f645cea6338538235ca899;hp=f72cd60121d217b0e66562441c8a7fa2857e5783;hpb=1de12891f900d156ed035a097561ecd7755a256a;p=sbcl.git diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c index f72cd60..a4fc68a 100644 --- a/src/runtime/runtime.c +++ b/src/runtime/runtime.c @@ -194,7 +194,7 @@ search_for_core () char *stem = "/sbcl.core"; char *core; - if(!sbcl_home) sbcl_home = SBCL_HOME; + if (!(sbcl_home && *sbcl_home)) sbcl_home = SBCL_HOME; lookhere = (char *) calloc(strlen(sbcl_home) + strlen(stem) + 1, @@ -211,7 +211,10 @@ search_for_core () return core; } - +char **posix_argv; +char *core_string; + + int main(int argc, char *argv[], char *envp[]) { @@ -231,6 +234,7 @@ main(int argc, char *argv[], char *envp[]) boolean end_runtime_options = 0; lispobj initial_function; + const char *sbcl_home = getenv("SBCL_HOME"); interrupt_init(); block_blockable_signals(); @@ -329,7 +333,7 @@ main(int argc, char *argv[], char *envp[]) } /* Align down to multiple of page_table page size */ - dynamic_space_size = (dynamic_space_size/PAGE_BYTES) * PAGE_BYTES; + dynamic_space_size &= ~(PAGE_BYTES - 1); /* KLUDGE: os_vm_page_size is set by os_init(), and on some * systems (e.g. Alpha) arch_init() needs need os_vm_page_size, so @@ -358,8 +362,9 @@ main(int argc, char *argv[], char *envp[]) } } - /* Make sure that SBCL_HOME is set, unless loading an embedded core. */ - if (!getenv("SBCL_HOME") && embedded_core_offset == 0) { + /* Make sure that SBCL_HOME is set and not the empty string, + unless loading an embedded core. */ + if (!(sbcl_home && *sbcl_home) && embedded_core_offset == 0) { char *envstring, *copied_core, *dir; char *stem = "SBCL_HOME="; copied_core = copied_string(core); @@ -373,7 +378,7 @@ main(int argc, char *argv[], char *envp[]) free(copied_core); } - if (!noinform) { + if (!noinform && embedded_core_offset == 0) { print_banner(); fflush(stdout); } @@ -404,15 +409,11 @@ main(int argc, char *argv[], char *envp[]) wos_install_interrupt_handlers(&exception_frame); #endif - /* Pass core filename into Lisp */ - SetSymbolValue(CORE_STRING, alloc_base_string(core),0); - SHOW("freeing core"); - free(core); - - /* Convert remaining argv values to something that Lisp can grok. */ - SHOW("setting POSIX-ARGV symbol value"); - SetSymbolValue(POSIX_ARGV, alloc_base_string_list(sbcl_argv),0); - free(sbcl_argv); + /* Pass core filename and the processed argv into Lisp. They'll + * need to be processed further there, to do locale conversion. + */ + core_string = core; + posix_argv = sbcl_argv; FSHOW((stderr, "/funcalling initial_function=0x%lx\n", (unsigned long)initial_function));