Better printing of out of range --dynamic-space-size arguments.
[sbcl.git] / src / runtime / runtime.c
index 7548e1c..e49d7d1 100644 (file)
@@ -95,7 +95,7 @@ void
 sigint_init(void)
 {
     SHOW("entering sigint_init()");
-    install_handler(SIGINT, sigint_handler);
+    install_handler(SIGINT, sigint_handler, 1);
     SHOW("leaving sigint_init()");
 }
 \f
@@ -217,7 +217,15 @@ SBCL is free software, provided as is, with absolutely no warranty.\n\
 It is mostly in the public domain; some portions are provided under\n\
 BSD-style licenses.  See the CREDITS and COPYING files in the\n\
 distribution for more information.\n\
-", SBCL_VERSION_STRING);
+"
+#ifdef LISP_FEATURE_WIN32
+"\n\
+WARNING: the Windows port is fragile, particularly for multithreaded\n\
+code.  Unfortunately, the development team currently lacks the time\n\
+and resources this platform demands.\n\
+"
+#endif
+, SBCL_VERSION_STRING);
 }
 
 /* Look for a core file to load, first in the directory named by the
@@ -287,6 +295,18 @@ search_for_executable(const char *argv0)
             return search;
         }
     }
+    /* The above for-loop fails to process the last part of PATH if PATH does
+     * not end with ':'. We may consider appending an extra ':' to the end of
+     * SEARCH.  -- houjingyi 2013-05-24 */
+    if (start != NULL && *start != '\0') {
+        snprintf(buf, PATH_MAX + 1, "%s/%s", start, argv0);
+        if (access(buf, F_OK) == 0) {
+            free(search);
+            search = copied_realpath(buf);
+            free(buf);
+            return search;
+        }
+    }
 
     free(search);
     free(buf);
@@ -362,7 +382,7 @@ void setup_locale()
 #ifndef LISP_FEATURE_WIN32
 
     fprintf(stderr, "WARNING: Setting locale failed.\n");
-    fprintf(stderr, "  Check the following varaibles for correct values:");
+    fprintf(stderr, "  Check the following variables for correct values:");
 
     if (setlocale(LC_CTYPE, "") == NULL) {
       print_locale_variable("LC_ALL");
@@ -499,14 +519,22 @@ main(int argc, char *argv[], char *envp[])
                 ++argi;
                 if (argi >= argc)
                     lose("missing argument for --dynamic-space-size");
-                  dynamic_space_size = parse_size_arg(argv[argi++], "--dynamic-space-size");
+                  dynamic_space_size = parse_size_arg(argv[argi++],
+                                                      "--dynamic-space-size");
 #               ifdef MAX_DYNAMIC_SPACE_END
                 if (!((DYNAMIC_SPACE_START <
                        DYNAMIC_SPACE_START+dynamic_space_size) &&
                       (DYNAMIC_SPACE_START+dynamic_space_size <=
-                       MAX_DYNAMIC_SPACE_END)))
-                  lose("--dynamic-space-size argument %s is too large, max %lu",
-                       argv[argi-1], MAX_DYNAMIC_SPACE_END-DYNAMIC_SPACE_START);
+                       MAX_DYNAMIC_SPACE_END))) {
+                  char* suffix = "";
+                  char* size = argv[argi-1];
+                  if (!strchr(size, 'B') && !strchr(size, 'b')) {
+                    suffix = " [MB]";
+                  }
+                  lose("--dynamic-space-size argument %s%s is too large, max %lu KB",
+                       size, suffix,
+                       (MAX_DYNAMIC_SPACE_END-DYNAMIC_SPACE_START) / 1024);
+                }
 #               endif
             } else if (0 == strcmp(arg, "--control-stack-size")) {
                 ++argi;
@@ -688,14 +716,7 @@ main(int argc, char *argv[], char *envp[])
 
     FSHOW((stderr, "/funcalling initial_function=0x%lx\n",
           (unsigned long)initial_function));
-#ifdef LISP_FEATURE_WIN32
-    fprintf(stderr, "\n\
-This is experimental prerelease support for the Windows platform: use\n\
-at your own risk.  \"Your Kitten of Death awaits!\"\n");
-    fflush(stdout);
-    fflush(stderr);
-#endif
     create_initial_thread(initial_function);
-    lose("CATS.  CATS ARE NICE.\n");
+    lose("unexpected return from initial thread in main()\n");
     return 0;
 }