negative. Some places considered $0 as bankrupt, some didn't. Fix
the ones that did:
(repo_list): report command misreported countries with $0 as broke.
(init_nats): If you had $0, logging out and back in bankrupted you.
(produce_sect, upd_ship): Failed to build sectors and produce stuff
for countries with $0.
(redir_authorized): New parameter expected, reject when zero.
(doredir): Pass !redir_fp, do not close it. Before, an unexpected
redirection silently replaced the existing one.
(dopipe): Pass !redir_fp. Before, an unexpected redirection silently
replaced the existing one, leaking its FILE.
(doexecute): Pass 1.
impossible to implement correctly, and nested execute practically
useless (#116377). Catch and refuse those:
(executing): New.
(doexecute, prompt): Set and clear it.
(redir_authorized): Reject if set.
(doexecute, play): Don't signal doexecute() failure through input_fd,
because that screws up up when we're executing already. Increment
send_eof in doexecute() instead.
(send_eof): External linkage.
of clearing it. Fixes a race condition: when we got EOF on input_fd
and a failed doexecute() in the same iteration of the loop, only one
EOF cookie was sent, leaving the client hung.
makes execute send everything after the command back to the client
verbatim, not just the first argument (with quotes and funny
characters stripped). The client always expected that, and got
confused when the server sent something else.
in mission_pln_equip(), which is called from ac_intercept(). The
inconsistency appeared in Empire3, and had no ill effect then. But
rev. 1.42 screwed up the fuel test here: it made interceptors that
don't use fuel (SAMs) require petrol to be present to fly.
(carriersatxy, pln_onewaymission): Pass zero. No functional change.
(pln_airbase_ok): Pass whether the plane is a missile. This fixes
non-x-light missiles on ships without capability M_FLY. Broken in
rev. 1.76. Launch and interdict weren't affected. Air defense was,
but the stock game has only x-light SAMs.
fixes error handling when a script can be opened but not read: it
switches back to standard input. And it handles errors on standard
input more gracefully: orderly shutdown, buffered output is still
written out.
input, and execute couldn't find it and mistakenly raised the
tampering deity alarm. Closes#804644:
(saved_bytes): New.
(save_input): Set it.
(forget_input): New.
(seen_input): Don't discard, return a value for forget_input().
(save_input): Return a value for forget_input(), just because it makes
sense.
(input_to_forget, redir_authorized, prompt): Save value of
seen_input() to new input_to_forget in redir_authorized(), pass it to
forget_input() in prompt().