more robust scm_exit_status
authorAndy Wingo <wingo@pobox.com>
Fri, 4 Nov 2011 12:35:19 +0000 (13:35 +0100)
committerAndy Wingo <wingo@pobox.com>
Fri, 4 Nov 2011 12:35:19 +0000 (13:35 +0100)
* libguile/throw.c (scm_exit_status): In one of my bogus patches, I
  managed to make #<unspecified> reach this function, causing a segfault
  on SCM_CAR.  Refactor to be more robust.

libguile/throw.c

index 4b3c75e..e3b5afa 100644 (file)
@@ -322,7 +322,7 @@ scm_handle_by_proc_catching_all (void *handler_data, SCM tag, SCM throw_args)
 int
 scm_exit_status (SCM args)
 {
-  if (!SCM_NULL_OR_NIL_P (args))
+  if (scm_is_pair (args))
     {
       SCM cqa = SCM_CAR (args);
       
@@ -330,8 +330,14 @@ scm_exit_status (SCM args)
        return (scm_to_int (cqa));
       else if (scm_is_false (cqa))
        return EXIT_FAILURE;
+      else
+        return EXIT_SUCCESS;
     }
-  return EXIT_SUCCESS;
+  else if (scm_is_null (args))
+    return EXIT_SUCCESS;
+  else
+    /* A type error.  Strictly speaking we shouldn't get here.  */
+    return EXIT_FAILURE;
 }