1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 20:00:19 +02:00

more robust scm_exit_status

* 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.
This commit is contained in:
Andy Wingo 2011-11-04 13:35:19 +01:00
parent 148dfc2409
commit 58e68be4bb

View file

@ -322,7 +322,7 @@ scm_handle_by_proc_catching_all (void *handler_data, SCM tag, SCM throw_args)
int int
scm_exit_status (SCM args) scm_exit_status (SCM args)
{ {
if (!SCM_NULL_OR_NIL_P (args)) if (scm_is_pair (args))
{ {
SCM cqa = SCM_CAR (args); SCM cqa = SCM_CAR (args);
@ -330,8 +330,14 @@ scm_exit_status (SCM args)
return (scm_to_int (cqa)); return (scm_to_int (cqa));
else if (scm_is_false (cqa)) else if (scm_is_false (cqa))
return EXIT_FAILURE; 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;
} }