<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<font face="Helvetica, Arial, sans-serif">Dennis added setjmp() and
longjmp() so the shell could handle errors in a reasonable way.<br>
There are two places where setjmp was used in the original shell
(7th edition) code as I recall. Both at the top level<br>
in main.c.<br>
<br>
The idea came from Algol68 but I do not know where it was
originally invented. longjmp() was used in the "exitsh"<br>
function that got called on the exit command, default trap routine
and a fault with no trap set.<br>
<br>
It was also used when executing a subshell to avoid a fork and
exec. In this case the setjmp() was at top level<br>
in the initial sh setup.<br>
<br>
Hope this makes sense. But these were two different uses. One
for error recovery and one to reset the execution environment<br>
back to initial state.<br>
<br>
Steve<br>
</font>
</body>
</html>