Trade code can't quite decide whether negative trd_unitid or zero
trd_owner marks unused slots. The former is a bad idea, because blank
slots have a zero trd_unitid.
Make sure to zero trd_owner when setting trd_unitid to negative value
in trad() and check_trade(). This fixes recognition of unused slots
in set (broken in commit
e16e38df, v4.2.18) and xdump (never worked).
}
if (!trade_getitem(&trade, &tg)) {
pr("Can't find trade #%d!\n", trade.trd_unitid);
+ trade.trd_owner = 0;
trade.trd_unitid = -1;
if (!puttrade(lotno, &trade)) {
logerror("trad: can't write trade");
if (!trade_getitem(&trade, &tg))
continue;
if (tg.gen.own == 0) {
+ trade.trd_owner = 0;
trade.trd_unitid = -1;
puttrade(n, &trade);
continue;
}
if (tg.gen.own != trade.trd_owner) {
logerror("Something weird, tg.gen.own != trade.trd_owner!\n");
+ trade.trd_owner = 0;
trade.trd_unitid = -1;
puttrade(n, &trade);
continue;
continue;
saveid = trade.trd_unitid;
+ trade.trd_owner = 0;
trade.trd_unitid = -1;
if (!puttrade(n, &trade)) {
logerror("Couldn't save trade after purchase; get help!\n");