It is important to note that the putmsg
function can be
called unexpectedly, so it should take care to avoid side effects. A
typical case is the unexpected modification of $ret
by
putmsg
after a statement generates errors. Variables like
$ret
and $loop
should be preserved in putmsg
with
local variables if they are modified:
<A NAME=putmsg PRIVATE>
<LOCAL saveret=$ret saveloop=$loop savenext=$next>
<LOOP $errmsg>
<fmt "Note: %s\n" $errmsg>
</LOOP>
<$ret = $saveret>
<$loop = $saveloop>
<$next = $savenext>
</A>
Here the initial values of $ret
, $loop
and $next
are preserved in local variables, and restored on exit, because they
are modified by fmt
and LOOP
. In this way, these
variables won't be truncated after a function, if error messages cause
a putmsg
call.